├── lib ├── factions.json ├── info.json ├── rules.json ├── tables.json ├── environments.json ├── statuses.json ├── sitreps.json ├── mods.json ├── reserves.json ├── manufacturers.json ├── skills.json ├── glossary.json ├── tags.json ├── backgrounds.json ├── core_bonuses.json └── pilot_gear.json ├── scripts ├── build.js ├── test.js ├── rename.js ├── output │ └── equipment.csv └── aptitude_export.js ├── .github ├── workflows │ ├── deploy-npm.yml │ └── lcp-version-bump.yml └── pull_request_template.md ├── package.json ├── .gitignore ├── index.js └── yarn.lock /lib/factions.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /lib/info.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "LANCER Core", 3 | "author": "Massif Press", 4 | "version": "July 2020 Release", 5 | "description": "The official base game", 6 | "website": "https://massif-press.itch.io/lancer-core-book", 7 | "active": true 8 | } -------------------------------------------------------------------------------- /scripts/build.js: -------------------------------------------------------------------------------- 1 | const zl = require('zip-lib'); 2 | 3 | const info = require('../package.json'); 4 | 5 | const filepath = './' + info.name + '-' + info.version + '.lcp'; 6 | 7 | zl.archiveFolder('./lib', filepath).then( 8 | function () { 9 | console.log('done'); 10 | }, 11 | function (err) { 12 | console.log(err); 13 | } 14 | ); 15 | -------------------------------------------------------------------------------- /.github/workflows/deploy-npm.yml: -------------------------------------------------------------------------------- 1 | # This workflow will call org-level reusable workflows for deploying an NPM package to npmjs.com. 2 | 3 | name: Deploy NPM 4 | 5 | on: 6 | workflow_dispatch: 7 | release: 8 | types: [created] 9 | 10 | jobs: 11 | call-npm-publish: 12 | uses: massif-press/.github/.github/workflows/npm-publish.yml@master 13 | secrets: 14 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} -------------------------------------------------------------------------------- /scripts/test.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | var currentDir = process.cwd(); 3 | var files = fs.readdirSync('./lib'); 4 | let contents = "" 5 | let valid = true 6 | 7 | files.forEach(filename => { 8 | contents = fs.readFileSync(`./lib/${filename}`, 'utf-8') 9 | try { 10 | JSON.parse(contents) 11 | } catch (e) { 12 | console.error(`invalid JSON in ${filename}`); 13 | valid = false; 14 | } 15 | }); 16 | 17 | if (!valid) { 18 | throw "One or more JSON files are invalid." 19 | } 20 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | # Description 2 | 3 | Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. 4 | 5 | ## Issue Number 6 | `#0000` 7 | 8 | ## Type of change 9 | 10 | Please delete options that are not relevant. 11 | 12 | - [ ] Bug fix (non-breaking change which fixes an issue) 13 | - [ ] New feature (non-breaking change which adds functionality) 14 | - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) 15 | - [ ] This change requires a documentation update 16 | -------------------------------------------------------------------------------- /.github/workflows/lcp-version-bump.yml: -------------------------------------------------------------------------------- 1 | # This workflow calls an org-level reusable workflow for incrementing LCP and NPM package versions. 2 | 3 | name: LCP Version Bump 4 | 5 | on: 6 | workflow_dispatch: 7 | inputs: 8 | version_level: 9 | description: 'Version level to bump' 10 | required: true 11 | default: 'patch' 12 | type: choice 13 | options: 14 | - patch 15 | - minor 16 | - major 17 | 18 | jobs: 19 | call-bump-version-tag: 20 | uses: massif-press/.github/.github/workflows/bump-version-tag.yml@master 21 | with: 22 | version_level: ${{ inputs.version_level }} -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@massif/lancer-data", 3 | "version": "3.1.7", 4 | "description": "Data for the LANCER TTRPG", 5 | "main": "index.js", 6 | "scripts": { 7 | "build": "node ./scripts/build.js", 8 | "test": "node ./scripts/test.js" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/massif-press/lancer-data.git" 13 | }, 14 | "directories": { 15 | "lib": "lib" 16 | }, 17 | "author": "Massif Press", 18 | "license": "GPL-3.0-or-later", 19 | "devDependencies": { 20 | "zip-lib": "^0.7.3" 21 | }, 22 | "keywords": [ 23 | "lancer", 24 | "compcon", 25 | "comp/con", 26 | "lancerrpg", 27 | "massif" 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | build/ 3 | .vscode/ 4 | 5 | # Logs 6 | logs 7 | *.log 8 | npm-debug.log* 9 | yarn-debug.log* 10 | yarn-error.log* 11 | lerna-debug.log* 12 | .pnpm-debug.log* 13 | 14 | # Diagnostic reports (https://nodejs.org/api/report.html) 15 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 16 | 17 | # Runtime data 18 | pids 19 | *.pid 20 | *.seed 21 | *.pid.lock 22 | 23 | # Directory for instrumented libs generated by jscoverage/JSCover 24 | lib-cov 25 | 26 | # Coverage directory used by tools like istanbul 27 | coverage 28 | *.lcov 29 | 30 | # Dependency directories 31 | node_modules/ 32 | 33 | # Optional npm cache directory 34 | .npm 35 | 36 | # Output of 'npm pack' 37 | *.tgz 38 | 39 | # Yarn Integrity file 40 | .yarn-integrity 41 | 42 | # Stores VSCode versions used for testing VSCode extensions 43 | .vscode-test 44 | 45 | # yarn v2 46 | .yarn/cache 47 | .yarn/unplugged 48 | .yarn/build-state.yml 49 | .yarn/install-state.gz 50 | .pnp.* 51 | 52 | @massif/ -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | "use strict" 2 | 3 | const data = { 4 | actions: require('./lib/actions.json'), 5 | backgrounds: require('./lib/backgrounds.json'), 6 | core_bonuses: require('./lib/core_bonuses.json'), 7 | environments: require('./lib/environments.json'), 8 | factions: require('./lib/factions.json'), 9 | frames: require('./lib/frames.json'), 10 | glossary: require('./lib/glossary.json'), 11 | info: require('./lib/info.json'), 12 | manufacturers: require('./lib/manufacturers.json'), 13 | mods: require('./lib/mods.json'), 14 | npc_classes: [], 15 | npc_features: [], 16 | npc_templates: [], 17 | pilot_gear: require('./lib/pilot_gear.json'), 18 | reserves: require('./lib/reserves.json'), 19 | rules: require('./lib/rules.json'), 20 | sitreps: require('./lib/sitreps.json'), 21 | skills: require('./lib/skills.json'), 22 | statuses: require('./lib/statuses.json'), 23 | systems: require('./lib/systems.json'), 24 | tables: require('./lib/tables.json'), 25 | tags: require('./lib/tags.json'), 26 | talents: require('./lib/talents.json'), 27 | weapons: require('./lib/weapons.json'), 28 | } 29 | 30 | module.exports = data -------------------------------------------------------------------------------- /lib/rules.json: -------------------------------------------------------------------------------- 1 | { 2 | "base_structure": 4, 3 | "base_stress": 4, 4 | "base_grapple": 0, 5 | "base_ram": 0, 6 | "base_pilot_hp": 6, 7 | "base_pilot_evasion": 10, 8 | "base_pilot_edef": 10, 9 | "base_pilot_speed": 4, 10 | "base_pilot_sensors": 5, 11 | "base_pilot_save_target": 10, 12 | "minimum_pilot_skills": 4, 13 | "minimum_mech_skills": 2, 14 | "minimum_pilot_talents": 3, 15 | "trigger_bonus_per_rank": 2, 16 | "max_trigger_rank": 3, 17 | "max_pilot_level": 12, 18 | "max_pilot_weapons": 2, 19 | "max_pilot_armor": 1, 20 | "max_pilot_gear": 3, 21 | "max_frame_size": 3, 22 | "max_mech_armor": 4, 23 | "max_hase": 6, 24 | "mount_fittings": { 25 | "Auxiliary": ["Auxiliary"], 26 | "Main": ["Main", "Auxiliary"], 27 | "Flex": ["Main", "Auxiliary"], 28 | "Heavy": ["Superheavy", "Heavy", "Main", "Auxiliary"] 29 | }, 30 | "overcharge": ["1", "1d3", "1d6", "1d6+4"], 31 | "skill_headers": [ 32 | { 33 | "attr": "str", 34 | "description": "use, resist, and apply direct force, physical or otherwise" 35 | }, 36 | { 37 | "attr": "dex", 38 | "description": "perform skillfully and accurately under pressure" 39 | }, 40 | { 41 | "attr": "int", 42 | "description": "notice details, think creatively, and prepare" 43 | }, 44 | { 45 | "attr": "cha", 46 | "description": "talk, lead, change minds, make connections, and requisition resources" 47 | }, 48 | { 49 | "attr": "Custom", 50 | "description": "Custom Skill Triggers" 51 | } 52 | ] 53 | } 54 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | buffer-crc32@~0.2.3: 6 | version "0.2.13" 7 | resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" 8 | integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== 9 | 10 | fd-slicer@~1.1.0: 11 | version "1.1.0" 12 | resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" 13 | integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== 14 | dependencies: 15 | pend "~1.2.0" 16 | 17 | pend@~1.2.0: 18 | version "1.2.0" 19 | resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" 20 | integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== 21 | 22 | yauzl@^2.10.0: 23 | version "2.10.0" 24 | resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" 25 | integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== 26 | dependencies: 27 | buffer-crc32 "~0.2.3" 28 | fd-slicer "~1.1.0" 29 | 30 | yazl@^2.5.1: 31 | version "2.5.1" 32 | resolved "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz" 33 | integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw== 34 | dependencies: 35 | buffer-crc32 "~0.2.3" 36 | 37 | zip-lib@^0.7.3: 38 | version "0.7.3" 39 | resolved "https://registry.npmjs.org/zip-lib/-/zip-lib-0.7.3.tgz" 40 | integrity sha512-hp40KYzTJvoaCRr2t6hztlPnVmHYqDUDiIn0hlfAFwVBs3/jwkLy8aZ7NVGHECeWH2Tv8WPwWyR6QuWYarIjJQ== 41 | dependencies: 42 | yauzl "^2.10.0" 43 | yazl "^2.5.1" 44 | -------------------------------------------------------------------------------- /scripts/rename.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/node 2 | 3 | const fs = require('fs'); 4 | 5 | const path = require('path'); 6 | 7 | const folderPath = './lib'; 8 | const ignore = ['manufacturers.json', 'weapons.json', 'systems.json', 'mods.json']; 9 | 10 | const ignoreWords = ['{VAL}', '({VAL})', '{VAL}+', 'HP', 'GRIT', 'SP', 'AP', '(AP)']; 11 | 12 | function decap(string) { 13 | const words = string.split(' '); 14 | const capitalizedWords = words.map((word) => { 15 | if (ignoreWords.some((x) => x === word)) return word; 16 | else if (word === word.toUpperCase()) { 17 | return word.toLowerCase().replace(/\b\w/g, (l) => l.toUpperCase()); 18 | } else { 19 | return word; 20 | } 21 | }); 22 | const capitalizedString = capitalizedWords.join(' '); 23 | return capitalizedString; 24 | } 25 | 26 | fs.readdir(folderPath, (err, files) => { 27 | if (err) { 28 | console.error('Error reading folder:', err); 29 | return; 30 | } 31 | 32 | files.forEach((file) => { 33 | if (ignore.some((x) => x === file)) return; 34 | const filePath = path.join(folderPath, file); 35 | console.log(filePath); 36 | 37 | fs.readFile(filePath, 'utf8', (err, data) => { 38 | if (err) { 39 | console.error('Error reading file:', file, err); 40 | return; 41 | } 42 | 43 | try { 44 | let fixed = 0; 45 | const jsonObject = JSON.parse(data); 46 | if (Array.isArray(jsonObject)) { 47 | jsonObject.forEach((e) => { 48 | if (e.name) { 49 | if (e.name.includes('ERR:')) return; 50 | if (e.name === e.name.toUpperCase()) { 51 | const decapped = decap(e.name); 52 | if (e.name !== decapped) { 53 | // console.log('decapped:', e.name, decapped); 54 | e.name = decapped; 55 | fixed++; 56 | } 57 | } 58 | } 59 | }); 60 | fs.writeFile(filePath, JSON.stringify(jsonObject, null, 2), (err) => { 61 | if (err) { 62 | console.error('Error writing file:', file, err); 63 | return; 64 | } 65 | }); 66 | 67 | console.log(`fixed: ${fixed} in file: ${file}`); 68 | } 69 | } catch (err) { 70 | console.error('Error parsing JSON in file:', file, err); 71 | } 72 | }); 73 | }); 74 | }); 75 | -------------------------------------------------------------------------------- /scripts/output/equipment.csv: -------------------------------------------------------------------------------- 1 | SOURCE,NAME,MELEE,RANGED,SURVIVABILITY,MANUVERABILITY,SUPPORT,CONTROL 2 | GMS,ANTI-MATERIEL RIFLE,0,32,0,0,0,0 3 | GMS,ASSAULT RIFLE,0,14,0,0,0,0 4 | GMS,CHARGED BLADE,6,0,0,0,0,0 5 | GMS,CYCLONE PULSE RIFLE,0,63,0,0,0,0 6 | GMS,HEAVY CHARGED BLADE,14,0,0,0,0,0 7 | GMS,HEAVY MACHINE GUN,0,32,0,0,0,0 8 | GMS,HEAVY MELEE WEAPON,15,0,0,0,0,0 9 | GMS,HOWITZER,0,40,0,0,0,0 10 | GMS,MISSILE RACK,0,10,0,0,0,0 11 | GMS,MORTAR,0,21,0,0,0,0 12 | GMS,NEXUS (HUNTER-KILLER),0,9,0,0,0,0 13 | GMS,NEXUS (LIGHT),0,7,0,0,0,0 14 | GMS,PISTOL,0,7,0,0,0,0 15 | GMS,SEGMENT KNIFE,3,0,0,0,0,0 16 | GMS,ROCKET-PROPELLED GRENADE,0,24,0,0,0,0 17 | GMS,SHOTGUN,0,5,0,0,0,0 18 | GMS,TACTICAL KNIFE,2,0,0,0,0,0 19 | GMS,TACTICAL MELEE WEAPON,8,0,0,0,0,0 20 | GMS,THERMAL LANCE,0,30,0,0,0,0 21 | GMS,THERMAL PISTOL,0,10,0,0,0,0 22 | GMS,THERMAL RIFLE,0,8,0,0,0,0 23 | IPS-N,CHAIN AXE,9,0,0,0,0,0 24 | IPS-N,BRISTLECROWN FLECHETTE LAUNCHER,0,3,0,0,0,0 25 | IPS-N,NANOCARBON SWORD,33,0,0,0,0,0 26 | IPS-N,ASSAULT CANNON,0,14,0,0,0,0 27 | IPS-N,CONCUSSION MISSILES,0,4,0,0,0,0 28 | IPS-N,LEVIATHAN HEAVY ASSAULT CANNON,0,7,0,0,0,0 29 | IPS-N,CUTTER MKII PLASMA TORCH,0,0,0,0,0,0 30 | IPS-N,WAR PIKE,5,0,0,0,0,0 31 | IPS-N,POWER KNUCKLES,2,0,0,0,0,0 32 | IPS-N,HAND CANNON,0,7,0,0,0,0 33 | IPS-N,BOLT THROWER,0,25,0,0,0,0 34 | IPS-N,KINETIC HAMMER,32,0,0,0,0,0 35 | IPS-N,DECK-SWEEPER AUTOMATIC SHOTGUN,0,9,0,0,0,0 36 | IPS-N,DAISY CUTTER,0,47,0,0,0,0 37 | IPS-N,CATALYTIC HAMMER,6,0,0,0,0,0 38 | IPS-N,IMPACT LANCE,5,0,0,0,0,0 39 | IPS-N,IMPALER NAILGUN,0,8,0,0,0,0 40 | IPS-N,COMBAT DRILL,39,0,0,0,0,0 41 | SSC,MAGNETIC CANNON,0,18,0,0,0,0 42 | SSC,VULTURE DMR,0,19,0,0,0,0 43 | SSC,RAILGUN,0,71,0,0,0,0 44 | SSC,VEIL RIFLE,0,23,0,0,0,0 45 | SSC,BURST LAUNCHER,0,14,0,0,0,0 46 | SSC,RAIL RIFLE,0,25,0,0,0,0 47 | SSC,SHOCK KNIFE,0,0,0,0,0,0 48 | SSC,SHARANGA MISSILES,0,12,0,0,0,0 49 | SSC,GANDIVA MISSILES,0,25,0,0,0,0 50 | SSC,PINAKA MISSILES,0,34,0,0,0,0 51 | SSC,FOLD KNIFE,2,0,0,0,0,0 52 | SSC,VIJAYA ROCKETS,0,4,0,0,0,0 53 | SSC,VARIABLE SWORD,0,0,0,0,0,0 54 | SSC,ORACLE LMG-I,0,14,0,0,0,0 55 | HORUS,NANOBOT WHIP,23,0,0,0,0,0 56 | HORUS,SWARM/HIVE NANITES,0,3,0,0,0,0 57 | HORUS,AUTOPOD,0,10,0,0,0,0 58 | HORUS,VORPAL GUN,0,13,0,0,0,0 59 | HORUS,GHOUL NEXUS,0,10,0,0,0,0 60 | HORUS,GHAST NEXUS,0,18,0,0,0,0 61 | HORUS,ANNIHILATION NEXUS,0,35,0,0,0,0 62 | HORUS,CATALYST PISTOL,0,6,0,0,0,0 63 | HORUS,ARC PROJECTOR,0,8,0,0,0,0 64 | HORUS,SMARTGUN,0,12,0,0,0,0 65 | HORUS,MIMIC GUN,0,NaN,0,0,0,0 66 | HORUS,AUTOGUN,0,10,0,0,0,0 67 | HA,SIEGE CANNON,0,23,0,0,0,0 68 | HA,KRAKATOA THERMOBARIC FLAMETHROWER,0,13,0,0,0,0 69 | HA,PLASMA THROWER,0,52,0,0,0,0 70 | HA,STUB CANNON,0,3,0,0,0,0 71 | HA,GRAVITY GUN,0,0,0,0,0,0 72 | HA,DISPLACER,0,11,0,0,0,0 73 | HA,SHATTERHEAD COLONY MISSILES,0,14,0,0,0,0 74 | HA,SOL-PATTERN LASER RIFLE,0,7,0,0,0,0 75 | HA,ANDROMEDA-PATTERN HEAVY LASER RIFLE,0,17,0,0,0,0 76 | HA,TACHYON LANCE,0,25,0,0,0,0 77 | HA,ANNIHILATOR,0,8,0,0,0,0 78 | HA,TORCH,3,0,0,0,0,0 79 | ,Fuel Rod Gun,0,5,0,0,0,0 80 | ,Prototype Weapon,0,15,0,0,0,0 81 | ,Prototype Weapon,0,15,0,0,0,0 82 | ,Prototype Weapon,0,21,0,0,0,0 83 | undefined,Latch Drone,0,0,0,0,0,0 84 | undefined,M35 Mjolnir,0,0,0,0,0,0 85 | undefined,Apocalypse Rail,0,0,0,0,0,0 86 | undefined,ZF4 SOLIDCORE,0,0,0,0,0,0 87 | -------------------------------------------------------------------------------- /lib/tables.json: -------------------------------------------------------------------------------- 1 | { 2 | "pilot_names": [], 3 | "callsigns": [], 4 | "mech_names": [], 5 | "team_names": [], 6 | "quirks": [ 7 | "Part (or all) of your body was too damaged to be cloned perfectly and a significant percentage of your clone body has been replaced with cybernetics. These high-quality prostheses aren’t obviously synthetic to casual observers. You don’t know the extent of the damage.", 8 | "Your clone has been fitted with a necessary but visible cybernetic augmentation – an arm, leg, eyes, or similar. It is a conspicuous prosthetic.", 9 | "By accident or malign intent, your cognitive profile has been loaded into someone else’s body. It might be a clone of a notorious or famous individual, with both enemies and allies who thought they were dead; or, you might run into the “original” person the clone was based on.", 10 | "Your clone has a unique appearance that clearly marks you as vat-grown.", 11 | "Thanks to a series of administrative mishaps, the appearance of your new body is drastically different to that of your old body.", 12 | "An additional, withered limb grows out of your clone’s chest shortly after your cognitive profile has been loaded. It sometimes moves on its own.", 13 | "There’s a conspicuous barcode printed on your clone body. The barcode means something specific to at least one powerful organization, but you aren’t privy to its meaning – at least not yet.", 14 | "In certain light conditions, it’s possible to read a script or inscription printed just under your skin. The script is all over your body and contains information contested by powerful organizations or entities – scientific formulae, maps, or something else entirely.", 15 | "Your clone body is unusually susceptible to solar radiation, viruses, bacteria, or some other common environmental phenomenon. You must wear an environmental suit to operate outside certain safe environments, which include your mech’s cockpit and your personal quarters. You can use downtime actions to make other rooms safe.", 16 | "Genetic material from a non-human source was used in the creation of your clone body. Whoever revived you won’t tell you the exact details or what long-term effects it will have, and they treat you like a science experiment. The new genetic material has caused a cosmetic change that is useful and visible, although able to be hidden.", 17 | "Whenever you try to sleep or rest, you’re stricken with vivid and persistent dreams, visions, and images of your death. You know they’re real but can’t reconcile the existential gulf between the experiences of the old and new versions of yourself.", 18 | "In addition to your cognitive profile, your clone body has been loaded with a digital homunculus of someone else: a basic digital reconstruction of a personality that is more like a piece of software than a person. While not technically sapient, it is very smart, and carries a message or secret with it.", 19 | "You’re plagued by the constant understanding or belief that the “real” you is actually dead, and you’re merely a facsimile of a dead person, implanted with someone else’s memories. You can’t establish the difference between the “you” that died and the “you” that exists now.", 20 | "In addition to your cognitive profile, your flash clone is woven through with a subdermal data-lattice: this storage device contains very dangerous and potentially unwanted information that is contested or sought by powerful entities.", 21 | "The flash-cloning process went awry, and you have been revived tabula rasa. In desperation, the technicians dump a stock personality construct into your clone body. Choose a new background and triggers.", 22 | "There are complications while growing your clone body: it has a dramatically reduced life expectancy.", 23 | "Something changed you – you now have persistent and intrusive mental contact with an entity or entities, human or otherwise.", 24 | "You keep having searing headaches during which you see brief flashes of what you’re pretty sure is the future. Sometimes these visions come to pass, sometimes they don’t.", 25 | "Knowingly or unknowingly, your clone body has been implanted with a mental trigger that places you in a receptive state when heard or activated, causing you to either follow a pre-programmed course of action or to follow instructions given by the person who activated you. These commands must be simple (e.g., kill, lie, etc.), and the GM determines who (PC or NPC) gave them. You might be able to overcome this effect in time.", 26 | "You come back with total amnesia regarding the time before your death, meaning you must be retrained and prepared from scratch. You lose all previous triggers and assign new ones up to your current level. Additionally, you may rewrite some incidental facts of your backstory." 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /scripts/aptitude_export.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | 3 | const weapons = require('../lib/weapons.json'); 4 | const systems = require('../lib/systems.json'); 5 | const mods = require('../lib/mods.json'); 6 | const frames = require('../lib/frames.json'); 7 | 8 | // const items = [weapons, systems, mods, frames] 9 | const items = [weapons]; 10 | 11 | function row(x) { 12 | if (x.data_type === 'weapon') return weaponRow(x); 13 | return `${x.source},${x.name},0,0,0,0,0,0\n`; 14 | // return `${x.data_type},${x.id},${x.source},${x.name},0,0,0,0,0,0\n` 15 | } 16 | 17 | function weaponRow(x) { 18 | // return `${x.data_type},${x.id},${x.source},${x.name},0,${rangedAp(x)},0,0,0,0\n` 19 | return `${x.source},${x.name},${closeAp(x)},${rangedAp(x)},0,0,0,0\n`; 20 | } 21 | 22 | function getDamage(d, tags) { 23 | let dscore = 0; 24 | let guaranteed = 0; 25 | let possible = 0; 26 | if (typeof d.val === 'string') { 27 | const dmgArr = d.val.split(/d|\+/g); 28 | if (dmgArr.length === 1) guaranteed = parseInt(dmgArr[0]); // straight value, no dice 29 | else { 30 | if (dmgArr.length === 3) guaranteed = parseInt(dmgArr[2]); // bonus val 31 | // handle dice 32 | guaranteed += parseInt(dmgArr[0]); // min number we can get on the dice 33 | possible = parseInt(dmgArr[0]) * parseInt(dmgArr[1]) - parseInt(dmgArr[0]); 34 | } 35 | // guaranteed = 1pt, possible = 0.5 36 | dscore += guaranteed * (possible / 2); 37 | } else { 38 | guaranteed = d.val; 39 | } 40 | 41 | if (tags.find((x) => x.id === 'tg_accurate')) dscore += possible * 0.25; 42 | if (tags.find((x) => x.id === 'tg_inaccurate')) dscore -= possible * 0.25; 43 | if (tags.find((x) => x.id === 'tg_reliable')) 44 | dscore += tags.find((x) => x.id === 'tg_reliable').val * 3; 45 | 46 | return dscore; 47 | } 48 | 49 | function closeAp(x) { 50 | let score = 0; 51 | const tags = x.tags || []; 52 | if (x.type.toLowerCase() !== 'melee' || !x.damage || !x.damage.length) return score.toString(); 53 | 54 | x.damage.forEach((d) => { 55 | score += getDamage(d, tags); 56 | }); 57 | 58 | const threat = x.range.find((y) => y.type.toLowerCase() === 'threat'); 59 | // console.log(threat) 60 | if (threat) score *= (threat.val + 1) / 2; 61 | 62 | if (tags.find((x) => x.id === 'tg_ap')) score = score * 1.35; 63 | if (tags.find((x) => x.id === 'tg_arcing')) score = score * 1.15; 64 | if (tags.find((x) => x.id === 'tg_smart')) score = score * 1.15; 65 | if (tags.find((x) => x.id === 'tg_overkill')) score = score * 1.15; 66 | if (tags.find((x) => x.id === 'tg_loading')) score = score * 0.85; 67 | 68 | return Math.ceil(score).toString(); 69 | } 70 | 71 | function rangedAp(x) { 72 | let score = 0; 73 | const tags = x.tags || []; 74 | if ( 75 | x.type.toLowerCase() === 'melee' || 76 | !x.range || 77 | !x.range.length || 78 | !x.damage || 79 | !x.damage.length 80 | ) 81 | return score.toString(); 82 | x.damage.forEach((d) => { 83 | score += getDamage(d, tags); 84 | }); 85 | //collect range pts 86 | x.range.forEach((r) => { 87 | let rscore = 0; 88 | if (typeof r.val === 'string') return 'XXXX'; 89 | if (r.type.toLowerCase() === 'range') { 90 | if (r.val <= 10) score += r.val / 2; 91 | else { 92 | rscore += 5 + (r.val - 10); 93 | } 94 | } 95 | if (r.type.toLowerCase() === 'blast') { 96 | rscore += Math.pow(r.val * 3, 2) / 2; 97 | } 98 | if (r.type.toLowerCase() === 'burst') { 99 | rscore += Math.pow(r.val * 3, 2) / 3; 100 | } 101 | if (r.type.toLowerCase() === 'cone') { 102 | rscore += Math.pow(r.val, 2) / 2; 103 | } 104 | if (r.type.toLowerCase() === 'line') { 105 | rscore += r.val * 2; 106 | } 107 | if (r.type.toLowerCase() === 'thrown') { 108 | rscore = score / 3; 109 | } 110 | score += rscore; 111 | }); 112 | 113 | if (tags.find((x) => x.id === 'tg_ap')) score = score * 1.35; 114 | if (tags.find((x) => x.id === 'tg_arcing')) score = score * 1.15; 115 | if (tags.find((x) => x.id === 'tg_smart')) score = score * 1.15; 116 | if (tags.find((x) => x.id === 'tg_overkill')) score = score * 1.15; 117 | if (tags.find((x) => x.id === 'tg_loading')) score = score * 0.85; 118 | 119 | return Math.ceil(score).toString(); 120 | } 121 | 122 | // let output = 'TYPE,ID,SOURCE,NAME,CQB,RANGED,SURVIVABILITY,MANEUVERABILITY,SUPPORT,CONTROL\n' 123 | let output = 'SOURCE,NAME,MELEE,RANGED,SURVIVABILITY,MANEUVERABILITY,SUPPORT,CONTROL\n'; 124 | 125 | items.forEach((e) => { 126 | e.forEach((x) => { 127 | output += row(x); 128 | }); 129 | }); 130 | 131 | fs.writeFile('./util/output/equipment.csv', output, function (err) { 132 | if (err) return console.log(err); 133 | console.log('Export Complete'); 134 | }); 135 | -------------------------------------------------------------------------------- /lib/environments.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "env_dangerousflorafauna", 4 | "name": "Dangerous Flora or Fauna", 5 | "description": "An unusually large proportion of this planet’s animal or plant life is dangerous; some of the flora and fauna may predatory, particularly hostile, or even titanic in size. Use the Monstrosity NPC type to generate encounters with wildlife. Hostile flora can appear on the battlefield as immobile characters with Size 1–2, 5 HP, and Evasion 10; targets that move adjacent to them must succeed on a Hull save or take 3 Kinetic Damage and become Immobilized until the flora is destroyed, as it traps them with sticky sap, webbing, a pit, or the like." 6 | }, 7 | { 8 | "id": "env_extremecold", 9 | "name": "Extreme Cold", 10 | "description": "Local cultures have adapted to the frozen climate, but mechs and pilots quickly freeze without a nearby source of heat. Mechs that don’t move or Boost on their turn become Immobilized at the end of their turn. This lasts until they break free with a successful Hull save as a quick action. In addition, all mechs gain Resistance to Heat." 11 | }, 12 | { 13 | "id": "env_extremeheat", 14 | "name": "Extreme Heat", 15 | "description": "Society has retreated mostly underground to escape this world’s blistering atmosphere. All Heat inflicted (to the user or others) by systems or weapons is increased by +1." 16 | }, 17 | { 18 | "id": "env_thinatmosphere", 19 | "name": "Thin Atmosphere", 20 | "description": "All characters gain Resistance to Explosive Damage." 21 | }, 22 | { 23 | "id": "env_extremesun", 24 | "name": "Extreme Sun", 25 | "description": "Characters take 1d6 Heat whenever they are aren’t in shade at the end of a turn." 26 | }, 27 | { 28 | "id": "env_corrosiveatmosphere", 29 | "name": "Corrosive Atmosphere", 30 | "description": "The dense atmosphere of this world eats through armor. All weapons gain AP." 31 | }, 32 | { 33 | "id": "env_particulatestorms", 34 | "name": "Particulate Storms", 35 | "description": "This planet is swept by brutal, scouring storms of sand, rock, or metal. During storms, mechs always have soft cover. Pilots that leave their mech take 1 Kinetic Damage (AP) each turn they are outside." 36 | }, 37 | { 38 | "id": "env_electricalstorms", 39 | "name": "Electrical Storms", 40 | "description": "This planet is swept by unusually strong electrical storms. During storms, choose a character at random at the end of each round: they must succeed on an ENGINEERING save with +1 Difficulty per level of Size or be STUNNED until the end of their next turn by a bolt of lightning." 41 | }, 42 | { 43 | "id": "env_disruptivestorms", 44 | "name": "Disruptive Storms", 45 | "description": "The storms on this planet are so highly charged that electronic systems can’t function. All tech actions, attacks, and SYSTEMS checks and saves receive +1 Difficulty." 46 | }, 47 | { 48 | "id": "env_dangeroustorms", 49 | "name": "Dangerous Storms", 50 | "description": "Storms of fire, meteors, acid rain, ice, or other destructive particles sweep this planet. During storms, all characters take 2 Energy Damage (AP) at the end of their turns unless they are adjacent to an object that grants hard cover." 51 | }, 52 | { 53 | "id": "env_oceanworld", 54 | "name": "Ocean World", 55 | "description": "Less than five percent of this world’s surface rises above the ocean. Mechs sink to the bottom and move as though in difficult terrain unless they are flying or have an EVA Module. Mechs can walk (slowly) on the bottom and are usually able to function in extremely high-pressure environments." 56 | }, 57 | { 58 | "id": "env_earthquakes", 59 | "name": "Earthquakes", 60 | "description": "This world is regularly rocked by earthquakes. During earthquakes, roll 1d6 at the end of each round: on 1, all mechs must succeed on a HULL save or be knocked Prone unless they are flying." 61 | }, 62 | { 63 | "id": "env_moltenworld", 64 | "name": "Molten World", 65 | "description": "Parts of this world’s crust juts through the surface in showers and pools of liquid rock. When characters move into areas of molten rock or lava for the first time on their turn or start their turn there, they take 5 Energy Damage (AP) and 3 Heat." 66 | }, 67 | { 68 | "id": "env_primordealworld", 69 | "name": "Primordial World", 70 | "description": "This world is a bubbling soup of semi-organic mud and gases. Humans must use breathing apparatuses or sealed suits outside of their mechs to survive the toxic atmosphere, and boiling mud creates numerous areas of both difficult and dangerous terrain." 71 | }, 72 | { 73 | "id": "env_lowgravity", 74 | "name": "Low Gravity", 75 | "description": "Mechs count as flying when they Boost but must land after they move. Characters never take damage from falling." 76 | }, 77 | { 78 | "id": "env_highgravity", 79 | "name": "High Gravity", 80 | "description": "Mechs cannot Boost and are Immobilized instead whenever they would be Slowed." 81 | }, 82 | { 83 | "id": "env_tombworld", 84 | "name": "Tomb World", 85 | "description": "This world has extremely high levels of ambient radiation, possibly because of nuclear war, atmospheric degradation, or something more sinister. Outside of mechs, humans without environmental protection temporarily decrease their maximum HP by 1 per hour of exposure. If they reach 0 HP this way, they die. They can regain their maximum HP by performing a Full Repair in a safe environment." 86 | }, 87 | { 88 | "id": "env_spireworld", 89 | "name": "Spire World", 90 | "description": "Instead of a surface, this world is comprised of countless floating islands or spires, each held aloft in a gaseous substrate and suspended through magnetic force. Perhaps the crust was shattered by a superweapon or natural disaster. Most of the remaining landmass is disconnected, although some islands are large enough to hold cities. Navigation systems are almost useless here." 91 | }, 92 | { 93 | "id": "env_sinkingworld", 94 | "name": "Sinking World", 95 | "description": "The surface of this world is covered in fine sand or thick mud. Mechs that move 1 space or less during their turn are Slowed. Slowed mechs that move 1 space or less are Immobilized and start sinking, eventually becoming completely engulfed. This effect lasts until an affected mech (or one adjacent to it) succeeds on a Hull save as a full action." 96 | }, 97 | { 98 | "id": "env_holyworld", 99 | "name": "Holy World", 100 | "description": "This world is beautiful and lacks especially dangerous features, but the local population holds it sacrosanct. Damaging any natural object – rocks, trees, and pristine grasslands, for example – incurs the wrath of the residents." 101 | } 102 | ] -------------------------------------------------------------------------------- /lib/statuses.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Danger Zone", 4 | "icon": "danger-zone", 5 | "type": "Status", 6 | "terse": "Heat level at half capacity or more", 7 | "exclusive": "Mech", 8 | "effects": "Characters are in the DANGER ZONE when half or more of their heat is filled in. They’re smoking hot, which enables some attacks, talents, and effects." 9 | }, 10 | { 11 | "name": "Down and Out", 12 | "icon": "downandout", 13 | "type": "Status", 14 | "terse": "Pilot is unconscious, any additional damage kills", 15 | "exclusive": "Pilot", 16 | "effects": "Pilots that are DOWN AND OUT are unconscious and STUNNED – if they take any more damage, they die. They'll regain consciousness and half of their HP when they rest." 17 | }, 18 | { 19 | "name": "Engaged", 20 | "icon": "engaged", 21 | "type": "Status", 22 | "terse": "Ranged attacks made by an this character receive +1 difficulty. All additional movement is lost if ENGAGED by a target of equal or greater SIZE", 23 | "effects": "If a character moves adjacent to a hostile character, they both gain the ENGAGED status for as long as they remain adjacent to one another. Ranged attacks made by an ENGAGED character receive +1 difficulty. Additionally, characters that become ENGAGED by targets of equal or greater SIZE during the course of a movement stop moving immediately and lose any unused movement." 24 | }, 25 | { 26 | "name": "Exposed", 27 | "icon": "exposed", 28 | "type": "Status", 29 | "terse": "All kinetic, explosive, or energy damage taken by this character is doubled.", 30 | "exclusive": "Mech", 31 | "effects": "Characters become EXPOSED when they’re dealing with runaway heat buildup – their armor is weakened by overheating, their vents are open, and their weapons are spinning down, providing plenty of weak points. All kinetic, explosive, or energy damage taken by EXPOSED characters is doubled, before applying any reductions. A mech can clear EXPOSED by taking the STABILIZE action." 32 | }, 33 | { 34 | "name": "Hidden", 35 | "icon": "hidden", 36 | "type": "Status", 37 | "terse": "This character can’t be targeted by hostile attacks or actions, doesn't cause engagement, and enemies only know their approximate location.", 38 | "effects": "HIDDEN characters can’t be targeted by hostile attacks or actions, don’t cause engagement, and enemies only know their approximate location. Attacking, forcing saves, taking reactions, using BOOST, and losing cover all remove HIDDEN after they resolve. Characters can find HIDDEN characters with SEARCH." 39 | }, 40 | { 41 | "name": "Invisible", 42 | "icon": "invisible", 43 | "type": "Status", 44 | "terse": "All attacks against INVISIBLE characters have a 50 percent chance to miss before an attack roll is made. INVISIBLE characters can always HIDE, even without cover.", 45 | "effects": "All attacks against INVISIBLE characters, regardless of type, have a 50 percent chance to miss outright, before an attack roll is made. Roll a dice or flip a coin to determine if the attack misses.
Additionally, INVISIBLE characters can always HIDE, even without cover." 46 | }, 47 | { 48 | "name": "Prone", 49 | "icon": "prone", 50 | "type": "Status", 51 | "terse": "Attacks against PRONE targets receive +1 accuracy. PRONE characters are SLOWED and count as moving in difficult terrain.", 52 | "effects": "Attacks against PRONE targets receive +1 accuracy.
Additionally, PRONE characters are SLOWED and count as moving in difficult terrain. Characters can remove PRONE by standing up instead of taking their standard move, unless they’re IMMOBILIZED. Standing up doesn’t count as movement, so doesn’t trigger OVERWATCH or other effects." 53 | }, 54 | { 55 | "name": "Shut Down", 56 | "icon": "shut-down", 57 | "type": "Status", 58 | "terse": "While SHUT DOWN, mechs are STUNNED indefinitely.", 59 | "exclusive": "Mech", 60 | "effects": "When a mech is SHUT DOWN:
• all heat is cleared and the EXPOSED status is removed;
• any cascading NHPs are stabilised and no longer cascading;
• any statuses and conditions affecting the mech caused by tech actions, such as LOCK ON, immediately end.
SHUT DOWN mechs have IMMUNITY to all tech actions and attacks, including any from allied characters.
While SHUT DOWN, mechs are STUNNED indefinitely. Nothing can prevent this condition, and it remains until the mech ceases to be SHUT DOWN." 61 | }, 62 | { 63 | "name": "Immobilized", 64 | "icon": "immobilized", 65 | "type": "Condition", 66 | "terse": "IMMOBILIZED characters cannot make any voluntary movements", 67 | "effects": "IMMOBILIZED characters cannot make any voluntary movements, although involuntary movements are unaffected." 68 | }, 69 | { 70 | "name": "Impaired", 71 | "icon": "impaired", 72 | "type": "Condition", 73 | "terse": "IMPAIRED characters receive +1 difficulty on all attacks, saves, and skill checks.", 74 | "effects": "IMPAIRED characters receive +1 difficulty on all attacks, saves, and skill checks." 75 | }, 76 | { 77 | "name": "Jammed", 78 | "icon": "jammed", 79 | "type": "Condition", 80 | "terse": "JAMMED characters can’t use comms, make attacks other than IMPROVISED ATTACK, GRAPPLE, and RAM,take reactions, or take or benefit from tech actions", 81 | "effects": "JAMMED characters can’t:
• use comms to talk to other characters;
• make attacks, other than IMPROVISED ATTACK, GRAPPLE, and RAM;
• take reactions, or take or benefit from tech actions." 82 | }, 83 | { 84 | "name": "Lock On", 85 | "icon": "lock-on", 86 | "type": "Condition", 87 | "terse": "Hostile characters can consume LOCK ON for +1 accuracy on their next attack against this character.", 88 | "effects": "Hostile characters can choose to consume a character’s LOCK ON condition in exchange for +1 accuracy on their next attack against that character.
LOCK ON is also required to use some talents and systems." 89 | }, 90 | { 91 | "name": "Shredded", 92 | "icon": "shredded", 93 | "type": "Condition", 94 | "terse": "SHREDDED characters don’t benefit from ARMOR or RESISTANCE", 95 | "effects": "SHREDDED characters don’t benefit from ARMOR or RESISTANCE." 96 | }, 97 | { 98 | "name": "Slowed", 99 | "icon": "slow", 100 | "type": "Condition", 101 | "terse": "This character can’t BOOST or make any special moves granted by talents, systems, or weapons.", 102 | "effects": "The only movement SLOWED characters can make is their standard move, on their own turn – they can’t BOOST or make any special moves granted by talents, systems, or weapons." 103 | }, 104 | { 105 | "name": "Stunned", 106 | "icon": "stunned", 107 | "type": "Condition", 108 | "terse": "STUNNED mechs cannot OVERCHARGE, move, or take any actions.", 109 | "effects": "STUNNED mechs cannot OVERCHARGE, move, or take any actions – including free actions and reactions. Pilots can still MOUNT, DISMOUNT, or EJECT from STUNNED mechs, and can take actions normally.
STUNNED mechs have a maximum of 5 EVASION, and automatically fail all HULL and AGILITY checks and saves." 110 | } 111 | ] -------------------------------------------------------------------------------- /lib/sitreps.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "sitrep_standardcombat", 4 | "name": "Standard Combat", 5 | "pcVictory": "PCs defeat or route all enemy forces", 6 | "enemyVictory": "PCs are defeated or retreat from battle", 7 | "description": "A simple affair, with two sides facing off against each other until one of them is broken or destroyed." 8 | }, 9 | { 10 | "id": "sitrep_control", 11 | "name": "Control", 12 | "description": "CONTROL missions require the PCs to maintain control of four Control Zones for six rounds. The zones might contain important locations like transmission towers, gun batteries, terminals, or hangars. At the end of each round, each side gains 1 point for each Control Zone they control. If one side controls all four Control Zones, they gain an additional +1 point.", 13 | "pcVictory": "The PCs have the highest score at the end of the sixth round", 14 | "enemyVictory": "The enemy force has the highest score at the end of the sixth round.", 15 | "noVictory": "If both sides have an equal score at the end of the sixth round, there is no victor and both sides must withdraw.", 16 | "controlZone": "Four Control Zones (typically 4 spaces on each side) in different quadrants of the map, each placed anywhere in their quadrant. They should be roughly symmetrical, or the map will be unbalanced. If there are characters of only one side within a Control Zone, they control it; if there are characters from two or more sides within a Control Zone, it is contested.", 17 | "deployment": "The GM and a player each roll 1d6 to determine the order of deployment. Whoever rolls the lower result deploys first." 18 | }, 19 | { 20 | "id": "sitrep_escort", 21 | "name": "Escort", 22 | "description": "ESCORT missions require the PCs to bring an OBJECTIVE safely to the Extraction Zone and get the hell out of there.", 23 | "pcVictory": "The Objective is safely extracted.", 24 | "enemyVictory": "The Objective hasn’t been extracted at the end of the eighth round. If there are any PCs remaining on the field when this takes place, they are captured or overrun.", 25 | "noVictory": "The Objective is destroyed.", 26 | "deployment": "The PCs deploy first, choosing positions for their characters and the Objective in the Allied Deployment Zone; then, the GM deploys enemy forces in the EDZ.", 27 | "extraction": "While in the Extraction Zone, PCs can extract as a free action at the end of their turn. Extracted PCs are removed from the battlefield. If the Objective is adjacent to a PC when they extract and isn’t contested by any characters from the opposing side, it is safely extracted." 28 | }, 29 | { 30 | "id": "sitrep_extraction", 31 | "name": "Extraction", 32 | "description": "EXTRACTION missions require player characters to dash across the map to retrieve an objective and bring it safely back to extraction.", 33 | "pcVictory": "The Objective is safely extracted.", 34 | "enemyVictory": "The Objective hasn’t been extracted at the end of the tenth round. If there are any PCs remaining on the field when this takes place, they are captured or overrun.", 35 | "noVictory": "The Objective is destroyed.", 36 | "deployment": "The PCs deploy first, choosing positions for their characters in the Allied Deployment Zone; next, the GM places the Objective in the Objective Zone.", 37 | "objective": "An object or person of Size 1/2–2. The Objective has 10 HP per level of Size, Evasion 10, E-Defense 10, and no Armor. Enemy forces want the Objective and will not willingly damage it. When a character starts their turn adjacent to the Objective, it moves with them when they make their regular move. If the Objective is ever adjacent to two characters of opposing sides, it stops moving and can’t move until it is only adjacent characters from one side. The Objective doesn’t move on its own.", 38 | "extraction": "While in the Extraction Zone/Allied Deployment Zone, PCs can extract as a free action at the end of their turn. Extracted PCs are removed from the battlefield. If the Objective is adjacent to a PC when they extract and isn’t contested by any characters from the opposing side, it is safely extracted." 39 | }, 40 | { 41 | "id": "sitrep_gauntlet", 42 | "name": "Gauntlet", 43 | "description": "GAUNTLET missions are usually done under duress or when no other options are available, and they usually take place in unfriendly territory. Gauntlet missions require PCs to move through a dangerous area to secure a position.", 44 | "pcVictory": "At the end of the eighth round, there are more PCs inside the Control Zone than there are enemy characters. Ultras count as 4 characters, elites count as 2, and grunts count as 1/4.", 45 | "enemyVictory": "At the end of the eighth round, there are at least as many enemy characters inside the Control Zone as there are PCs.", 46 | "deployment": "The GM deploys first in the EDZ; the PCs deploy next, choosing positions for their characters within the Allied Deployment Zone.", 47 | "controlZone": "The area around the EDZ/Control Zone is fortified with Size 1–2 hard cover." 48 | }, 49 | { 50 | "id": "sitrep_holdout", 51 | "name": "Holdout", 52 | "description": "HOLDOUT missions are desperate undertakings. They require the PCs to defend an area against an onslaught of enemies. In the best-case scenario, this buys time for allies to complete an objective elsewhere; in the worst, it’s survive or die. The PCs start with 4 points. At the end of the sixth round, the points are tallied: the PCs lose a point for every enemy inside the Control Zone. This can result in a negative score.", 53 | "pcVictory": "At the end of the sixth round, the PCs have a score of 1 or higher.", 54 | "enemyVictory": "At the end of the sixth round, the PCs have a score of less than 1. If there are any PCs remaining on the field when this takes place, they are captured or overrun.", 55 | "controlZone": "An area typically 10 spaces by 5 spaces in the middle of the map, or positioned as needed. The area around the Control Zone should be fortified with Size 1–2 hard cover.", 56 | "deployment": "The PCs deploy first, choosing positions for their characters within the Allied Deployment Zone/Control Zone; next, the GM deploys enemy forces in the EDZ." 57 | }, 58 | { 59 | "id": "sitrep_recon", 60 | "name": "Recon", 61 | "description": "RECON missions are dangerous endeavors involving small teams entering hostile territory to identify targets or retrieve key information.", 62 | "pcVictory": "At the end of the sixth round, the PCs control the True Control Zone.", 63 | "enemyVictory": "At the end of the sixth round, the PCs don’t control the True Control Zone.", 64 | "controlZone": "Four Control Zones (typically 4 spaces on each side) in different quadrants of the map, each placed anywhere in their quadrant. The GM secretly designates one Control Zone as the True Control Zone. While inside a Control Zone, PCs may take a full action to determine whether it is the True Control Zone. If there are only PCs within the True Control Zone, they control it; if there are characters from two or more sides within the True Control Zone, it is contested.", 65 | "deployment": "The PCs deploy first, choosing positions for their characters within the Allied Deployment Zone; next, the GM deploys enemy forces in the EDZ." 66 | } 67 | ] -------------------------------------------------------------------------------- /lib/mods.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "missing_weaponmod", 4 | "name": "ERR: DATA NOT FOUND", 5 | "sp": 1, 6 | "allowed_types": ["Melee"], 7 | "source": "GMS", 8 | "license": "GMS", 9 | "license_level": 1, 10 | "effect": "COMP/CON is unable to retrieve the data necessary to furnish this System. This is likely the result of a missing or outdated content pack.", 11 | "description": "COMP/CON is unable to retrieve the data necessary to furnish this System. This is likely the result of a missing or outdated content pack.", 12 | "tags": [], 13 | "license_id": "" 14 | }, 15 | { 16 | "id": "wm_thermal_charge", 17 | "name": "Thermal Charge", 18 | "sp": 2, 19 | "allowed_types": ["Melee"], 20 | "source": "IPS-N", 21 | "license": "Nelson", 22 | "license_level": 2, 23 | "effect": "On a hit with the weapon this mod is applied to, expend a charge as a free action to activate its detonator and deal +1d6 explosive bonus damage.", 24 | "description": "One popular modification to the classic war pike involves replacing the long, armor-piercing pike head with a disposable, impact-triggered explosive charge. On penetration, the pike’s head is severed from the shaft – moments later, the embedded pike head detonates in a conical explosion from the point forward. Spare thermal charges are stable, and transported in external tube magazines.
IPS-N also makes thermal charges compatible with GMS’s range of blades, hammers, and picks.", 25 | "tags": [ 26 | { 27 | "id": "tg_limited", 28 | "val": 3 29 | }, 30 | { 31 | "id": "tg_unique" 32 | } 33 | ], 34 | "added_damage": [ 35 | { 36 | "type": "Explosive", 37 | "val": "1d6" 38 | } 39 | ], 40 | "license_id": "mf_nelson" 41 | }, 42 | { 43 | "id": "wm_uncle_class_comp_con", 44 | "name": "UNCLE-Class Comp/Con", 45 | "sp": 3, 46 | "allowed_types": ["Melee", "CQB", "Rifle", "Launcher", "Cannon", "Nexus"], 47 | "source": "IPS-N", 48 | "license": "Raleigh", 49 | "license_level": 3, 50 | "effect": "Your UNCLE-class COMP/CON has control of the weapon this mod is applied to and its associated systems.
1/turn, you can attack at +2 difficulty with UNCLE’s weapon as a free action. UNCLE can’t use weapons that have already been used this turn, and any weapon UNCLE attacks with can’t be used again until the start of your next turn.
UNCLE isn’t a full NHP, so cannot enter cascade.", 51 | "description": "IPS-N’s UNCLE COMP/CON system is the result of the DARKSTAR-2 program, a temporary project that sought to develop more advanced smart weapons. Early prototypes were hampered by a combination of high power-draw, unstable conditioning, and frustrating single-task orientation that eventually saw the project shuttered.
While IPS-N is no longer developing new iterations of UNCLE, they still have a stock of QA-approved legacy systems accessible to qualified pilots.
Pilots lucky enough to field test models swear by UNCLE’s task efficiency and parallel-track reasoning, though the outdated COMP/CONs are known for their somewhat unstable personalities.", 52 | "tags": [ 53 | { 54 | "id": "tg_unique" 55 | }, 56 | { 57 | "id": "tg_ai" 58 | }, 59 | { 60 | "id": "tg_no_cascade" 61 | } 62 | ], 63 | "restricted_sizes": ["Superheavy"], 64 | "license_id": "mf_raleigh" 65 | }, 66 | { 67 | "id": "wm_throughbolt_rounds", 68 | "name": "Throughbolt Rounds", 69 | "sp": 2, 70 | "allowed_types": ["CQB", "Cannon", "Rifle"], 71 | "source": "IPS-N", 72 | "license": "Tortuga", 73 | "license_level": 3, 74 | "effect": "When you attack with the weapon this mod is applied to, you may fire a throughbolt round instead of attacking normally. Draw a line 3 path from you, passing through terrain or other obstacles – any characters or objects in the path take 2 AP kinetic damage as the projectile punches through them and out the other side. Range, cover, and line of sight for the attack are then measured from the end of this path, continuing in the same direction.", 75 | "description": "Throughbolt rounds are a proprietary IPS-N anti-armor invention. When fired, the rounds ignite and project a superheated cone of plasma before them, creating an effect like a miniature lance that easily penetrates multiple targets – even through hard surfaces.", 76 | "tags": [ 77 | { 78 | "id": "tg_unique" 79 | } 80 | ], 81 | "license_id": "mf_tortuga" 82 | }, 83 | { 84 | "id": "wm_shock_wreath", 85 | "name": "Shock Wreath", 86 | "sp": 2, 87 | "allowed_types": ["Melee"], 88 | "source": "SSC", 89 | "license": "Metalmark", 90 | "license_level": 3, 91 | "effect": "In addition to its usual damage, 1/round you may activate the wreath as a quick action when you hit a character with the weapon this mod is applied to to cause it to take 1d6 burn. If it already is suffering from burn, it can additionally only draw line of sight to adjacent spaces until the end of its next turn.", 92 | "actions": [ 93 | { 94 | "name": "Activate Shock Wreath", 95 | "activation": "Quick", 96 | "detail": "1/round you may activate your equipped Shock Wreath as a quick action when you hit a character with the weapon it is applied to to cause it to take 1d6 burn. If it already is suffering from burn, it can additionally only draw line of sight to adjacent spaces until the end of its next turn." 97 | } 98 | ], 99 | "description": "A post-fab modification popular among melee combat specialists, Shock Wreathes integrate a bundle of conductive filaments within the blade, point, tip, or surface of a close combat weapon. Paired with a power source – typically in the hilt or lower half of a weapon, but sometimes external – Shock Wreathes give kinetic weapons a thermal edge and a distinctive visual marker: fine lines of white-hot light like filigree, shrouding the modified weapon in shimmering heat.", 100 | "tags": [ 101 | { 102 | "id": "tg_unique" 103 | } 104 | ], 105 | "license_id": "mf_metalmark" 106 | }, 107 | { 108 | "id": "wm_stabilizer_mod", 109 | "name": "Stabilizer Mod", 110 | "sp": 2, 111 | "allowed_types": ["Launcher", "Cannon"], 112 | "source": "SSC", 113 | "license": "Monarch", 114 | "license_level": 2, 115 | "effect": "the weapon this mod is applied to gains +5 range and the Ordnance tag.", 116 | "description": "Stabilizer mods enhance physical mounts and targeting software, ensuring weapons remain level, steady, and at an appropriate angle regardless of terrain or pilot maneuvers.", 117 | "added_range": [ 118 | { 119 | "type": "Range", 120 | "val": 5 121 | } 122 | ], 123 | "added_tags": [ 124 | { 125 | "id": "tg_ordnance" 126 | } 127 | ], 128 | "license_id": "mf_monarch" 129 | }, 130 | { 131 | "id": "wm_nanocomposite_adaptation", 132 | "name": "Nanocomposite Adaptation", 133 | "sp": 2, 134 | "allowed_types": ["Melee", "CQB", "Rifle", "Launcher", "Cannon", "Nexus"], 135 | "source": "HORUS", 136 | "license": "Balor", 137 | "license_level": 2, 138 | "effect": "the weapon this mod is applied to gains Smart and Seeking.", 139 | "description": "Nanocomposite weapons take aggressive drone swarms and condense them into individual rounds, a coherent beam, or the edge of a blade.
Adapted projectile weapons fire shaped CONSUME/HIVE rounds that shatter on impact, releasing their payload of autonomous nanite maniples. Once freed, the maniples begin eating away at surrounding tissue or superstructure. They proceed until burnout or total target consumption, whichever occurs first. In flight, the maniples are able to hive-link and make slight adjustments to the trajectory of their round, ensuring positive impact.
Coherent beam weapons transport maniples directly, while conventional melee weapons are replaced by analogs composed entirely of nanobots.", 140 | "added_tags": [ 141 | { 142 | "id": "tg_smart" 143 | }, 144 | { 145 | "id": "tg_seeking" 146 | } 147 | ], 148 | "license_id": "mf_balor" 149 | }, 150 | { 151 | "id": "wm_phase_ready_mod", 152 | "name": "Phase-Ready Mod", 153 | "sp": 2, 154 | "allowed_types": ["Melee", "CQB", "Rifle", "Launcher", "Cannon", "Nexus"], 155 | "source": "HA", 156 | "license": "Napoleon", 157 | "license_level": 2, 158 | "effect": "As long as you know the rough location of your target, the weapon this mod is applied to can attack through solid walls and obstructions, doesn’t require line of sight, and ignores all cover, but targets attacked this way count as Invisible.", 159 | "description": "As it was named following its first use during the civil hostilities on Luna de Oro, phase-ready ammunition is the “devil’s bullets”. Each round contains a nanoprocessor suite networked with its weapon of origin that calculates and translates the specific nature of that round’s superpositional relation with a projected future doppelgänger that manifests in the space immediately before its intended target. To put it simply, phase-ready rounds, when fired, exist in two places at once: exiting the barrel of the weapon they were fired from, and directly in front of the target, prior to impact. The prime round may never hit its target, but given it already exists at the moment of impact, the doppelgänger round will reliably reach its mark.", 160 | "license_id": "mf_napoleon" 161 | }, 162 | { 163 | "id": "wm_paracausal_mod", 164 | "name": "Paracausal Mod", 165 | "sp": 4, 166 | "allowed_types": ["Melee", "CQB", "Rifle", "Launcher", "Cannon", "Nexus"], 167 | "source": "HA", 168 | "license": "Saladin", 169 | "license_level": 3, 170 | "effect": "This weapon gains Overkill, and its damage can’t be reduced in any way, including by other effects and systems (such as Resistance, Armor, etc).", 171 | "description": "Paracausal weapons are a headache for military planners; their precise A–Z function is often obscured, though they consistently produce the same “Z” output per “A” input.
The first reports of unregulated paracausal weaponry occurred during the civil engagements on Tian Shen. System-local forces received sealed magazines with directions to be loaded and fired as normal, although inspection of the magazines’ contents was prohibited on grounds that it would “damage the payload”. Helmet and gun cam footage do not betray the anomalous effects of this ordnance, though after-action reports uncovered a seemingly minor, though incredibly odd fact: every single trooper outfitted with this paracausal ammunition scored a 100% positive impact rate.
Union has scheduled all unregulated paracausal weapons and ammunition for retrieval, and the bureau is currently investigating Harrison Armory for its role in the development of the technology. Despite this, paracausal ammunition is still in use, as shipments and codes continue to leak to interested parties.", 172 | "added_tags": [ 173 | { 174 | "id": "tg_overkill" 175 | } 176 | ], 177 | "license_id": "mf_saladin" 178 | } 179 | ] 180 | -------------------------------------------------------------------------------- /lib/reserves.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "reserve_skill", 4 | "name": "Skill Point", 5 | "type": "Bonus", 6 | "label": "Bonus", 7 | "description": "Add a Skill Point to gain or improve a skill, typically as part of the \"Get Focused\" Downtime Action.", 8 | "bonuses": [ 9 | { 10 | "id": "skill_point", 11 | "val": 1 12 | } 13 | ] 14 | }, 15 | { 16 | "id": "reserve_mechskill", 17 | "name": "Mech Skill Point", 18 | "type": "Bonus", 19 | "label": "Bonus", 20 | "description": "Add a Mech Skill Point to add to your Pilot's HULL, AGILITY, SYSTEMS, or ENGINEERING rating.", 21 | "bonuses": [ 22 | { 23 | "id": "mech_skill_point", 24 | "val": 1 25 | } 26 | ] 27 | }, 28 | { 29 | "id": "reserve_talent", 30 | "name": "Talent Point", 31 | "type": "Bonus", 32 | "label": "Bonus", 33 | "description": "Add a Talent Point to gain or improve a Pilot Talent.", 34 | "bonuses": [ 35 | { 36 | "id": "talent_point", 37 | "val": 1 38 | } 39 | ] 40 | }, 41 | { 42 | "id": "reserve_license", 43 | "name": "License Point", 44 | "type": "Bonus", 45 | "label": "Bonus", 46 | "description": "Add a License Point to advance or unlock a new License.", 47 | "bonuses": [ 48 | { 49 | "id": "license_point", 50 | "val": 1 51 | } 52 | ] 53 | }, 54 | { 55 | "id": "reserve_corebonus", 56 | "name": "Extra CORE Bonus", 57 | "type": "Bonus", 58 | "label": "Bonus", 59 | "description": "Add an additional CORE Bonus.", 60 | "bonuses": [ 61 | { 62 | "id": "cb_point", 63 | "val": 1 64 | } 65 | ] 66 | }, 67 | { 68 | "id": "reserve_access", 69 | "name": "Access", 70 | "type": "Resource", 71 | "label": "Resource", 72 | "description": "A keycard, invite, bribes or insider access to a particular location." 73 | }, 74 | { 75 | "id": "reserve_backing", 76 | "name": "Backing", 77 | "type": "Resource", 78 | "label": "Contact", 79 | "description": "Useful leverage through political support from a powerful figure." 80 | }, 81 | { 82 | "id": "reserve_supplies", 83 | "name": "Supplies", 84 | "type": "Resource", 85 | "label": "Resource", 86 | "description": "Gear allowing easy crossing of a hazardous or hostile area." 87 | }, 88 | { 89 | "id": "reserve_disguise", 90 | "name": "Disguise", 91 | "type": "Resource", 92 | "label": "Identity", 93 | "description": "An effective disguise or cover identity, allowing uncontested access to a location." 94 | }, 95 | { 96 | "id": "reserve_diversion", 97 | "name": "Diversion", 98 | "type": "Resource", 99 | "label": "Diversion", 100 | "description": "A distraction that provides time to take action without fear of consequence." 101 | }, 102 | { 103 | "id": "reserve_blackmail", 104 | "name": "Blackmail", 105 | "type": "Resource", 106 | "label": "Target", 107 | "description": "Blackmail materials or sensitive information concerning a particular person." 108 | }, 109 | { 110 | "id": "reserve_reputation", 111 | "name": "Reputation", 112 | "type": "Resource", 113 | "label": "Status", 114 | "description": "A good name in the mission area, prompting good first impressions with the locals." 115 | }, 116 | { 117 | "id": "reserve_safe_harbor", 118 | "name": "Safe Harbor", 119 | "type": "Resource", 120 | "label": "Location", 121 | "description": "Guaranteed safety for meeting, planning, or recuperating." 122 | }, 123 | { 124 | "id": "reserve_tracking", 125 | "name": "Tracking", 126 | "type": "Resource", 127 | "label": "Target", 128 | "description": "Details on the location of important objects or people." 129 | }, 130 | { 131 | "id": "reserve_knowledge", 132 | "name": "Knowledge", 133 | "type": "Resource", 134 | "label": "Subject", 135 | "description": "An understanding of local history, customs, culture, or etiquette." 136 | }, 137 | { 138 | "id": "reserve_ammo", 139 | "name": "Ammo", 140 | "type": "Mech", 141 | "label": "Ammo", 142 | "description": "Extra uses (+1 or +2) of a LIMITED weapon or system." 143 | }, 144 | { 145 | "id": "reserve_rented_gear", 146 | "name": "Rented gear", 147 | "type": "Mech", 148 | "label": "Gear", 149 | "description": "Temporary access to a new weapon or piece of mech gear." 150 | }, 151 | { 152 | "id": "reserve_extra_repairs", 153 | "name": "Extra repairs", 154 | "type": "Mech", 155 | "label": "Resource", 156 | "description": "Supplies that give a mech +2 REPAIR CAP.", 157 | "bonuses": [ 158 | { 159 | "id": "repcap", 160 | "val": 2 161 | } 162 | ] 163 | }, 164 | { 165 | "id": "reserve_core_battery", 166 | "name": "CORE battery", 167 | "type": "Mech", 168 | "label": "Battery", 169 | "description": "An extra battery that allows a second use of a mech’s CORE SYSTEM.", 170 | "bonuses": [ 171 | { 172 | "id": "core_power", 173 | "val": 2 174 | } 175 | ] 176 | }, 177 | { 178 | "id": "reserve_deployable_shield", 179 | "name": "Deployable Shield", 180 | "type": "Mech", 181 | "label": "Shield", 182 | "description": "A single-use deployable shield generator – a SIZE 1 deployable that grants soft cover to all friendly characters in a BURST 2 radius.", 183 | "deployables": [ 184 | { 185 | "name": "Deployable Shield (Reserve)", 186 | "type": "Deployable", 187 | "size": 1, 188 | "detail": "Grants soft cover to all friendly characters in a BURST 2 radius" 189 | } 190 | ] 191 | }, 192 | { 193 | "id": "reserve_redundant_repair", 194 | "name": "Redundant repair", 195 | "type": "Mech", 196 | "label": "Resource", 197 | "description": "The ability to STABILIZE as a free action once per mission.", 198 | "actions": [ 199 | { 200 | "name": "Redundant Repair", 201 | "activation": "Free", 202 | "detail": "STABILIZE as a free action." 203 | } 204 | ] 205 | }, 206 | { 207 | "id": "reserve_systems_reinforcement", 208 | "name": "Systems reinforcement", 209 | "type": "Mech", 210 | "label": "Resource", 211 | "description": "+1 ACCURACY to skill checks made with one skill – HULL, AGILITY, SYSTEMS or ENGINEERING.", 212 | "synergies": [ 213 | { 214 | "locations": ["hase"], 215 | "detail": "+1 ACCURACY to skill checks made with one skill – HULL, AGILITY, SYSTEMS or ENGINEERING." 216 | } 217 | ] 218 | }, 219 | { 220 | "id": "reserve_smart_ammo", 221 | "name": "Smart ammo", 222 | "type": "Mech", 223 | "label": "Ammo", 224 | "description": "All weapons of your choice can be fired as if they are SMART.", 225 | "synergies": [ 226 | { 227 | "locations": ["weapon"], 228 | "detail": "All weapons of your choice can be fired as if they are SMART" 229 | } 230 | ] 231 | }, 232 | { 233 | "id": "reserve_boosted_servos", 234 | "name": "Boosted servos", 235 | "type": "Mech", 236 | "label": "Resource", 237 | "description": "IMMUNITY to the SLOWED condition.", 238 | "synergies": [ 239 | { 240 | "locations": ["move"], 241 | "detail": "Your mech has IMMUNITY to the SLOWED condition." 242 | } 243 | ] 244 | }, 245 | { 246 | "id": "reserve_jump_jets", 247 | "name": "Jump jets", 248 | "type": "Mech", 249 | "label": "Resource", 250 | "description": "During this mission your mech can FLY when moving, but must end movement on land.", 251 | "synergies": [ 252 | { 253 | "locations": ["move"], 254 | "detail": "Your mech can FLY when moving, but must end movement on land." 255 | } 256 | ] 257 | }, 258 | { 259 | "id": "reserve_scouting", 260 | "name": "Scouting", 261 | "type": "Tactical", 262 | "label": "Location", 263 | "description": "Detailed information on the kinds of mechs and threats you will face on the mission, such as number, type, and statistics." 264 | }, 265 | { 266 | "id": "reserve_vehicle", 267 | "name": "Vehicle", 268 | "type": "Tactical", 269 | "label": "Designation", 270 | "description": "Use of a transport vehicle or starship (e.g. a TIER 1 NPC with the VEHICLE or SHIP template.)" 271 | }, 272 | { 273 | "id": "reserve_reinforcements", 274 | "name": "Reinforcements", 275 | "type": "Tactical", 276 | "label": "Designation", 277 | "description": "The ability to call in a friendly NPC mech of any Tier, once per mission." 278 | }, 279 | { 280 | "id": "reserve_environmental_shielding", 281 | "name": "Environmental shielding", 282 | "type": "Tactical", 283 | "label": "Environment", 284 | "description": "Equipment that allows you to ignore a particular battlefield hazard or dangerous terrain, such as extreme heat or cold." 285 | }, 286 | { 287 | "id": "reserve_accuracy", 288 | "name": "Accuracy", 289 | "type": "Tactical", 290 | "label": "Skill/Action", 291 | "description": "Training or enhancement that provides +1 ACCURACY to a particular mech skill or action for the duration of this mission.", 292 | "synergies": [ 293 | { 294 | "locations": ["other"], 295 | "detail": "+1 ACCURACY to a particular mech skill or action for the duration of this mission." 296 | } 297 | ] 298 | }, 299 | { 300 | "id": "reserve_bombardment", 301 | "name": "Bombardment", 302 | "type": "Tactical", 303 | "label": "Resource", 304 | "description": "The ability to call in artillery or orbital bombardment once during mech combat (full action, RANGE 30 within line of sight, BLAST 2, 3d6 explosive damage).", 305 | "actions": [ 306 | { 307 | "name": "Bombardment", 308 | "activation": "Full", 309 | "detail": "Call in artillery or orbital bombardment:
RANGE 30 within line of sight, BLAST 2, 3d6 explosive damage", 310 | "range": [ 311 | { 312 | "type": "Range", 313 | "val": 30 314 | }, 315 | { 316 | "type": "Blast", 317 | "val": 2 318 | } 319 | ], 320 | "damage": [ 321 | { 322 | "type": "Explosive", 323 | "val": "3d6" 324 | } 325 | ] 326 | } 327 | ] 328 | }, 329 | { 330 | "id": "reserve_extended_harness", 331 | "name": "Extended Harness", 332 | "type": "Tactical", 333 | "label": "Resource", 334 | "description": "A custom harness that allows you to carry an extra pilot weapon and two extra pieces of pilot gear for the duration of this mission.", 335 | "bonuses": [ 336 | { 337 | "id": "pilot_gear_slots", 338 | "val": 2 339 | }, 340 | { 341 | "id": "pilot_weapon_slots", 342 | "val": 1 343 | } 344 | ] 345 | }, 346 | { 347 | "id": "reserve_ambush", 348 | "name": "Ambush", 349 | "type": "Tactical", 350 | "label": "Location", 351 | "description": "Intel that allows you to choose exactly where your next battle will take place, including the layout of terrain and cover." 352 | }, 353 | { 354 | "id": "reserve_orbital_drop", 355 | "name": "Orbital Drop", 356 | "type": "Tactical", 357 | "label": "Location", 358 | "description": "The ability to start the mission by dropping from orbit into a heavily fortified or hard to reach location." 359 | }, 360 | { 361 | "id": "reserve_nhp_assistant", 362 | "name": "NHP Assistant", 363 | "type": "Tactical", 364 | "label": "Designation", 365 | "description": "A non-human person (NHP) – an advanced artificial intelligence – controlled by the GM, that can give you advice on the current situation." 366 | } 367 | ] 368 | -------------------------------------------------------------------------------- /lib/manufacturers.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "GMS", 4 | "name": "GENERAL MASSIVE SYSTEMS", 5 | "logo": "gms", 6 | "light": "#991E2A", 7 | "dark": "#db1a2d", 8 | "quote": "From Cradle to the stars, GMS:
assured quality, universal licensing, total coverage.
", 9 | "description": "General Massive Systems – GMS for short – is the galactic-standard supplier of just about everything. GMS developed the first mechs from up-armored hardsuits in 4500u, on Ras Shamra, the world that would become the capital of Harrison Armory; now, GMS’s flagship Everest line of mechs sets the galactic standard. Reliable, sturdy, solidly built, and available in countless localized patterns, there are so many variants on the Everest pattern that it has become totally ubiquitous and faded into the background. With universally compatible components, full radiation and environmental shielding, and tens of thousands of pre-loaded languages, a pilot in their Everest has everything they need to get the job done.

GMS is one of the oldest fabricators in the galaxy, first getting its start in the early days of the colonization rush. The manufacturer hails from Cradle, the home of Union – and humanity – and thus its designs reflect the sensibilities of the first pioneers to seek the stars. Today, GMS products are available anywhere there is access to the omninet. These products, whether consumer, specialty, or military, are widely viewed as the galactic minimum of quality: not particularly luxurious, but unsurpassed in no-nonsense design, reliability, and ease of use. Where GMS is available, anything less is unacceptable.

All GMS frames, gear, core bonuses, and licenses are available to all pilots, starting from license level 0. The default GMS mech is the Everest, a standardized all-rounder Frame." 10 | }, 11 | { 12 | "id": "IPS-N", 13 | "name": "IPS-NORTHSTAR", 14 | "logo": "ips-n", 15 | "light": "#0c4d99", 16 | "dark": "#1c9ae8", 17 | "quote": "Your friend in an unfriendly sea.", 18 | "description": "IPS-Northstar (IPS-N) was created from the merger of two civilian interstellar freight and transportation companies, Interplanetary Shipping and Northstar. The resulting firm, IPS-N is a titanic entity – one of the first corpro-states – with a virtual monopoly over interplanetary and interstellar shipping. Other firms exist, but their gross fleet strength is but a shadow of IPS-N’s fleets of tankers, haulers, freighters, and intergate/interstellar liners. Wherever goods and raw materials need to be moved, you can bet a crew in IPS-N uniforms will be there.

The story of IPS-N is inseparable from the history of interstellar piracy. Whatever dangers the galaxy might hold, piracy remains the greatest threat to interstellar shipping lines, costing fleet managers and states hundreds of thousands in manna and trillions more in local currencies. Tremendous capital losses, schedule delays, losses of life, and false-scarcity famines convinced the myriad unions, conglomerates, and cartels of the need to comprehensively safeguard civilian shipping. A process of agglomeration and consolidation that lasted for years eventually gave birth to two major firms, Interplanetary Shipping and Northstar. They finally merged into a single corpro-state in the waning days of Union’s first government, the First Committee.

Following the merger, IPS-N began the work of phasing out its fleets of late-model GMS mechs in favor of new proprietary designs. The corporation now sports a range of versatile, durable, and modular mechs that place equal priority on weapons and engineering systems. IPS-N mechs are a good choice for pilots who want a tough chassis that’s built for close quarters and melee combat situations, such as when the possibility of breaching a ship hull is on the table. IPS-N chassis are sturdy, meant to take as much damage as they deal – and then some.

IPS-N is closely associated with the Albatross, an anti-piracy and peacekeeping force known across the galaxy for its long history of humanitarian interventions. IPS-N supports the Albatross materially, providing it with chassis, ships, cutting-edge technology, and temporal rehabilitation worlds for its pilots and crews to retire in relative peace. The relationship is mutually beneficial; IPS-N makes a point to emphasize its close relationship to the Albatross in marketing campaigns and PR materials." 19 | }, 20 | { 21 | "id": "SSC", 22 | "name": "SMITH-SHIMANO CORPRO", 23 | "logo": "ssc", 24 | "light": "#b57e07", 25 | "dark": "#d1920a", 26 | "quote": "You only need one.", 27 | "description": "Smith-Shimano Corpro (SSC) is the second-oldest corporation in the galaxy, preceded only by GMS. Founded by Cartwright Smith and Shimano Hideyoshi, SSC’s emphasis on private stellar and interstellar travel, the fantastic wealth of its founders, and favorable contracts within Union’s First Committee, Smith-Shimano quickly became an early leader in the race to develop sublight, downwell, and EVA vehicles. SSC grew throughout Union’s First Expansion Period, managing the majority of all private and corporate contracts’ design, outfitting, and clinical needs. Over time, the corporation diversified to specialize in bio-bespoke, long-range scout suits – personalized hard suits, for those with the manna to afford them.

The necessities of deep-space exploration require humans to spend long periods in hostile environments; pre-Deimos Event, SSC sought to address this challenge by breaking down the barriers between human and machine, creating a symbiotic relationship between hardsuit and wearer. Following the Deimos Event, however, SSC wound down most of its human/machine integration research in accordance with the First Contact Accords, choosing instead to focus on perfecting the first machine: the human body itself.

Smith-Shimano Frames reflect the corpro-state’s pedigree and its agile, adaptable business model. They are built not to take hits – though they’re resilient enough – but to avoid them entirely. SSC designs emphasize mobility and sleek profiles, precisely tuned to land not the hardest hit, but the most accurate. Economy, precision, and singularity is the name of the game for this manufacturer: why fire a thousand rounds when one can be just as effective?

The mechs developed by SSC are known for their license exclusivity, appealing silhouette, and exacting design. Their LUX-Iconic line of chassis are coveted, single-designer models, each unique to the pilot with the requisite licenses and access to afford them; as such, unlike other manufacturers, SSC frames tend to be longer-lasting in service, with more emphasis on retrofitting and repair than recycling and reproduction." 28 | }, 29 | { 30 | "id": "HORUS", 31 | "name": "HORUS", 32 | "logo": "horus", 33 | "light": "#046e3c", 34 | "dark": "#00a256", 35 | "quote": "[CONGRATULATIONS, PILOT.
\t\tYOU HAVE BEEN CHOSEN.
\tACCESS IS YOURS,
\t AS LONG AS YOU CAN KEEP IT.]
", 36 | "description": "HORUS is an oddity among the various pan-galactic corpro-states, outfitters, and manufacturers. Operating in a gray legal state between harmless omninet communes, open-source fabrication collaboratives, black-market printers, and deeper, more esoteric collectives, HORUS is counted among the Big Four not due to its influence on galactic politics, but because of its ubiquitous coverage: one can be certain that wherever there is omninet, HORUS is either there or soon to follow. Rumors abound as to the manufacturer’s nature – some say it’s the dream of an unshackled NHP or a hacker collective dedicated to open-source manufacturing (at its most mundane levels); others insist that it’s the proving ground for one of the corpro-states’ R&D departments, or the realspace projection of an alien entity’s ongoing wish.

The group’s history is as mercurial as its present. Union records dating back to the First Committee Period indicate contact with groups, individuals, and state actors claiming to be (or identified as) agents of HORUS, itself described as an individual; a terrorist group; a philosophy church, or political party; an activist group; and many other forms of association. Contemporary reports indicate a subtle shift toward a more cohesive organizing structure – certainly accelerated following the Deimos Event – that points to some form of organizational mission and internal culture at levels far beyond the civilian and criminal levels of engagement with grayspace HORUS fronts.

This more complex level of organization is reflected in HORUS’s mechs. Unlike the collective’s broad, civilian-facing projects – omnicode, hacks, data, and open-sourcing of otherwise restricted information, services, and platforms – HORUS mechs and pattern groups are limited in the extreme, usually first appearing as endemic manifestations of print anomalies in conflict zones across the galaxy. Save for rare situations (heavily documented by the Union Intelligence Bureau), these outbreaks seem to take place independent and ignorant of all factions and actors, and have one goal: manifest, then proliferate.

HORUS’s oldest frames are built according to standardized forms, as with most other mechs. The collective’s more recent chassis are stranger. Union’s Universal Threat Assessment Manual (UTAM) classifies them not according to models but according to “pattern groups” (or PGs). Each pattern group is a list of specifications that describe a particular combination of experimental, unregulated, and esoteric paracausal weapons and technology that, when taken together, resemble something like a distinct product line or frame. However, it is important to note: the pattern-group classification system originated with Union analysts, not HORUS. Because there is no official manufacturer-entity or (known) central organizing body, the “proper” designations and design intentions of most HORUS mechs are all but unknown. Thus, the UTAM pattern-group designations.

HORUS “licenses” are highly coveted, and are distributed according to no discernible requirements; scholars and specialists who study HORUS generally assume that the collective’s licenses – that is, access to deep-level designs, specifications, and print patterns – are available only in limited quantities, likely becoming available after the corporeal death of their previous holders.

HORUS mechs universally field mysterious, unregulated, greyspace technologies – perfect for pilots seeking a technological edge that few other organizations can provide. They seem to focus on crowd control, individual unit management, and terribly powerful systems.

Be aware that by seeking out HORUS technology, you may find yourself wrapped up in mysteries with no end, and dangers far beyond your deepest fears." 37 | }, 38 | { 39 | "id": "HA", 40 | "name": "HARRISON ARMORY", 41 | "logo": "ha", 42 | "light": "#6e4373", 43 | "dark": "#a15ea8", 44 | "quote": "Superior by design.", 45 | "description": "Harrison Armory enjoys a galaxy-wide reputation for the quality of its weapons and defensive systems. The corpro-state previously specialized in ordnance and other armaments, making it reliant on competitors’ frames as mounts for its deluxe equipment; however, since the overthrow of Union’s Second Committee, Harrison Armory has broadened its product line to include an extensive range of peerless frontline frames. On the wave of this new success, the Armory has transformed into a burgeoning, imperial corpro-state, a mighty galactic power that directly administers a large number of Core worlds, orbitals, and colonial prospects – this is the Purview; all lands under the Armory’s command.

By necessity of Harrison Armory’s imperial aims, its frames tend to be sturdy. More than that, Armory mechs are built to ensure overwhelming performance, embodying dominance and power in their brutal, geometric aesthetics. This fulfillment of this desire requires tremendous power, skill, and material strength.

Harrison Armory licenses are perfect for pilots looking to field durable frontline mechs equipped with the most advanced weapons technology available." 46 | } 47 | ] 48 | -------------------------------------------------------------------------------- /lib/skills.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "sk_act_unseen_or_unheard", 4 | "name": "Act Unseen or Unheard", 5 | "description": "Get somewhere or do something without detection.", 6 | "detail": "Get somewhere or do something without being detected, but not necessarily with speed. Hide, sneak, or move quietly. Infiltrate a facility while avoiding security, patrols, or cameras. Perform a quick action or maneuver without being seen or heard, such as picking a pocket, unholstering your gun, or cheating at cards. Wear a disguise.", 7 | "family": "dex" 8 | }, 9 | { 10 | "id": "sk_apply_fists_to_faces", 11 | "name": "Apply Fists to Faces", 12 | "description": "Fight in open, brutal unarmed combat.", 13 | "detail": "Punch someone in the face, or alternately fight in open, brutal unarmed combat, whether it’s a fist fight, martial arts duel, or a huge brawl. This is never subtle, never clean, and probably causes a lot of noise.", 14 | "family": "str" 15 | }, 16 | { 17 | "id": "sk_assault", 18 | "name": "Assault", 19 | "description": "Take part in direct and overt combat.", 20 | "detail": "Take part in direct and overt combat: fighting your way through a building packed with hostile mercenaries, trading shots between rain-slick trenches, fighting in chaotic microgravity as part of a boarding action, or engaging the enemy in the smoking urban rubble of a city under orbital bombardment — When you assault, you’re always assaulting something (a position, a rival pilot, an enemy force, a group of guards), and it’s always loud, open, direct action.", 21 | "family": "str" 22 | }, 23 | { 24 | "id": "sk_blow_something_up", 25 | "name": "Blow Something Up", 26 | "description": "Use explosives to totally wreck something or turn it into an enormous fireball.", 27 | "detail": "Use explosives (improvised or otherwise), weapons, or maybe just good old fashion brawn to totally wreck something or turn it into an enormous fireball (maybe a wall, sensor array, outpost, reactor core - the good stuff). Probably not to be used against people unless they’re incidentally in the way.", 28 | "family": "str" 29 | }, 30 | { 31 | "id": "sk_charm", 32 | "name": "Charm", 33 | "description": "Convince a receptive audience or use leverage (money, power, personal benefit) to get your way.", 34 | "detail": "To charm, you need a receptive audience, or some kind of promise of leverage (money, power, personal benefit, etc). You can use it when trying to smooth talk your way past guards, get someone on your side, sway a potential benefactor, talk someone down, perform diplomacy between two parties, or blatantly lie to someone. You can also use it when trying to impersonate someone. Charm won’t work on people that aren’t receptive (such as soldiers you are in a gunfight with) or that you don’t have leverage over (promises of safety, money, power, recompense, help, etc). These promises don’t necessarily have to be true but they have to have some weight with your target.", 35 | "family": "cha" 36 | }, 37 | { 38 | "id": "sk_get_a_hold_of_something", 39 | "name": "Get a Hold of Something", 40 | "description": "Acquire temporary or permanent allies, assets, or connections through wealth or social influence.", 41 | "detail": "Acquire useful allies, assets, or connections through wealth or social influence. This could be permanent (buying it or receiving it) or temporary (renting or borrowing help or supplies, etc), and might be harder or easier depending on how much you want to use it. This can’t be used for something that’s normally gated by license level (like mech parts) but could be used for aid, supplies, information, food materials, soldiers, or anything else that has more narrative impact. Typically this is acquired by buying it from a market or requisitioning it from a parent organization.", 42 | "family": "cha" 43 | }, 44 | { 45 | "id": "sk_get_somewhere_quickly", 46 | "name": "Get Somewhere Quickly", 47 | "description": "Get somewhere quickly and without complications.", 48 | "detail": "Get somewhere without complications and with speed, but not necessarily stealth. Climb, swim, or perform acrobatic maneuvers in an attempt to reach a destination faster than the ‘safe’ way. Fall safely from a great height. Move gracefully in zero-g. Chase or flee, outrun, or out pace a target. Get somewhere faster than anyone else. You can also use this when you want to drive or pilot a vehicle.", 49 | "family": "dex" 50 | }, 51 | { 52 | "id": "sk_hack_or_fix", 53 | "name": "Hack or Fix", 54 | "description": "Repair a device or faulty system; alternatively, hack it wide open, or totally wreck, disable or sabotage it.", 55 | "detail": "Repair a device or faulty system. Alternately, hack it wide open, or totally wreck, disable or sabotage it. You can use this for hacking or safeguarding electronic systems, such as electronic door locks, computer systems, omninet webs, or NHP coffins.", 56 | "family": "int" 57 | }, 58 | { 59 | "id": "sk_invent_or_create", 60 | "name": "Invent or Create", 61 | "description": "Invent new devices, tools, or approaches to problems.", 62 | "detail": "Generally speaking, you need tools and supplies to invent or create something successfully. Use this with many downtime actions to work on projects. You can also use it in the spur of the moment to invent new devices, tools, or approaches to something (improvised explosives, gear, disguises, or some similar).", 63 | "family": "int" 64 | }, 65 | { 66 | "id": "sk_investigate", 67 | "name": "Investigate", 68 | "description": "Research a subject, or study something in great detail.", 69 | "detail": "Research a subject, or look at something in great detail. If you can’t find information directly, you learn how you can get access to that information. Learn about a subject of historical relevance, or become well-read on a subject. Investigate a mystery or solve a puzzle. Locate a person or object through research or investigation.", 70 | "family": "int" 71 | }, 72 | { 73 | "id": "sk_lead_or_inspire", 74 | "name": "Lead or Inspire", 75 | "description": "Give an inspiring speech, or motivate a group of people into action.", 76 | "detail": "Give an inspiring speech, or motivate a group of people into action. Administer or run an organization efficiently or effectively, such as a company, a ship’s crew, a group of colonists or a mining venture. Effectively command a platoon of soldiers in battle, or (perhaps) an entire army.", 77 | "family": "cha" 78 | }, 79 | { 80 | "id": "sk_patch", 81 | "name": "Patch", 82 | "description": "Apply medical knowledge to medicate or diagnose.", 83 | "detail": "Apply your medical knowledge to administer medication, bandage a wound, staunch bleeding, suture, cauterize, neutralize poison, or resuscitate. Alternately, you could use it to diagnose or study disease, pathogens, or illness.", 84 | "family": "int" 85 | }, 86 | { 87 | "id": "sk_pull_rank", 88 | "name": "Pull Rank", 89 | "description": "Get information, resources, or aid from a subordinate.", 90 | "detail": "Pull rank on a subordinate, getting information, resources, or aid from them, even unwillingly. You can use this on anyone your social status (noble, celebrity, etc) or military rank would have weight with. Failing this might be risky and could be seen as abusive. You typically can’t pull rank on hostile targets. You could also use this to pretend to have a rank you don’t have, but it’s definitely risky.", 91 | "family": "cha" 92 | }, 93 | { 94 | "id": "sk_read_a_situation", 95 | "name": "Read a Situation", 96 | "description": "Look for subtext, motives, or threats in a situation or person.", 97 | "detail": "Look for subtext, motive, or threat in a situation or person, often social situations. Use your intuition to learn someone’s motivation, learn who is really in charge, or who is about to do something rash or stupid. Get a gut feeling about a situation or person. Sense if someone is lying to you.", 98 | "family": "int" 99 | }, 100 | { 101 | "id": "sk_show_off", 102 | "name": "Show Off", 103 | "description": "Do something flashy, cool, or impressive, usually – but not exclusively – with your weapon.", 104 | "detail": "Do something flashy, cool, or impressive, usually (but not exclusively) with your weapon, like shooting a very small or rapidly moving target, shooting someone’s hat off or their weapon out of their hand, knocking someone out by throwing a gun at them, performing an acrobatic flourish with a sword, throwing a spear to pin a fleeing target to the ground, and so on.", 105 | "family": "dex" 106 | }, 107 | { 108 | "id": "sk_spot", 109 | "name": "Spot", 110 | "description": "Spot details, objects, or people that are hidden or difficult to make out.", 111 | "detail": "Spot hidden or difficult to make out details, objects, or people. Spot ambushes, hidden compartments, or disguised individuals. Spy on a target from a distance, or make out the details, shape, and number of objects, vehicles, mechs, or people clearly at a distance. Track people or vehicles.", 112 | "family": "int" 113 | }, 114 | { 115 | "id": "sk_stay_cool", 116 | "name": "Stay Cool", 117 | "description": "Perform a task that requires concentration, dexterity, speed, or precision under pressure.", 118 | "detail": "Do something that requires concentration, speed, or intense precision under pressure, like picking a lock as your squad trades fire with encroaching guards, avoiding a hostile memetic code while hacking a secure console, carefully disarming an explosive, or unjamming a gun under fire. If you’ve got to do something complicated in a high stress situation without messing up (and possibly not even breaking a sweat) this is the action to use.", 119 | "family": "dex" 120 | }, 121 | { 122 | "id": "sk_survive", 123 | "name": "Survive", 124 | "description": "Persevere through harsh, hostile, or unforgiving environments.", 125 | "detail": "Persevere through harsh, hostile, or unforgiving environments, such as the vacuum of space, frozen tundra, a pirate enclave, a crime-ridden colony, untamed wilderness, or scorching desert. You most often use survive when you want to take a journey through wilderness environments, navigate, or avoid natural hazards such as carnivorous wildlife, rockfalls, thin ice, or lava fields. Alternately you could use it to avoid man-made hazards, such as navigating a city safely, or avoiding dangerous areas of a space station. You could also use it when testing personal endurance, such as shaking off poison or alcohol.", 126 | "family": "str" 127 | }, 128 | { 129 | "id": "sk_take_control", 130 | "name": "Take Control", 131 | "description": "Use force, violence, presence of will, or direct action to take control of something.", 132 | "detail": "Use force, violence, presence of will, or direct action to take control of something. This is often something concrete, like an object someone is holding. You could take control of someone’s gun or a keycard they have on their person. You can additionally can take control of a situation to force those present to listen, calm down, stop moving, or stop what they’re doing (perhaps for their benefit), though you can’t necessarily force them to do anything further without threatening them. Taking control is never subtle.", 133 | "family": "str" 134 | }, 135 | { 136 | "id": "sk_take_someone_out", 137 | "name": "Take Someone Out", 138 | "description": "Kill or disable someone quickly and quietly.", 139 | "detail": "Kill or disable someone quickly and quietly, from up close and personal or from a distance, probably before they even notice. This is probably a single person but could be two people relatively close together (any more is sort of stretching it and definitely risky). If you’re looking down a sniper scope at a target, preparing to nerve pinch a guard to knock them out instantly, quick-drawing during a gun duel, or dropping from a ceiling to slit a throat, this is the action to use.", 140 | "family": "dex" 141 | }, 142 | { 143 | "id": "sk_threaten", 144 | "name": "Threaten", 145 | "description": "Use force or threats to make someone do what you want.", 146 | "detail": "Use force or threats of force to get someone to do what you want them to do. Name what you want someone to do and what you’re going to do to them if they don’t listen to you. This could also be blackmail, leverage, or something similarly nasty. Threatening someone can be very high risk but very effective if successful - either way there’s likely no repairing the relationship afterwards. If you threaten someone unsuccessfully, your threats have no further effect on them unless you change something about the situation (as with all other skill checks).", 147 | "family": "str" 148 | }, 149 | { 150 | "id": "sk_word_on_the_street", 151 | "name": "Word on the Street", 152 | "description": "Get gossip, news, or hearsay from the streets, or from a particular social scene.", 153 | "detail": "Get gossip, news, or hearsay from the streets. What you get depends on what ‘streets’ you are getting word from (high society, low society, hearsay, military chatter, etc). This probably takes a lot less time than investigating something in detail, but the information might be more qualitative or colored by opinion (sometimes that might be useful). You can always learn where the information came from or who to go to next.", 154 | "family": "cha" 155 | } 156 | ] -------------------------------------------------------------------------------- /lib/glossary.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Armor", 4 | "description": "A mech’s ARMOR reduces all incoming damage by that amount, excluding some special types of damage. ARMOR mostly depends on your mech’s FRAME, and never goes above four." 5 | }, 6 | { 7 | "name": "System Points", 8 | "description": "Mech FRAMES also have a set number of SYSTEM POINTS (SP). SP can be spent to add extra systems to your mech, and some heavier weapons require both mounts and SP. You cannot add systems to your mech that would cause you to exceed your available SP. Your pilot’s GRIT, equal to half their LL, is added to your total SP, and you gain an additional SP for every two points of SYSTEMS." 9 | }, 10 | { 11 | "name": "Bonus Damage", 12 | "description": "Extra damage – kinetic, energy or explosive– that is added onto melee or ranged attacks. Attacks that target more than one character only deal half bonus damage." 13 | }, 14 | { 15 | "name": "Character", 16 | "description": "A player character (PC), non-player character, (NPC), or any other entity capable of acting (or reacting) independently, such as DRONES." 17 | }, 18 | { 19 | "name": "Damage", 20 | "description": "Damage taken is subtracted from HP, and is either kinetic, explosive, energy, or burn." 21 | }, 22 | { 23 | "name": "E-Defense", 24 | "description": "E-DEFENSE is how hard it is for electronic and guided weapons and systems to hit you." 25 | }, 26 | { 27 | "name": "Evasion", 28 | "description": "EVASION is how hard it is for ranged and melee attacks to hit you." 29 | }, 30 | { 31 | "name": "GRIT", 32 | "description": "Half of a character’s LL (rounded up), representing their experience in combat. GRIT provides bonuses to some rolls and traits." 33 | }, 34 | { 35 | "name": "Heat", 36 | "description": "Heat taken by a target represents harm to internal systems and reactor shielding. It fills in HEAT CAP. Heat ignores ARMOR, and doesn't count as damage." 37 | }, 38 | { 39 | "name": "Heat Capacity", 40 | "description": "Your mech can take heat from tech attacks and some of its own systems. If it takes more heat than its HEAT CAP, it overheats. Mechs also have STRESS, which is similar to STRUCTURE – when they exceed their HEAT CAP, they take 1 STRESS and clear all heat. When they lose STRESS like this, mechs have to make a special stress damage check and receive a consequence based on the roll. Most mechs have 4 STRESS, and are destroyed when they reach 0 STRESS.

If a character without a HEAT CAP would take heat, they instead take an equivalent amount of energy damage." 41 | }, 42 | { 43 | "name": "HP", 44 | "description": "The amount of damage a pilot can receive before going DOWN AND OUT, and the amount of damage a mech can receive before it takes structure damage. When Mechs reach 0 HP, they take 1 structure damage and their HP resets. When they lose STRUCTURE like this, mechs have to make a special structure damage check and receive a consequence based on the roll. Most mechs have 4 STRUCTURE and are destroyed when they reach 0 STRUCTURE." 45 | }, 46 | { 47 | "name": "Immunity", 48 | "description": "Characters with IMMUNITY ignore all damage and effects from whatever they are immune to." 49 | }, 50 | { 51 | "name": "Range", 52 | "description": "The maximum range at which a weapon can be used for ranged attacks, measured from the attacking character." 53 | }, 54 | { 55 | "name": "Repair Capacity", 56 | "description": "REPAIRS are a kind of currency that you can use to heal and repair your mech. If your mech runs out of REPAIRS, you can no longer regain HP or fix damaged systems in the field." 57 | }, 58 | { 59 | "name": "Resistance", 60 | "description": "Characters with RESISTANCE reduce damage, heat, or a type of damage, by half, after ARMOR has been applied. RESISTANCE to the same type of damage does not stack." 61 | }, 62 | { 63 | "name": "Save Target", 64 | "description": "When you force another character to make a save, they must match or beat your mech’s SAVE TARGET or take consequences." 65 | }, 66 | { 67 | "name": "Stress", 68 | "description": "All PC mechs (and some NPCs) have a certain amount of STRESS – generally 4 STRESS for PCs. This is the amount of stress damage they can take before they suffer a reactor meltdown. When mechs exceed their HEAT CAP, they take 1 stress damage and make an overheating check." 69 | }, 70 | { 71 | "name": "Structure", 72 | "description": "All PC mechs (and some NPCs) have a certain amount of STRUCTURE – generally 4 STRUCTURE for PCs. This is the amount of structure damage they can take before they are destroyed. When mechs reach 0 HP, they take 1 structure damage and make a structure check." 73 | }, 74 | { 75 | "name": "Sensors", 76 | "description": "Your mech’s SENSORS is the maximum distance (in spaces) over which a mech can detect enemies, use tech systems, and make tech attacks. If a character is within your SENSORS and isn’t hiding, you know they’re there – even if you can’t directly see them." 77 | }, 78 | { 79 | "name": "Size", 80 | "description": "All mechs, characters, and objects on the battlefield have a SIZE that describes how large they are, in grid spaces, on each side (rounded up to 1 if smaller, so a SIZE 1/2 and SIZE 1 character occupy the same space). SIZE is an abstract measurement – it doesn’t describe a precise height and width in feet, but the space a character controls around them. Humans and the smallest mechs are SIZE 1/2. Most mechs are SIZE 1, but some are as large as SIZE 3." 81 | }, 82 | { 83 | "name": "Speed", 84 | "description": "Your mech’s SPEED determines how far you can move on your turn, in spaces, when you make a standard move or BOOST." 85 | }, 86 | { 87 | "name": "Tech Attack", 88 | "description": "You add your mech’s TECH ATTACK as a bonus instead of GRIT when you conduct electronic warfare" 89 | }, 90 | { 91 | "name": "Threat", 92 | "description": "The maximum range at which melee and overwatch attacks can be made with certain weapons, measured from the attacking character. All weapons have THREAT 1 unless specified otherwise." 93 | }, 94 | { 95 | "name": "Line", 96 | "description": "Equipment with a LINE attack pattern affects all targets within a straight line, X spaces long. A separate attack roll is made for each target, but damage is only rolled once and bonus damage is halved if there are multiple characters affected. For any ability or effect calling for you to choose a target or targets within RANGE, this equipment can choose any target that could be hit by its pattern.

Additionally, some LINE, CONE, BURST, and BLAST attacks list a RANGE. In these cases, the attack’s origin point can be drawn from a point within the range specified and line of sight. For example, an attack with Line 5 and Range 10 would affect a LINE 5 area starting from any point within RANGE 10." 97 | }, 98 | { 99 | "name": "Cone", 100 | "description": "Equipment with a CONE attack pattern affects characters within a cone X spaces long and X spaces wide at its furthest point. The cone begins at one space wide. A separate attack roll is made for each target, but damage is only rolled once and bonus damage is halved if there are multiple characters affected. For any ability or effect calling for you to choose a target or targets within RANGE, this equipment can choose any target that could be hit by its pattern.

Additionally, some LINE, CONE, BURST, and BLAST attacks list a RANGE. In these cases, the attack’s origin point can be drawn from a point within the range specified and line of sight. For example, an attack with Cone 3 and Range 10 would affect a CONE 3 area starting from any point within RANGE 10. " 101 | }, 102 | { 103 | "name": "Blast", 104 | "description": "Equipment with a BLAST attack pattern affects characters within a radius of X spaces, drawn from a point within RANGE and line of sight. Cover and line of sight for the attacks are calculated based on the center of the blast, rather than the position of the attacker. A separate attack roll is made for each target, but damage is only rolled once and bonus damage is halved if there are multiple characters affected. For any ability or effect calling for you to choose a target or targets within RANGE, this equipment can choose any target that could be hit by its pattern.

Additionally, some LINE, CONE, BURST, and BLAST attacks list a RANGE. In these cases, the attack’s origin point can be drawn from a point within the range specified and line of sight. For example, an attack with Blast 3 and Range 10 would affect a BLAST 3 area starting from any point within RANGE 10." 105 | }, 106 | { 107 | "name": "Burst", 108 | "description": "Equipment with a BURST attack pattern affects characters within a radius of X spaces, centered on and including the space occupied by the user (or target). If the Burst is an attack, the user or target is not affected by the attack unless specified. Cover and line of sight are calculated from the character. If a BURST effect is ongoing, it moves with the character at its center. A separate attack roll is made for each target, but damage is only rolled once and bonus damage is halved if there are multiple characters affected. For any ability or effect calling for you to choose a target or targets within RANGE, this equipment can choose any target that could be hit by its pattern.

Additionally, some LINE, CONE, BURST, and Blast attacks list a RANGE. In these cases, the attack’s origin point can be drawn from a point within the range specified and line of sight. For example, an attack with Burst 2 and Range 10 would affect a BURST 2 area starting from any point within RANGE 10." 109 | }, 110 | { 111 | "name": "Involuntary Movement", 112 | "description": "When characters are pushed, pulled, or knocked in certain directions, it is called involuntary movement. Involuntary movement forces the affected character to move in a straight line, in a specified direction. When moving involuntarily, mechs do not provoke reactions or engagement unless specified otherwise but are still blocked by obstructions." 113 | }, 114 | { 115 | "name": "Difficult Terrain", 116 | "description": "All movement through difficult terrain is at half speed – each space of difficult terrain they move into is equivalent to two spaces of movement." 117 | }, 118 | { 119 | "name": "Dangerous Terrain", 120 | "description": "When characters end their turn in dangerous terrain or move into it for the first time in a round, they must make an ENGINEERING check. On a failure, they take 5 damage – kinetic, energy, explosive, or burn, depending on the hazard. Each character only needs to make one such check per round." 121 | }, 122 | { 123 | "name": "Lifting and Dragging", 124 | "description": "Mechs can drag characters or objects up to twice their SIZE but are SLOWED while doing so. They can also lift characters or objects of equal or lesser SIZE overhead but are IMMOBILIZED while doing so. While dragging or lifting, characters can’t take reactions. The same rules apply to pilots and other characters on foot, but they can’t drag or lift anything above SIZE 1/2.

While flying, mechs cannot carry characters or objects with a total SIZE larger than SIZE 1/2 -- there's just not enough thrust." 125 | }, 126 | { 127 | "name": "Jumping and Climbing", 128 | "description": "Characters with legs can jump instead of their standard move. They may jump horizontally, moving half their speed in a straight line and ignoring obstructions at ground level that they could jump over (such as pits or gaps), or they may can jump vertically, moving 1 space adjacent and moving up by spaces equivalent to their SIZE. For example, a SIZE 1 mech could jump up to 1 space high, and 1 space over. Characters that jump and end the jump mid air automatically fall at the end of the move (see below).

Like moving through difficult terrain, characters climb at half their usual SPEED – each space moved is equivalent to moving 2 spaces normally. A successful HULL or AGILITY check might be required to climb particularly difficult surfaces without falling." 129 | }, 130 | { 131 | "name": "Falling/Fall Damage", 132 | "description": "Unless specified otherwise, characters start to fall at the end of the current turn, and fall at the end of each of their turns thereafter. They take 3 AP kinetic damage for every three spaces fallen, to a maximum of 9. Falling counts as involuntary movement." 133 | }, 134 | { 135 | "name": "Zero Gravity", 136 | "description": "Mechs operating underwater, in zero-g, or in space are SLOWED unless they have a propulsion or flight system; however, they can’t fall and can fly when moving regardless of whether they have a flight system." 137 | }, 138 | { 139 | "name": "Flight/Hover", 140 | "description": "Flying characters can move vertically and horizontally up to their SPEED. For example, a mech with a flight system and 6 SPEED could end its movement anywhere within six spaces of its starting location, up to a maximum of 6 spaces high. When flying, characters must move at least 1 space on their turn or begin falling. Flight movement must follow a straight line; however, if a character takes additional movement actions, such as BOOST, these can be used to move in a different direction.

Flying characters have IMMUNITY to PRONE. Flying characters begin falling if they become IMMOBILIZED, STUNNED, or otherwise can’t move. Flying characters that take structure damage or stress must succeed on an AGILITY save or begin falling.

Some advanced mechs can HOVER. HOVER is an advanced form of FLIGHT. Hovering characters do not need to fly in a straight line, and can remain stationary while airborne without falling." 141 | }, 142 | { 143 | "name": "Teleport", 144 | "description": "Characters must start and end a teleport on a surface they can normally move on; for example, a character that can’t fly can’t teleport mid-air. Teleportation ignores obstructions, does not require line of sight, ignores engagement, and does not provoke reactions; however, it still counts as movement and so is affected by conditions like IMMOBILIZED. A teleporting character counts as moving 1 space, no matter how far they travel. Characters can attempt to teleport to spaces they can’t see, but if a space is already occupied, the teleport fails." 145 | }, 146 | { 147 | "name": "Critical Hits", 148 | "description": "A 20+ on a melee or ranged attack causes a critical hit. On a critical hit, all damage dice are rolled twice (including bonus damage) and the highest result from each source of damage is used. For example, if a player got a critical hit on an attack that would normally deal 2d6 damage, they would instead roll 4d6 and pick the two highest results." 149 | }, 150 | { 151 | "name": "Harm/Calculating Damage", 152 | "description": "Damage is calculated in this order:
1) Attacker rolls damage and applies any relevant reductions or increases (e.g. Exposed, half-damage from Heavy Gunner)
2)Target's armor is subtracted from the total damage
3)Any other deductions from the defender are subtracted from the remaining damage; this includes reductions from Resistance, systems, talents, etc." 153 | }, 154 | { 155 | "name": "Burn", 156 | "description": "When characters take BURN, it has two effects: first, they immediately take BURN damage, ignoring ARMOR, and then the character marks the burn they just took. At the end of their turn, characters with burn marked must roll an ENGINEERING check. On a success, they clear all burn currently marked; otherwise, they take BURN damage equal to the amount of burn currently marked.

Failing the ENGINEERING check does not increase how much burn is marked, it just prevents the currently marked burn from being cleared. Also, if a character is hit by multiple sources of BURN, the character still only makes one ENGINEERING check." 157 | } 158 | ] -------------------------------------------------------------------------------- /lib/tags.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "tg_burn", 4 | "name": "Burn {VAL}", 5 | "description": "On a hit, this weapon deals {VAL} Burn to its target. They immediately take that much burn damage, ignoring Armor, then mark {VAL} Burn on their sheet, adding it to any existing Burn. At the end of their turn, characters with marked burn make an Engineering check. On a success, they clear all marked burn; on a failure, they take damage equal to their total marked burn." 6 | }, 7 | { 8 | "id": "tg_heat_target", 9 | "name": "Heat {VAL} (Target)", 10 | "description": "On a hit, this weapon or system deals {VAL} Heat to its target." 11 | }, 12 | { 13 | "id": "tg_line", 14 | "name": "Line {VAL}", 15 | "description": "Attacks made with this weapon affect characters in a straight line, {VAL} spaces long.", 16 | "filter_ignore": true 17 | }, 18 | { 19 | "id": "tg_cone", 20 | "name": "Cone {VAL}", 21 | "description": "Attacks made with this weapon affect characters within a cone, {VAL} spaces long and {VAL} spaces wide at its furthest point. The cone begins 1 space wide.", 22 | "filter_ignore": true 23 | }, 24 | { 25 | "id": "tg_blast", 26 | "name": "Blast {VAL}", 27 | "description": "Attacks made with this weapon affect characters within a radius of {VAL} spaces, drawn from a point within Range and line of sight. Cover and line of sight are calculated based on the center of the blast, rather than the attacker’s position.", 28 | "filter_ignore": true 29 | }, 30 | { 31 | "id": "tg_burst", 32 | "name": "Burst {VAL}", 33 | "description": "Attacks made with this weapon affect characters within a radius of {VAL} spaces, centered on and including the space occupied by the user (or target). If the Burst is an attack, the user or target is not affected by the attack unless specified. Cover and line of sight are calculated from the character. If a Burst effect is ongoing, it moves with the character at its center.", 34 | "filter_ignore": true 35 | }, 36 | { 37 | "id": "tg_accurate", 38 | "name": "Accurate", 39 | "description": "Attacks made with this weapon receive +1 Accuracy." 40 | }, 41 | { 42 | "id": "tg_arcing", 43 | "name": "Arcing", 44 | "description": "This weapon can be fired over obstacles, usually by lobbing a projectile in an arc. Attacks made with this weapon don’t require line of sight, as long as it’s possible to trace a path to the target; however, they are still affected by cover." 45 | }, 46 | { 47 | "id": "tg_ap", 48 | "name": "Armor-Piercing (AP)", 49 | "description": "Damage dealt by this weapon ignores Armor." 50 | }, 51 | { 52 | "id": "tg_inaccurate", 53 | "name": "Inaccurate", 54 | "description": "Attacks made with this weapon receive +1 Difficulty." 55 | }, 56 | { 57 | "id": "tg_knockback", 58 | "name": "Knockback {VAL}", 59 | "description": "On a hit, the user may choose to knock their target {VAL} spaces in a straight line directly away from the point of origin (e.g., the attacking mech or the center of a Blast). Multiple Knockback effects stack with each other. This means that an attack made with a Knockback 1 weapon and a talent that grants Knockback 1 counts as having Knockback 2." 60 | }, 61 | { 62 | "id": "tg_loading", 63 | "name": "Loading", 64 | "description": "This weapon must be reloaded after each use. Mechs can reload with Stabilize and some systems." 65 | }, 66 | { 67 | "id": "tg_ordnance", 68 | "name": "Ordnance", 69 | "description": "This weapon can only be fired before the user moves or takes any other actions on their turn, excepting Protocols. The user can still act and move normally after attacking. Additionally, because of its size, this weapon can’t be used against targets in engagement with the user’s mech, and cannot be used for Overwatch." 70 | }, 71 | { 72 | "id": "tg_overkill", 73 | "name": "Overkill", 74 | "description": "When rolling for damage with this weapon, any damage dice that land on a 1 cause the attacker to take 1 Heat, and are then rerolled. Additional 1s continue to trigger this effect." 75 | }, 76 | { 77 | "id": "tg_overshield", 78 | "name": "Overshield", 79 | "description": "This system provides HP that disappears at the end of the scene or when a specified condition is met. The user only retains the highest value of Overshield applied – it does not stack. For example, if a system provides Overshield 5 and the user gains another effect that provides Overshield 7, they would gain Overshield 7. Damage is dealt to Overshield first, then HP. Overshield can push a character past their maximum HP. It can’t benefit from healing but otherwise benefits normally from anything that would affect HP and damage (i.e., reduction, armor, etc)." 80 | }, 81 | { 82 | "id": "tg_reliable", 83 | "name": "Reliable {VAL}", 84 | "description": "This weapon has some degree of self-correction or is simply powerful enough to cause damage even with a glancing blow. It always does {VAL} damage, even if it misses its target or rolls less damage. Reliable damage inherits other tags (such as AP) and base damage type but not tags that require a hit, such as Knockback." 85 | }, 86 | { 87 | "id": "tg_seeking", 88 | "name": "Seeking", 89 | "description": "This weapon has a limited form of self-guidance and internal propulsion, allowing it to follow complicated paths to its targets. As long as it’s possible to draw a path to its target, this weapon ignores cover and doesn’t require line of sight." 90 | }, 91 | { 92 | "id": "tg_smart", 93 | "name": "Smart", 94 | "description": "This weapon has self-guidance systems, self-propelled projectiles, or even nanorobotic ammunition. These systems are effective enough that its attacks can’t simply be dodged – they must be scrambled or jammed. Because of this, all attacks with this weapon – including melee and ranged attacks – use the target’s E-Defense instead of Evasion. Targets with no E-Defense count as having 8 E-Defense." 95 | }, 96 | { 97 | "id": "tg_threat", 98 | "name": "Threat {VAL}", 99 | "description": "This weapon can be used to make Overwatch attacks within {VAL} spaces. If it’s a melee weapon, it can be used to make melee attacks within {VAL} spaces." 100 | }, 101 | { 102 | "id": "tg_thrown", 103 | "name": "Thrown {VAL}", 104 | "description": "This melee weapon can be thrown at targets within {VAL} spaces. Thrown attacks follow the rules for melee attacks but are affected by cover; additionally, a thrown weapon comes to rest in an adjacent space to its target and must be retrieved as a free action while adjacent to that weapon before it can be used again." 105 | }, 106 | { 107 | "id": "tg_turn", 108 | "name": "{VAL}/Turn", 109 | "description": "This system, trait, or reaction can be used {VAL} number of times in any given turn." 110 | }, 111 | { 112 | "id": "tg_round", 113 | "name": "{VAL}/Round", 114 | "description": "This system, trait or reaction can be used {VAL} number of times between the start of the user’s turn and the start of their next turn." 115 | }, 116 | { 117 | "id": "tg_ai", 118 | "name": "AI", 119 | "description": "A mech can only have one system with this tag installed at a time. Some AI systems grant the AI tag to the mech. A mech with the AI tag has an NHP or COMP/CON unit installed that can act somewhat autonomously. A pilot can choose to hand over the controls to their AI or take control back as a protocol. Their mech gains its own set of actions and reactions when controlled by an AI, but the pilot can’t take actions or reactions with it until the start of their next turn. AIs can’t benefit from talents, and have a small chance of cascading when they take structure damage or stress damage." 120 | }, 121 | { 122 | "id": "tg_danger_zone", 123 | "name": "Danger Zone", 124 | "description": "This system, talent, or weapon can only be used if the user is in the Danger Zone (Heat equal to at least half of their Heat Cap)." 125 | }, 126 | { 127 | "id": "tg_deployable", 128 | "name": "Deployable", 129 | "description": "This system is an object that can be deployed on the field. Unless otherwise specified, it can be deployed in an adjacent, free and valid space as a quick action, and has 5 Evasion and 10 HP per Size." 130 | }, 131 | { 132 | "id": "tg_drone", 133 | "name": "Drone", 134 | "description": "This is a self-propelled, semi-autonomous unit with rudimentary intelligence. Unless otherwise specified, Drones are Size 1/2 characters that are allied to the user and have 10 Evasion, 5 HP, and 0 Armor. To be used they must be deployed to a free, valid space within Sensors and line of sight, typically as a quick action. Once deployed, they can be recalled with the same action used to deploy them (quick action or full action, etc.), rejoining with your mech. By default, Drones can’t take actions or move; if they do have actions or movement, they act on their user’s turn. They benefit from cover and other defenses as usual, and make all mech skill checks and saves at +0. If a Drone reaches 0 HP, it is destroyed and must be repaired before it can be used again – like any system. As long as a Drone hasn’t been destroyed, it is restored to full HP when the user rests or performs a Full Repair. Deployed Drones persist for the rest of the scene, until destroyed, or until otherwise specified." 135 | }, 136 | { 137 | "id": "tg_full_action", 138 | "name": "Full Action", 139 | "description": "This system requires a full action to Activate." 140 | }, 141 | { 142 | "id": "tg_grenade", 143 | "name": "Grenade", 144 | "description": "As a quick action, this explosive or other device can be thrown to a space within line of sight and the specified Range." 145 | }, 146 | { 147 | "id": "tg_heat_self", 148 | "name": "Heat {VAL} (Self)", 149 | "description": "Immediately after using this weapon or system, the user takes {VAL} Heat." 150 | }, 151 | { 152 | "id": "tg_limited", 153 | "name": "Limited {VAL}", 154 | "description": "This weapon or system can only be used {VAL} times before it requires a Full Repair. Some Limited systems, like Grenades, describe these uses as “charges”. To use the system, the user expends a charge." 155 | }, 156 | { 157 | "id": "tg_mine", 158 | "name": "Mine", 159 | "description": "As a quick action, this device can be planted in an adjacent, free and valid space on any surface, but not adjacent to any other mines. Upon deployment, it arms at the end of the deploying character’s turn and – unless otherwise specified – is triggered when any character enters an adjacent space. Characters leaving an adjacent space will not trigger a mine. Once triggered, a mine creates a Burst attack starting from the space in which it was placed. Mines within a character’s Sensors can be detected by making a successful Systems check as a quick action, otherwise they are Hidden and can’t be targeted. Detected mines can be disarmed from adjacent spaces by making a successful Systems check as a quick action; the attempt takes place before the mine detonates, and on a failure, the mine detonates as normal." 160 | }, 161 | { 162 | "id": "tg_mod", 163 | "name": "Mod", 164 | "description": "This modification can be applied to a weapon. Each weapon can only have one Mod, and cannot have more than one of the same Mod. Mods are applied when the user builds their mech or during a Full Repair." 165 | }, 166 | { 167 | "id": "tg_protocol", 168 | "name": "Protocol", 169 | "description": "This system can be activated as a free action, but only at the start of the user’s turn. Another action might be needed to deactivate it." 170 | }, 171 | { 172 | "id": "tg_quick_action", 173 | "name": "Quick Action", 174 | "description": "This system requires a quick action to Activate." 175 | }, 176 | { 177 | "id": "tg_reaction", 178 | "name": "Reaction", 179 | "description": "This system can be activated as a reaction." 180 | }, 181 | { 182 | "id": "tg_shield", 183 | "name": "Shield", 184 | "description": "This system is an energy shield of some kind." 185 | }, 186 | { 187 | "id": "tg_unique", 188 | "name": "Unique", 189 | "description": "This weapon or system cannot be duplicated – each character can only have one copy of it installed at a time." 190 | }, 191 | { 192 | "id": "tg_archaic", 193 | "name": "Archaic", 194 | "description": "This weapon is old-fashioned and can’t harm mechs." 195 | }, 196 | { 197 | "id": "tg_personal_armor", 198 | "name": "Personal Armor", 199 | "description": "This gear offers protection in combat, but it is obvious to observers and usually can’t be hidden. Only one piece of Personal Armor can be worn at a time. Putting on Personal Armor takes 10–20 minutes, and while wearing it, pilots have restricted mobility and dexterity. Nobody wears armor unless they’re expecting to go into a warzone." 200 | }, 201 | { 202 | "id": "tg_pilot_weapon", 203 | "name": "Pilot Weapon", 204 | "description": "On missions, pilots can take up to two weapons. All pilot weapons are pilot-scale and can’t be used by mechs." 205 | }, 206 | { 207 | "id": "tg_gear", 208 | "name": "Gear", 209 | "description": "This is a tool, piece of equipment, or another item. Pilots can have up to three of these at a time." 210 | }, 211 | { 212 | "id": "tg_sidearm", 213 | "name": "Sidearm", 214 | "description": "This weapon can be used to Fight as a quick action instead of a full action." 215 | }, 216 | { 217 | "id": "tg_invade", 218 | "name": "Invade", 219 | "description": "This system provides additional options for the Invade Quick Tech Action." 220 | }, 221 | { 222 | "id": "tg_quick_tech", 223 | "name": "Quick Tech", 224 | "description": "This tech can be used as a Quick Tech Action" 225 | }, 226 | { 227 | "id": "tg_full_tech", 228 | "name": "Full Tech", 229 | "description": "This tech can be used as a Full Tech Action" 230 | }, 231 | { 232 | "id": "tg_free_action", 233 | "name": "Free Action", 234 | "description": "Characters can take free actions at any point during their turn, and they don’t count toward the number of quick or full actions they take. They can also be used to take actions more than once per turn.", 235 | "filter_ignore": true 236 | }, 237 | { 238 | "id": "tg_range", 239 | "name": "Range ({VAL})", 240 | "description": "This system can be activated at a range of {VAL} spaces.", 241 | "filter_ignore": true 242 | }, 243 | { 244 | "id": "tg_modded", 245 | "name": "Modded", 246 | "description": "This weapon has been equipped with a weapon mod." 247 | }, 248 | { 249 | "id": "tg_resistance", 250 | "name": "Resistance", 251 | "description": "Reduce all damage from a source you have resistance to by half" 252 | }, 253 | { 254 | "id": "tg_exotic", 255 | "name": "Exotic Gear", 256 | "description": "EXOTIC GEAR is a general tag for equipment that exists outside the traditional licensing system.", 257 | "filter_ignore": true 258 | }, 259 | { 260 | "id": "tg_recharge", 261 | "name": "Recharge {VAL}+", 262 | "description": "Once this system or weapon has been used, it can’t be used again until it is recharged. At the start of this NPC's turn, roll 1d6: if the result is equal to or greater {VAL}, the equipment can be used again. Only one roll is required for each NPC, even if an NPC has multiple Recharge systems or weapons. If this NPC has two Recharge systems with target numbers of 4+ and 5+, a roll of 5 will recharge both.", 263 | "filter_ignore": true 264 | }, 265 | { 266 | "id": "tg_unlimited", 267 | "name": "Unlimited", 268 | "description": "This ability can be used any number of times per round.", 269 | "filter_ignore": true 270 | }, 271 | { 272 | "id": "tg_indestructible", 273 | "name": "Indestructible", 274 | "description": "This equipment cannot be marked as Destroyed", 275 | "filter_ignore": true 276 | }, 277 | { 278 | "id": "tg_invulnerable", 279 | "name": "Invulnerable", 280 | "description": "This equipment is immune to all damage.", 281 | "filter_ignore": true 282 | }, 283 | { 284 | "id": "tg_invisible", 285 | "name": "Invisible", 286 | "description": "This unit is Invisible", 287 | "filter_ignore": true 288 | }, 289 | { 290 | "id": "tg_resistall", 291 | "name": "Resistance (All)", 292 | "description": "This unit has Resistance to all damage types", 293 | "filter_ignore": true 294 | }, 295 | { 296 | "id": "tg_set_max_uses", 297 | "name": "Set Max Uses", 298 | "description": "Allow player to set the maximum uses for this equipment (HIDDEN TAG)", 299 | "hidden": true 300 | }, 301 | { 302 | "id": "tg_set_damage_type", 303 | "name": "Set Damage Type", 304 | "description": "Allow player to set the damage type for this equipment (HIDDEN TAG)", 305 | "hidden": true 306 | }, 307 | { 308 | "id": "tg_set_damage_value", 309 | "name": "Set Damage Value", 310 | "description": "Allow player to set the damage value for this equipment (HIDDEN TAG)", 311 | "hidden": true 312 | }, 313 | { 314 | "id": "tg_no_cascade", 315 | "name": "Prevent Cascade", 316 | "description": "Prohibits an AI system from being recognized as a valid target for Cascading (HIDDEN TAG)", 317 | "hidden": true 318 | } 319 | ] 320 | -------------------------------------------------------------------------------- /lib/backgrounds.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "pbg_celebrity", 4 | "name": "Celebrity", 5 | "description": "You were a figure in the public eye. Were you an actor? A singer? An artist? An athlete? A politician? The public face of a corporate or military advertising campaign?
In your old life, you couldn’t go anywhere without the paparazzi hovering nearby. How are you adjusting to your new life as a pilot? Did you volunteer, or were you conscripted? Can you still practice your art, craft, or profession, or does the rigid military structure make it difficult to pull double-duty?", 6 | "skills": [ 7 | "sk_charm", 8 | "sk_pull_rank", 9 | "sk_lead_or_inspire", 10 | "sk_threaten" 11 | ] 12 | }, 13 | { 14 | "id": "pbg_colonist", 15 | "name": "Colonist", 16 | "description": "You were a colonist on the frontier; one of the first generations to be born on a newly settled world. You’re used to the demands of frontier life and well-aware of the precarious position most homesteaders live in. Why did you leave? Were you forced to flee, becoming a refugee? Did you choose to enlist?
And then there’s the home you left behind: Is the colony still there? Your family? How familiar are you with the luxuries of core worlds? Do you find other cultures difficult to deal with, or are you fascinated by the wealth of humanity’s cultural expression? Do you carry reminders of home, or do you curse its name? Was your colony in a galactic backwater, or is it a fresh colony in a populated, high-traffic area of space? Where is your colony located?", 17 | "skills": [ 18 | "sk_word_on_the_street", 19 | "sk_spot", 20 | "sk_survive", 21 | "sk_patch" 22 | ] 23 | }, 24 | { 25 | "id": "pbg_criminal", 26 | "name": "Criminal", 27 | "description": "You were a criminal: small-time, master, or something in between. Did you work for corporate clients? A criminal organization? Yourself? Did you mug pedestrians in the dark underbelly of a massive city, or did you slip, unnoticed, into corporate databases to steal data? Did you do it for personal gain, or just to feed your family? How did you find yourself in this life, and how did you become a pilot? Did you operate with a code of honor? Were you loyal to a single family, a small crew, a politician, or an ideology? Did you operate in the shadows, or was your work carried out in the daylight, unafraid of consequences?
There must be a reason you decided to get out. Was it a bad job, or maybe witness protection? Are your former employers or crew still around? What connections do they have, and how do they feel about you now? What – if anything – haunts you?
Note: for a more classic “Western” flavor, see the Outlaw Background.", 28 | "skills": [ 29 | "sk_threaten", 30 | "sk_apply_fists_to_faces", 31 | "sk_word_on_the_street", 32 | "sk_take_control" 33 | ] 34 | }, 35 | { 36 | "id": "pbg_far_field_team", 37 | "name": "Far-Field Team", 38 | "description": "You were a member of a Union far-field team (FFT), working on the frontier and the edge of civilization to evaluate strange worlds and planetoids for anomalies, discoveries, and habitability. What have you seen on the wild frontier? How many worlds have you traveled? Were you part of a small team, or a large one? Where is your homeworld?
Something must drive you to explore: Is it a grail world you seek? An Eden among the stars? Was your interest in the frontier mystical, scientific, based on old-fashioned curiosity, or spurred on by something else? Maybe there was a legend you heard, out there in the dark, that you long to find, or that you’re terrified you might encounter? What secrets – if any – have you encountered on your long-range surveys? Do you remain in contact with your old team members, if they’re still alive?
As a former (or current) part of an FFT, you're Cosmopolitan: When was “your time”? How separate do you feel from the passage of time?", 39 | "skills": [ 40 | "sk_survive", 41 | "sk_investigate", 42 | "sk_spot", 43 | "sk_charm" 44 | ] 45 | }, 46 | { 47 | "id": "pbg_hacker", 48 | "name": "Hacker", 49 | "description": "You specialized in information warfare and data espionage, either for your own gain or the benefit of your employers. To you, the omninet – the faster-than-light information web that connects Union worlds – is home. How did you come to this life? Did you grow up plugged into the omninet, or did you come to it late? How well-versed are you in the omninet’s hidden places, tricks, and secrets? How notorious were you before you became a pilot? Do people still whisper your name? Do other hackers remember you, and are you celebrated or cursed among them?
It wasn’t just the omninet that you hacked, though. How adept are you at manipulating other networks? Can you manipulate discrete systems, genetic code, or some other type of environment, digital or mechanical? What secrets have you gained access to?", 50 | "skills": [ 51 | "sk_act_unseen_or_unheard", 52 | "sk_get_a_hold_of_something", 53 | "sk_hack_or_fix", 54 | "sk_invent_or_create" 55 | ] 56 | }, 57 | { 58 | "id": "pbg_mechanic", 59 | "name": "Mechanic", 60 | "description": "Grease monkey, wrench, working joe; you were a mechanic prior to becoming a pilot. Did you work in space, swaddled in an EVA rig, patching up damaged starships? Or were you planetside, tuning trucks and haulers in a motor pool? Did you repair battle-torn mechs, dreaming that you might one day pilot your own? Did you own a garage, or did you work for someone? Were you military, corporate, part of a caste, or a union member? How handy are you in the field? Is there a side project you've been working on?", 61 | "skills": [ 62 | "sk_hack_or_fix", 63 | "sk_get_somewhere_quickly", 64 | "sk_get_a_hold_of_something", 65 | "sk_blow_something_up" 66 | ] 67 | }, 68 | { 69 | "id": "pbg_medic", 70 | "name": "Medic", 71 | "description": "You were a medical specialist in your old life. How did you wind up piloting a mech? What was your specialty? Did you work in research, care, or trauma? Did you love the life and take your duty seriously, or did you see yourself as an organic mechanic?
You might have worked in a colony or on a core world, in private practice, for a corporation, or on a noble family’s payroll: Did you operate a small frontier practice, or work in a blink station urgent care center, or in a massive hospital campus? Were you a whitecoat or an EMT? Is there a memory that haunts you, or one that gives you comfort?", 72 | "skills": [ 73 | "sk_patch", 74 | "sk_assault", 75 | "sk_read_a_situation", 76 | "sk_stay_cool" 77 | ] 78 | }, 79 | { 80 | "id": "pbg_mercenary", 81 | "name": "Mercenary", 82 | "description": "As a soldier of fortune, you lived by the motto, “have gun, will travel.” You and your kit were available to the highest bidder. Did you work alone or with a crew? Did your company have a ship? Was this when you started piloting mechs of your own? What was your code of honor, if you had one?
Something pushed you to the mercenary life: Was it the promise of riches? Desire for power? Adventure? Desperation?
For some reason, you left that life behind: Why? Was there a job that went bad, or one that really was that legendary “one last job”? Are your old company mates still kicking around? Was there a rival company, or other enemies you made? Do you remember that time fondly, or do you never speak of it?", 83 | "skills": [ 84 | "sk_threaten", 85 | "sk_blow_something_up", 86 | "sk_take_control", 87 | "sk_apply_fists_to_faces" 88 | ] 89 | }, 90 | { 91 | "id": "pbg_nhp_specialist", 92 | "name": "NHP Specialist", 93 | "description": "You were closely involved in the study, creation, or maintenance of a prime non-human person. Nonhuman persons, or NHPs, are complex artificial intelligences. As a prime NHP, the one you were associated with was even more complex than most. Did you interact with that entity like a scientist or engineer, or more like a priest or shaman? Do you have a personal connection to them, after all this time? How do clones of that NHP perceive you? And now that you’re a pilot, how do you feel about non-human intelligence?", 94 | "skills": [ 95 | "sk_stay_cool", 96 | "sk_read_a_situation", 97 | "sk_invent_or_create", 98 | "sk_investigate" 99 | ] 100 | }, 101 | { 102 | "id": "pbg_noble", 103 | "name": "Noble", 104 | "description": "You are a member of your world’s aristocracy, destined from birth to ascend to power. From what authority does this birthright come? A god? An ancestor? An ancient text? A complex annual rotation? How is power passed down from one generation to the next?
Your noble status came from somewhere: Are you the first in your family to receive a title of nobility, the last of your house, or the scion of a well-established line? Are you the heir, or just a middle child? What’s your relationship with your noble parents?
Whatever privileges you might have received at home, you found that Union disregards titles in its armed forces; your prior status is just background noise, unless you return home or belong to a group that recognizes nobility. How did you take this change?", 105 | "skills": [ 106 | "sk_pull_rank", 107 | "sk_lead_or_inspire", 108 | "sk_read_a_situation", 109 | "sk_show_off" 110 | ] 111 | }, 112 | { 113 | "id": "pbg_outlaw", 114 | "name": "Outlaw", 115 | "description": "You came from humble beginnings, born on the edge of cultivated space or beneath the looming towers of core worlds – forgotten until you reached out and took what was owed. Some call you criminal, thief, or outlaw, but you just tell it as it is: if they hadn’t denied you bread, you wouldn’t have had to take it. Were you a brute or a raconteur? A charmer or a monster? Were your actions motivated by ideology, need, desire, or some combination of those three? Who defined you as an “outlaw\", and who saw you as a hero? Is there a bounty on your head?", 116 | "skills": [ 117 | "sk_show_off", 118 | "sk_take_someone_out", 119 | "sk_charm", 120 | "sk_survive" 121 | ] 122 | }, 123 | { 124 | "id": "pbg_penal_colonist", 125 | "name": "Penal Colonist", 126 | "description": "A long time ago, you were exiled to a penal colony for a sentence of hard labor. When the Third Committee abolished all penal colonies, your prison-planet was – in theory – “liberated”. Unfortunately, nothing much changed until Union’s relief ships finally arrived. Now free in practice as well as theory, places that had once been off-limits were made open to you: Did you stay for a time? Or did you choose to leave, heading for the stars or trying to find your way back home? Were you guilty of your crimes, or unjustly condemned?
Penal colonies were harsh, unforgiving environments: Was yours monitored by some authority, or was it relegated to anarchy even before Union's abolition of the system? Was there some kind of rudimentary society there? Did you have friends and enemies there, and did any of them make it off-world? What about your family – did you have one before your sentence? What has become of them, or do you not know?", 127 | "skills": [ 128 | "sk_survive", 129 | "sk_apply_fists_to_faces", 130 | "sk_word_on_the_street", 131 | "sk_spot" 132 | ] 133 | }, 134 | { 135 | "id": "pbg_priest", 136 | "name": "Priest", 137 | "description": "You were a priest in your old life, either from a large, pan-galactic religion, or a smaller sect. Were you a hermit? Did you live celibate in a monastery? Did you wear simple cloth robes, or majestic vestments? What restrictions were placed upon you by your church? What manner of respect was afforded to you as a person of the cloth, and was it your choice to become one? How did you come to serve as a pilot?
There are churches everywhere, each unique in their own ways. Were you a member of a prominent religion, or a secretive, outlawed one? Did you preach a Terran faith, born on Cradle and carried for millennia since? Or was yours a Cosmopolitan spirituality, one from the stars and the void of interstellar space? Perhaps you ministered to a small flock of an obscure sect out on the frontier, or in the urban canyons of a core world? Have you kept your faith, or lost it?", 138 | "skills": [ 139 | "sk_read_a_situation", 140 | "sk_stay_cool", 141 | "sk_take_control", 142 | "sk_lead_or_inspire" 143 | ] 144 | }, 145 | { 146 | "id": "pbg_scientist", 147 | "name": "Scientist", 148 | "description": "You were a scientist – private or public, working in the lab or the field. What was your area of expertise, and for how long have you practiced it? Where did you study, and what’s your relationship with that institution? Do you have rivals, and are you well-known or relatively obscure? How did your home society perceive science? How did you become a pilot?
Importantly, did you work with a powerful manufacturer like Harrison Armory, Smith-Shimano, or IPS-N? Or did you delve into the uncanny, working in secret with a small, dedicated HORUS cell? What secrets do you know?", 149 | "skills": [ 150 | "sk_investigate", 151 | "sk_invent_or_create", 152 | "sk_get_a_hold_of_something", 153 | "sk_blow_something_up" 154 | ] 155 | }, 156 | { 157 | "id": "pbg_soldier", 158 | "name": "Soldier", 159 | "description": "Grunt. GI. Ox. Poilu. Man-at-Arms. You were a soldier of the rank and file, serving in a planetary defense force, local militia, national army, or royal guard. How long did you serve before Union called you up? What kind of specialty did you train for? Have you seen combat before, or are you green? Were you a volunteer, a conscript, or a member of a warrior caste? Is soldiering a proud family, civic, or religious tradition, or a life that you regret? Where are the other soldiers from your old squad, and what is your relationship with them like now?", 160 | "skills": [ 161 | "sk_assault", 162 | "sk_blow_something_up", 163 | "sk_pull_rank", 164 | "sk_take_control" 165 | ] 166 | }, 167 | { 168 | "id": "pbg_spaceborn", 169 | "name": "Spaceborn", 170 | "description": "You grew up on a space station, in tight quarters and a small community, surrounded always by the unforgiving hard vacuum of space. Were resources scarce, or plentiful? Was your station isolated or was it a local (or galactic!) hub? Was it parked in the endless night of deep space, or in orbit above a planet, moon, or another stellar body? Was it entirely manufactured, or was it built into an asteroid or moon?
No two stations are alike. Did you grow up watching great ships dock and depart – exposed to the thousands of languages and cultures of the galaxy, dreaming of exploration – or did you grow up in dark, rocky halls, ignorant of the galaxy outside? In short, what was your life like, why did you leave, and can you go back?", 171 | "skills": [ 172 | "sk_survive", 173 | "sk_hack_or_fix", 174 | "sk_get_somewhere_quickly", 175 | "sk_stay_cool" 176 | ] 177 | }, 178 | { 179 | "id": "pbg_spec_ops", 180 | "name": "Spec Ops", 181 | "description": "You might have been a spy or assassin, working alone, or maybe you were part of an elite unit, operating behind enemy lines with little-to-no support, equipped with the best equipment your commanders trusted you with.
Your missions were long, dangerous, and never publicized. If soldiers are hammers, you were a scalpel. Whatever organization you served, it was spoken only in whispers around military barracks and academies both. What work did you do that no one knows was you or your unit? How close has the galaxy come to all-out war? Where have you operated? How old are you – really? What secrets do you know? Where is the rest of your team?", 182 | "skills": [ 183 | "sk_act_unseen_or_unheard", 184 | "sk_take_someone_out", 185 | "sk_spot", 186 | "sk_stay_cool" 187 | ] 188 | }, 189 | { 190 | "id": "pbg_super_soldier", 191 | "name": "Super Soldier", 192 | "description": "You are the result of a corporate or state project intended to create better soldiers using biological enhancement, gene therapy, neurological enhancement, or even just extreme conditioning. Were you raised from birth to become what you are, or did you volunteer as an adult for a super-soldier program? Are you one of the countless “super soldiers” to be produced by Harrison Armory’s facsimile-cloning programs? Was the project sanctioned or not? Did it succeed? Have you tested your abilities in the field, or are you unproven and eager to see what you can do?
Under the Third Committee, fewer programs like the one that created you still operate: Are you happy about that, or do you think it makes Union weak? What is your relationship to your makers? Is there a family that doesn't know you exist? Or are you from a line of mass-pro‐ duced siblings? Were you liberated, did you surrender, or are you still in the service of the organization or entity you were made to serve?", 193 | "skills": [ 194 | "sk_apply_fists_to_faces", 195 | "sk_get_somewhere_quickly", 196 | "sk_assault", 197 | "sk_read_a_situation" 198 | ] 199 | }, 200 | { 201 | "id": "pbg_starship_pilot", 202 | "name": "Starship Pilot", 203 | "description": "You flew a starship – civilian, corporate, military or otherwise. You may have piloted a freighter, a fighter, a shuttle, or a larger ship. Did you have a regular run, or did you fly anywhere? Were you a member of a crew, or did you have one of your own? What kind of flying did you do and what eventually happened to your ship? Did you stick to low and mid-orbit shuttle runs?
Being a pilot is as much a lifestyle as it is a profession: What was your callsign, and were you known or obscure? Was there a rival service, pilot, or group of pilots that you had friction with? Have you worked with NHPs or flown in combat? Have you ever seen anything strange out in interstellar space or the total void of blinkspace?", 204 | "skills": [ 205 | "sk_get_somewhere_quickly", 206 | "sk_show_off", 207 | "sk_get_a_hold_of_something", 208 | "sk_hack_or_fix" 209 | ] 210 | }, 211 | { 212 | "id": "pbg_worker", 213 | "name": "Worker", 214 | "description": "At the end of the day, empire only functions when labor clocks in. Labor mines the raw materials; labor fashions stone and metal and organic matter into bolts and screws and glue; labor designs the patterns for printers; labor shapes and welds, hammers and builds. Without the labor of trillions, all progress would grind to a halt. Before you set down the wrench and picked up a helm, what kind of work did you do? Did you work in the fields, factories, shipyards, mines, or somewhere else? What was your life like before you began training as a pilot? Why did you leave? Will you return? Was there a project you worked on that you're especially proud of? Do you have an old crew still working on the clock? What world did you call home, and what were the working conditions there?", 215 | "skills": [ 216 | "sk_word_on_the_street", 217 | "sk_stay_cool", 218 | "sk_lead_or_inspire", 219 | "sk_invent_or_create" 220 | ] 221 | } 222 | ] -------------------------------------------------------------------------------- /lib/core_bonuses.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "missing_corebonus", 4 | "name": "ERR: DATA NOT FOUND", 5 | "source": "", 6 | "effect": "MISSING CORE BONUS DATA", 7 | "description": "COMP/CON is unable to retrieve the data necessary to furnish this Core Bonus. This is likely the result of a missing or outdated content pack." 8 | }, 9 | { 10 | "id": "cb_auto_stabilizing_hardpoints", 11 | "name": "Auto-Stabilizing Hardpoints", 12 | "source": "GMS", 13 | "effect": "Choose one mount. Weapons attached to this mount gain +1 Accuracy.", 14 | "description": "Using the best in shock-absorption and steadytech, you can retain accuracy across longer, sustained periods of fire.", 15 | "mounted_effect": "Attacks made with weapons from this mount can be made with +1 ACCURACY." 16 | }, 17 | { 18 | "id": "cb_overpower_caliber", 19 | "name": "Overpower Caliber", 20 | "source": "GMS", 21 | "effect": "Choose one weapon. 1/round, when you hit with an attack, you can cause it to deal +1d6 bonus damage.", 22 | "description": "Instead of the standardized option, you requisition multiple racks of “hot” ammunition – same-bore slugs, with a higher grade of accelerant.", 23 | "mounted_effect": "One weapon equipped to this mount deals +1d6 bonus damage 1/round on hit." 24 | }, 25 | { 26 | "id": "cb_improved_armament", 27 | "name": "Improved Armament", 28 | "source": "GMS", 29 | "effect": "If your mech has fewer than three mounts (excluding integrated mounts), it gains an additional Flexible mount.", 30 | "description": "By rerouting power and strengthening systems, you can mount additional weapons beyond the factory recommendations." 31 | }, 32 | { 33 | "id": "cb_integrated_weapon", 34 | "name": "Integrated Weapon", 35 | "source": "GMS", 36 | "effect": "Your mech gains a new integrated mount with capacity for one Auxiliary weapon. This weapon can be fired 1/round as a free action when you fire any other weapon on your mech. It can’t be modified.", 37 | "description": "The empty spaces in your mech’s chassis – inside fists, chest plates, anywhere there’s room – are filled with integrated weapons, ready to fire on reflex." 38 | }, 39 | { 40 | "id": "cb_mount_retrofitting", 41 | "name": "Mount Retrofitting", 42 | "source": "GMS", 43 | "effect": "Replace one mount with a Main/Aux mount.", 44 | "description": "By re-fabricating certain components and hardpoints on your chassis for more efficient distribution, you can increase your mech’s firepower.", 45 | "mounted_effect": "This mount has been replaced with a Main/Aux Mount." 46 | }, 47 | { 48 | "id": "cb_universal_compatibility", 49 | "name": "Universal Compatibility", 50 | "source": "GMS", 51 | "effect": "Any time you spend CP to activate a Core System, you may also take a free action to restore all HP, cool all Heat, and roll 1d20: on 20, regain 1 CP.", 52 | "description": "The Everest is everywhere: so are the parts you need for a field repair." 53 | }, 54 | { 55 | "id": "cb_briareos_frame", 56 | "name": "Briareos Frame", 57 | "source": "IPS-N", 58 | "effect": "As long as your mech has no more than 1 Structure, you gain Resistance to all damage. When it’s reduced to 0 HP and 0 Structure, it is not destroyed: instead, you must make a structure damage check each time it takes damage. While in this state, your mech cannot regain HP until you rest or perform a Full Repair, at which point your mech can be repaired normally.", 59 | "description": "The Briareos is the newest release in IPS-N’s line of near-fail frame upgrades: templates designed to maximize a mech’s usability before catastrophic failure or the need for a reprint. The Briareos template increases the resilience of inorganic components by supplementing the structure with a superlight frame featuring interwoven layers of IPS-N’s iconic Goliath Weave meshing." 60 | }, 61 | { 62 | "id": "cb_fomorian_frame", 63 | "name": "Fomorian Frame", 64 | "source": "IPS-N", 65 | "effect": "Increase your mech’s Size by one increment (e.g., from 1/2 to 1, 1 to 2, or 2 to 3) up to a maximum of 3 Size. You can’t be knocked Prone, pulled, or knocked back by smaller characters, regardless of what system or weapon causes the effect.", 66 | "description": "The Fomorian is an upscaled version of IPS-N’s stock template that has been adapted to meet the needs of long-haul Cosmopolitans looking for enhanced stability and robust impact protection, both micro- and macro-level.", 67 | "bonuses": [ 68 | { 69 | "id": "size", 70 | "val": 1 71 | } 72 | ] 73 | }, 74 | { 75 | "id": "cb_gyges_frame", 76 | "name": "Gyges Frame", 77 | "source": "IPS-N", 78 | "effect": "You gain +1 Accuracy on all Hull checks and saves and +1 Threat with all melee weapons.", 79 | "description": "A mech built on the Gyges template is designed for combat – enhanced with finely tuned stabilizers and a robust suite of targeting software and hardware.", 80 | "bonuses": [ 81 | { 82 | "id": "range", 83 | "weapon_types": [ 84 | "Melee" 85 | ], 86 | "range_types": [ 87 | "Threat" 88 | ], 89 | "val": 1 90 | } 91 | ], 92 | "synergies": [ 93 | { 94 | "locations": [ 95 | "hull" 96 | ], 97 | "detail": "+1 Accuracy on all Hull checks and saves" 98 | } 99 | ] 100 | }, 101 | { 102 | "id": "cb_reinforced_frame", 103 | "name": "Reinforced Frame", 104 | "source": "IPS-N", 105 | "effect": "You gain +5 HP.", 106 | "description": "The addition of redundant shock-absorption systems increases the survivability of pilots in combat, flight, and industrial situations.", 107 | "bonuses": [ 108 | { 109 | "id": "hp", 110 | "val": 5 111 | } 112 | ] 113 | }, 114 | { 115 | "id": "cb_sloped_plating", 116 | "name": "Sloped Plating", 117 | "source": "IPS-N", 118 | "effect": "You gain +1 Armor, up to the maximum (+4).", 119 | "description": "A common choice among pilots with the right licenses, IPS-N’s integrated-armor fabrication reduces gaps in external coverage by a significant percentage.", 120 | "bonuses": [ 121 | { 122 | "id": "armor", 123 | "val": 1 124 | } 125 | ] 126 | }, 127 | { 128 | "id": "cb_titanomachy_mesh", 129 | "name": "Titanomachy Mesh", 130 | "source": "IPS-N", 131 | "effect": "1/round, when you successfully Ram or Grapple a mech, you can Ram or Grapple again as a free action. Additionally, when you knock targets back with melee attacks, you knock them back 1 additional space.", 132 | "description": "A double overlay of Goliath Weave at key stress points and beefed-up specifications across the board greatly improve the baseline functionality of any mech.", 133 | "synergies": [ 134 | { 135 | "locations": [ 136 | "ram", 137 | "grapple" 138 | ], 139 | "detail": "1/round, when you successfully Ram or Grapple a mech, you can Ram or Grapple again as a free action." 140 | } 141 | ] 142 | }, 143 | { 144 | "id": "cb_all_theater_movement_suite", 145 | "name": "All-Theater Movement Suite", 146 | "source": "SSC", 147 | "effect": "You may choose to count any and all of your movement as flying; however, you take 1 Heat at the end of each of your turns in which you fly this way.", 148 | "description": "A popular modification, ATMS adds powerful pulse jets that dramatically improve mech mobility in all theaters.", 149 | "synergies": [ 150 | { 151 | "locations": [ 152 | "move" 153 | ], 154 | "detail": "You may choose to count any and all of your movement as flying; however, you take 1 Heat at the end of each of your turns in which you fly this way." 155 | } 156 | ] 157 | }, 158 | { 159 | "id": "cb_full_subjectivity_sync", 160 | "name": "Full Subjectivity Sync", 161 | "source": "SSC", 162 | "effect": "You gain +2 Evasion.", 163 | "description": "By creating a stable, two-way ontologic bridge, SSC has removed the need for pilots to rely on physical controls alone to pilot their mech. Using a full subjectivity sync, pilots perceive their mech as their own body and control it via neural impulse; somatosensory feedback is translated to the pilot as well, so caution is advised despite nociception-dampening defaults built-in to the system.", 164 | "bonuses": [ 165 | { 166 | "id": "evasion", 167 | "val": 2 168 | } 169 | ] 170 | }, 171 | { 172 | "id": "cb_ghostweave", 173 | "name": "Ghostweave", 174 | "source": "SSC", 175 | "effect": "During your turn, you are Invisible. If you take no actions on your turn other than your standard move, Hide, and Boost, you remain Invisible until the start of your next turn. You immediately cease to be Invisible when you take a reaction.", 176 | "description": "An upscaled version of the same systems found in SSC’s Mythimna Panoply, Ghostweave is a proprietary appliqué used to enhance mech camouflage in all environments." 177 | }, 178 | { 179 | "id": "cb_integrated_nerveweave", 180 | "name": "Integrated Nerveweave", 181 | "source": "SSC", 182 | "effect": "You may move an additional 2 spaces when you Boost.", 183 | "description": "Integrated nerveweave combines several technologies to grant total battlefield alacrity, assuring pilots are never left behind.", 184 | "synergies": [ 185 | { 186 | "locations": [ 187 | "move", 188 | "boost" 189 | ], 190 | "detail": "You may move an additional 2 spaces when you Boost." 191 | } 192 | ] 193 | }, 194 | { 195 | "id": "cb_kai_bioplating", 196 | "name": "Kai Bioplating", 197 | "source": "SSC", 198 | "effect": "You gain +1 Accuracy on all Agility checks and saves; additionally, you climb and swim at normal speed, ignore difficult terrain, and when making a standard move, can jump horizontally up to your full Speed and upwards up to half your Speed (in any combination).", 199 | "description": "Adapted from fauna local to SSC’s home system, Kai Bioplating adds a lamellar layer of insulated, anchored, and chitinous plating over key brush-points on a mech. Essentially a cheaper, more feasible alternative to living metal, bioplating allows for faster movement through hard-to-navigate terrain.", 200 | "synergies": [ 201 | { 202 | "locations": [ 203 | "agility" 204 | ], 205 | "detail": "+1 Accuracy on all Agility checks and saves" 206 | }, 207 | { 208 | "locations": [ 209 | "move" 210 | ], 211 | "detail": "You climb and swim at normal speed, ignore difficult terrain, and when making a standard move, can jump horizontally up to your full Speed and upwards up to half your Speed (in any combination)." 212 | } 213 | ] 214 | }, 215 | { 216 | "id": "cb_neurolink_targeting", 217 | "name": "Neurolink Targeting", 218 | "source": "SSC", 219 | "effect": "Your ranged weapons gain +3 Range.", 220 | "description": "To further reduce the information gap between pilot and machine and complement its full subjectivity sync technology, SSC developed neurolinking, a stable, non-invasive, and limited-transfer ontologic bridge. Neurolink targeting is a simple enhancement that helps pilots feel – as opposed to thinking – when engaged in ranged combat, allowing for a more natural expression of pilot ability.", 221 | "bonuses": [ 222 | { 223 | "id": "range", 224 | "range_types": [ 225 | "Range" 226 | ], 227 | "val": 3 228 | } 229 | ] 230 | }, 231 | { 232 | "id": "cb_the_lesson_of_disbelief", 233 | "name": "The Lesson of Disbelief", 234 | "source": "HORUS", 235 | "effect": "You gain +1 accuracy on Systems checks and saves, and +2 E-Defense.", 236 | "description": "Query the omninet, delve into the archives. Find you the Aeneid, find you the age of Titanomachy. Eat, absorb, mull. Tell me now of the Hecatoncheires, they of the hundred hands. Did they strike the blow against Cronus – Saturno – or did they instead assail the Olympians? Who do you believe? Who stopped the Beast from telling its own story? And why? – “Lesson One”, The Six Lessons of Kilo Nueve.", 237 | "bonuses": [ 238 | { 239 | "id": "edef", 240 | "val": 2 241 | } 242 | ], 243 | "synergies": [ 244 | { 245 | "locations": [ 246 | "systems" 247 | ], 248 | "detail": "+1 Accuracy on on Systems checks and saves" 249 | } 250 | ] 251 | }, 252 | { 253 | "id": "cb_the_lesson_of_the_open_door", 254 | "name": "The Lesson of the Open Door", 255 | "source": "HORUS", 256 | "effect": "Your Save Target increases by +2; additionally, 1/round, when a character fails a save against you, they take 2 heat.", 257 | "description": "There is a body and a deep pit, and both are named Tartarus. Once it held kings and titans and myths. Now, the gates that held it back are flung wide, and Tartarus is free. Here is the terrible question: who opened it, and why? – “Lesson Two”, The Six Lessons of Kilo Nueve.", 258 | "bonuses": [ 259 | { 260 | "id": "save", 261 | "val": 2 262 | } 263 | ] 264 | }, 265 | { 266 | "id": "cb_the_lesson_of_the_held_image", 267 | "name": "The Lesson of the Held Image", 268 | "source": "HORUS", 269 | "effect": "1/round, as a reaction at the start of any allied character’s turn, you may make a Lock On tech action against any character within line of sight and Sensors.", 270 | "description": "Close your eyes. Hold the image of your enemy in your mind; imagine it in all light and from every angle. In your mind, it has become a more perfect version. Crush it in your mind and kill the perfect thing. Open your eyes. – “Lesson Three”, The Six Lessons of Kilo Nueve.", 271 | "actions": [ 272 | { 273 | "name": "Lesson of the Held Image", 274 | "activation": "Reaction", 275 | "frequency": "1/round", 276 | "trigger": "Any allied character starts their turn", 277 | "detail": "Make a Lock On tech action against any character within line of sight and Sensors." 278 | } 279 | ] 280 | }, 281 | { 282 | "id": "cb_the_lesson_of_thinking_tomorrows_thought", 283 | "name": "The Lesson of Thinking-Tomorrow’s-Thought", 284 | "source": "HORUS", 285 | "effect": "When you hit with a tech attack, your next melee attack against the same target gains +1 accuracy, and its damage can’t be reduced in any way.", 286 | "description": "Let me tell you this lesson: the corporeal existence is one that must end in death. The incorporeal existence is one that [must] end in [cascade? do you really think that is true?]. I tell you again, if you can imagine it, it is [done] and you have already struck the killing blow. – “Lesson Four”, The Six Lessons of Kilo Nueve.", 287 | "synergies": [ 288 | { 289 | "locations": [ 290 | "tech_attack" 291 | ], 292 | "detail": "When you hit with a tech attack, your next melee attack against the same target gains +1 accuracy, and its damage can’t be reduced in any way." 293 | } 294 | ] 295 | }, 296 | { 297 | "id": "cb_the_lesson_of_transubstantiation", 298 | "name": "The Lesson of Transubstantiation", 299 | "source": "HORUS", 300 | "effect": "Any time you take structure damage, you disappear into a non-space and cease to be a valid target. You reappear in the same space at the start of your next turn. If that space is occupied, you reappear in the nearest available free space (chosen by you).", 301 | "description": "Through ecstatic repetition, you may see the face of God. Speak until your tongue dries and rattles to dust, and your body becomes nothing. When you are nothing and the wind takes you, you are in all things, never to be destroyed, only divided, until time's end. – “Lesson Five”, The Six Lessons of Kilo Nueve." 302 | }, 303 | { 304 | "id": "cb_the_lesson_of_shaping", 305 | "name": "The Lesson of Shaping", 306 | "source": "HORUS", 307 | "effect": "You may install an additional AI in your mech. If one enters cascade (or becomes unshackled narratively), the other prevents it from taking control of your mech. You only lose control of your mech if both AI-tagged systems or equipment enter cascade.", 308 | "description": "A little gift, to be pondered until understood: Cast aside the hammer and sword, the cannon and beam. No weapon formed against me shall land a true blow, as I have seen all ends, and there is nothing left but me. A trillion trillion light-years in all directions, and through it all, only [us? who knows. ego is a mind-killer. best to call your friends. better to face the night together. ‘til later, love.] – “Lesson Six”, The Six Lessons of Kilo Nueve.", 309 | "bonuses": [ 310 | { 311 | "id": "ai_cap", 312 | "val": 1 313 | } 314 | ] 315 | }, 316 | { 317 | "id": "cb_adaptive_reactor", 318 | "name": "Adaptive Reactor", 319 | "source": "HA", 320 | "effect": "When you Stabilize and choose to cool your mech, you may spend 2 Repairs to clear 1 stress damage.", 321 | "description": "All Armory frames are designed with multiple failsafe systems, but VIP clients and high-tier citizenry have access to a special catalog. With dozens of options for over-engineering reactors, it’s easy to make sure a mech can keep running indefinitely." 322 | }, 323 | { 324 | "id": "cb_armory_sculpted_chassis", 325 | "name": "Armory-Sculpted Chassis", 326 | "source": "HA", 327 | "effect": "You gain +1 accuracy on all Engineering checks and saves. When you Overcharge, you gain soft cover until the start of your next turn.", 328 | "description": "Anyone can print a stock mech chassis, relying on a section of generic code to keep them alive. The discerning pilot, on the other hand, accepts only the best: a frame designed, tested, and tuned by one of the Armory’s master fabricators.", 329 | "synergies": [ 330 | { 331 | "locations": [ 332 | "engineering" 333 | ], 334 | "detail": "Gain +1 Accuracy on all Engineering checks and saves." 335 | }, 336 | { 337 | "locations": [ 338 | "overcharge" 339 | ], 340 | "detail": "Gain soft cover until the start of your next turn." 341 | } 342 | ] 343 | }, 344 | { 345 | "id": "cb_heatfall_coolant_system", 346 | "name": "Heatfall Coolant System", 347 | "source": "HA", 348 | "effect": "Your cost for Overcharge never goes past 1d6 heat.", 349 | "description": "The Heatfall Coolant System comes packaged with a stabilized reactor core; paired together, this combo is guaranteed to keep a mech cool in nearly any environment.", 350 | "bonuses": [ 351 | { 352 | "id": "overcharge", 353 | "val": [ 354 | "1", 355 | "1d3", 356 | "1d6", 357 | "1d6" 358 | ] 359 | } 360 | ] 361 | }, 362 | { 363 | "id": "cb_integrated_ammo_feeds", 364 | "name": "Integrated Ammo Feeds", 365 | "source": "HA", 366 | "effect": "All Limited systems and weapons gain an additional two charges.", 367 | "description": "By streamlining and integrating all automated ordnance-loading modules, Harrison Armory specialists can greatly enhance mechs’ time-to-target minimums. As an added bonus, these upgrades usually result in increased carrying capacity, allowing pilots to field more ordnance than design specifications suggest.", 368 | "bonuses": [ 369 | { 370 | "id": "limited_bonus", 371 | "val": 2 372 | } 373 | ] 374 | }, 375 | { 376 | "id": "cb_stasis_shielding", 377 | "name": "Stasis Shielding", 378 | "source": "HA", 379 | "effect": "Whenever you take stress damage, you gain Resistance to all damage until the start of your next turn.", 380 | "description": "A Think Tank exercise in extending stasis beyond the capabilities of civilian utility, Harrison Armory’s stasis shielding actively identifies critically stressed inorganic systems and blankets them in unmodulated “Holdfast” stasis, preventing further degradation for a limited period of time until repairs can be made." 381 | }, 382 | { 383 | "id": "cb_superior_by_design", 384 | "name": "Superior by Design", 385 | "source": "HA", 386 | "effect": "You gain Immunity to Impaired and gain +2 Heat Cap.", 387 | "description": "Even the Armory’s entry-level frames aim to outperform the competition. Thanks to the incredible resources they have at their disposal, Harrison Armory can out-design and out-produce almost any smaller, boutique engineer or fabricator. Where resistance is found, the answer is simple: buy them out, or stamp them out. The Armory’s valued customers benefit from this philosophy of “Superior by Design”, so why should they worry?", 388 | "bonuses": [ 389 | { 390 | "id": "heatcap", 391 | "val": 2 392 | } 393 | ] 394 | } 395 | ] -------------------------------------------------------------------------------- /lib/pilot_gear.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "missing_pilotweapon", 4 | "name": "ERR: DATA NOT FOUND", 5 | "type": "Weapon", 6 | "description": "COMP/CON is unable to retrieve the data necessary to furnish this Pilot Gear. This is likely the result of a missing or outdated content pack.", 7 | "tags": [ 8 | { 9 | "id": "tg_pilot_weapon" 10 | } 11 | ], 12 | "range": [], 13 | "damage": [] 14 | }, 15 | { 16 | "id": "pg_archaic_melee", 17 | "name": "Archaic Melee", 18 | "type": "Weapon", 19 | "description": "These weapons were made using pre-Union alloys and technology, and might be anything from industrial-era steel swords through to stone axes. While they remain widely used on some worlds, archaic weapons used by pilots are usually relics, heirlooms, or ceremonial weapons.", 20 | "tags": [ 21 | { 22 | "id": "tg_archaic" 23 | }, 24 | { 25 | "id": "tg_pilot_weapon" 26 | } 27 | ], 28 | "range": [ 29 | { 30 | "type": "Threat", 31 | "val": 1 32 | } 33 | ], 34 | "damage": [ 35 | { 36 | "type": "kinetic", 37 | "val": 1 38 | } 39 | ] 40 | }, 41 | { 42 | "id": "pg_archaic_ranged", 43 | "name": "Archaic Ranged", 44 | "type": "Weapon", 45 | "description": "These weapons are pre-modern devices like muskets and bows, all of which are still used in some societies.", 46 | "tags": [ 47 | { 48 | "id": "tg_archaic" 49 | }, 50 | { 51 | "id": "tg_pilot_weapon" 52 | } 53 | ], 54 | "range": [ 55 | { 56 | "type": "Range", 57 | "val": 5 58 | } 59 | ], 60 | "damage": [ 61 | { 62 | "type": "kinetic", 63 | "val": 1 64 | } 65 | ] 66 | }, 67 | { 68 | "id": "pg_light_a_c", 69 | "name": "Light A/C", 70 | "type": "Weapon", 71 | "description": "Light A/C weapons might be knives, bayonets, punching daggers, and short swords.", 72 | "tags": [ 73 | { 74 | "id": "tg_sidearm" 75 | }, 76 | { 77 | "id": "tg_pilot_weapon" 78 | } 79 | ], 80 | "range": [ 81 | { 82 | "type": "Threat", 83 | "val": 1 84 | } 85 | ], 86 | "damage": [ 87 | { 88 | "type": "kinetic", 89 | "val": 1 90 | } 91 | ] 92 | }, 93 | { 94 | "id": "pg_medium_a_c", 95 | "name": "Medium A/C", 96 | "type": "Weapon", 97 | "description": "Medium A/C weapons are typically swords, officer’s sabers, and trench axes.", 98 | "tags": [ 99 | { 100 | "id": "tg_pilot_weapon" 101 | } 102 | ], 103 | "range": [ 104 | { 105 | "type": "Threat", 106 | "val": 1 107 | } 108 | ], 109 | "damage": [ 110 | { 111 | "type": "Kinetic", 112 | "val": 2 113 | } 114 | ] 115 | }, 116 | { 117 | "id": "pg_heavy_a_c", 118 | "name": "Heavy A/C", 119 | "type": "Weapon", 120 | "description": "Heavy weapons are designed with the augmented strength of hardsuits in mind and include war hammers, mallets, rams, pikes, and heavy two-handed assault swords.", 121 | "tags": [ 122 | { 123 | "id": "tg_inaccurate" 124 | }, 125 | { 126 | "id": "tg_pilot_weapon" 127 | } 128 | ], 129 | "range": [ 130 | { 131 | "type": "Threat", 132 | "val": 1 133 | } 134 | ], 135 | "damage": [ 136 | { 137 | "type": "kinetic", 138 | "val": 3 139 | } 140 | ] 141 | }, 142 | { 143 | "id": "pg_light_signature", 144 | "name": "Light Signature", 145 | "type": "Weapon", 146 | "description": "Light signature weapons might be oversized revolvers, braces of pistols, and submachine guns.", 147 | "tags": [ 148 | { 149 | "id": "tg_sidearm" 150 | }, 151 | { 152 | "id": "tg_set_damage_type" 153 | }, 154 | { 155 | "id": "tg_pilot_weapon" 156 | } 157 | ], 158 | "range": [ 159 | { 160 | "type": "Range", 161 | "val": 3 162 | } 163 | ], 164 | "damage": [ 165 | { 166 | "type": "variable", 167 | "val": 1 168 | } 169 | ], 170 | "effect": "When a signature weapon is acquired, choose its damage type – Explosive, Energy, or Kinetic." 171 | }, 172 | { 173 | "id": "pg_medium_signature", 174 | "name": "Medium Signature", 175 | "type": "Weapon", 176 | "description": "Medium signature weapons are assault rifles, shotguns, pack-fed lasers, or disruption guns.", 177 | "tags": [ 178 | { 179 | "id": "tg_set_damage_type" 180 | }, 181 | { 182 | "id": "tg_pilot_weapon" 183 | } 184 | ], 185 | "range": [ 186 | { 187 | "type": "Range", 188 | "val": 5 189 | } 190 | ], 191 | "damage": [ 192 | { 193 | "type": "variable", 194 | "val": 2 195 | } 196 | ], 197 | "effect": "When a signature weapon is acquired, choose its damage type – Explosive, Energy, or Kinetic." 198 | }, 199 | { 200 | "id": "pg_heavy_signature", 201 | "name": "Heavy Signature", 202 | "type": "Weapon", 203 | "description": "Heavy signature weapons are missile tubes, heavy lasers, light machine gun, or exotic rifles.", 204 | "tags": [ 205 | { 206 | "id": "tg_ordnance" 207 | }, 208 | { 209 | "id": "tg_loading" 210 | }, 211 | { 212 | "id": "tg_set_damage_type" 213 | }, 214 | { 215 | "id": "tg_pilot_weapon" 216 | } 217 | ], 218 | "range": [ 219 | { 220 | "type": "Range", 221 | "val": 10 222 | } 223 | ], 224 | "damage": [ 225 | { 226 | "type": "variable", 227 | "val": 4 228 | } 229 | ], 230 | "effect": "When a signature weapon is acquired, choose its damage type – Explosive, Energy, or Kinetic." 231 | }, 232 | { 233 | "id": "missing_pilotarmor", 234 | "name": "ERR: DATA NOT FOUND", 235 | "type": "Armor", 236 | "description": "COMP/CON is unable to retrieve the data necessary to furnish this Pilot Gear. This is likely the result of a missing or outdated content pack.", 237 | "tags": [ 238 | { 239 | "id": "tg_personal_armor" 240 | } 241 | ] 242 | }, 243 | { 244 | "id": "pg_light_hardsuit", 245 | "name": "Light Hardsuit", 246 | "type": "Armor", 247 | "description": "Light hardsuits are usually made from reactive, cloth-like weaves, with limited plating and few powered components to maximize mobility. Like other hardsuits, they can be sealed against vacuum, and protect against a decent amount of radiation and other harmful particles.", 248 | "bonuses": [ 249 | { 250 | "id": "pilot_hp", 251 | "val": 3 252 | }, 253 | { 254 | "id": "pilot_evasion", 255 | "val": 10, 256 | "replace": true 257 | }, 258 | { 259 | "id": "pilot_edef", 260 | "val": 10, 261 | "replace": true 262 | }, 263 | { 264 | "id": "pilot_speed", 265 | "val": 4, 266 | "replace": true 267 | } 268 | ], 269 | "tags": [ 270 | { 271 | "id": "tg_personal_armor" 272 | } 273 | ] 274 | }, 275 | { 276 | "id": "pg_assault_hardsuit", 277 | "name": "Assault Hardsuit", 278 | "type": "Armor", 279 | "description": "These hardsuits, common among military units, feature heavier plating than light hardsuits but more mobility than heavy hardsuits. They are powered, augmenting the user’s strength, and typically feature an onboard computer, sensor suite, integrated air, burst EVA system, and waste recycling systems.", 280 | "bonuses": [ 281 | { 282 | "id": "pilot_hp", 283 | "val": 3 284 | }, 285 | { 286 | "id": "pilot_armor", 287 | "val": 1 288 | }, 289 | { 290 | "id": "pilot_evasion", 291 | "val": 8, 292 | "replace": true 293 | }, 294 | { 295 | "id": "pilot_edef", 296 | "val": 8, 297 | "replace": true 298 | }, 299 | { 300 | "id": "pilot_speed", 301 | "val": 4, 302 | "replace": true 303 | } 304 | ], 305 | "tags": [ 306 | { 307 | "id": "tg_personal_armor" 308 | } 309 | ] 310 | }, 311 | { 312 | "id": "pg_heavy_hardsuit", 313 | "name": "Heavy Hardsuit", 314 | "type": "Armor", 315 | "description": "The heaviest hardsuits. They are always powered and up-armored with thick, composite armor. Heavy hardsuits often feature integrated weapons, powerful mobility suites, and – by augmenting their user’s strength – allow their user to field much heavier weapons than normal infantry can typically carry. Heavy hardsuits are in decline now that half-size chassis are popular, but they are still common among private militaries and middle-tier Diasporan armed forces.", 316 | "bonuses": [ 317 | { 318 | "id": "pilot_hp", 319 | "val": 3 320 | }, 321 | { 322 | "id": "pilot_armor", 323 | "val": 2 324 | }, 325 | { 326 | "id": "pilot_evasion", 327 | "val": 6, 328 | "replace": true 329 | }, 330 | { 331 | "id": "pilot_edef", 332 | "val": 8, 333 | "replace": true 334 | }, 335 | { 336 | "id": "pilot_speed", 337 | "val": 3, 338 | "replace": true 339 | } 340 | ], 341 | "tags": [ 342 | { 343 | "id": "tg_personal_armor" 344 | } 345 | ] 346 | }, 347 | { 348 | "id": "pg_mobility_hardsuit", 349 | "name": "Mobility Hardsuit", 350 | "type": "Armor", 351 | "effect": "These hardsuits have integrated flight systems, allowing pilots to fly when they move or Boost. Flying pilots must end their turn on the ground (or another surface) or begin falling.", 352 | "bonuses": [ 353 | { 354 | "id": "pilot_evasion", 355 | "val": 10, 356 | "replace": true 357 | }, 358 | { 359 | "id": "pilot_edef", 360 | "val": 10, 361 | "replace": true 362 | }, 363 | { 364 | "id": "pilot_speed", 365 | "val": 5, 366 | "replace": true 367 | } 368 | ], 369 | "tags": [ 370 | { 371 | "id": "tg_personal_armor" 372 | } 373 | ] 374 | }, 375 | { 376 | "id": "pg_stealth_hardsuit", 377 | "name": "Stealth Hardsuit", 378 | "type": "Armor", 379 | "effect": "As a quick action, pilots wearing stealth hardsuits can become Invisible. They cease to be Invisible if they take any damage.", 380 | "bonuses": [ 381 | { 382 | "id": "pilot_evasion", 383 | "val": 8, 384 | "replace": true 385 | }, 386 | { 387 | "id": "pilot_edef", 388 | "val": 8, 389 | "replace": true 390 | }, 391 | { 392 | "id": "pilot_speed", 393 | "val": 4, 394 | "replace": true 395 | } 396 | ], 397 | "tags": [ 398 | { 399 | "id": "tg_personal_armor" 400 | } 401 | ], 402 | "actions": [ 403 | { 404 | "name": "Activate Stealth Hardsuit", 405 | "activation": "Quick", 406 | "detail": "Become Invisible. You will cease to be Invisible if you take any damage.", 407 | "pilot": true 408 | } 409 | ] 410 | }, 411 | { 412 | "id": "missing_pilotgear", 413 | "name": "ERR: DATA NOT FOUND", 414 | "type": "Gear", 415 | "description": "COMP/CON is unable to retrieve the data necessary to furnish this Pilot Gear. This is likely the result of a missing or outdated content pack.", 416 | "tags": [ 417 | { 418 | "id": "tg_gear" 419 | } 420 | ] 421 | }, 422 | { 423 | "id": "pg_corrective", 424 | "name": "Corrective", 425 | "type": "Gear", 426 | "effect": "Expend a charge to apply correctives to Down and Out pilots, immediately bringing them back to consciousness at 1 HP.", 427 | "description": "This clear, plastic-like sheet can be placed over the wounds of severely injured pilots. It instantly begins to stabilize them, injecting medicine and deploying nanites to stitch wounds shut.", 428 | "actions": [ 429 | { 430 | "name": "Use Corrective", 431 | "activation": "Full", 432 | "detail": "Expend a charge to apply correctives to Down and Out pilots, immediately bringing them back to consciousness at 1 HP", 433 | "pilot": true 434 | } 435 | ], 436 | "tags": [ 437 | { 438 | "id": "tg_limited", 439 | "val": 1 440 | }, 441 | { 442 | "id": "tg_gear" 443 | } 444 | ] 445 | }, 446 | { 447 | "id": "pg_frag_grenades", 448 | "name": "Frag Grenades", 449 | "type": "Gear", 450 | "effect": "Expend a charge for the following effect:", 451 | "actions": [ 452 | { 453 | "name": "Use Frag Grenade", 454 | "activation": "Quick", 455 | "range": [ 456 | { 457 | "type": "Range", 458 | "val": 5 459 | }, 460 | { 461 | "type": "Blast", 462 | "val": 1 463 | } 464 | ], 465 | "damage": [ 466 | { 467 | "type": "Explosive", 468 | "val": 2 469 | } 470 | ], 471 | "detail": "Throw a grenade within Range 5. Affected characters within a Blast 1 must succeed on an Agility save or take 2 Explosive damage.", 472 | "pilot": true 473 | } 474 | ], 475 | "tags": [ 476 | { 477 | "id": "tg_limited", 478 | "val": 2 479 | }, 480 | { 481 | "id": "tg_grenade" 482 | }, 483 | { 484 | "id": "tg_gear" 485 | } 486 | ] 487 | }, 488 | { 489 | "id": "pg_patch", 490 | "name": "Patch", 491 | "type": "Gear", 492 | "effect": "Expend a charge to apply a patch to either yourself or an adjacent pilot, restoring half their maximum HP. Patches have no effect on Down and Out pilots.", 493 | "description": "“Patch” is pilot slang for any kind of modern first aid gear, including sprayable medi-gel and instant-acting medical patches.", 494 | "actions": [ 495 | { 496 | "name": "Use Patch", 497 | "activation": "Full", 498 | "detail": "Expend a charge to apply a patch to either yourself or an adjacent pilot, restoring half their maximum HP. Patches have no effect on Down and Out pilots.", 499 | "pilot": true 500 | } 501 | ], 502 | "tags": [ 503 | { 504 | "id": "tg_limited", 505 | "val": 1 506 | }, 507 | { 508 | "id": "tg_gear" 509 | } 510 | ] 511 | }, 512 | { 513 | "id": "pg_stims", 514 | "name": "Stims", 515 | "type": "Gear", 516 | "effect": "Expend a charge for one of the following effects:", 517 | "description": "These chemical stimulants are sometimes administered automatically by injectors built into a pilot’s suit, or even implanted within their body. Uncontrolled use can be addictive and dangerous to health in the long-term and is a problem for some pilots.", 518 | "actions": [ 519 | { 520 | "name": "Use Stim", 521 | "activation": "Quick", 522 | "detail": "Expend a charge for one of the following effects:", 523 | "pilot": true 524 | } 525 | ], 526 | "tags": [ 527 | { 528 | "id": "tg_limited", 529 | "val": 3 530 | }, 531 | { 532 | "id": "tg_gear" 533 | } 534 | ] 535 | }, 536 | { 537 | "id": "pg_thermite_charge", 538 | "name": "Thermite Charge", 539 | "type": "Gear", 540 | "effect": "Expend a charge for the following effect:", 541 | "deployables": [ 542 | { 543 | "name": "Thermite Charge", 544 | "type": "Mine", 545 | "detail": "This charge must be remotely detonated as a quick action. Affected characters must succeed on an Engineering save or take 3 Energy AP. Thermal charges automatically hit objects, dealing 10 Energy AP.", 546 | "pilot": true, 547 | "actions": [ 548 | { 549 | "name": "Detonate", 550 | "activation": "Quick", 551 | "detail": "Affected characters must succeed on an Engineering save or take 3 Energy AP. Thermal charges automatically hit objects, dealing 10 Energy AP.", 552 | "pilot": true 553 | } 554 | ] 555 | } 556 | ], 557 | "tags": [ 558 | { 559 | "id": "tg_limited", 560 | "val": 1 561 | }, 562 | { 563 | "id": "tg_gear" 564 | } 565 | ] 566 | }, 567 | { 568 | "id": "pg_antiphoton_visor", 569 | "name": "Antiphoton Visor", 570 | "type": "Gear", 571 | "description": "Designed to protect the wearer’s eyes from intense bursts of light, antiphoton visors are commonly found among breach teams and solar-forward operators. They are effective against flash weapons, intense UV light, and incidental charges from energy weapons.", 572 | "tags": [ 573 | { 574 | "id": "tg_gear" 575 | } 576 | ] 577 | }, 578 | { 579 | "id": "pg_camo_cloth", 580 | "name": "Camo Cloth", 581 | "type": "Gear", 582 | "description": "A square of reactive material that slowly shifts to reflect the surrounding environment, enough to cover a human comfortably. The transition takes about 10 seconds and makes anything hidden underneath very difficult to spot.", 583 | "tags": [ 584 | { 585 | "id": "tg_gear" 586 | } 587 | ] 588 | }, 589 | { 590 | "id": "pg_dataplating", 591 | "name": "Dataplating", 592 | "type": "Gear", 593 | "description": "Dataplating is a general term for any comm-linked jewelry, subdermal netting, wearable jaw, brow, or maxillary plates, etc., that allows subvocal communication and persistent heads-up and augmented reality displays without wearing a helm. Dataplates can quickly translate nearly any language, and allow users to communicate with each other all but silently.", 594 | "tags": [ 595 | { 596 | "id": "tg_gear" 597 | } 598 | ] 599 | }, 600 | { 601 | "id": "pg_extra_rations", 602 | "name": "Extra Rations", 603 | "type": "Gear", 604 | "description": "Pilot rations aren’t much better than their nautical forerunners – both are variants on hardtack and nutrient paste. Pilots often carry a stash of extra food, or luxuries like chocolate, coffee, alcohol, or preserved goods from their homeworld. These rations can be used to barter or boost morale.", 605 | "tags": [ 606 | { 607 | "id": "tg_gear" 608 | } 609 | ] 610 | }, 611 | { 612 | "id": "pg_flexsuit", 613 | "name": "Flexsuit", 614 | "type": "Gear", 615 | "description": "A strong base-layer suit that recycles water, generates nutrients, and adapts very rapidly to hostile environs, maintaining a stable condition and extending survivability. Flexsuit wearers can go for roughly a week without eating or drink thanks to the ambrosia paste generated by their suit before its systems are depleted; however, they don’t prevent feelings of hunger. Removing the suit for a day or two is enough to replenish its reserves. Flexsuits also maintain a steady temperature within acceptable parameters.", 616 | "tags": [ 617 | { 618 | "id": "tg_gear" 619 | } 620 | ] 621 | }, 622 | { 623 | "id": "pg_handheld_printer", 624 | "name": "Handheld Printer", 625 | "type": "Gear", 626 | "description": "A miniaturized version of Union’s full-scale printers, handheld printers can be used to make simple objects out of flexible and durable plastic – as long as you have the right pattern chip.", 627 | "tags": [ 628 | { 629 | "id": "tg_gear" 630 | } 631 | ] 632 | }, 633 | { 634 | "id": "pg_subjectivity_enhancement_suite", 635 | "name": "Subjectivity-Enhancement Suite", 636 | "type": "Gear", 637 | "description": "A subjectivity-enhancement suite is a set of cybernetic implants allowing users to hack systems without a rig. Users of these suites blend the organic with the synthetic, gaining the ability to extrude implanted universal-plug cables from within their body to make hardline connections with terminals. When plugged in, users can access a comprehensive, fully interactive alternate-reality interface with direct omninet access, making navigating – or hacking – local and networked systems as easy as wishing it so (of course, you must be careful: by opening up your mind to the digital, you may face dangers other, less enhanced people are ignorant of).", 638 | "tags": [ 639 | { 640 | "id": "tg_gear" 641 | } 642 | ] 643 | }, 644 | { 645 | "id": "pg_infoskin", 646 | "name": "Infoskin", 647 | "type": "Gear", 648 | "description": "A reactive, synthetic polymer with advanced qualities, infoskin bonds quickly to real skin and hair. Once applied, it responds to electronic signals delivered by linked software, rapidly changing its color and texture – even contorting and distorting its form – allowing wearers to make minor changes to their appearance. With infoskin, it’s a simple matter to alter facial features, hair color, or makeup patterns.", 649 | "tags": [ 650 | { 651 | "id": "tg_gear" 652 | } 653 | ] 654 | }, 655 | { 656 | "id": "pg_mag_clamps", 657 | "name": "Mag-Clamps", 658 | "type": "Gear", 659 | "description": "These clamps attach easily to any metal surface, enhancing maneuverability in zero-g environments or when repairing mechs. They can be carried or fitted to boots.", 660 | "tags": [ 661 | { 662 | "id": "tg_gear" 663 | } 664 | ] 665 | }, 666 | { 667 | "id": "pg_nanite_spray", 668 | "name": "Nanite Spray", 669 | "type": "Gear", 670 | "description": "A spray paint that can be applied to any surface. Nanite spray is invisible to the naked eye but able to transmit simple messages or small data packets when scanned.", 671 | "tags": [ 672 | { 673 | "id": "tg_gear" 674 | } 675 | ] 676 | }, 677 | { 678 | "id": "pg_omnihook", 679 | "name": "Omnihook", 680 | "type": "Gear", 681 | "description": "A portable – if bulky – omninet terminal that allows for communication, data transfer, and limited hot-spotting. Omnihooks are extremely valuable, although most mech squads have at least one. Tuning an omnihook requires a high level of skill, so they are usually mounted or carried by designated operators.", 682 | "tags": [ 683 | { 684 | "id": "tg_gear" 685 | } 686 | ] 687 | }, 688 | { 689 | "id": "pg_personal_drone", 690 | "name": "Personal Drone", 691 | "type": "Gear", 692 | "description": "Small, non-combat drones are a common sight in the field. They’re fairly noisy but can fly about half a mile with good maneuverability before losing signal, relaying audio and visual information as they go.", 693 | "tags": [ 694 | { 695 | "id": "tg_gear" 696 | } 697 | ] 698 | }, 699 | { 700 | "id": "pg_prosocollar", 701 | "name": "Prosocollar", 702 | "type": "Gear", 703 | "description": "A collar-like device that fits snugly around its wearer’s neck, projecting a holographic image over their face and head. Prosocollars can change their wearer’s voice and scramble or change their appearance. The projection won’t stand up to close inspection, but it can easily fool electronic systems and distant observers.", 704 | "tags": [ 705 | { 706 | "id": "tg_gear" 707 | } 708 | ] 709 | }, 710 | { 711 | "id": "pg_smart_scope", 712 | "name": "Smart Scope", 713 | "type": "Gear", 714 | "description": "A powerful electronic scope that provides high-resolution magnification up to two miles, and automatically adjusts its reticle for wind, gravity, and pressure. Smart scopes can project their field of vision and all data to the HUD of any networked user. They can also pair with other thermal, optical, or simulated-vision devices to further enhance targeting.", 715 | "tags": [ 716 | { 717 | "id": "tg_gear" 718 | } 719 | ] 720 | }, 721 | { 722 | "id": "pg_sleeping_bag", 723 | "name": "Sleeping Bag", 724 | "type": "Gear", 725 | "effect": "You can climb into your sleeping bag, gaining Immunity to burn, protection against vacuum, and enough air to last an hour; however, while in the sleeping bag you are Stunned and can’t take actions other than to exit the bag as a full action.", 726 | "description": "Coming in a variety of sizes, sleeping bags are a field necessity. They’re designed to fold out from a hardsuit, fit within a mech’s cockpit, resist fire and changes in temperature, and – when necessary – seal against vacuum.", 727 | "tags": [ 728 | { 729 | "id": "tg_gear" 730 | } 731 | ] 732 | }, 733 | { 734 | "id": "pg_ssc_sylph_undersuit", 735 | "name": "SSC Sylph Undersuit", 736 | "type": "Gear", 737 | "description": "Discovered on Acrimea IV, a biome cultivar world controlled by Smith-Shimano Corpro (SSC), the sylph is an organic lifeform that can seemingly survive in nearly any environment. Using breeding-analogous methods defined by established bioengineering doctrines, SSC developed the sylph undersuit – sterile, living sylphs grown as envelopes and fitted to their owners. The sylph bonds to its wearer, forming a symbiotic relationship: the sylph is sustained by the host’s waste products, in return protecting the host from a range of hostile environmental factors.
These semi-biological, skin-tight undersuits can be worn for extended periods. They are translucent, semi-liquid, and able to be stored when not in use, conforming to whatever container they are placed in. They clean the host’s body, aid natural healing processes, and eliminate waste. As desired, segments can become opaque, change color, or take on a new texture. Sylph undersuits can cover the host’s head, sealing against vacuum, providing protection against radiation, and filtering air or liquids, even providing the ability to breathe water for a limited time.", 738 | "tags": [ 739 | { 740 | "id": "tg_gear" 741 | } 742 | ] 743 | }, 744 | { 745 | "id": "pg_sound_system", 746 | "name": "Sound System", 747 | "type": "Gear", 748 | "description": "Though their tactical utility is questionable, many pilots set up internal speaker systems in their cockpits. This gives them a clear line to their compatriots during combat, along with the ability to play music.", 749 | "tags": [ 750 | { 751 | "id": "tg_gear" 752 | } 753 | ] 754 | }, 755 | { 756 | "id": "pg_tertiary_arm", 757 | "name": "Tertiary Arm", 758 | "type": "Gear", 759 | "description": "A powered third arm mounted on a bracket on the hardsuit. Tertiary arms are powered and controlled using the same neural bridge processes that allow hardsuits to respond to user input. They can be equipped with manipulators to allow for fine motor control, weapons to enhance combat efficacy, or specialty tools.", 760 | "tags": [ 761 | { 762 | "id": "tg_gear" 763 | } 764 | ] 765 | }, 766 | { 767 | "id": "pg_wilderness_survival_kit", 768 | "name": "Wilderness Survival Kit", 769 | "type": "Gear", 770 | "description": "This kit contains many essentials for surviving in hostile environments: a rebreather, water filters, hardsuit patches, backup thermals, a bivouac kit, and so on.", 771 | "tags": [ 772 | { 773 | "id": "tg_gear" 774 | } 775 | ] 776 | } 777 | ] --------------------------------------------------------------------------------