├── CNAME ├── 20f65602e5b04f49825e043685158e36.txt ├── favicon.ico ├── logo192.png ├── logo512.png ├── robots.txt ├── sitemap.xml ├── asset-manifest.json ├── manifest.json ├── genders.json ├── static ├── js │ ├── main.b1fefc84.js.LICENSE.txt │ ├── 787.7968a0b1.chunk.js │ └── 787.7968a0b1.chunk.js.map └── css │ ├── main.70b7b0d9.css │ └── main.70b7b0d9.css.map ├── appearance.json ├── names.json ├── index.html ├── traits.json ├── races.json └── jobs.json /CNAME: -------------------------------------------------------------------------------- 1 | www.npcgenerate.com -------------------------------------------------------------------------------- /20f65602e5b04f49825e043685158e36.txt: -------------------------------------------------------------------------------- 1 | 20f65602e5b04f49825e043685158e36 -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Refflicto/npc-generator-live/HEAD/favicon.ico -------------------------------------------------------------------------------- /logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Refflicto/npc-generator-live/HEAD/logo192.png -------------------------------------------------------------------------------- /logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Refflicto/npc-generator-live/HEAD/logo512.png -------------------------------------------------------------------------------- /robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Sitemap: https://www.npcgenerate.com/sitemap.xml 4 | Disallow: 5 | -------------------------------------------------------------------------------- /sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | https://www.npcgenerate.com/ 12 | 2022-10-13T04:42:00+00:00 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /asset-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": { 3 | "main.css": "/static/css/main.70b7b0d9.css", 4 | "main.js": "/static/js/main.b1fefc84.js", 5 | "static/js/787.7968a0b1.chunk.js": "/static/js/787.7968a0b1.chunk.js", 6 | "index.html": "/index.html", 7 | "main.70b7b0d9.css.map": "/static/css/main.70b7b0d9.css.map", 8 | "main.b1fefc84.js.map": "/static/js/main.b1fefc84.js.map", 9 | "787.7968a0b1.chunk.js.map": "/static/js/787.7968a0b1.chunk.js.map" 10 | }, 11 | "entrypoints": [ 12 | "static/css/main.70b7b0d9.css", 13 | "static/js/main.b1fefc84.js" 14 | ] 15 | } -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /genders.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "index": 0, 4 | "type": "Male", 5 | "pronounSubject": "he", 6 | "pronounObject": "him", 7 | "pronounPossessive": "his", 8 | "collectiveNoun": "is", 9 | "possessiveNoun": "has", 10 | "weight": 0.45, 11 | "defaultCheckbox": true 12 | }, 13 | { 14 | "index": 1, 15 | "type": "Female", 16 | "pronounSubject": "she", 17 | "pronounObject": "her", 18 | "pronounPossessive": "her", 19 | "collectiveNoun": "is", 20 | "possessiveNoun": "has", 21 | "weight": 0.45, 22 | "defaultCheckbox": true 23 | }, 24 | { 25 | "index": 2, 26 | "type": "Non-Binary", 27 | "pronounSubject": "they", 28 | "pronounObject": "them", 29 | "pronounPossessive": "their", 30 | "collectiveNoun": "are", 31 | "possessiveNoun": "have", 32 | "weight": 0.1, 33 | "defaultCheckbox": true 34 | } 35 | ] 36 | -------------------------------------------------------------------------------- /static/js/main.b1fefc84.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ 2 | 3 | /** 4 | * @license React 5 | * react-dom-test-utils.production.min.js 6 | * 7 | * Copyright (c) Facebook, Inc. and its affiliates. 8 | * 9 | * This source code is licensed under the MIT license found in the 10 | * LICENSE file in the root directory of this source tree. 11 | */ 12 | 13 | /** 14 | * @license React 15 | * react-dom.production.min.js 16 | * 17 | * Copyright (c) Facebook, Inc. and its affiliates. 18 | * 19 | * This source code is licensed under the MIT license found in the 20 | * LICENSE file in the root directory of this source tree. 21 | */ 22 | 23 | /** 24 | * @license React 25 | * react-jsx-runtime.production.min.js 26 | * 27 | * Copyright (c) Facebook, Inc. and its affiliates. 28 | * 29 | * This source code is licensed under the MIT license found in the 30 | * LICENSE file in the root directory of this source tree. 31 | */ 32 | 33 | /** 34 | * @license React 35 | * react.production.min.js 36 | * 37 | * Copyright (c) Facebook, Inc. and its affiliates. 38 | * 39 | * This source code is licensed under the MIT license found in the 40 | * LICENSE file in the root directory of this source tree. 41 | */ 42 | 43 | /** 44 | * @license React 45 | * scheduler.production.min.js 46 | * 47 | * Copyright (c) Facebook, Inc. and its affiliates. 48 | * 49 | * This source code is licensed under the MIT license found in the 50 | * LICENSE file in the root directory of this source tree. 51 | */ 52 | 53 | /** @license React v17.0.2 54 | * react-is.production.min.js 55 | * 56 | * Copyright (c) Facebook, Inc. and its affiliates. 57 | * 58 | * This source code is licensed under the MIT license found in the 59 | * LICENSE file in the root directory of this source tree. 60 | */ 61 | -------------------------------------------------------------------------------- /static/css/main.70b7b0d9.css: -------------------------------------------------------------------------------- 1 | body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.title{background-color:#181818;box-shadow:0 0 10px 10px #464646}.resultText,h1{color:#dcdcdc}.resultAttribute{color:#a73335}.card-header .fa{transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.card-header .collapsed .fa{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.fa2{transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.collapsed .fa2{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.modifier-heading{background-color:#2c3034!important}.modifier-body{background-color:#32363a!important}.sectionText{position:relative;top:4px}hr{border:none;border-top:3px double red;color:red;height:5px;overflow:visible;text-align:center}.npc-list{cursor:pointer}@media only screen and (max-width:550px){.statBlock{margin:auto;width:90%}}@media only screen and (max-width:1000px){.npc-list{font-size:80%}}.npc-list-border{border-color:#a73335!important}.npc-list-active{background-color:#32363a!important}.lock{cursor:pointer}.lock-transparent{color:transparent}.block{background-color:#ece8df;font-family:Arial,Helvetica,sans-serif;font-size:11px;margin:auto;width:500px}.gradient{background:linear-gradient(10deg,#a73335,#fff);height:5px;margin:7px 0}.name{-webkit-font-feature-settings:"smcp";font-feature-settings:"smcp";color:#a73335;font-family:Georgia,serif;font-size:225%;font-variant:small-caps;font-weight:700}.description{font-style:italic}.bold{font-weight:700}.red,.tableBlock{color:#a73335}.tableBlock{border:0;border-collapse:collapse;width:100%}.tdBlock,.thBlock{text-align:center;width:50px}.actions{-webkit-font-feature-settings:"smcp";font-feature-settings:"smcp";font-size:175%;font-variant:small-caps;margin:17px 0 0}.hr{background:#a73335;height:2px}.attack{margin:5px 0}.attackname{font-style:italic;font-weight:700} 2 | /*# sourceMappingURL=main.70b7b0d9.css.map*/ -------------------------------------------------------------------------------- /appearance.json: -------------------------------------------------------------------------------- 1 | { 2 | "weight": [ 3 | "Very Underweight", 4 | "Underweight", 5 | "Average Weight", 6 | "Overweight", 7 | "Very Overweight" 8 | ], 9 | "height": ["Very Short", "Short", "Average Height", "Tall", "Very Tall"], 10 | "basicSkinColour": [ 11 | "Pale", 12 | "Fair", 13 | "Tanned", 14 | "Olive", 15 | "Brown", 16 | "Black", 17 | "Bronze", 18 | "Beige", 19 | "Gray" 20 | ], 21 | "hairStyle": [ 22 | "Short and Straight", 23 | "Short and Curly", 24 | "Medium and Straight", 25 | "Medium and Curly", 26 | "Long and Straight", 27 | "Long and Curly", 28 | "Tied up in a Ponytail", 29 | "Bald", 30 | "Dreadlocks", 31 | "Mohawk", 32 | "Tied up in a Bun" 33 | ], 34 | "basicHairColour": [ 35 | "Black", 36 | "Dark Brown", 37 | "Medium Brown", 38 | "Light Brown", 39 | "Auburn", 40 | "Red", 41 | "Copper", 42 | "Strawberry Blonde", 43 | "Light Blonde", 44 | "White" 45 | ], 46 | "facialHair": [ 47 | "Short Stubble", 48 | "Long Stubble", 49 | "French Fork Beard", 50 | "Verdi Beard", 51 | "Full Beard", 52 | "Chin Curtain", 53 | "Extended Goatee", 54 | "Anchor Beard", 55 | "Van Dyke Beard", 56 | "Soul Patch", 57 | "Goatee", 58 | "Overgrown Beard", 59 | "Mutton Chops", 60 | "Horseshoe Mustache", 61 | "Fancy Mustache" 62 | ], 63 | "basicEyeColour": ["Brown", "Hazel", "Blue", "Green", "Gray", "Amber"], 64 | "basicDamageType": [ 65 | "Shallow Slashing Scar on", 66 | "Deep Slashing Scar on", 67 | "Shallow Beast Scar on", 68 | "Deep Beast Scar on", 69 | "Shallow Piercing Scar on", 70 | "Deep Piercing Scar on", 71 | "Lightly bruised", 72 | "Heavily bruised", 73 | "Light Burn on", 74 | "Heavy Burn on", 75 | "Amputated", 76 | "Disfigured", 77 | "Malformed", 78 | "Diseased", 79 | "Infected" 80 | ], 81 | "basicDamageArea": [ 82 | "Eye", 83 | "Ear", 84 | "Nose", 85 | "Arm", 86 | "Hand", 87 | "Finger", 88 | "Leg", 89 | "Foot" 90 | ], 91 | "underClothingColour": [ 92 | "Black", 93 | "White", 94 | "Gray", 95 | "Silver", 96 | "Beige", 97 | "Brown", 98 | "Dark Red", 99 | "Dark Green", 100 | "Dark Blue", 101 | "Dark Yellow", 102 | "Light Red", 103 | "Light Green", 104 | "Light Blue", 105 | "Light Yellow" 106 | ], 107 | "underClothing": [ 108 | "Ragged Working Robes", 109 | "Working Robes", 110 | "Refined Working Robes", 111 | "Ragged Travellers Robes", 112 | "Travellers Robes", 113 | "Refined Travellers Robes", 114 | "Ragged Noble Robes", 115 | "Noble Robes", 116 | "Refined Noble Robes", 117 | "Ragged Fake Armor", 118 | "Fake Armor", 119 | "Refined Fake Armor" 120 | ], 121 | "overClothing": [ 122 | "Nothing", 123 | "Cloth Cloak", 124 | "Pelt Cloak", 125 | "Pelt Jacket", 126 | "Wool Jacket", 127 | "Cape" 128 | ], 129 | "accessory": [ 130 | "Wool Gloves", 131 | "Leather Gloves", 132 | "a Scarf", 133 | "an Animal's Pelt", 134 | "a Creature's Skull", 135 | "Counterfeit Rings", 136 | "Expensive Rings", 137 | "a Counterfeit Necklace", 138 | "an Expensive Necklace" 139 | ] 140 | } 141 | -------------------------------------------------------------------------------- /names.json: -------------------------------------------------------------------------------- 1 | { 2 | "human": { 3 | "maleNames": [ 4 | "Anlow", 5 | "Arando", 6 | "Bram", 7 | "Cale", 8 | "Dalkon", 9 | "Daylen", 10 | "Dodd", 11 | "Dungarth", 12 | "Dyrk", 13 | "Eandro", 14 | "Falken", 15 | "Feck", 16 | "Fenton", 17 | "Fushud", 18 | "Gryphero", 19 | "Hagar", 20 | "Jeras", 21 | "Jules", 22 | "Krynt", 23 | "Lavant", 24 | "Leyten", 25 | "Madian", 26 | "Malfier", 27 | "Markus", 28 | "Meklan", 29 | "Milan", 30 | "Namen", 31 | "Navaren", 32 | "Nerle", 33 | "Nilus", 34 | "Ningyan", 35 | "Norris", 36 | "Quentin", 37 | "Reve", 38 | "Semil", 39 | "Sevenson", 40 | "Steveren", 41 | "Talfen", 42 | "Tamond", 43 | "Taran", 44 | "Tavon", 45 | "Tegan", 46 | "Vanan", 47 | "Vincent" 48 | ], 49 | "femaleNames": [ 50 | "Aliza", 51 | "Azura", 52 | "Belda", 53 | "Brey", 54 | "Connie", 55 | "Deslin", 56 | "Dyana", 57 | "Emmaline", 58 | "Francesca", 59 | "Fortuna", 60 | "Galilea", 61 | "Gwend", 62 | "Hailie", 63 | "Hallan", 64 | "Hildie", 65 | "Kathrine", 66 | "Kasaki", 67 | "Kelsi", 68 | "Lenore", 69 | "Lilli", 70 | "Lorelei", 71 | "Luana", 72 | "Lyra", 73 | "Madlen", 74 | "Marcie", 75 | "Mirabel", 76 | "Moniqua", 77 | "Nada", 78 | "Nafia", 79 | "Ortelia", 80 | "Paloma", 81 | "Pharana", 82 | "Remora", 83 | "Rosalyn", 84 | "Sachil", 85 | "Saidi", 86 | "Tanika", 87 | "Tura", 88 | "Tylsa", 89 | "Vencia", 90 | "Xandrilla" 91 | ], 92 | "surnames": [ 93 | "Arkalis", 94 | "Armanci", 95 | "Bilger", 96 | "Blackstrand", 97 | "Brightwater", 98 | "Carnavon", 99 | "Caskajaro", 100 | "Coldshore", 101 | "Coyle", 102 | "Cresthill", 103 | "Cuttlescar", 104 | "Daargen", 105 | "Dalicarlia", 106 | "Danamark", 107 | "Donoghan", 108 | "Dorgav", 109 | "Drumwind", 110 | "Dunhall", 111 | "Ereghast", 112 | "Falck", 113 | "Fallenbridge", 114 | "Faringray", 115 | "Fletcher", 116 | "Fryft", 117 | "Goldrudder", 118 | "Grantham", 119 | "Graylock", 120 | "Gullscream", 121 | "Hindergrass", 122 | "Iscalon", 123 | "Kreel", 124 | "Kroft", 125 | "Lamoth", 126 | "Leerstrom", 127 | "Lynchfield", 128 | "Moonridge", 129 | "Netheridge", 130 | "Oakenheart", 131 | "Pyncion", 132 | "Ratley", 133 | "Redraven", 134 | "Revenmar", 135 | "Roxley", 136 | "Sell", 137 | "Seratolva", 138 | "Shanks", 139 | "Shattermast", 140 | "Shaulfer", 141 | "Silvergraft", 142 | "Stavenger", 143 | "Stormchapel", 144 | "Strong", 145 | "Swiller", 146 | "Talandro", 147 | "Targana", 148 | "Towerfall", 149 | "Umbermoor", 150 | "Van Devries", 151 | "Van Gandt", 152 | "Van Hyden", 153 | "Varcona", 154 | "Varzand", 155 | "Voortham", 156 | "Vrye", 157 | "Webb", 158 | "Welfer", 159 | "Wilxes", 160 | "Wintermere", 161 | "Wygarthe", 162 | "Zatchet", 163 | "Zethergyll" 164 | ] 165 | } 166 | } 167 | -------------------------------------------------------------------------------- /static/css/main.70b7b0d9.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"static/css/main.70b7b0d9.css","mappings":"AAAA,KAKE,kCAAmC,CACnC,iCAAkC,CAJlC,mIAEY,CAHZ,QAMF,CAEA,KACE,uEAEF,CCZA,OACE,wBAAiC,CACjC,gCACF,CAEA,eAEE,aACF,CAEA,iBACE,aACF,CAEA,iBACE,4CAAsC,CAAtC,oCAAsC,CAAtC,sEACF,CACA,4BACE,gCAAyB,CAAzB,wBACF,CAEA,KACE,4CAAsC,CAAtC,oCAAsC,CAAtC,sEACF,CACA,gBACE,gCAAyB,CAAzB,wBACF,CAEA,kBACE,kCACF,CAEA,eACE,kCACF,CAEA,aACE,iBAAkB,CAClB,OACF,CAEA,GAEE,WAA0B,CAA1B,yBAA0B,CAC1B,SAAU,CAGV,UAAW,CAFX,gBAAiB,CACjB,iBAEF,CAEA,UACE,cACF,CAEA,yCACE,WAEE,WAAY,CADZ,SAEF,CACF,CAEA,0CACE,UACE,aACF,CACF,CAEA,iBACE,8BACF,CAEA,iBACE,kCACF,CAEA,MACE,cACF,CAEA,kBACE,iBACF,CCjFA,OAIE,wBAAoC,CAFpC,sCAAyC,CACzC,cAAe,CAEf,WAAY,CAJZ,WAKF,CACA,UACE,8CAAkD,CAClD,UAAW,CACX,YACF,CACA,MAGE,oCAAwB,CAAxB,4BAAwB,CAExB,aAAc,CAHd,yBAA2B,CAD3B,cAAe,CAEf,uBAAwB,CACxB,eAEF,CACA,aACE,iBACF,CACA,MACE,eACF,CAIA,iBAFE,aAOF,CALA,YAEE,QAAW,CACX,wBAAyB,CAFzB,UAIF,CACA,kBAGE,iBAAkB,CADlB,UAEF,CACA,SAEE,oCAAwB,CAAxB,4BAAwB,CADxB,cAAe,CACf,uBAAwB,CACxB,eACF,CACA,IACE,kBAAmB,CACnB,UACF,CACA,QACE,YACF,CACA,YAEE,iBAAkB,CADlB,eAEF","sources":["index.css","App.css","statBlock.css"],"sourcesContent":["body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n monospace;\n}\n",".title {\n background-color: rgb(24, 24, 24);\n box-shadow: 0 0 10px 10px rgb(70, 70, 70);\n}\n\nh1,\n.resultText {\n color: rgb(220, 220, 220);\n}\n\n.resultAttribute {\n color: #a73335;\n}\n\n.card-header .fa {\n transition: 0.3s transform ease-in-out;\n}\n.card-header .collapsed .fa {\n transform: rotate(-90deg);\n}\n\n.fa2 {\n transition: 0.3s transform ease-in-out;\n}\n.collapsed .fa2 {\n transform: rotate(-90deg);\n}\n\n.modifier-heading {\n background-color: rgb(44, 48, 52) !important;\n}\n\n.modifier-body {\n background-color: rgb(50, 54, 58) !important;\n}\n\n.sectionText {\n position: relative;\n top: 4px;\n}\n\nhr {\n border: none;\n border-top: 3px double red;\n color: red;\n overflow: visible;\n text-align: center;\n height: 5px;\n}\n\n.npc-list {\n cursor: pointer;\n}\n\n@media only screen and (max-width: 550px) {\n .statBlock {\n width: 90%;\n margin: auto;\n }\n}\n\n@media only screen and (max-width: 1000px) {\n .npc-list {\n font-size: 80%;\n }\n}\n\n.npc-list-border {\n border-color: #a73335 !important;\n}\n\n.npc-list-active {\n background-color: rgb(50, 54, 58) !important;\n}\n\n.lock {\n cursor: pointer;\n}\n\n.lock-transparent {\n color: transparent;\n}\n",".block {\r\n width: 500px;\r\n font-family: Arial, Helvetica, sans-serif;\r\n font-size: 11px;\r\n background-color: rgb(236, 232, 223);\r\n margin: auto;\r\n}\r\n.gradient {\r\n background: linear-gradient(10deg, #a73335, white);\r\n height: 5px;\r\n margin: 7px 0px;\r\n}\r\n.name {\r\n font-size: 225%;\r\n font-family: Georgia, serif;\r\n font-variant: small-caps;\r\n font-weight: bold;\r\n color: #a73335;\r\n}\r\n.description {\r\n font-style: italic;\r\n}\r\n.bold {\r\n font-weight: bold;\r\n}\r\n.red {\r\n color: #a73335;\r\n}\r\n.tableBlock {\r\n width: 100%;\r\n border: 0px;\r\n border-collapse: collapse;\r\n color: #a73335;\r\n}\r\n.thBlock,\r\n.tdBlock {\r\n width: 50px;\r\n text-align: center;\r\n}\r\n.actions {\r\n font-size: 175%;\r\n font-variant: small-caps;\r\n margin: 17px 0px 0px 0px;\r\n}\r\n.hr {\r\n background: #a73335;\r\n height: 2px;\r\n}\r\n.attack {\r\n margin: 5px 0px;\r\n}\r\n.attackname {\r\n font-weight: bold;\r\n font-style: italic;\r\n}\r\n"],"names":[],"sourceRoot":""} -------------------------------------------------------------------------------- /static/js/787.7968a0b1.chunk.js: -------------------------------------------------------------------------------- 1 | "use strict";(self.webpackChunknpc_generator=self.webpackChunknpc_generator||[]).push([[787],{787:function(e,n,t){t.r(n),t.d(n,{getCLS:function(){return y},getFCP:function(){return g},getFID:function(){return C},getLCP:function(){return P},getTTFB:function(){return D}});var i,r,a,o,u=function(e,n){return{name:e,value:void 0===n?-1:n,delta:0,entries:[],id:"v2-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}},c=function(e,n){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if("first-input"===e&&!("PerformanceEventTiming"in self))return;var t=new PerformanceObserver((function(e){return e.getEntries().map(n)}));return t.observe({type:e,buffered:!0}),t}}catch(e){}},f=function(e,n){var t=function t(i){"pagehide"!==i.type&&"hidden"!==document.visibilityState||(e(i),n&&(removeEventListener("visibilitychange",t,!0),removeEventListener("pagehide",t,!0)))};addEventListener("visibilitychange",t,!0),addEventListener("pagehide",t,!0)},s=function(e){addEventListener("pageshow",(function(n){n.persisted&&e(n)}),!0)},m=function(e,n,t){var i;return function(r){n.value>=0&&(r||t)&&(n.delta=n.value-(i||0),(n.delta||void 0===i)&&(i=n.value,e(n)))}},v=-1,p=function(){return"hidden"===document.visibilityState?0:1/0},d=function(){f((function(e){var n=e.timeStamp;v=n}),!0)},l=function(){return v<0&&(v=p(),d(),s((function(){setTimeout((function(){v=p(),d()}),0)}))),{get firstHiddenTime(){return v}}},g=function(e,n){var t,i=l(),r=u("FCP"),a=function(e){"first-contentful-paint"===e.name&&(f&&f.disconnect(),e.startTime-1&&e(n)},r=u("CLS",0),a=0,o=[],v=function(e){if(!e.hadRecentInput){var n=o[0],i=o[o.length-1];a&&e.startTime-i.startTime<1e3&&e.startTime-n.startTime<5e3?(a+=e.value,o.push(e)):(a=e.value,o=[e]),a>r.value&&(r.value=a,r.entries=o,t())}},p=c("layout-shift",v);p&&(t=m(i,r,n),f((function(){p.takeRecords().map(v),t(!0)})),s((function(){a=0,T=-1,r=u("CLS",0),t=m(i,r,n)})))},E={passive:!0,capture:!0},w=new Date,L=function(e,n){i||(i=n,r=e,a=new Date,F(removeEventListener),S())},S=function(){if(r>=0&&r1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,n){var t=function(){L(e,n),r()},i=function(){r()},r=function(){removeEventListener("pointerup",t,E),removeEventListener("pointercancel",i,E)};addEventListener("pointerup",t,E),addEventListener("pointercancel",i,E)}(n,e):L(n,e)}},F=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(n){return e(n,b,E)}))},C=function(e,n){var t,a=l(),v=u("FID"),p=function(e){e.startTimeperformance.now())return;t.entries=[n],e(t)}catch(e){}},"complete"===document.readyState?setTimeout(n,0):addEventListener("load",(function(){return setTimeout(n,0)}))}}}]); 2 | //# sourceMappingURL=787.7968a0b1.chunk.js.map -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | Fantasy NPC Generator with 5E Stat Block
  • NPC Generator

    The generator will randomise all of the attributes above from a set of master lists. Many of these attributes effect the generation of others, this is covered more in Attribute Generation. The master lists are linked below.

    The full code of the generator is here:

    The site is a React App hosted through GitHub Pages. The master branch contains the development files while the gh-pages branch contains the static build version of the site.

  • Modifiers

    Modifiers allow you to modify the data allowed in some master lists. By default, almost everything is allowed. The exceptions are children aged NPCs, mainly because jobs have such significance in the generator. Unemployed is also off by default, but is still fully functional.
    Trait amount is how many traits will be generated for the NPC, I recommend keeping it around 3, enough to be unique but not too high to be unmanageable.
    Power modifiers are purely for the stat block. I designed the default NPC power around my own use, as I mainly want the stat block as a backup option, if for some reason that NPC should end up in combat.
    Finally, the Result Settings modifiers are mainly for aesthetics. The exception is showing stat calculation, if you want to see where the NPC's stats were derived.
  • Attribute Generation

    The first attribute generated is gender, which is used to inform the NPC's name.
    Race comes next, which contains data limits for the Age. Race also adds racial features and some proficiencies to the stat block, and is used heavily in the Appearance section.
    A Job is then randomised, which contains a lot of data, including the weapon and any armour the NPC wears, as well as job related stat bonuses, proficiencies, and saving throws. Jobs are also the main attribute that affects the story hook.
    Traits are then selected from a master list. If, when selected, a trait has other conflicting traits in the master list, those traits will be removed for the current selection. Some traits give stat bonuses, and some have story hooks.
  • Advanced Features

    The Export button allows you to save your current NPC to a text file as a JSON object. For those curious about the NPC data I did add formatting to the file to make it readable. The Import function takes a text file of the same format as an exported text file and replaces the current NPC with the imported one. A warning if you want to modify the data in the text file, some values are sensitive, and attempting to import an incorrect NPC will crash the app.
    The download button takes an image of the sections starting at the blurb down to the stat block. The dimensions of the image are based off the size of your browser window.
    The Name attribute under General is editable, and will update the NPC List, Blurb, and Stat Block as you change the field.
    Locking can be used if you like some aspects of an NPC, but want to randomise again. Any locked attribute will maintain between generations, bypassing some checks. An example is if you lock age at 300, but then generate a human, the age will still be 300 even though that would normally be unattainable for humans. Note: even when locks are hidden via modifiers, all locked attributes will remain locked.
-------------------------------------------------------------------------------- /static/js/787.7968a0b1.chunk.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"static/js/787.7968a0b1.chunk.js","mappings":"+QAAA,IAAIA,EAAEC,EAAEC,EAAEC,EAAEC,EAAE,SAASJ,EAAEC,GAAG,MAAM,CAACI,KAAKL,EAAEM,WAAM,IAASL,GAAG,EAAEA,EAAEM,MAAM,EAAEC,QAAQ,GAAGC,GAAG,MAAMC,OAAOC,KAAKC,MAAM,KAAKF,OAAOG,KAAKC,MAAM,cAAcD,KAAKE,UAAU,MAAO,EAACC,EAAE,SAAShB,EAAEC,GAAG,IAAI,GAAGgB,oBAAoBC,oBAAoBC,SAASnB,GAAG,CAAC,GAAG,gBAAgBA,KAAK,2BAA2BoB,MAAM,OAAO,IAAIlB,EAAE,IAAIe,qBAAqB,SAASjB,GAAG,OAAOA,EAAEqB,aAAaC,IAAIrB,EAAG,IAAG,OAAOC,EAAEqB,QAAQ,CAACC,KAAKxB,EAAEyB,UAAS,IAAKvB,CAAE,CAAW,CAAV,MAAMF,GAAI,CAAC,EAAC0B,EAAE,SAAS1B,EAAEC,GAAG,IAAIC,EAAE,SAASA,EAAEC,GAAG,aAAaA,EAAEqB,MAAM,WAAWG,SAASC,kBAAkB5B,EAAEG,GAAGF,IAAI4B,oBAAoB,mBAAmB3B,GAAE,GAAI2B,oBAAoB,WAAW3B,GAAE,IAAM,EAAC4B,iBAAiB,mBAAmB5B,GAAE,GAAI4B,iBAAiB,WAAW5B,GAAE,EAAI,EAAC6B,EAAE,SAAS/B,GAAG8B,iBAAiB,YAAY,SAAS7B,GAAGA,EAAE+B,WAAWhC,EAAEC,EAAG,IAAE,EAAI,EAACgC,EAAE,SAASjC,EAAEC,EAAEC,GAAG,IAAIC,EAAE,OAAO,SAASC,GAAGH,EAAEK,OAAO,IAAIF,GAAGF,KAAKD,EAAEM,MAAMN,EAAEK,OAAOH,GAAG,IAAIF,EAAEM,YAAO,IAASJ,KAAKA,EAAEF,EAAEK,MAAMN,EAAEC,IAAK,CAAC,EAACiC,GAAG,EAAEC,EAAE,WAAW,MAAM,WAAWR,SAASC,gBAAgB,EAAE,GAAI,EAACQ,EAAE,WAAWV,GAAG,SAAS1B,GAAG,IAAIC,EAAED,EAAEqC,UAAUH,EAAEjC,CAAE,IAAE,EAAI,EAACqC,EAAE,WAAW,OAAOJ,EAAE,IAAIA,EAAEC,IAAIC,IAAIL,GAAG,WAAWQ,YAAY,WAAWL,EAAEC,IAAIC,GAAI,GAAE,EAAG,KAAI,CAAKI,sBAAkB,OAAON,CAAE,EAAE,EAACO,EAAE,SAASzC,EAAEC,GAAG,IAAIC,EAAEC,EAAEmC,IAAIZ,EAAEtB,EAAE,OAAO8B,EAAE,SAASlC,GAAG,2BAA2BA,EAAEK,OAAO+B,GAAGA,EAAEM,aAAa1C,EAAE2C,UAAUxC,EAAEqC,kBAAkBd,EAAEpB,MAAMN,EAAE2C,UAAUjB,EAAElB,QAAQoC,KAAK5C,GAAGE,GAAE,IAAM,EAACiC,EAAEU,OAAOC,aAAaA,YAAYC,kBAAkBD,YAAYC,iBAAiB,0BAA0B,GAAGX,EAAED,EAAE,KAAKnB,EAAE,QAAQkB,IAAIC,GAAGC,KAAKlC,EAAE+B,EAAEjC,EAAE0B,EAAEzB,GAAGkC,GAAGD,EAAEC,GAAGJ,GAAG,SAAS5B,GAAGuB,EAAEtB,EAAE,OAAOF,EAAE+B,EAAEjC,EAAE0B,EAAEzB,GAAG+C,uBAAuB,WAAWA,uBAAuB,WAAWtB,EAAEpB,MAAMwC,YAAYlC,MAAMT,EAAEkC,UAAUnC,GAAE,EAAI,GAAG,GAAG,IAAI,EAAC+C,GAAE,EAAGC,GAAG,EAAEC,EAAE,SAASnD,EAAEC,GAAGgD,IAAIR,GAAG,SAASzC,GAAGkD,EAAElD,EAAEM,KAAM,IAAG2C,GAAE,GAAI,IAAI/C,EAAEC,EAAE,SAASF,GAAGiD,GAAG,GAAGlD,EAAEC,EAAG,EAACiC,EAAE9B,EAAE,MAAM,GAAG+B,EAAE,EAAEC,EAAE,GAAGE,EAAE,SAAStC,GAAG,IAAIA,EAAEoD,eAAe,CAAC,IAAInD,EAAEmC,EAAE,GAAGjC,EAAEiC,EAAEA,EAAEiB,OAAO,GAAGlB,GAAGnC,EAAE2C,UAAUxC,EAAEwC,UAAU,KAAK3C,EAAE2C,UAAU1C,EAAE0C,UAAU,KAAKR,GAAGnC,EAAEM,MAAM8B,EAAEQ,KAAK5C,KAAKmC,EAAEnC,EAAEM,MAAM8B,EAAE,CAACpC,IAAImC,EAAED,EAAE5B,QAAQ4B,EAAE5B,MAAM6B,EAAED,EAAE1B,QAAQ4B,EAAElC,IAAK,CAAC,EAACiD,EAAEnC,EAAE,eAAesB,GAAGa,IAAIjD,EAAE+B,EAAE9B,EAAE+B,EAAEjC,GAAGyB,GAAG,WAAWyB,EAAEG,cAAchC,IAAIgB,GAAGpC,GAAE,EAAI,IAAG6B,GAAG,WAAWI,EAAE,EAAEe,GAAG,EAAEhB,EAAE9B,EAAE,MAAM,GAAGF,EAAE+B,EAAE9B,EAAE+B,EAAEjC,EAAG,IAAI,EAACsD,EAAE,CAACC,SAAQ,EAAGC,SAAQ,GAAIC,EAAE,IAAI/C,KAAKgD,EAAE,SAASxD,EAAEC,GAAGJ,IAAIA,EAAEI,EAAEH,EAAEE,EAAED,EAAE,IAAIS,KAAKiD,EAAE/B,qBAAqBgC,IAAK,EAACA,EAAE,WAAW,GAAG5D,GAAG,GAAGA,EAAEC,EAAEwD,EAAE,CAAC,IAAItD,EAAE,CAAC0D,UAAU,cAAczD,KAAKL,EAAEwB,KAAKuC,OAAO/D,EAAE+D,OAAOC,WAAWhE,EAAEgE,WAAWrB,UAAU3C,EAAEqC,UAAU4B,gBAAgBjE,EAAEqC,UAAUpC,GAAGE,EAAE+D,SAAS,SAASlE,GAAGA,EAAEI,EAAG,IAAGD,EAAE,EAAG,CAAC,EAACgE,EAAE,SAASnE,GAAG,GAAGA,EAAEgE,WAAW,CAAC,IAAI/D,GAAGD,EAAEqC,UAAU,KAAK,IAAI1B,KAAKmC,YAAYlC,OAAOZ,EAAEqC,UAAU,eAAerC,EAAEwB,KAAK,SAASxB,EAAEC,GAAG,IAAIC,EAAE,WAAWyD,EAAE3D,EAAEC,GAAGG,GAAI,EAACD,EAAE,WAAWC,GAAI,EAACA,EAAE,WAAWyB,oBAAoB,YAAY3B,EAAEqD,GAAG1B,oBAAoB,gBAAgB1B,EAAEoD,EAAG,EAACzB,iBAAiB,YAAY5B,EAAEqD,GAAGzB,iBAAiB,gBAAgB3B,EAAEoD,EAAG,CAAjO,CAAkOtD,EAAED,GAAG2D,EAAE1D,EAAED,EAAG,CAAC,EAAC4D,EAAE,SAAS5D,GAAG,CAAC,YAAY,UAAU,aAAa,eAAekE,SAAS,SAASjE,GAAG,OAAOD,EAAEC,EAAEkE,EAAEZ,EAAG,GAAG,EAACa,EAAE,SAASlE,EAAEgC,GAAG,IAAIC,EAAEC,EAAEE,IAAIG,EAAErC,EAAE,OAAO6C,EAAE,SAASjD,GAAGA,EAAE2C,UAAUP,EAAEI,kBAAkBC,EAAEnC,MAAMN,EAAEiE,gBAAgBjE,EAAE2C,UAAUF,EAAEjC,QAAQoC,KAAK5C,GAAGmC,GAAE,GAAK,EAACe,EAAElC,EAAE,cAAciC,GAAGd,EAAEF,EAAE/B,EAAEuC,EAAEP,GAAGgB,GAAGxB,GAAG,WAAWwB,EAAEI,cAAchC,IAAI2B,GAAGC,EAAER,YAAa,IAAE,GAAIQ,GAAGnB,GAAG,WAAW,IAAIf,EAAEyB,EAAErC,EAAE,OAAO+B,EAAEF,EAAE/B,EAAEuC,EAAEP,GAAG/B,EAAE,GAAGF,GAAG,EAAED,EAAE,KAAK4D,EAAE9B,kBAAkBd,EAAEiC,EAAE9C,EAAEyC,KAAK5B,GAAG6C,GAAI,GAAG,EAACQ,EAAE,CAAC,EAAEC,EAAE,SAAStE,EAAEC,GAAG,IAAIC,EAAEC,EAAEmC,IAAIJ,EAAE9B,EAAE,OAAO+B,EAAE,SAASnC,GAAG,IAAIC,EAAED,EAAE2C,UAAU1C,EAAEE,EAAEqC,kBAAkBN,EAAE5B,MAAML,EAAEiC,EAAE1B,QAAQoC,KAAK5C,GAAGE,IAAK,EAACkC,EAAEpB,EAAE,2BAA2BmB,GAAG,GAAGC,EAAE,CAAClC,EAAE+B,EAAEjC,EAAEkC,EAAEjC,GAAG,IAAIwC,EAAE,WAAW4B,EAAEnC,EAAEzB,MAAM2B,EAAEkB,cAAchC,IAAIa,GAAGC,EAAEM,aAAa2B,EAAEnC,EAAEzB,KAAI,EAAGP,GAAE,GAAK,EAAC,CAAC,UAAU,SAASgE,SAAS,SAASlE,GAAG8B,iBAAiB9B,EAAEyC,EAAE,CAAC8B,MAAK,EAAGd,SAAQ,GAAK,IAAG/B,EAAEe,GAAE,GAAIV,GAAG,SAAS5B,GAAG+B,EAAE9B,EAAE,OAAOF,EAAE+B,EAAEjC,EAAEkC,EAAEjC,GAAG+C,uBAAuB,WAAWA,uBAAuB,WAAWd,EAAE5B,MAAMwC,YAAYlC,MAAMT,EAAEkC,UAAUgC,EAAEnC,EAAEzB,KAAI,EAAGP,GAAE,EAAI,GAAG,GAAG,GAAG,CAAC,EAACsE,EAAE,SAASxE,GAAG,IAAIC,EAAEC,EAAEE,EAAE,QAAQH,EAAE,WAAW,IAAI,IAAIA,EAAE6C,YAAY2B,iBAAiB,cAAc,IAAI,WAAW,IAAIzE,EAAE8C,YAAY4B,OAAOzE,EAAE,CAAC6D,UAAU,aAAanB,UAAU,GAAG,IAAI,IAAIzC,KAAKF,EAAE,oBAAoBE,GAAG,WAAWA,IAAID,EAAEC,GAAGW,KAAK8D,IAAI3E,EAAEE,GAAGF,EAAE4E,gBAAgB,IAAI,OAAO3E,CAAE,CAAlL,GAAqL,GAAGC,EAAEI,MAAMJ,EAAEK,MAAMN,EAAE4E,cAAc3E,EAAEI,MAAM,GAAGJ,EAAEI,MAAMwC,YAAYlC,MAAM,OAAOV,EAAEM,QAAQ,CAACP,GAAGD,EAAEE,EAAa,CAAV,MAAMF,GAAI,CAAC,EAAC,aAAa2B,SAASmD,WAAWvC,WAAWtC,EAAE,GAAG6B,iBAAiB,QAAQ,WAAW,OAAOS,WAAWtC,EAAE,EAAG,GAAG,C","sources":["../node_modules/web-vitals/dist/web-vitals.js"],"sourcesContent":["var e,t,n,i,r=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:\"v2-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12)}},a=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if(\"first-input\"===e&&!(\"PerformanceEventTiming\"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},o=function(e,t){var n=function n(i){\"pagehide\"!==i.type&&\"hidden\"!==document.visibilityState||(e(i),t&&(removeEventListener(\"visibilitychange\",n,!0),removeEventListener(\"pagehide\",n,!0)))};addEventListener(\"visibilitychange\",n,!0),addEventListener(\"pagehide\",n,!0)},u=function(e){addEventListener(\"pageshow\",(function(t){t.persisted&&e(t)}),!0)},c=function(e,t,n){var i;return function(r){t.value>=0&&(r||n)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},f=-1,s=function(){return\"hidden\"===document.visibilityState?0:1/0},m=function(){o((function(e){var t=e.timeStamp;f=t}),!0)},v=function(){return f<0&&(f=s(),m(),u((function(){setTimeout((function(){f=s(),m()}),0)}))),{get firstHiddenTime(){return f}}},d=function(e,t){var n,i=v(),o=r(\"FCP\"),f=function(e){\"first-contentful-paint\"===e.name&&(m&&m.disconnect(),e.startTime-1&&e(t)},f=r(\"CLS\",0),s=0,m=[],v=function(e){if(!e.hadRecentInput){var t=m[0],i=m[m.length-1];s&&e.startTime-i.startTime<1e3&&e.startTime-t.startTime<5e3?(s+=e.value,m.push(e)):(s=e.value,m=[e]),s>f.value&&(f.value=s,f.entries=m,n())}},h=a(\"layout-shift\",v);h&&(n=c(i,f,t),o((function(){h.takeRecords().map(v),n(!0)})),u((function(){s=0,l=-1,f=r(\"CLS\",0),n=c(i,f,t)})))},T={passive:!0,capture:!0},y=new Date,g=function(i,r){e||(e=r,t=i,n=new Date,w(removeEventListener),E())},E=function(){if(t>=0&&t1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,t){var n=function(){g(e,t),r()},i=function(){r()},r=function(){removeEventListener(\"pointerup\",n,T),removeEventListener(\"pointercancel\",i,T)};addEventListener(\"pointerup\",n,T),addEventListener(\"pointercancel\",i,T)}(t,e):g(t,e)}},w=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(t){return e(t,S,T)}))},L=function(n,f){var s,m=v(),d=r(\"FID\"),p=function(e){e.startTimeperformance.now())return;n.entries=[t],e(n)}catch(e){}},\"complete\"===document.readyState?setTimeout(t,0):addEventListener(\"load\",(function(){return setTimeout(t,0)}))};export{h as getCLS,d as getFCP,L as getFID,F as getLCP,P as getTTFB};\n"],"names":["e","t","n","i","r","name","value","delta","entries","id","concat","Date","now","Math","floor","random","a","PerformanceObserver","supportedEntryTypes","includes","self","getEntries","map","observe","type","buffered","o","document","visibilityState","removeEventListener","addEventListener","u","persisted","c","f","s","m","timeStamp","v","setTimeout","firstHiddenTime","d","disconnect","startTime","push","window","performance","getEntriesByName","requestAnimationFrame","p","l","h","hadRecentInput","length","takeRecords","T","passive","capture","y","g","w","E","entryType","target","cancelable","processingStart","forEach","S","L","b","F","once","P","getEntriesByType","timing","max","navigationStart","responseStart","readyState"],"sourceRoot":""} -------------------------------------------------------------------------------- /traits.json: -------------------------------------------------------------------------------- 1 | { 2 | "positive": [ 3 | { 4 | "name": "Gourmand", 5 | "description": "Obsessed with food, cooks a lot", 6 | "statBonuses": { 7 | "STR": 0, 8 | "DEX": 1, 9 | "CON": 0, 10 | "INT": 1, 11 | "WIS": 0, 12 | "CHA": 0 13 | }, 14 | "hooks": [ 15 | [ 16 | "Gourmand 1 - ", 17 | "They have been working on an amazing new dish, but require a rare spice from a nearby area." 18 | ], 19 | ["Gourmand 2 - ", "They offer food spiked with psychedelics."] 20 | ] 21 | }, 22 | { 23 | "name": "Ascetic", 24 | "description": "Has forsaken physical comforts and enjoyments, enjoys simplicity", 25 | "statBonuses": { 26 | "STR": 0, 27 | "DEX": 0, 28 | "CON": 0, 29 | "INT": 0, 30 | "WIS": 2, 31 | "CHA": 0 32 | }, 33 | "conflicts": ["Greedy", "Jealous", "Snob", "Tycoon"] 34 | }, 35 | { 36 | "name": "Nimble", 37 | "description": "Moves around with ease as if they are dancing", 38 | "statBonuses": { 39 | "STR": 0, 40 | "DEX": 2, 41 | "CON": 0, 42 | "INT": 0, 43 | "WIS": 0, 44 | "CHA": 0 45 | } 46 | }, 47 | { 48 | "name": "Clever", 49 | "description": "They are good at out-of-the-box thinking", 50 | "statBonuses": { 51 | "STR": 0, 52 | "DEX": 0, 53 | "CON": 0, 54 | "INT": 2, 55 | "WIS": 0, 56 | "CHA": 0 57 | } 58 | }, 59 | { 60 | "name": "Open-Minded", 61 | "description": "Doesn't judge people often, will consider even the wildest claims", 62 | "statBonuses": { 63 | "STR": 0, 64 | "DEX": 0, 65 | "CON": 0, 66 | "INT": 1, 67 | "WIS": 1, 68 | "CHA": 0 69 | } 70 | }, 71 | { 72 | "name": "Kind", 73 | "description": "Exceptionally agreeable, doesn't insult others", 74 | "statBonuses": { 75 | "STR": 0, 76 | "DEX": 0, 77 | "CON": 0, 78 | "INT": 0, 79 | "WIS": 0, 80 | "CHA": 2 81 | }, 82 | "conflicts": ["Abrasive"] 83 | }, 84 | { 85 | "name": "Sanguine", 86 | "description": "Exceptionally upbeat, very difficult to lower their mood", 87 | "statBonuses": { 88 | "STR": 0, 89 | "DEX": 0, 90 | "CON": 0, 91 | "INT": 0, 92 | "WIS": 1, 93 | "CHA": 1 94 | }, 95 | "conflicts": ["Pessimist", "Depressive", "Optimist"] 96 | }, 97 | { 98 | "name": "Optimist", 99 | "description": "Can always find the silver lining", 100 | "statBonuses": { 101 | "STR": 0, 102 | "DEX": 0, 103 | "CON": 0, 104 | "INT": 0, 105 | "WIS": 0, 106 | "CHA": 2 107 | }, 108 | "conflicts": ["Pessimist", "Depressive", "Sanguine"] 109 | }, 110 | { 111 | "name": "Steadfast", 112 | "description": "Mentally strong and doesn't crumble under stress", 113 | "statBonuses": { 114 | "STR": 0, 115 | "DEX": 0, 116 | "CON": 0, 117 | "INT": 0, 118 | "WIS": 2, 119 | "CHA": 0 120 | }, 121 | "conflicts": ["Nervous", "Volatile"] 122 | }, 123 | { 124 | "name": "Brave", 125 | "description": "Shows courage in the face of danger", 126 | "statBonuses": { 127 | "STR": 0, 128 | "DEX": 0, 129 | "CON": 0, 130 | "INT": 0, 131 | "WIS": 0, 132 | "CHA": 1 133 | }, 134 | "conflicts": ["Wimp", "Squeamish"] 135 | }, 136 | { 137 | "name": "Iron Stomach", 138 | "description": "Has a strong resistance to ingesting contaminants and toxins", 139 | "statBonuses": { 140 | "STR": 0, 141 | "DEX": 0, 142 | "CON": 2, 143 | "INT": 0, 144 | "WIS": 0, 145 | "CHA": 0 146 | }, 147 | "conflicts": ["Sickly"] 148 | } 149 | ], 150 | 151 | "neutral": [ 152 | { 153 | "name": "Night Owl", 154 | "description": "Is usually awake at night and asleep during the day" 155 | }, 156 | { 157 | "name": "Masochist", 158 | "description": "Likes being subjected to pain", 159 | "statBonuses": { 160 | "STR": 0, 161 | "DEX": 0, 162 | "CON": 1, 163 | "INT": 0, 164 | "WIS": -1, 165 | "CHA": 0 166 | } 167 | }, 168 | { 169 | "name": "Transhumanist", 170 | "description": "Wants to enhance their body through artifice or magic", 171 | "conflicts": ["Purist"] 172 | }, 173 | { 174 | "name": "Tortured Artist", 175 | "description": "Feels misunderstood by other people, wants to create the greatest piece of art", 176 | "statBonuses": { 177 | "STR": 0, 178 | "DEX": 1, 179 | "CON": 0, 180 | "INT": 0, 181 | "WIS": -1, 182 | "CHA": 0 183 | }, 184 | "hooks": [ 185 | [ 186 | "Tortured Artist 1 - ", 187 | "They have created some poor quality artwork, but thinks it's a masterpiece, and want it sold to a collector." 188 | ] 189 | ] 190 | }, 191 | { 192 | "name": "Chemical Fascination", 193 | "description": "Loves altering their mental state with drugs and chemicals, suffers withdrawl quickly", 194 | "statBonuses": { 195 | "STR": 0, 196 | "DEX": 0, 197 | "CON": 0, 198 | "INT": -1, 199 | "WIS": 1, 200 | "CHA": 0 201 | }, 202 | "hooks": [ 203 | [ 204 | "Chemical Fascination 1 - ", 205 | "The local dealer has cut them off, and needs a new supply, or for the dealer to take them back." 206 | ] 207 | ], 208 | "conflicts": ["Teetotaler"] 209 | }, 210 | { 211 | "name": "Teetotaler", 212 | "description": "Abhors the idea of gaining pleasure from chemicals, doesn't drink or use drugs", 213 | "statBonuses": { 214 | "STR": 0, 215 | "DEX": 0, 216 | "CON": 0, 217 | "INT": 1, 218 | "WIS": 0, 219 | "CHA": -1 220 | }, 221 | "conflicts": ["Chemical Fascination"] 222 | }, 223 | { 224 | "name": "Absent-Minded", 225 | "description": "Will sometimes completely forget what they are doing" 226 | }, 227 | { 228 | "name": "Obsessed Worker", 229 | "description": "Always focused on their job, starts feeling uneasy when not working", 230 | "statBonuses": { 231 | "STR": 0, 232 | "DEX": 0, 233 | "CON": 1, 234 | "INT": 0, 235 | "WIS": 0, 236 | "CHA": -1 237 | }, 238 | "conflicts": ["Lazy Worker"] 239 | }, 240 | { 241 | "name": "Perfectionist", 242 | "description": "Can't bear to stop stop working on something until it is perfect", 243 | "statBonuses": { 244 | "STR": 0, 245 | "DEX": 0, 246 | "CON": 1, 247 | "INT": 0, 248 | "WIS": 0, 249 | "CHA": -1 250 | }, 251 | "conflicts": ["Lazy Worker"] 252 | }, 253 | { 254 | "name": "Lazy Worker", 255 | "description": "Hates their job, works slowly and would much rather be doing anything else", 256 | "statBonuses": { 257 | "STR": 0, 258 | "DEX": 0, 259 | "CON": -1, 260 | "INT": 0, 261 | "WIS": 0, 262 | "CHA": 1 263 | }, 264 | "conflicts": ["Obsessed Worker"] 265 | }, 266 | { 267 | "name": "Clumsy", 268 | "description": "Constantly fumbling and dropping things", 269 | "statBonuses": { 270 | "STR": 0, 271 | "DEX": -2, 272 | "CON": 0, 273 | "INT": 0, 274 | "WIS": 0, 275 | "CHA": 0 276 | } 277 | }, 278 | { 279 | "name": "Fidgiter", 280 | "description": "Is constantly fiddling with something in their hand", 281 | "statBonuses": { 282 | "STR": 0, 283 | "DEX": 1, 284 | "CON": 0, 285 | "INT": 0, 286 | "WIS": 0, 287 | "CHA": -1 288 | } 289 | }, 290 | { 291 | "name": "Neat", 292 | "description": "Their environment must always be clean and tidy", 293 | "conflicts": ["Slob"] 294 | }, 295 | { 296 | "name": "Slob", 297 | "description": "Doesn't care about the cleanliness of their environment", 298 | "conflicts": ["Neat"] 299 | }, 300 | { 301 | "name": "Animal Lover", 302 | "description": "Loves animals, and tends to be surrounded by them", 303 | "statBonuses": { 304 | "STR": 0, 305 | "DEX": 0, 306 | "CON": 0, 307 | "INT": 0, 308 | "WIS": 1, 309 | "CHA": 0 310 | }, 311 | "conflicts": ["Animal Hater"] 312 | }, 313 | { 314 | "name": "Animal Hater", 315 | "description": "Can't stand animals, and often tries to avoid them", 316 | "statBonuses": { 317 | "STR": 0, 318 | "DEX": 0, 319 | "CON": 0, 320 | "INT": 0, 321 | "WIS": -1, 322 | "CHA": 0 323 | }, 324 | "conflicts": ["Animal Lover"] 325 | }, 326 | { 327 | "name": "Rebellious", 328 | "description": "Dislikes authority, and resists any attempt at control over them", 329 | "conflicts": ["Compliant"] 330 | }, 331 | { 332 | "name": "Compliant", 333 | "description": "Always obeys authority, and shows little to no resistance to new rules", 334 | "conflicts": ["Rebellious"] 335 | }, 336 | { 337 | "name": "Submissive", 338 | "description": "Meekly obediant to others, and shows no resistance in conflict", 339 | "conflicts": ["Dominant"] 340 | }, 341 | { 342 | "name": "Dominant", 343 | "description": "They must be the loudest voice, have their idea pursued, and be the most powerful in the room", 344 | "conflicts": ["Submissive"] 345 | }, 346 | { 347 | "name": "Party Animal", 348 | "description": "Loves parties, and often tries to organise them", 349 | "statBonuses": { 350 | "STR": 0, 351 | "DEX": 0, 352 | "CON": 0, 353 | "INT": 0, 354 | "WIS": 0, 355 | "CHA": 2 356 | }, 357 | "conflicts": ["Introvert"] 358 | }, 359 | { 360 | "name": "Introvert", 361 | "description": "Doesn't like too much social interaction, and tends to be timid or blunt in conversation", 362 | "statBonuses": { 363 | "STR": 0, 364 | "DEX": 0, 365 | "CON": 0, 366 | "INT": 0, 367 | "WIS": 0, 368 | "CHA": -2 369 | }, 370 | "conflicts": ["Party Animal"] 371 | }, 372 | { 373 | "name": "Snob", 374 | "description": "Believes that they are of the highest class, and looks down upon those lesser than them", 375 | "statBonuses": { 376 | "STR": 0, 377 | "DEX": 0, 378 | "CON": 0, 379 | "INT": 0, 380 | "WIS": 0, 381 | "CHA": -2 382 | }, 383 | "conflicts": ["Ascetic"] 384 | }, 385 | { 386 | "name": "Squeamish", 387 | "description": "Gets grossed out easily", 388 | "conflicts": ["Brave"] 389 | }, 390 | { 391 | "name": "Drunken Prodigy", 392 | "description": "Seems to perform better, work better, and just be better while they are drunk" 393 | }, 394 | { 395 | "name": "Stoned Prodigy", 396 | "description": "Seems to perform better, work better, and just be better while they are under the influence of drugs" 397 | }, 398 | { 399 | "name": "Hoplophobia", 400 | "description": "They are terrified of weapons", 401 | "conflicts": ["Hoplophile"] 402 | }, 403 | { 404 | "name": "Hoplophile", 405 | "description": "Has an irrational love for weaponry", 406 | "conflicts": ["Hoplophobia"] 407 | }, 408 | { 409 | "name": "Autophobia", 410 | "description": "Has a fear of being alone" 411 | }, 412 | { 413 | "name": "Indecisive", 414 | "description": "Struggles to commit to a decision" 415 | }, 416 | { 417 | "name": "Hypochondriac", 418 | "description": "Is constantly concerned with their health, possibly beleieving that they have afflictions that they don't" 419 | }, 420 | { 421 | "name": "Twitchy", 422 | "description": "Some of their muscles seem to spasm at random" 423 | } 424 | ], 425 | 426 | "negative": [ 427 | { 428 | "name": "Agoraphobia", 429 | "description": "Is scared of going outside" 430 | }, 431 | { 432 | "name": "Purist", 433 | "description": "Doesn't like people people who are magically inclined", 434 | "statBonuses": { 435 | "STR": 0, 436 | "DEX": 0, 437 | "CON": 0, 438 | "INT": -1, 439 | "WIS": 0, 440 | "CHA": 0 441 | }, 442 | "conflicts": ["Transhumanist"], 443 | "hooks": [ 444 | [ 445 | "Purist 1 - ", 446 | "They say that one of the other townspeople has had their hand replaced with artifice/magic, and want it taken from them." 447 | ] 448 | ] 449 | }, 450 | { 451 | "name": "Greedy", 452 | "description": "Always wants more, and gets mad if they don't get it", 453 | "conflicts": ["Ascetic"] 454 | }, 455 | { 456 | "name": "Jealous", 457 | "description": "If they see something they don't have they do what they need to get it", 458 | "conflicts": ["Ascetic"] 459 | }, 460 | { 461 | "name": "Pyromaniac", 462 | "description": "They love watching and starting fires, and gets angry when they are extinguished", 463 | "hooks": [ 464 | [ 465 | "Pyromaniac 1 - ", 466 | "They want to see the biggest pyre, there is a bandit hideout nearby, and want it set ablaze." 467 | ] 468 | ] 469 | }, 470 | { 471 | "name": "Sadist", 472 | "description": "Enjoys inflicting pain on others", 473 | "statBonuses": { 474 | "STR": 1, 475 | "DEX": 0, 476 | "CON": 0, 477 | "INT": 0, 478 | "WIS": 0, 479 | "CHA": 0 480 | } 481 | }, 482 | { 483 | "name": "Wimp", 484 | "description": "Cowers at the slightest notion of violence", 485 | "statBonuses": { 486 | "STR": 0, 487 | "DEX": 0, 488 | "CON": -1, 489 | "INT": 0, 490 | "WIS": 0, 491 | "CHA": 0 492 | } 493 | }, 494 | { 495 | "name": "Abrasive", 496 | "description": "Exceptionally blunt, doesn't consider peoples feelings when talking", 497 | "statBonuses": { 498 | "STR": 0, 499 | "DEX": 0, 500 | "CON": 0, 501 | "INT": 0, 502 | "WIS": 0, 503 | "CHA": -2 504 | }, 505 | "conflicts": ["Kind"] 506 | }, 507 | { 508 | "name": "Creepy Breathing", 509 | "description": "Breathes considerably heavily and sweats constantly", 510 | "statBonuses": { 511 | "STR": 0, 512 | "DEX": 0, 513 | "CON": 0, 514 | "INT": 0, 515 | "WIS": 0, 516 | "CHA": -1 517 | } 518 | }, 519 | { 520 | "name": "Misandrist", 521 | "description": "Dislikes and distrusts men", 522 | "statBonuses": { 523 | "STR": 0, 524 | "DEX": 0, 525 | "CON": 0, 526 | "INT": 0, 527 | "WIS": 0, 528 | "CHA": -1 529 | } 530 | }, 531 | { 532 | "name": "Misogynist", 533 | "description": "Dislikes and distrusts women", 534 | "statBonuses": { 535 | "STR": 0, 536 | "DEX": 0, 537 | "CON": 0, 538 | "INT": 0, 539 | "WIS": 0, 540 | "CHA": -1 541 | } 542 | }, 543 | { 544 | "name": "Misanthrope", 545 | "description": "Dislikes and distrusts people, believes that all actions are taken for selfish reasons", 546 | "statBonuses": { 547 | "STR": 0, 548 | "DEX": 0, 549 | "CON": 0, 550 | "INT": 0, 551 | "WIS": 0, 552 | "CHA": -1 553 | } 554 | }, 555 | { 556 | "name": "Pessimist", 557 | "description": "Always assumes the worst outcome", 558 | "statBonuses": { 559 | "STR": 0, 560 | "DEX": 0, 561 | "CON": 0, 562 | "INT": 0, 563 | "WIS": 0, 564 | "CHA": -2 565 | }, 566 | "conflicts": ["Optimist", "Depressive", "Sanguine"] 567 | }, 568 | { 569 | "name": "Depressive", 570 | "description": "Perpetually in an awful mood, very difficult to raise their mood", 571 | "statBonuses": { 572 | "STR": 0, 573 | "DEX": 0, 574 | "CON": 0, 575 | "INT": 0, 576 | "WIS": -1, 577 | "CHA": -1 578 | }, 579 | "conflicts": ["Optimist", "Pessimist", "Sanguine"] 580 | }, 581 | { 582 | "name": "Nervous", 583 | "description": "Feels the strain from stress more than others", 584 | "statBonuses": { 585 | "STR": 0, 586 | "DEX": 0, 587 | "CON": 0, 588 | "INT": 0, 589 | "WIS": -1, 590 | "CHA": 0 591 | }, 592 | "conflicts": ["Steadfast", "Volatile"] 593 | }, 594 | { 595 | "name": "Volatile", 596 | "description": "Even the smallest thing can make them explode, very quick to break under stress", 597 | "statBonuses": { 598 | "STR": 0, 599 | "DEX": 0, 600 | "CON": 0, 601 | "INT": 0, 602 | "WIS": -1, 603 | "CHA": -1 604 | }, 605 | "conflicts": ["Steadfast", "Nervous"] 606 | }, 607 | { 608 | "name": "Sickly", 609 | "description": "They are far more likely to get sick than others", 610 | "statBonuses": { 611 | "STR": 0, 612 | "DEX": 0, 613 | "CON": -2, 614 | "INT": 0, 615 | "WIS": 0, 616 | "CHA": 0 617 | }, 618 | "conflicts": ["Iron Stomach"] 619 | }, 620 | { 621 | "name": "Insomniac", 622 | "description": "Forever tired, they can't seem to get a good nights rest" 623 | }, 624 | { 625 | "name": "World Weary", 626 | "description": "Well versed in world/country/state politics, but are very anxious about the fallout of world events", 627 | "statBonuses": { 628 | "STR": 0, 629 | "DEX": 0, 630 | "CON": 0, 631 | "INT": 1, 632 | "WIS": -1, 633 | "CHA": 0 634 | } 635 | }, 636 | { 637 | "name": "Desensitized", 638 | "description": "They have seen so many traumatic events that those same events no longer phase them" 639 | }, 640 | { 641 | "name": "Tycoon", 642 | "description": "Always looking for business opportunities, they want to own it all", 643 | "conflicts": ["Ascetic"] 644 | } 645 | ] 646 | } 647 | -------------------------------------------------------------------------------- /races.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "index": 0, 4 | "defaultCheckbox": true, 5 | "name": "Dragonborn", 6 | "matureAge": 15, 7 | "lifespan": 80, 8 | "size": "Medium", 9 | "languages": "Common, Draconic", 10 | "speed": { "walking": 30 }, 11 | "avgHeight": 78, 12 | "appearance": { 13 | "skinType": "Scales", 14 | "skinColourType": "special", 15 | "skinColour": [ 16 | "Black", 17 | "Blue", 18 | "Brass", 19 | "Bronze", 20 | "Copper", 21 | "Gold", 22 | "Green", 23 | "Red", 24 | "Silver", 25 | "White" 26 | ], 27 | "hairType": "none", 28 | "eyeColourType": "basic", 29 | "facialHairType": "none" 30 | }, 31 | "traits": [ 32 | { 33 | "name": "Damage Resistance", 34 | "description": "This creature has resistance to the damage type associated with its draconic ancestry." 35 | } 36 | ], 37 | "proficiencies": [] 38 | }, 39 | { 40 | "index": 1, 41 | "defaultCheckbox": true, 42 | "name": "Dwarf", 43 | "matureAge": 18, 44 | "lifespan": 350, 45 | "size": "Medium", 46 | "languages": "Common, Dwarvish", 47 | "speed": { "walking": 25 }, 48 | "avgHeight": 54, 49 | "darkvision": "Darkvision 60ft., ", 50 | "appearance": { 51 | "skinType": "Skin", 52 | "skinColourType": "basic", 53 | "hairType": "basic", 54 | "eyeColourType": "basic", 55 | "facialHairType": "all", 56 | "facialHairChance": 0.8 57 | }, 58 | "traits": [ 59 | { 60 | "name": "Dwarven Resilience", 61 | "description": "This creature has advantage on saving throws against poison, and this creature has resistance against poison damage." 62 | }, 63 | { 64 | "name": "Stonecunning", 65 | "description": "Whenever this creature makes an Intelligence (History) check related to the origin of stonework, they are considered proficient in the History skill and add double their proficiency bonus to the check, instead of their normal proficiency bonus." 66 | } 67 | ], 68 | "proficiencies": [ 69 | [1, "Smith’s tools", "Brewer’s supplies", "Mason’s tools"] 70 | ] 71 | }, 72 | { 73 | "index": 2, 74 | "defaultCheckbox": true, 75 | "name": "Elf", 76 | "matureAge": 18, 77 | "lifespan": 750, 78 | "size": "Medium", 79 | "languages": "Common, Elvish", 80 | "speed": { "walking": 30 }, 81 | "avgHeight": 66, 82 | "darkvision": "Darkvision 60ft., ", 83 | "appearance": { 84 | "skinType": "Skin", 85 | "skinColourType": "basic", 86 | "hairType": "basic", 87 | "eyeColourType": "basic", 88 | "facialHairType": "none" 89 | }, 90 | "traits": [ 91 | { 92 | "name": "Fey Ancestry", 93 | "description": "This creature has advantage on saving throws against being charmed, and magic can’t put them to sleep." 94 | }, 95 | { 96 | "name": "Trance", 97 | "description": "Elves don’t need to sleep. Instead, they meditate deeply, remaining semiconscious, for 4 hours a day." 98 | } 99 | ], 100 | "proficiencies": ["Perception"] 101 | }, 102 | { 103 | "index": 3, 104 | "defaultCheckbox": true, 105 | "name": "Gnome", 106 | "matureAge": 18, 107 | "lifespan": 500, 108 | "size": "Small", 109 | "languages": "Common, Gnomish", 110 | "speed": { "walking": 25 }, 111 | "avgHeight": 42, 112 | "darkvision": "Darkvision 60ft., ", 113 | "appearance": { 114 | "skinType": "Skin", 115 | "skinColourType": "basic", 116 | "hairType": "basic", 117 | "eyeColourType": "basic", 118 | "facialHairType": "men", 119 | "facialHairChance": 0.75 120 | }, 121 | "traits": [ 122 | { 123 | "name": "Gnome Cunning", 124 | "description": "You have advantage on all Intelligence, Wisdom, and Charisma saving throws against magic." 125 | } 126 | ], 127 | "proficiencies": [] 128 | }, 129 | { 130 | "index": 4, 131 | "defaultCheckbox": true, 132 | "name": "Half-Elf", 133 | "matureAge": 18, 134 | "lifespan": 200, 135 | "size": "Medium", 136 | "languages": "Common, Elvish", 137 | "speed": { "walking": 30 }, 138 | "avgHeight": 66, 139 | "darkvision": "Darkvision 60ft., ", 140 | "appearance": { 141 | "skinType": "Skin", 142 | "skinColourType": "basic", 143 | "hairType": "basic", 144 | "eyeColourType": "basic", 145 | "facialHairType": "men", 146 | "facialHairChance": 0.4 147 | }, 148 | "traits": [ 149 | { 150 | "name": "Fey Ancestry", 151 | "description": "This creature has advantage on saving throws against being charmed, and magic can’t put them to sleep." 152 | } 153 | ], 154 | "proficiencies": [ 155 | [ 156 | 2, 157 | "Acrobatics", 158 | "Animal Handling", 159 | "Arcana", 160 | "Athletics", 161 | "Deception", 162 | "History", 163 | "Insight", 164 | "Intimidation", 165 | "Investigation", 166 | "Medicine", 167 | "Nature", 168 | "Perception", 169 | "Performance", 170 | "Persuasion", 171 | "Religion", 172 | "Sleight of Hand", 173 | "Stealth", 174 | "Survival" 175 | ] 176 | ] 177 | }, 178 | { 179 | "index": 5, 180 | "defaultCheckbox": true, 181 | "name": "Halfling", 182 | "matureAge": 20, 183 | "lifespan": 150, 184 | "size": "Small", 185 | "languages": "Common, Halfling", 186 | "speed": { "walking": 25 }, 187 | "avgHeight": 36, 188 | "appearance": { 189 | "skinType": "Skin", 190 | "skinColourType": "basic", 191 | "hairType": "basic", 192 | "eyeColourType": "basic", 193 | "facialHairType": "men", 194 | "facialHairChance": 0.6 195 | }, 196 | "traits": [ 197 | { 198 | "name": "Lucky", 199 | "description": "When this creature rolls a 1 on the d20 for an attack roll, ability check, or saving throw, this creature can reroll the die and must use the new roll." 200 | }, 201 | { 202 | "name": "Brave", 203 | "description": "This creature has advantage on saving throws against being frightened." 204 | }, 205 | { 206 | "name": "Halfling Nimbleness", 207 | "description": "This creature can move through the space of any creature that is of a size larger than theirs." 208 | } 209 | ], 210 | "proficiencies": [] 211 | }, 212 | { 213 | "index": 6, 214 | "defaultCheckbox": true, 215 | "name": "Half-Orc", 216 | "matureAge": 14, 217 | "lifespan": 75, 218 | "size": "Medium", 219 | "languages": "Common, Orc", 220 | "speed": { "walking": 30 }, 221 | "avgHeight": 70, 222 | "appearance": { 223 | "skinType": "Skin", 224 | "skinColourType": "special", 225 | "skinColour": [ 226 | "Light Gray", 227 | "Dark Gray", 228 | "Pale Gray", 229 | "Grayish Green", 230 | "Light Green", 231 | "Green", 232 | "Dark Green", 233 | "Light Red", 234 | "Red", 235 | "Dark Red" 236 | ], 237 | "hairType": "basic", 238 | "eyeColourType": "basic", 239 | "facialHairType": "men", 240 | "facialHairChance": 0.6 241 | }, 242 | "traits": [ 243 | { 244 | "name": "Relentless Endurance", 245 | "description": "When this creature is reduced to 0 hit points but not killed outright, this creature can drop to 1 hit point instead. This creature can’t use this feature again until they finish a long rest." 246 | }, 247 | { 248 | "name": "Savage Attacks", 249 | "description": "When this creature scores a critical hit with a melee weapon attack, this creature can roll one of the weapon’s damage dice one additional time and add it to the extra damage of the critical hit." 250 | } 251 | ], 252 | "proficiencies": ["Intimidation"] 253 | }, 254 | { 255 | "index": 7, 256 | "defaultCheckbox": true, 257 | "name": "Human", 258 | "matureAge": 18, 259 | "lifespan": 90, 260 | "size": "Medium", 261 | "languages": "Common", 262 | "speed": { "walking": 30 }, 263 | "avgHeight": 70, 264 | "appearance": { 265 | "skinType": "Skin", 266 | "skinColourType": "basic", 267 | "hairType": "basic", 268 | "eyeColourType": "basic", 269 | "facialHairType": "men", 270 | "facialHairChance": 0.5 271 | }, 272 | "proficiencies": [] 273 | }, 274 | { 275 | "index": 8, 276 | "defaultCheckbox": true, 277 | "name": "Tiefling", 278 | "matureAge": 18, 279 | "lifespan": 100, 280 | "size": "Medium", 281 | "languages": "Common, Infernal", 282 | "speed": { "walking": 30 }, 283 | "avgHeight": 70, 284 | "appearance": { 285 | "skinType": "Skin", 286 | "skinColourType": "additional", 287 | "skinColour": [ 288 | "Light Red", 289 | "Vibrant Red", 290 | "Dark Red", 291 | "Light Purple", 292 | "Vibrant Purple", 293 | "Dark Purple" 294 | ], 295 | "hairType": "basic", 296 | "eyeColourType": "basic", 297 | "facialHairType": "men", 298 | "facialHairChance": 0.5 299 | }, 300 | "traits": [ 301 | { 302 | "name": "Hellish Resistance", 303 | "description": "This creature has resistance to fire damage." 304 | }, 305 | { 306 | "name": "Infernal Legacy", 307 | "description": "This creature knows the thaumaturgy cantrip." 308 | } 309 | ], 310 | "proficiencies": [] 311 | }, 312 | { 313 | "index": 9, 314 | "defaultCheckbox": true, 315 | "name": "Leonin", 316 | "matureAge": 18, 317 | "lifespan": 90, 318 | "size": "Medium", 319 | "languages": "Common, Leonin", 320 | "speed": { "walking": 35 }, 321 | "darkvision": "Darkvision 60ft., ", 322 | "avgHeight": 80, 323 | "appearance": { 324 | "skinType": "Fur", 325 | "skinColourType": "special", 326 | "skinColour": ["Tawny", "Golden", "Dark Brown", "Black", "White"], 327 | "eyeColourType": "basic", 328 | "hairType": "basic", 329 | "facialHairType": "men", 330 | "facialHairChance": 0.7 331 | }, 332 | "proficiencies": [ 333 | [1, "Athletics", "Intimidation", "Perception", "Survival"] 334 | ] 335 | }, 336 | { 337 | "index": 10, 338 | "defaultCheckbox": true, 339 | "name": "Kalashtar", 340 | "matureAge": 18, 341 | "lifespan": 90, 342 | "size": "Medium", 343 | "languages": "Common, Quori", 344 | "speed": { "walking": 30 }, 345 | "avgHeight": 71, 346 | "appearance": { 347 | "skinType": "Skin", 348 | "skinColourType": "basic", 349 | "hairType": "basic", 350 | "eyeColourType": "basic", 351 | "facialHairType": "men", 352 | "facialHairChance": 0.6 353 | }, 354 | "traits": [ 355 | { 356 | "name": "Mental Discipline", 357 | "description": "This creature has resistance to psychic damage." 358 | }, 359 | { 360 | "name": "Severed from Dreams", 361 | "description": "This creature is immune to spells and other magical effects that require them to dream, like dream, but not to spells and other magical effects that put you to sleep, like sleep." 362 | } 363 | ], 364 | "proficiencies": [], 365 | "savingThrows": ["WIS"] 366 | }, 367 | { 368 | "index": 11, 369 | "defaultCheckbox": true, 370 | "name": "Warforged", 371 | "matureAge": 2, 372 | "lifespan": 30, 373 | "size": "Medium", 374 | "languages": "Common", 375 | "speed": { "walking": 30 }, 376 | "avgHeight": 77, 377 | "appearance": { 378 | "skinType": "Exterior", 379 | "skinColourType": "special", 380 | "skinColour": [ 381 | "Shiny Steel", 382 | "Tarnished Steel", 383 | "Shiny Bronze", 384 | "Tarnished Bronze", 385 | "Polished White Stone", 386 | "Scuffed White Stone", 387 | "Pollished Dark Stone", 388 | "Scuffed Dark Stone" 389 | ], 390 | "hairType": "none", 391 | "eyeColourType": "basic", 392 | "facialHairType": "none" 393 | }, 394 | "traits": [ 395 | { 396 | "name": "Sentry’s Rest", 397 | "description": "When this creature takes a long rest, they must spend at least six hours in an inactive, motionless state, rather than sleeping. In this state, they appear inert, but it doesn’t render them unconscious, and they can see and hear as normal." 398 | }, 399 | { 400 | "name": "Constructed Resilience", 401 | "description": "This creature has advantage on saving throws against being poisoned, and they have resistance to poison damage. They don’t need to eat, drink, or breathe. They are immune to disease. They don’t need to sleep, and magic can’t put them to sleep." 402 | } 403 | ], 404 | "proficiencies": [ 405 | [ 406 | 1, 407 | "Acrobatics", 408 | "Animal Handling", 409 | "Arcana", 410 | "Athletics", 411 | "Deception", 412 | "History", 413 | "Insight", 414 | "Intimidation", 415 | "Investigation", 416 | "Medicine", 417 | "Nature", 418 | "Perception", 419 | "Performance", 420 | "Persuasion", 421 | "Religion", 422 | "Sleight of Hand", 423 | "Stealth", 424 | "Survival" 425 | ], 426 | [ 427 | 1, 428 | "Alchemist's supplies", 429 | "Brewer's supplies", 430 | "Calligrapher's Supplies", 431 | "Carpenter's tools", 432 | "Cartographer's tools", 433 | "Cobbler's tools", 434 | "Cook's utensils", 435 | "Glassblower's tools", 436 | "Jeweler's tools", 437 | "Leatherworker's tools", 438 | "Mason's tools", 439 | "Painter's supplies", 440 | "Potter's tools", 441 | "Smith's tools", 442 | "Tinker's tools", 443 | "Weaver's tools", 444 | "Woodcarver's tools" 445 | ] 446 | ] 447 | }, 448 | { 449 | "index": 12, 450 | "defaultCheckbox": true, 451 | "name": "Loxodon", 452 | "matureAge": 18, 453 | "lifespan": 450, 454 | "size": "Medium", 455 | "languages": "Common, Loxodon", 456 | "speed": { "walking": 30 }, 457 | "avgHeight": 90, 458 | "appearance": { 459 | "skinType": "Skin", 460 | "skinColourType": "basic", 461 | "hairType": "none", 462 | "eyeColourType": "basic", 463 | "facialHairType": "none" 464 | }, 465 | "traits": [ 466 | { 467 | "name": "Loxodon Serenity", 468 | "description": "This creature has advantage on saving throws against being charmed or frightened." 469 | }, 470 | { 471 | "name": "Keen Smell", 472 | "description": "This creature has advantage on Wisdom (Perception), Wisdom (Survival), and Intelligence (Investigation) checks that involve smell." 473 | } 474 | ], 475 | "proficiencies": [] 476 | }, 477 | { 478 | "index": 13, 479 | "defaultCheckbox": true, 480 | "name": "Satyr", 481 | "matureAge": 18, 482 | "lifespan": 90, 483 | "size": "Medium", 484 | "languages": "Common, Sylvan", 485 | "speed": { "walking": 35 }, 486 | "avgHeight": 65, 487 | "appearance": { 488 | "skinType": "Skin", 489 | "skinColourType": "basic", 490 | "hairType": "basic", 491 | "eyeColourType": "basic", 492 | "facialHairType": "men", 493 | "facialHairChance": 0.6 494 | }, 495 | "traits": [ 496 | { 497 | "name": "Magic Resistance", 498 | "description": "This creature has advantage on saving throws against spells and other magical effects." 499 | }, 500 | { 501 | "name": "Mirthful Leaps", 502 | "description": "Whenever this creature makes a long or high jump, they can roll a d8 and add the number rolled to the number of feet they cover, even when making a standing jump. This extra distance costs movement as normal." 503 | } 504 | ], 505 | "proficiencies": ["Performance", "Persuasion"] 506 | }, 507 | { 508 | "index": 14, 509 | "defaultCheckbox": true, 510 | "name": "Aasimar", 511 | "matureAge": 18, 512 | "lifespan": 160, 513 | "size": "Medium", 514 | "languages": "Common, Celestial", 515 | "speed": { "walking": 30 }, 516 | "avgHeight": 72, 517 | "darkvision": "Darkvision 60ft., ", 518 | "appearance": { 519 | "skinType": "Skin", 520 | "skinColourType": "basic", 521 | "hairType": "basic", 522 | "eyeColourType": "basic", 523 | "facialHairType": "men", 524 | "facialHairChance": 0.6 525 | }, 526 | "traits": [ 527 | { 528 | "name": "Celestial Resistance", 529 | "description": "This creature has resistance to necrotic damage and radiant damage." 530 | } 531 | ], 532 | "proficiencies": [] 533 | }, 534 | { 535 | "index": 15, 536 | "defaultCheckbox": true, 537 | "name": "Bugbear", 538 | "matureAge": 16, 539 | "lifespan": 80, 540 | "size": "Medium", 541 | "languages": "Common, Goblin", 542 | "speed": { "walking": 30 }, 543 | "avgHeight": 84, 544 | "darkvision": "Darkvision 60ft., ", 545 | "appearance": { 546 | "skinType": "Fur", 547 | "skinColourType": "basic", 548 | "hairType": "basic", 549 | "eyeColourType": "basic", 550 | "facialHairType": "men", 551 | "facialHairChance": 0.7 552 | }, 553 | "traits": [ 554 | { 555 | "name": "Surprise Attack", 556 | "description": "If this creature surprises another creature and hits it with an attack on their first turn in combat, the attack deals an extra 2d6 damage to it. They can use this trait only once per combat." 557 | } 558 | ], 559 | "proficiencies": ["Stealth"] 560 | }, 561 | { 562 | "index": 16, 563 | "defaultCheckbox": true, 564 | "name": "Firbolg", 565 | "matureAge": 30, 566 | "lifespan": 500, 567 | "size": "Medium", 568 | "languages": "Common, Elvish, Giant", 569 | "speed": { "walking": 30 }, 570 | "avgHeight": 90, 571 | "appearance": { 572 | "skinType": "Skin", 573 | "skinColourType": "basic", 574 | "hairType": "basic", 575 | "eyeColourType": "basic", 576 | "facialHairType": "men", 577 | "facialHairChance": 0.6 578 | }, 579 | "traits": [ 580 | { 581 | "name": "Hidden Step", 582 | "description": "As a bonus action, this creature can magically turn invisible until the start of their next turn or until they attack, make a damage roll, or force someone to make a saving throw. Once they use this trait, they can’t use it again until they finish a short or long rest." 583 | } 584 | ], 585 | "proficiencies": [] 586 | }, 587 | { 588 | "index": 17, 589 | "defaultCheckbox": true, 590 | "name": "Goblin", 591 | "matureAge": 8, 592 | "lifespan": 60, 593 | "size": "Small", 594 | "languages": "Common, Goblin", 595 | "speed": { "walking": 30 }, 596 | "avgHeight": 42, 597 | "darkvision": "Darkvision 60ft., ", 598 | "appearance": { 599 | "skinType": "Skin", 600 | "skinColourType": "basic", 601 | "hairType": "basic", 602 | "eyeColourType": "basic", 603 | "facialHairType": "men", 604 | "facialHairChance": 0.6 605 | }, 606 | "traits": [ 607 | { 608 | "name": "Nimble Escape", 609 | "description": "This creature can take the Disengage or Hide action as a bonus action on each of their turns." 610 | } 611 | ], 612 | "proficiencies": [] 613 | }, 614 | { 615 | "index": 18, 616 | "defaultCheckbox": true, 617 | "name": "Hobgoblin", 618 | "matureAge": 18, 619 | "lifespan": 90, 620 | "size": "Medium", 621 | "languages": "Common, Goblin", 622 | "speed": { "walking": 30 }, 623 | "avgHeight": 68, 624 | "darkvision": "Darkvision 60ft., ", 625 | "appearance": { 626 | "skinType": "Skin", 627 | "skinColourType": "basic", 628 | "hairType": "basic", 629 | "eyeColourType": "basic", 630 | "facialHairType": "men", 631 | "facialHairChance": 0.6 632 | }, 633 | "traits": [ 634 | { 635 | "name": "Saving Face", 636 | "description": "If this creature misses with an attack roll or fail an ability check or a saving throw, they can gain a bonus to the roll equal to the number of allies they can see within 30 feet of them (maximum bonus of +5). Once they use this trait, they can’t use it again until they finish a short or long rest." 637 | } 638 | ], 639 | "proficiencies": [] 640 | }, 641 | { 642 | "index": 19, 643 | "defaultCheckbox": true, 644 | "name": "Kenku", 645 | "matureAge": 12, 646 | "lifespan": 60, 647 | "size": "Medium", 648 | "languages": "Common, Auran", 649 | "speed": { "walking": 30 }, 650 | "avgHeight": 60, 651 | "appearance": { 652 | "skinType": "Feathers", 653 | "skinColourType": "special", 654 | "skinColour": ["Black feathers", "Dark blue feathers", "Gray Feathers"], 655 | "hairType": "none", 656 | "eyeColourType": "basic", 657 | "facialHairType": "none" 658 | }, 659 | "traits": [ 660 | { 661 | "name": "Mimicry", 662 | "description": "This creature can mimic sounds they have heard, including voices. A creature that hears the sounds this creature makes can tell they are imitations with a successful Wisdom (Insight) check opposed by this creature's Charisma (Deception) check." 663 | } 664 | ], 665 | "proficiencies": [ 666 | [2, "Acrobatics", "Deception", "Stealth", "Sleight of Hand"] 667 | ] 668 | }, 669 | { 670 | "index": 20, 671 | "defaultCheckbox": true, 672 | "name": "Kobold", 673 | "matureAge": 6, 674 | "lifespan": 120, 675 | "size": "Small", 676 | "languages": "Common, Draconic", 677 | "speed": { "walking": 30 }, 678 | "avgHeight": 30, 679 | "darkvision": "Darkvision 60ft., ", 680 | "appearance": { 681 | "skinType": "Scales", 682 | "skinColourType": "special", 683 | "skinColour": [ 684 | "Black", 685 | "Blue", 686 | "Brass", 687 | "Bronze", 688 | "Copper", 689 | "Gold", 690 | "Green", 691 | "Red", 692 | "Silver", 693 | "White" 694 | ], 695 | "hairType": "none", 696 | "eyeColourType": "basic", 697 | "facialHairType": "none" 698 | }, 699 | "traits": [ 700 | { 701 | "name": "Sunlight Sensitivity", 702 | "description": "This creature has disadvantage on attack rolls and on Wisdom (Perception) checks that rely on sight when they, the target of their attack, or whatever they are trying to perceive is in direct sunlight." 703 | } 704 | ], 705 | "proficiencies": [] 706 | }, 707 | { 708 | "index": 21, 709 | "defaultCheckbox": true, 710 | "name": "Lizardfolk", 711 | "matureAge": 14, 712 | "lifespan": 60, 713 | "size": "Medium", 714 | "languages": "Common, Draconic", 715 | "speed": { "walking": 30 }, 716 | "avgHeight": 74, 717 | "appearance": { 718 | "skinType": "Scales", 719 | "skinColourType": "special", 720 | "skinColour": [ 721 | "Black", 722 | "Blue", 723 | "Brass", 724 | "Bronze", 725 | "Copper", 726 | "Gold", 727 | "Green", 728 | "Red", 729 | "Silver", 730 | "White" 731 | ], 732 | "hairType": "none", 733 | "eyeColourType": "basic", 734 | "facialHairType": "none" 735 | }, 736 | "traits": [ 737 | { 738 | "name": "Hold Breath", 739 | "description": "This creature can hold their breath for up to 15 minutes at a time." 740 | } 741 | ], 742 | "proficiencies": [ 743 | [2, "Animal Handling", "Nature", "Perception", "Stealth", "Survival"] 744 | ] 745 | }, 746 | { 747 | "index": 22, 748 | "defaultCheckbox": true, 749 | "name": "Orc", 750 | "matureAge": 12, 751 | "lifespan": 50, 752 | "size": "Medium", 753 | "languages": "Common, Orc", 754 | "speed": { "walking": 30 }, 755 | "avgHeight": 76, 756 | "darkvision": "Darkvision 60ft., ", 757 | "appearance": { 758 | "skinType": "Skin", 759 | "skinColourType": "basic", 760 | "hairType": "basic", 761 | "eyeColourType": "basic", 762 | "facialHairType": "men", 763 | "facialHairChance": 0.75 764 | }, 765 | "traits": [ 766 | { 767 | "name": "Aggressive", 768 | "description": "As a bonus action, this creature can move up to their speed toward an enemy of their choice that they can see or hear. They must end this move closer to the enemy than they started." 769 | } 770 | ], 771 | "proficiencies": [ 772 | [ 773 | 2, 774 | "Animal Handling", 775 | "Insight", 776 | "Intimidation", 777 | "Medicine", 778 | "Nature", 779 | "Perception", 780 | "Survival" 781 | ] 782 | ] 783 | }, 784 | { 785 | "index": 23, 786 | "defaultCheckbox": true, 787 | "name": "Tabaxi", 788 | "matureAge": 18, 789 | "lifespan": 90, 790 | "size": "Medium", 791 | "languages": "Common", 792 | "speed": { "walking": 30 }, 793 | "avgHeight": 73, 794 | "darkvision": "Darkvision 60ft., ", 795 | "appearance": { 796 | "skinType": "Fur", 797 | "skinColourType": "special", 798 | "skinColour": ["Tawny", "Golden", "Dark Brown", "Black", "White"], 799 | "hairType": "basic", 800 | "eyeColourType": "basic", 801 | "facialHairType": "men", 802 | "facialHairChance": 0.7 803 | }, 804 | "traits": [ 805 | { 806 | "name": "Feline Agility", 807 | "description": "When this creature moves on their turn in combat, they can double their speed until the end of the turn. Once they use this trait, they can’t use it again until they move 0 feet on one of their turns." 808 | } 809 | ], 810 | "proficiencies": ["Perception", "Stealth"] 811 | }, 812 | { 813 | "index": 24, 814 | "defaultCheckbox": true, 815 | "name": "Tortle", 816 | "matureAge": 15, 817 | "lifespan": 50, 818 | "size": "Medium", 819 | "languages": "Common, Aquan", 820 | "speed": { "walking": 30 }, 821 | "avgHeight": 66, 822 | "appearance": { 823 | "skinType": "Skin", 824 | "skinColourType": "basic", 825 | "hairType": "none", 826 | "eyeColourType": "basic", 827 | "facialHairType": "none" 828 | }, 829 | "traits": [ 830 | { 831 | "name": "Shell Defense", 832 | "description": "This creature can withdraw into their shell as an action. Until they emerge, they gain a +4 bonus to AC, and they have advantage on Strength and Constitution saving throws. While in their shell, they are prone, their speed is 0 and can’t increase, they have disadvantage on Dexterity saving throws, they can’t take reactions, and the only action they can take is a bonus action to emerge from their shell." 833 | } 834 | ], 835 | "proficiencies": ["Survival"] 836 | }, 837 | { 838 | "index": 25, 839 | "defaultCheckbox": true, 840 | "name": "Goliath", 841 | "matureAge": 18, 842 | "lifespan": 90, 843 | "size": "Medium", 844 | "languages": "Common, Giant", 845 | "speed": { "walking": 30 }, 846 | "avgHeight": 90, 847 | "appearance": { 848 | "skinType": "Skin", 849 | "skinColourType": "basic", 850 | "hairType": "basic", 851 | "eyeColourType": "basic", 852 | "facialHairType": "men", 853 | "facialHairChance": 0.8 854 | }, 855 | "traits": [ 856 | { 857 | "name": "Mountain Born", 858 | "description": "This creature has resistance to cold damage" 859 | } 860 | ], 861 | "proficiencies": ["Athletics"] 862 | }, 863 | { 864 | "index": 26, 865 | "defaultCheckbox": true, 866 | "name": "Owlin", 867 | "matureAge": 18, 868 | "lifespan": 90, 869 | "size": "Medium", 870 | "languages": "Common", 871 | "speed": { "walking": 30, "flying": 30 }, 872 | "avgHeight": 72, 873 | "darkvision": "Darkvision 120ft., ", 874 | "appearance": { 875 | "skinType": "Feathers", 876 | "skinColourType": "basic", 877 | "hairType": "none", 878 | "eyeColourType": "basic", 879 | "facialHairType": "none" 880 | }, 881 | "traits": [], 882 | "proficiencies": ["Stealth"] 883 | }, 884 | { 885 | "index": 27, 886 | "defaultCheckbox": true, 887 | "name": "Harengon", 888 | "matureAge": 18, 889 | "lifespan": 90, 890 | "size": "Medium", 891 | "languages": "Common", 892 | "speed": { "walking": 30 }, 893 | "avgHeight": 72, 894 | "appearance": { 895 | "skinType": "Fur", 896 | "skinColourType": "basic", 897 | "hairType": "none", 898 | "eyeColourType": "basic", 899 | "facialHairType": "men", 900 | "facialHairChance": 0.3 901 | }, 902 | "traits": [ 903 | { 904 | "name": "Hare-Trigger", 905 | "description": "This creature can add their proficiency bonus to their initiative rolls" 906 | } 907 | ], 908 | "proficiencies": ["Perception"] 909 | }, 910 | { 911 | "index": 28, 912 | "defaultCheckbox": true, 913 | "name": "Minotaur", 914 | "matureAge": 18, 915 | "lifespan": 90, 916 | "size": "Medium", 917 | "languages": "Common, Minotaur", 918 | "speed": { "walking": 30 }, 919 | "avgHeight": 75, 920 | "appearance": { 921 | "skinType": "Fur", 922 | "skinColourType": "basic", 923 | "hairType": "none", 924 | "eyeColourType": "basic", 925 | "facialHairType": "all", 926 | "facialHairChance": 0.7 927 | }, 928 | "traits": [ 929 | { 930 | "name": "Horns", 931 | "description": "This creature's horns are natural melee weapons, which they can use to make unarmed strikes. If they hit with them, they deal piercing damage equal to 1d6 + your Strength modifier, instead of the bludgeoning damage normal for an unarmed strike" 932 | }, 933 | { 934 | "name": "Goring Rush", 935 | "description": "Immediately after this creature uses the Dash action on their turn and move at least 20 feet, they can make one melee attack with their horns as a bonus action" 936 | } 937 | ], 938 | "proficiencies": [[1, "Intimidation", "Persuasion"]] 939 | }, 940 | { 941 | "index": 29, 942 | "defaultCheckbox": true, 943 | "name": "Changeling", 944 | "matureAge": 16, 945 | "lifespan": 90, 946 | "size": "Medium", 947 | "languages": "Common", 948 | "speed": { "walking": 30 }, 949 | "avgHeight": 68, 950 | "appearance": { 951 | "skinType": "Skin", 952 | "skinColourType": "basic", 953 | "hairType": "basic", 954 | "eyeColourType": "basic", 955 | "facialHairType": "men", 956 | "facialHairChance": 0.7 957 | }, 958 | "traits": [ 959 | { 960 | "name": "Shapechanger", 961 | "description": "As an action, this creature can change their appearance and their voice. They determine the specifics of the changes, including their coloration, hair length, and sex. They can also adjust their height and weight, but not so much that their size changes. They can make themself appear as a member of another race, though none of their game statistics change. They can’t duplicate the appearance of a creature they've never seen, and they must adopt a form that has the same basic arrangement of limbs that they have. Their clothing and equipment aren’t changed by this trait. They stay in the new form until they use an action to revert to their true form or until they die" 962 | } 963 | ], 964 | "proficiencies": [[2, "Intimidation", "Persuasion", "Deception", "Insight"]] 965 | } 966 | ] 967 | -------------------------------------------------------------------------------- /jobs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "index": 0, 4 | "name": "Unemployed", 5 | "defaultCheckbox": false, 6 | "weapon": { 7 | "name": "Unarmed", 8 | "weaponType": "Melee", 9 | "weaponRange": "reach 5 ft.", 10 | "damageStat": "STR", 11 | "damageDice": "1d4", 12 | "damageType": "bludgeoning", 13 | "avgDamage": 2.5 14 | }, 15 | "statBonuses": { 16 | "STR": 0, 17 | "DEX": 0, 18 | "CON": 0, 19 | "INT": 0, 20 | "WIS": 0, 21 | "CHA": 0 22 | }, 23 | "hooks": [ 24 | [ 25 | "Unemployed 1 - ", 26 | "The guards have been harassing them, but make sure to have no witnesses, they need evidence to show the town what the guards are doing." 27 | ], 28 | [ 29 | "Unemployed 2 - ", 30 | "They dream of having an important role in the town, but need help getting it." 31 | ], 32 | [ 33 | "Unemployed 3 - ", 34 | "They have inherited a lot of gold, and wants to help people, but doesn't know how." 35 | ] 36 | ], 37 | "proficiencies": ["Stealth", "Survival"], 38 | "savingThrows": ["CON", "WIS"] 39 | }, 40 | { 41 | "index": 1, 42 | "name": "Actor", 43 | "defaultCheckbox": true, 44 | "weapon": { 45 | "name": "Lute", 46 | "weaponType": "Melee", 47 | "weaponRange": "reach 5 ft.", 48 | "damageStat": "STR", 49 | "damageDice": "1d4", 50 | "damageType": "bludgeoning", 51 | "avgDamage": 2.5 52 | }, 53 | "statBonuses": { 54 | "STR": 0, 55 | "DEX": 1, 56 | "CON": 0, 57 | "INT": 0, 58 | "WIS": 0, 59 | "CHA": 2 60 | }, 61 | "hooks": [ 62 | [ 63 | "Actor 1 - ", 64 | "Their theatre has been getting threats because of the controversial stage play they are performing, they need some bodyguards." 65 | ], 66 | [ 67 | "Actor 2 - ", 68 | "Their boss has replaced them for the lead role, they need to get their role back, by any means." 69 | ], 70 | [ 71 | "Actor 3 - ", 72 | "The last few times they have been busking someone has stolen all of their gold, they need help tracking them down." 73 | ], 74 | [ 75 | "Actor 4 - ", 76 | "They have been working on a performance that will be legendary, they need help creating an event for it." 77 | ], 78 | [ 79 | "Actor 5 - ", 80 | "They are playing an adventurer in their next performance, and they want to learn from one, let them follow and observe you." 81 | ] 82 | ], 83 | "proficiencies": ["Performance", "Acrobatics"], 84 | "savingThrows": ["CHA", "DEX"] 85 | }, 86 | { 87 | "index": 2, 88 | "name": "Alchemist", 89 | "defaultCheckbox": true, 90 | "weapon": { 91 | "name": "Glass Bottle", 92 | "weaponType": "Ranged", 93 | "weaponRange": "range 15/30 ft.", 94 | "damageStat": "DEX", 95 | "damageDice": "1d4", 96 | "damageType": "bludgeoning", 97 | "avgDamage": 2.5 98 | }, 99 | "statBonuses": { 100 | "STR": 0, 101 | "DEX": 0, 102 | "CON": 1, 103 | "INT": 2, 104 | "WIS": 0, 105 | "CHA": 0 106 | }, 107 | "hooks": [ 108 | [ 109 | "Alchemist 1 - ", 110 | "They have been developing a potion/poison, and they need someone to test it for them in the field." 111 | ], 112 | [ 113 | "Alchemist 2 - ", 114 | "Someone in town is paralyzed, but they are unsure of what potion to give them, they need help researching the affliction." 115 | ], 116 | [ 117 | "Alchemist 3 - ", 118 | "They appear to be friendly and give the player a potion, which is really a poison. Upon drinking it, they tell the drinker to do something nefarious in order to get the antidote." 119 | ] 120 | ], 121 | "proficiencies": ["Arcana", "Nature"], 122 | "savingThrows": ["INT", "CON"] 123 | }, 124 | { 125 | "index": 3, 126 | "name": "Archer", 127 | "defaultCheckbox": true, 128 | "weapon": { 129 | "name": "Longbow", 130 | "weaponType": "Ranged", 131 | "weaponRange": "range 150/600 ft.", 132 | "damageStat": "DEX", 133 | "damageDice": "1d8", 134 | "damageType": "piercing", 135 | "avgDamage": 4.5 136 | }, 137 | "armor": { 138 | "name": "Leather Armor", 139 | "acBase": 11 140 | }, 141 | "statBonuses": { 142 | "STR": 0, 143 | "DEX": 2, 144 | "CON": 0, 145 | "INT": 0, 146 | "WIS": 0, 147 | "CHA": 0 148 | }, 149 | "hooks": [ 150 | [ 151 | "Archer 1 - ", 152 | "Their aim needs help, and need someone to help teach them." 153 | ], 154 | [ 155 | "Archer 2 - ", 156 | "They broke their arm, but doesn't want to stop working, they need magical or artifice assistance." 157 | ], 158 | [ 159 | "Archer 3 - ", 160 | "They want to create a special new arrow, but lack the materials for it." 161 | ], 162 | [ 163 | "Archer 4 - ", 164 | "They are having a custom bow made, but the craftsman has disappeared, they need someone to track the craftsman down." 165 | ] 166 | ], 167 | "proficiencies": ["Acrobatics", "Perception"], 168 | "savingThrows": ["DEX", "WIS"] 169 | }, 170 | { 171 | "index": 4, 172 | "name": "Archivist", 173 | "defaultCheckbox": true, 174 | "weapon": { 175 | "name": "Thrown Book", 176 | "weaponType": "Ranged", 177 | "weaponRange": "range 15/30 ft.", 178 | "damageStat": "DEX", 179 | "damageDice": "1d4", 180 | "damageType": "bludgeoning", 181 | "avgDamage": 2.5 182 | }, 183 | "statBonuses": { 184 | "STR": 0, 185 | "DEX": 0, 186 | "CON": 0, 187 | "INT": 2, 188 | "WIS": 0, 189 | "CHA": 0 190 | }, 191 | "hooks": [ 192 | [ 193 | "Archivist 1 - ", 194 | "They need help scouting a nearby ruin to finish some research on the ancient creatures that made the ruin." 195 | ], 196 | [ 197 | "Archivist 2 - ", 198 | "A page from an ancient ritual book was stolen. They need help tracking it down." 199 | ], 200 | [ 201 | "Archivist 3 - ", 202 | "They suspect one of the other archivists is selling secret knowledge from books withheld from the public." 203 | ], 204 | [ 205 | "Archivist 4 - ", 206 | "Random items in the archive keep sporadically combusting, they need help investigating." 207 | ], 208 | [ 209 | "Archivist 5 - ", 210 | "They are a new archivist, and there are large inconsistencies with the town's history. They need help investigating a possible cover-up." 211 | ] 212 | ], 213 | "proficiencies": ["History", "Religion"], 214 | "savingThrows": ["INT", "WIS"] 215 | }, 216 | { 217 | "index": 5, 218 | "name": "Artist", 219 | "defaultCheckbox": true, 220 | "weapon": { 221 | "name": "Paintbrush", 222 | "weaponType": "Melee", 223 | "weaponRange": "reach 5 ft.", 224 | "damageStat": "STR", 225 | "damageDice": "1d4", 226 | "damageType": "piercing", 227 | "avgDamage": 2.5 228 | }, 229 | "statBonuses": { 230 | "STR": 0, 231 | "DEX": 2, 232 | "CON": 0, 233 | "INT": 0, 234 | "WIS": 0, 235 | "CHA": 0 236 | }, 237 | "hooks": [ 238 | [ 239 | "Artist 1 - ", 240 | "They want to paint the view from atop a mountain, but need help getting there." 241 | ], 242 | [ 243 | "Artist 2 - ", 244 | "They want to paint a specific rare creature, but have no idea what it looks like." 245 | ], 246 | [ 247 | "Artist 3 - ", 248 | "They want to make a portrait of their crush while they are sleeping, but need help sneaking in." 249 | ], 250 | [ 251 | "Artist 4 - ", 252 | "They want to graffiti the town hall, and need help distracting the guards while they paint." 253 | ], 254 | [ 255 | "Artist 5 - ", 256 | "They have created a replica of the town's most expensive painting, they need someone to switch the paintings so that they can sell the original." 257 | ] 258 | ], 259 | "proficiencies": ["Perception", "Sleight of Hand"], 260 | "savingThrows": ["DEX", "WIS"] 261 | }, 262 | { 263 | "index": 6, 264 | "name": "Baker", 265 | "defaultCheckbox": true, 266 | "weapon": { 267 | "name": "Baguette", 268 | "weaponType": "Melee", 269 | "weaponRange": "reach 5 ft.", 270 | "damageStat": "STR", 271 | "damageDice": "1d4", 272 | "damageType": "bludgeoning", 273 | "avgDamage": 2.5 274 | }, 275 | "statBonuses": { 276 | "STR": 0, 277 | "DEX": 0, 278 | "CON": 1, 279 | "INT": 1, 280 | "WIS": 0, 281 | "CHA": 0 282 | }, 283 | "hooks": [ 284 | [ 285 | "Baker 1 - ", 286 | "They aren't a very good baker, but have to cater an important event for the town. They need help improving their baked goods." 287 | ], 288 | [ 289 | "Baker 2 - ", 290 | "Someone has been poisoning the baked goods they sell, and the guards are blaming them. They need help uncovering who the poisoner is." 291 | ], 292 | [ 293 | "Baker 3 - ", 294 | "Their reputation has been tarnished by a rival baker. They need help rebuilding it, or taking down the rival." 295 | ], 296 | [ 297 | "Baker 4 - ", 298 | "They burned down their bakery to disguise a murder they committed. They want to hire someone to investigate because they are confident and want to build their innocence." 299 | ] 300 | ], 301 | "proficiencies": ["Sleight of Hand", "Survival"], 302 | "savingThrows": ["CON", "WIS"] 303 | }, 304 | { 305 | "index": 7, 306 | "name": "Banker", 307 | "defaultCheckbox": true, 308 | "weapon": { 309 | "name": "Thrown Copper", 310 | "weaponType": "Ranged", 311 | "weaponRange": "range 15/30 ft.", 312 | "damageStat": "DEX", 313 | "damageDice": "1d4", 314 | "damageType": "bludgeoning", 315 | "avgDamage": 2.5 316 | }, 317 | "statBonuses": { 318 | "STR": 0, 319 | "DEX": 0, 320 | "CON": 0, 321 | "INT": 2, 322 | "WIS": 0, 323 | "CHA": 0 324 | }, 325 | "hooks": [ 326 | [ 327 | "Banker 1 - ", 328 | "They suspect one of the other bankers has been siphoning gold, but need help proving it." 329 | ], 330 | [ 331 | "Banker 2 - ", 332 | "They think that one of their regular customers is going to try and rob the bank. The guards aren't taking it seriously because the suspect is well liked in the community." 333 | ], 334 | [ 335 | "Banker 3 - ", 336 | "They found out their bank is committing nefarious transactions, and plans on releasing the information, but someone is stalking them." 337 | ], 338 | [ 339 | "Banker 4 - ", 340 | "They plan on robbing the bank they work for, but need a crew to help pull it off." 341 | ], 342 | [ 343 | "Banker 5 - ", 344 | "They have been secretly giving out counterfeit gold, while pocketing the real gold. They try to scam the party in the same way." 345 | ] 346 | ], 347 | "proficiencies": ["Investigation", "Insight"], 348 | "savingThrows": ["INT", "CHA"] 349 | }, 350 | { 351 | "index": 8, 352 | "name": "Barber", 353 | "defaultCheckbox": true, 354 | "weapon": { 355 | "name": "Scissors", 356 | "weaponType": "Melee", 357 | "weaponRange": "reach 5 ft.", 358 | "damageStat": "STR", 359 | "damageDice": "1d6", 360 | "damageType": "piercing", 361 | "avgDamage": 3.5 362 | }, 363 | "statBonuses": { 364 | "STR": 0, 365 | "DEX": 1, 366 | "CON": 0, 367 | "INT": 0, 368 | "WIS": 0, 369 | "CHA": 1 370 | }, 371 | "hooks": [ 372 | [ 373 | "Barber 1 - ", 374 | "They have been hoarding hair for a ritual. The party sees them transporting a large quantity of hair." 375 | ], 376 | [ 377 | "Barber 2 - ", 378 | "They tried to get some scissors enchanted to be animated, but the scissors have gone rogue and are attacking people." 379 | ], 380 | [ 381 | "Barber 3 - ", 382 | "They have been spiking the town's water supply with hair growth potions. Although some side effects are starting to show up." 383 | ] 384 | ], 385 | "proficiencies": ["Persuasion", "Perception"], 386 | "savingThrows": ["DEX", "CHA"] 387 | }, 388 | { 389 | "index": 9, 390 | "name": "Barkeep", 391 | "defaultCheckbox": true, 392 | "weapon": { 393 | "name": "Pint of Ale", 394 | "weaponType": "Melee", 395 | "weaponRange": "reach 5 ft.", 396 | "damageStat": "STR", 397 | "damageDice": "1d6", 398 | "damageType": "bludgeoning", 399 | "avgDamage": 3.5 400 | }, 401 | "statBonuses": { 402 | "STR": 0, 403 | "DEX": 0, 404 | "CON": 1, 405 | "INT": 0, 406 | "WIS": 0, 407 | "CHA": 1 408 | }, 409 | "hooks": [ 410 | [ 411 | "Barkeep 1 - ", 412 | "One of the regulars stopped coming in. They need help tracking them down and finding out why." 413 | ], 414 | [ 415 | "Barkeep 2 - ", 416 | "One of the local gangs keeps coming in, clearing out everyone else, and drinking until they damage the bar. The guards are too scared to intervene." 417 | ], 418 | [ 419 | "Barkeep 3 - ", 420 | "They are running an assassins guild secretly out of the bar. If you order a specific drink you get given a contract as well." 421 | ], 422 | [ 423 | "Barkeep 4 - ", 424 | "They make their own ale, but someone has stolen the recipe and are blackmailing them, they need help getting out of the situation with their recipe kept secret." 425 | ], 426 | [ 427 | "Barkeep 5 - ", 428 | "All their customers stopped showing up for the last week, and they don't know why." 429 | ] 430 | ], 431 | "proficiencies": ["Persuasion", "Insight"], 432 | "savingThrows": ["CHA", "DEX"] 433 | }, 434 | { 435 | "index": 10, 436 | "name": "Blacksmith", 437 | "defaultCheckbox": true, 438 | "weapon": { 439 | "name": "Blacksmith's Hammer", 440 | "weaponType": "Melee", 441 | "weaponRange": "reach 5 ft.", 442 | "damageStat": "STR", 443 | "damageDice": "1d8", 444 | "damageType": "bludgeoning", 445 | "avgDamage": 4.5 446 | }, 447 | "armor": { 448 | "name": "Chain Mail and Shield", 449 | "acBase": 18, 450 | "dexCap": 0 451 | }, 452 | "statBonuses": { 453 | "STR": 2, 454 | "DEX": 0, 455 | "CON": 1, 456 | "INT": 0, 457 | "WIS": 0, 458 | "CHA": 0 459 | }, 460 | "hooks": [ 461 | [ 462 | "Blacksmith 1 - ", 463 | "They are crafting some chain mail out of a new type of alloy, and need someone to test it in combat. The new alloy turns out to be very brittle though, and will likely break in combat." 464 | ], 465 | [ 466 | "Blacksmith 2 - ", 467 | "They keep having their contracts stolen by a rival blacksmith. They need to find out how they are stealing them and stop their rival." 468 | ], 469 | [ 470 | "Blacksmith 3 - ", 471 | "One of their clients bought a very expensive set of armor, but paid with counterfeit gold. They need help tracking down the theif." 472 | ], 473 | [ 474 | "Blacksmith 4 - ", 475 | "They are being harassed by a local gang and it's protection racket. They need help repelling the gang." 476 | ], 477 | [ 478 | "Blacksmith 5 - ", 479 | "They have been selling wares that break easily but with high prices. They try to scam the party in this manner." 480 | ] 481 | ], 482 | "proficiencies": ["Athletics", "Sleight of Hand"], 483 | "savingThrows": ["STR", "DEX"] 484 | }, 485 | { 486 | "index": 11, 487 | "name": "Brothel Keeper", 488 | "defaultCheckbox": true, 489 | "weapon": { 490 | "name": "Jewel Encrusted Cane", 491 | "weaponType": "Melee", 492 | "weaponRange": "reach 5 ft.", 493 | "damageStat": "STR", 494 | "damageDice": "1d6", 495 | "damageType": "bludgeoning", 496 | "avgDamage": 3.5 497 | }, 498 | "statBonuses": { 499 | "STR": 0, 500 | "DEX": 0, 501 | "CON": 0, 502 | "INT": 0, 503 | "WIS": 0, 504 | "CHA": 2 505 | }, 506 | "hooks": [ 507 | [ 508 | "Brothel Keeper 1 - ", 509 | "One of their most profitable clients has been attacking the workers. They need help to stop the attacks, but still want the client to continue paying for services." 510 | ], 511 | [ 512 | "Brothel Keeper 2 - ", 513 | "The town mayor is involved in a scandel with the brothel. They need help clearing the mayor's name." 514 | ], 515 | [ 516 | "Brothel Keeper 3 - ", 517 | "A group of fanaticals is attacking anyone who tries to enter the brothel. The fanatics seem to have paid off the guards. They need help dealing with the fanatics." 518 | ], 519 | [ 520 | "Brothel Keeper 4 - ", 521 | "They want the party to go undercover as a dangerous group has hired out the brothel for a night. The party is hired to help keep tensions low and everyone safe during the night." 522 | ] 523 | ], 524 | "proficiencies": ["Intimidation", "Persuasion"], 525 | "savingThrows": ["CHA", "WIS"] 526 | }, 527 | { 528 | "index": 12, 529 | "name": "Builder", 530 | "defaultCheckbox": true, 531 | "weapon": { 532 | "name": "Brick", 533 | "weaponType": "Melee", 534 | "weaponRange": "reach 5 ft.", 535 | "damageStat": "STR", 536 | "damageDice": "1d6", 537 | "damageType": "bludgeoning", 538 | "avgDamage": 3.5 539 | }, 540 | "statBonuses": { 541 | "STR": 3, 542 | "DEX": 0, 543 | "CON": 0, 544 | "INT": 0, 545 | "WIS": 0, 546 | "CHA": 0 547 | }, 548 | "hooks": [ 549 | [ 550 | "Builder 1 - ", 551 | "They are being pressured by a local gang to build a weakpoint in their current project, they need help being free of the gang." 552 | ], 553 | [ 554 | "Builder 2 - ", 555 | "They have been badly constructing many buildings in the town. Now some of those buildings are starting to collapse." 556 | ], 557 | [ 558 | "Builder 3 - ", 559 | "A rich client has asked them to embed a rare creature into the building, and they need someone to hunt that rare creature." 560 | ], 561 | [ 562 | "Builder 4 - ", 563 | "They and the other builders around town have constructed a hidden complex network of tunnels under the town, that they are using to commit nefarious actions." 564 | ] 565 | ], 566 | "proficiencies": ["Athletics", "Survival"], 567 | "savingThrows": ["STR", "WIS"] 568 | }, 569 | { 570 | "index": 13, 571 | "name": "Butcher", 572 | "defaultCheckbox": true, 573 | "weapon": { 574 | "name": "Cleaver", 575 | "weaponType": "Melee", 576 | "weaponRange": "reach 5 ft.", 577 | "damageStat": "STR", 578 | "damageDice": "1d6", 579 | "damageType": "slashing", 580 | "avgDamage": 3.5 581 | }, 582 | "armor": { 583 | "name": "Padded Armor", 584 | "acBase": 11 585 | }, 586 | "statBonuses": { 587 | "STR": 0, 588 | "DEX": 2, 589 | "CON": 0, 590 | "INT": 0, 591 | "WIS": 0, 592 | "CHA": 0 593 | }, 594 | "hooks": [ 595 | [ 596 | "Butcher 1 - ", 597 | "They want to butcher and cook one of the rare creatures nearby, but need someone to hunt it for them." 598 | ], 599 | [ 600 | "Butcher 2 - ", 601 | "They have been smuggling illicit materials through meat around town." 602 | ], 603 | [ 604 | "Butcher 3 - ", 605 | "There is a rumour that they have been butchering the corpses of people who have died around town." 606 | ] 607 | ], 608 | "proficiencies": ["Sleight of Hand", "Survival"], 609 | "savingThrows": ["DEX", "WIS"] 610 | }, 611 | { 612 | "index": 14, 613 | "name": "Cartographer", 614 | "defaultCheckbox": true, 615 | "weapon": { 616 | "name": "Compass", 617 | "weaponType": "Melee", 618 | "weaponRange": "reach 5 ft.", 619 | "damageStat": "STR", 620 | "damageDice": "1d4", 621 | "damageType": "piercing", 622 | "avgDamage": 2.5 623 | }, 624 | "armor": { 625 | "name": "Padded Armor", 626 | "acBase": 11 627 | }, 628 | "statBonuses": { 629 | "STR": 0, 630 | "DEX": 0, 631 | "CON": 0, 632 | "INT": 2, 633 | "WIS": 0, 634 | "CHA": 0 635 | }, 636 | "hooks": [ 637 | [ 638 | "Cartographer 1 - ", 639 | "A large section of a map seems to be incorrect. They need help exploring the area to find out what's being hidden." 640 | ], 641 | [ 642 | "Cartographer 2 - ", 643 | "They have been incorrectly marking all their maps, and people are starting to notice." 644 | ], 645 | [ 646 | "Cartographer 3 - ", 647 | "They want to sail around the world, but don't have a ship, or the funds to buy one." 648 | ], 649 | [ 650 | "Cartographer 4 - ", 651 | "Their maps seem to have strange markings on them, but they won't explain what the markings are." 652 | ], 653 | [ 654 | "Cartographer 5 - ", 655 | "They need help trekking into a dangerous land to map it." 656 | ] 657 | ], 658 | "proficiencies": ["History", "Survival"], 659 | "savingThrows": ["INT", "WIS"] 660 | }, 661 | { 662 | "index": 15, 663 | "name": "Chef", 664 | "defaultCheckbox": true, 665 | "weapon": { 666 | "name": "Chef's Knife", 667 | "weaponType": "Melee", 668 | "weaponRange": "reach 5 ft.", 669 | "damageStat": "STR", 670 | "damageDice": "1d6", 671 | "damageType": "slashing", 672 | "avgDamage": 3.5 673 | }, 674 | "statBonuses": { 675 | "STR": 0, 676 | "DEX": 2, 677 | "CON": 0, 678 | "INT": 0, 679 | "WIS": 0, 680 | "CHA": 0 681 | }, 682 | "hooks": [ 683 | [ 684 | "Chef 1 - ", 685 | "They have a client that is demanding to eat a humanoid, they need help with the situation." 686 | ], 687 | [ 688 | "Chef 2 - ", 689 | "They have been slowly infecting the town by poisoning their food." 690 | ], 691 | [ 692 | "Chef 3 - ", 693 | "The town mayor has an exotic pet. They want help to steal the pet and cook it." 694 | ], 695 | [ 696 | "Chef 4 - ", 697 | "They have started using an exotic new spice, but it seems to be effecting the townspeople in a weird way." 698 | ] 699 | ], 700 | "proficiencies": ["Perception", "Survival"], 701 | "savingThrows": ["CON", "WIS"] 702 | }, 703 | { 704 | "index": 16, 705 | "name": "Cobbler", 706 | "defaultCheckbox": true, 707 | "weapon": { 708 | "name": "Shoe", 709 | "weaponType": "Melee", 710 | "weaponRange": "reach 5 ft.", 711 | "damageStat": "STR", 712 | "damageDice": "1d4", 713 | "damageType": "bludgeoning", 714 | "avgDamage": 2.5 715 | }, 716 | "statBonuses": { 717 | "STR": 0, 718 | "DEX": 1, 719 | "CON": 0, 720 | "INT": 1, 721 | "WIS": 0, 722 | "CHA": 0 723 | }, 724 | "hooks": [ 725 | [ 726 | "Cobbler 1 - ", 727 | "They have been stealing and replacing peoples shoes around town. The ones they replace them with are cursed." 728 | ], 729 | [ 730 | "Cobbler 2 - ", 731 | "They have been secretly damaging peoples shoes so that they can garner more business." 732 | ], 733 | [ 734 | "Cobbler 3 - ", 735 | "They are very eager to buy the players shoes, so that they can sell them to collectors." 736 | ] 737 | ], 738 | "proficiencies": ["Sleight of Hand", "Persuasion"], 739 | "savingThrows": ["DEX", "CHA"] 740 | }, 741 | { 742 | "index": 17, 743 | "name": "Courtesan", 744 | "defaultCheckbox": true, 745 | "weapon": { 746 | "name": "Marital Aid", 747 | "weaponType": "Melee", 748 | "weaponRange": "reach 5 ft.", 749 | "damageStat": "STR", 750 | "damageDice": "1d4", 751 | "damageType": "bludgeoning", 752 | "avgDamage": 2.5 753 | }, 754 | "statBonuses": { 755 | "STR": 0, 756 | "DEX": 0, 757 | "CON": 0, 758 | "INT": 0, 759 | "WIS": 0, 760 | "CHA": 2 761 | }, 762 | "hooks": [ 763 | [ 764 | "Courtesan 1 - ", 765 | "One of their colleagues has been spreading rumours about them, and they want the colleague silenced," 766 | ], 767 | [ 768 | "Courtesan 2 - ", 769 | "Their boss has been underpaying them, but the boss is well guarded." 770 | ], 771 | [ 772 | "Courtesan 3 - ", 773 | "One of their clients told them some classified information, which they leaked. Now the client is trying to kill them." 774 | ], 775 | [ 776 | "Courtesan 4 - ", 777 | "One of their clients is in a powerful position, and they are currently blackmailing the client." 778 | ], 779 | [ 780 | "Courtesan 5 - ", 781 | "They have been stealing from their clients while the clients are asleep. They have stolen something of incredible value." 782 | ] 783 | ], 784 | "proficiencies": ["Persuasion", "Sleight of Hand"], 785 | "savingThrows": ["DEX", "CHA"] 786 | }, 787 | { 788 | "index": 18, 789 | "name": "Dancer", 790 | "defaultCheckbox": true, 791 | "weapon": { 792 | "name": "Uppercut Kick", 793 | "weaponType": "Melee", 794 | "weaponRange": "reach 5 ft.", 795 | "damageStat": "STR", 796 | "damageDice": "1d4", 797 | "damageType": "bludgeoning", 798 | "avgDamage": 2.5 799 | }, 800 | "statBonuses": { 801 | "STR": 0, 802 | "DEX": 2, 803 | "CON": 0, 804 | "INT": 0, 805 | "WIS": 0, 806 | "CHA": 0 807 | }, 808 | "hooks": [ 809 | [ 810 | "Dancer 1 - ", 811 | "They hired someone to break the previous lead dancer's leg, but now that dancer has found out." 812 | ], 813 | [ 814 | "Dancer 2 - ", 815 | "They have incredible skill, but don't know how to show it off." 816 | ], 817 | [ 818 | "Dancer 3 - ", 819 | "At night, they sell their lightfeet skills to the criminal underworld, taking theiving jobs among others." 820 | ], 821 | [ 822 | "Dancer 4 - ", 823 | "Their dance is mesmerising, because they are actually performing a magical ritual on an unwitting audience." 824 | ] 825 | ], 826 | "proficiencies": ["Performance", "Acrobatics"], 827 | "savingThrows": ["DEX", "CHA"] 828 | }, 829 | { 830 | "index": 19, 831 | "name": "Diplomat", 832 | "defaultCheckbox": true, 833 | "weapon": { 834 | "name": "Quill", 835 | "weaponType": "Melee", 836 | "weaponRange": "reach 5 ft.", 837 | "damageStat": "STR", 838 | "damageDice": "1d4", 839 | "damageType": "piercing", 840 | "avgDamage": 2.5 841 | }, 842 | "statBonuses": { 843 | "STR": 0, 844 | "DEX": 0, 845 | "CON": 0, 846 | "INT": 0, 847 | "WIS": 0, 848 | "CHA": 2 849 | }, 850 | "hooks": [ 851 | [ 852 | "Diplomat 1 - ", 853 | "They have a scandel with a courtesan that they need help dealing with." 854 | ], 855 | [ 856 | "Diplomat 2 - ", 857 | "They need to make a deal with a significant figure ffrom the criminal underworld, but require someone to act as their proxy." 858 | ], 859 | [ 860 | "Diplomat 3 - ", 861 | "They are planning on making another diplomat look bad, and will try to use the players to do it, before betraying the players." 862 | ], 863 | [ 864 | "Diplomat 4 - ", 865 | "They are planning a big speech, but have recieved numerous threats, and need undercover security." 866 | ], 867 | [ 868 | "Diplomat 5 - ", 869 | "They are in a forgeign embassy, and need help convincing the local leader to help their homeland." 870 | ] 871 | ], 872 | "proficiencies": ["Persuasion", "Deception"], 873 | "savingThrows": ["CHA", "INT"] 874 | }, 875 | { 876 | "index": 20, 877 | "name": "Doctor", 878 | "defaultCheckbox": true, 879 | "weapon": { 880 | "name": "Scalpel", 881 | "weaponType": "Melee", 882 | "weaponRange": "reach 5 ft.", 883 | "damageStat": "STR", 884 | "damageDice": "1d4", 885 | "damageType": "piercing", 886 | "avgDamage": 2.5 887 | }, 888 | "statBonuses": { 889 | "STR": 0, 890 | "DEX": 1, 891 | "CON": 0, 892 | "INT": 2, 893 | "WIS": 0, 894 | "CHA": 0 895 | }, 896 | "hooks": [ 897 | [ 898 | "Doctor 1 - ", 899 | "One of their patients is showing very strange magical symptoms, they need someone to investigate its origins." 900 | ], 901 | [ 902 | "Doctor 2 - ", 903 | "They have been selling fake medicine, making a huge profit allowing them to hire heavy security." 904 | ], 905 | [ 906 | "Doctor 3 - ", 907 | "They have been stealing corpses from the graveyard to test new necromantic magic." 908 | ], 909 | [ 910 | "Doctor 4 - ", 911 | "They are secretly testing an alchemists poisons on unwitting patients, in order to try and find antidotes." 912 | ], 913 | [ 914 | "Doctor 5 - ", 915 | "They are secretly a vampire using their position to siphon off extra blood from patients to avoid killing." 916 | ] 917 | ], 918 | "proficiencies": ["Sleight of Hand", "Medicine"], 919 | "savingThrows": ["INT", "DEX"] 920 | }, 921 | { 922 | "index": 21, 923 | "name": "Scout", 924 | "defaultCheckbox": true, 925 | "weapon": { 926 | "name": "Shortsword", 927 | "weaponType": "Melee", 928 | "weaponRange": "reach 5 ft.", 929 | "damageStat": "STR", 930 | "damageDice": "1d6", 931 | "damageType": "piercing", 932 | "avgDamage": 3.5 933 | }, 934 | "armor": { 935 | "name": "Studded Leather Armor", 936 | "acBase": 12 937 | }, 938 | "statBonuses": { 939 | "STR": 1, 940 | "DEX": 1, 941 | "CON": 1, 942 | "INT": 1, 943 | "WIS": 0, 944 | "CHA": 0 945 | }, 946 | "hooks": [ 947 | [ 948 | "Scout 1 - ", 949 | "They broke their leg and are unable to return to their base, but have important information about enemy troop movements." 950 | ], 951 | [ 952 | "Scout 2 - ", 953 | "They found an ancient temple whose discovery could start a war. They haven't told anyone yet." 954 | ], 955 | [ 956 | "Scout 3 - ", 957 | "They have been spying on the players movements and reporting back to a criminal entity." 958 | ], 959 | [ 960 | "Scout 4 - ", 961 | "They are a double agent, offering information to both their side and the enemy." 962 | ] 963 | ], 964 | "proficiencies": ["Stealth", "Perception"], 965 | "savingThrows": ["DEX", "WIS"] 966 | }, 967 | { 968 | "index": 22, 969 | "name": "Farmer", 970 | "defaultCheckbox": true, 971 | "weapon": { 972 | "name": "Pitchfork", 973 | "weaponType": "Melee", 974 | "weaponRange": "reach 5 ft.", 975 | "damageStat": "STR", 976 | "damageDice": "1d6", 977 | "damageType": "piercing", 978 | "avgDamage": 3.5 979 | }, 980 | "armor": { 981 | "name": "Padded Armor", 982 | "acBase": 11 983 | }, 984 | "statBonuses": { 985 | "STR": 2, 986 | "DEX": 0, 987 | "CON": 1, 988 | "INT": 0, 989 | "WIS": 0, 990 | "CHA": 0 991 | }, 992 | "hooks": [ 993 | [ 994 | "Farmer 1 - ", 995 | "Their produce has been infecting people, although they seem unaware." 996 | ], 997 | [ 998 | "Farmer 2 - ", 999 | "They have been hiding enemies of the state in their barn." 1000 | ], 1001 | [ 1002 | "Farmer 3 - ", 1003 | "They have been setting other farms on fire to increase the value of their own crops." 1004 | ], 1005 | [ 1006 | "Farmer 4 - ", 1007 | "Some of their produce seems to be coming to life at night." 1008 | ] 1009 | ], 1010 | "proficiencies": ["Nature", "Survival"], 1011 | "savingThrows": ["STR", "WIS"] 1012 | }, 1013 | { 1014 | "index": 23, 1015 | "name": "Fisherman", 1016 | "defaultCheckbox": true, 1017 | "weapon": { 1018 | "name": "Fishing Rod", 1019 | "weaponType": "Melee", 1020 | "weaponRange": "reach 5 ft.", 1021 | "damageStat": "STR", 1022 | "damageDice": "1d4", 1023 | "damageType": "bludgeoning", 1024 | "avgDamage": 2.5 1025 | }, 1026 | "armor": { 1027 | "name": "Padded Armor", 1028 | "acBase": 11 1029 | }, 1030 | "statBonuses": { 1031 | "STR": 1, 1032 | "DEX": 0, 1033 | "CON": 1, 1034 | "INT": 0, 1035 | "WIS": 0, 1036 | "CHA": 0 1037 | }, 1038 | "hooks": [ 1039 | [ 1040 | "Fisherman 1 - ", 1041 | "While out fishing, they saw a creature lurking beneath the surface bigger than any shark." 1042 | ], 1043 | [ 1044 | "Fisherman 2 - ", 1045 | "They caught a magical fish, and a lot of people are trying to steal it." 1046 | ], 1047 | [ 1048 | "Fisherman 3 - ", 1049 | "They want to catch a giant water creature, but need help doing so." 1050 | ] 1051 | ], 1052 | "proficiencies": ["Perception", "Survival"], 1053 | "savingThrows": ["CON", "WIS"] 1054 | }, 1055 | { 1056 | "index": 24, 1057 | "name": "Gardener", 1058 | "defaultCheckbox": true, 1059 | "weapon": { 1060 | "name": "Gardening Shears", 1061 | "weaponType": "Melee", 1062 | "weaponRange": "reach 5 ft.", 1063 | "damageStat": "STR", 1064 | "damageDice": "1d6", 1065 | "damageType": "slashing", 1066 | "avgDamage": 3.5 1067 | }, 1068 | "statBonuses": { 1069 | "STR": 0, 1070 | "DEX": 2, 1071 | "CON": 0, 1072 | "INT": 0, 1073 | "WIS": 0, 1074 | "CHA": 0 1075 | }, 1076 | "hooks": [ 1077 | [ 1078 | "Gardener 1 - ", 1079 | "They work for a very wealthy individual who has sentient plants, but the plants want to be free." 1080 | ], 1081 | [ 1082 | "Gardener 2 - ", 1083 | "They discovered that blood makes their garden grow much better, and have been secretly killing people." 1084 | ], 1085 | [ 1086 | "Gardener 3 - ", 1087 | "The flowers they grow have been poisoning locals, but no one has been able to figure it out yet." 1088 | ] 1089 | ], 1090 | "proficiencies": ["Nature", "Survival"], 1091 | "savingThrows": ["DEX", "WIS"] 1092 | }, 1093 | { 1094 | "index": 25, 1095 | "name": "Gladiator", 1096 | "defaultCheckbox": true, 1097 | "weapon": { 1098 | "name": "Longsword", 1099 | "weaponType": "Melee", 1100 | "weaponRange": "reach 5 ft.", 1101 | "damageStat": "STR", 1102 | "damageDice": "1d8", 1103 | "damageType": "slashing", 1104 | "avgDamage": 4.5 1105 | }, 1106 | "armor": { 1107 | "name": "Breastplate and Shield", 1108 | "acBase": 16, 1109 | "dexCap": 2 1110 | }, 1111 | "statBonuses": { 1112 | "STR": 2, 1113 | "DEX": 0, 1114 | "CON": 2, 1115 | "INT": 0, 1116 | "WIS": 0, 1117 | "CHA": 0 1118 | }, 1119 | "hooks": [ 1120 | [ 1121 | "Gladiator 1 - ", 1122 | "They have been fake fighting for years, but their new boss wants them to fight for real, and they don't know how." 1123 | ], 1124 | [ 1125 | "Gladiator 2 - ", 1126 | "They want to stop fighting, but their boss is blackmailing them." 1127 | ], 1128 | [ 1129 | "Gladiator 3 - ", 1130 | "They are new to fighting, but are about to be in a life or death fight." 1131 | ], 1132 | [ 1133 | "Gladiator 4 - ", 1134 | "They have been hiring people to drug their opponents before a fight." 1135 | ], 1136 | [ 1137 | "Gladiator 5 - ", 1138 | "They will be fighting a rare creature in an upcoming tournament, and need to speak to someone with expertise on the creature." 1139 | ] 1140 | ], 1141 | "proficiencies": ["Athletics", "Intimidation"], 1142 | "savingThrows": ["CON", "STR"] 1143 | }, 1144 | { 1145 | "index": 26, 1146 | "name": "Grocer", 1147 | "defaultCheckbox": true, 1148 | "weapon": { 1149 | "name": "Thrown Produce", 1150 | "weaponType": "Ranged", 1151 | "weaponRange": "range 15/30 ft.", 1152 | "damageStat": "DEX", 1153 | "damageDice": "1d4", 1154 | "damageType": "bludgeoning", 1155 | "avgDamage": 2.5 1156 | }, 1157 | "statBonuses": { 1158 | "STR": 0, 1159 | "DEX": 0, 1160 | "CON": 0, 1161 | "INT": 0, 1162 | "WIS": 0, 1163 | "CHA": 2 1164 | }, 1165 | "hooks": [ 1166 | [ 1167 | "Grocer 1 - ", 1168 | "The farmer they are working with has stopped selling to them. They need help convincing them to return." 1169 | ], 1170 | [ 1171 | "Grocer 2 - ", 1172 | "They get their produce by stealing from farms at night." 1173 | ], 1174 | [ 1175 | "Grocer 3 - ", 1176 | "They have been giving produce away to the poor, but their competitor has sent people to rough up their store to get them to stop." 1177 | ] 1178 | ], 1179 | "proficiencies": ["Nature", "Persuasion"], 1180 | "savingThrows": ["CHA", "WIS"] 1181 | }, 1182 | { 1183 | "index": 27, 1184 | "name": "Hunter", 1185 | "defaultCheckbox": true, 1186 | "weapon": { 1187 | "name": "Longbow", 1188 | "weaponType": "Ranged", 1189 | "weaponRange": "range 150/600 ft.", 1190 | "damageStat": "DEX", 1191 | "damageDice": "1d8", 1192 | "damageType": "piercing", 1193 | "avgDamage": 4.5 1194 | }, 1195 | "armor": { 1196 | "name": "Padded Armor", 1197 | "acBase": 11 1198 | }, 1199 | "statBonuses": { 1200 | "STR": 0, 1201 | "DEX": 2, 1202 | "CON": 0, 1203 | "INT": 0, 1204 | "WIS": 0, 1205 | "CHA": 0 1206 | }, 1207 | "hooks": [ 1208 | [ 1209 | "Hunter 1 - ", 1210 | "They killed a magical creature, and seem to have been cursed since." 1211 | ], 1212 | [ 1213 | "Hunter 2 - ", 1214 | "They have pushed out all the hunters in the nearby area, and are now raising their prices very high." 1215 | ], 1216 | [ 1217 | "Hunter 3 - ", 1218 | "They accidentally killed another hunter, and covered it up." 1219 | ], 1220 | ["Hunter 4 - ", "They have been killing livestock from a nearby farmer."] 1221 | ], 1222 | "proficiencies": ["Stealth", "Survival"], 1223 | "savingThrows": ["DEX", "WIS"] 1224 | }, 1225 | { 1226 | "index": 28, 1227 | "name": "Innkeeper", 1228 | "defaultCheckbox": true, 1229 | "weapon": { 1230 | "name": "Guestbook", 1231 | "weaponType": "Melee", 1232 | "weaponRange": "reach 5 ft.", 1233 | "damageStat": "STR", 1234 | "damageDice": "1d4", 1235 | "damageType": "bludgeoning", 1236 | "avgDamage": 2.5 1237 | }, 1238 | "statBonuses": { 1239 | "STR": 0, 1240 | "DEX": 0, 1241 | "CON": 0, 1242 | "INT": 0, 1243 | "WIS": 0, 1244 | "CHA": 2 1245 | }, 1246 | "hooks": [ 1247 | [ 1248 | "Innkeeper 1 - ", 1249 | "One day a week, they hire out a room for a criminal underworld meeting." 1250 | ], 1251 | [ 1252 | "Innkeeper 2 - ", 1253 | "They sell the information on anyone significant staying at their inn." 1254 | ], 1255 | [ 1256 | "Innkeeper 3 - ", 1257 | "They are suspected of stealing from their guests, but someone is framing them." 1258 | ] 1259 | ], 1260 | "proficiencies": ["Persuasion", "Insight"], 1261 | "savingThrows": ["CHA", "WIS"] 1262 | }, 1263 | { 1264 | "index": 29, 1265 | "name": "Jailer", 1266 | "defaultCheckbox": true, 1267 | "weapon": { 1268 | "name": "Whip", 1269 | "weaponType": "Melee", 1270 | "weaponRange": "reach 10 ft.", 1271 | "damageStat": "STR", 1272 | "damageDice": "1d4", 1273 | "damageType": "slashing", 1274 | "avgDamage": 2.5 1275 | }, 1276 | "armor": { 1277 | "name": "Hide Armor", 1278 | "acBase": 12, 1279 | "dexCap": 2 1280 | }, 1281 | "statBonuses": { 1282 | "STR": 2, 1283 | "DEX": 0, 1284 | "CON": 0, 1285 | "INT": 0, 1286 | "WIS": 0, 1287 | "CHA": 0 1288 | }, 1289 | "hooks": [ 1290 | [ 1291 | "Jailer 1 - ", 1292 | "They have been torturing prisoners in order to sell their information." 1293 | ], 1294 | [ 1295 | "Jailer 2 - ", 1296 | "They are being threatened to release a prisoner, and need protection" 1297 | ], 1298 | [ 1299 | "Jailer 3 - ", 1300 | "They sell lockpicks to prisoners, allowing some to escape." 1301 | ], 1302 | [ 1303 | "Jailer 4 - ", 1304 | "They try to scam their prisoners into giving out locations of stashes, before stealing it all for themselves." 1305 | ] 1306 | ], 1307 | "proficiencies": ["Intimidation", "Athletics"], 1308 | "savingThrows": ["CHA", "STR"] 1309 | }, 1310 | { 1311 | "index": 30, 1312 | "name": "Jester", 1313 | "defaultCheckbox": true, 1314 | "weapon": { 1315 | "name": "Juggling Club", 1316 | "weaponType": "Melee", 1317 | "weaponRange": "reach 5 ft.", 1318 | "damageStat": "STR", 1319 | "damageDice": "1d4", 1320 | "damageType": "bludgeoning", 1321 | "avgDamage": 2.5 1322 | }, 1323 | "statBonuses": { 1324 | "STR": 0, 1325 | "DEX": 0, 1326 | "CON": 0, 1327 | "INT": 0, 1328 | "WIS": 0, 1329 | "CHA": 2 1330 | }, 1331 | "hooks": [ 1332 | [ 1333 | "Jester 1 - ", 1334 | "They have been hired to perform at a nobles party, but hurt themselves recently, and need someone to step in for them." 1335 | ], 1336 | [ 1337 | "Jester 2 - ", 1338 | "They use their performances as distractions while their friends steal from audience members." 1339 | ] 1340 | ], 1341 | "proficiencies": ["Performance", "Deception"], 1342 | "savingThrows": ["CHA", "DEX"] 1343 | }, 1344 | { 1345 | "index": 31, 1346 | "name": "Judge", 1347 | "defaultCheckbox": true, 1348 | "weapon": { 1349 | "name": "Gavel", 1350 | "weaponType": "Melee", 1351 | "weaponRange": "reach 5 ft.", 1352 | "damageStat": "STR", 1353 | "damageDice": "1d4", 1354 | "damageType": "bludgeoning", 1355 | "avgDamage": 2.5 1356 | }, 1357 | "statBonuses": { 1358 | "STR": 0, 1359 | "DEX": 0, 1360 | "CON": 0, 1361 | "INT": 2, 1362 | "WIS": 1, 1363 | "CHA": 0 1364 | }, 1365 | "hooks": [ 1366 | [ 1367 | "Judge 1 - ", 1368 | "A criminal entity has been blackmailing them in order to lower sentences on the organisations members." 1369 | ], 1370 | [ 1371 | "Judge 2 - ", 1372 | "They have been taking bribes to give certain outcomes in trials." 1373 | ] 1374 | ], 1375 | "proficiencies": ["Insight", "History"], 1376 | "savingThrows": ["INT", "WIS"] 1377 | }, 1378 | { 1379 | "index": 32, 1380 | "name": "Knight", 1381 | "defaultCheckbox": true, 1382 | "weapon": { 1383 | "name": "Longsword", 1384 | "weaponType": "Melee", 1385 | "weaponRange": "reach 5 ft.", 1386 | "damageStat": "STR", 1387 | "damageDice": "1d8", 1388 | "damageType": "slashing", 1389 | "avgDamage": 4.5 1390 | }, 1391 | "armor": { 1392 | "name": "Chain Mail and Shield", 1393 | "acBase": 18, 1394 | "dexCap": 0 1395 | }, 1396 | "statBonuses": { 1397 | "STR": 2, 1398 | "DEX": 0, 1399 | "CON": 1, 1400 | "INT": 0, 1401 | "WIS": 0, 1402 | "CHA": 0 1403 | }, 1404 | "hooks": [ 1405 | [ 1406 | "Knight 1 - ", 1407 | "A blacksmith ripped them off on the purchase of a new sword, and they want to send the blacksmith a message." 1408 | ], 1409 | [ 1410 | "Knight 2 - ", 1411 | "They were sent to kill some petty criminals, but instead hid them away and helped them escape." 1412 | ], 1413 | [ 1414 | "Knight 3 - ", 1415 | "They have been selling secrets of the person they are protecting." 1416 | ], 1417 | [ 1418 | "Knight 4 - ", 1419 | "They have been intimidating local businesses on behalf of their noble boss." 1420 | ] 1421 | ], 1422 | "proficiencies": ["Athletics", "Intimidation"], 1423 | "savingThrows": ["CON", "STR"] 1424 | }, 1425 | { 1426 | "index": 33, 1427 | "name": "Messenger", 1428 | "defaultCheckbox": true, 1429 | "weapon": { 1430 | "name": "Dagger", 1431 | "weaponType": "Melee", 1432 | "weaponRange": "reach 5 ft.", 1433 | "damageStat": "STR", 1434 | "damageDice": "1d4", 1435 | "damageType": "piercing", 1436 | "avgDamage": 2.5 1437 | }, 1438 | "statBonuses": { 1439 | "STR": 0, 1440 | "DEX": 2, 1441 | "CON": 0, 1442 | "INT": 0, 1443 | "WIS": 0, 1444 | "CHA": 1 1445 | }, 1446 | "hooks": [ 1447 | [ 1448 | "Messenger 1 - ", 1449 | "They have been handing out fake death threats in order to cause chaos." 1450 | ], 1451 | [ 1452 | "Messenger 2 - ", 1453 | "They have been given a letter to deliver, but they believe that the receiver will kill them upon delivery." 1454 | ], 1455 | [ 1456 | "Messenger 3 - ", 1457 | "They have been injured, but the message they need to deliver is incredibly urgent." 1458 | ], 1459 | [ 1460 | "Messenger 4 - ", 1461 | "They believe that they are going to lose their job, so they have been dumping everyones deliveries around town for revenge." 1462 | ] 1463 | ], 1464 | "proficiencies": ["Stealth", "Perception"], 1465 | "savingThrows": ["DEX", "WIS"] 1466 | }, 1467 | { 1468 | "index": 34, 1469 | "name": "Miner", 1470 | "defaultCheckbox": true, 1471 | "weapon": { 1472 | "name": "Pickaxe", 1473 | "weaponType": "Melee", 1474 | "weaponRange": "reach 5 ft.", 1475 | "damageStat": "STR", 1476 | "damageDice": "1d6", 1477 | "damageType": "piercing", 1478 | "avgDamage": 3.5 1479 | }, 1480 | "statBonuses": { 1481 | "STR": 2, 1482 | "DEX": 0, 1483 | "CON": 1, 1484 | "INT": 0, 1485 | "WIS": 0, 1486 | "CHA": 0 1487 | }, 1488 | "hooks": [ 1489 | [ 1490 | "Miner 1 - ", 1491 | "They have discovered a rare gem, but haven't shown anybody yet." 1492 | ], 1493 | [ 1494 | "Miner 2 - ", 1495 | "Their colleagues discovered an old mine shaft believed to be cursed. Now their boss wants them to investigate the mine." 1496 | ], 1497 | [ 1498 | "Miner 3 - ", 1499 | "They are part of a secret group of miners digging a hidden tunnel under the town." 1500 | ], 1501 | [ 1502 | "Miner 4 - ", 1503 | "Creatures have been seen stalking them and the other miners while they work." 1504 | ] 1505 | ], 1506 | "proficiencies": ["Athletics", "Survival"], 1507 | "savingThrows": ["CON", "STR"] 1508 | }, 1509 | { 1510 | "index": 35, 1511 | "name": "Nurse", 1512 | "defaultCheckbox": true, 1513 | "weapon": { 1514 | "name": "Syringe", 1515 | "weaponType": "Melee", 1516 | "weaponRange": "reach 5 ft.", 1517 | "damageStat": "STR", 1518 | "damageDice": "1d4", 1519 | "damageType": "piercing", 1520 | "avgDamage": 2.5 1521 | }, 1522 | "statBonuses": { 1523 | "STR": 0, 1524 | "DEX": 1, 1525 | "CON": 0, 1526 | "INT": 2, 1527 | "WIS": 0, 1528 | "CHA": 0 1529 | }, 1530 | "hooks": [ 1531 | [ 1532 | "Nurse 1 - ", 1533 | "They have been counteracting the work the doctor has done, in order to tarnish the doctor's reputation." 1534 | ], 1535 | [ 1536 | "Nurse 2 - ", 1537 | "They have been poisoning the town's water supply with anesthetic, lowering the townspeoples awareness and consciousness." 1538 | ], 1539 | [ 1540 | "Nurse 3 - ", 1541 | "They are under-administering medicine, and selling the unused medicine on the black market." 1542 | ] 1543 | ], 1544 | "proficiencies": ["Medicine", "Investigation"], 1545 | "savingThrows": ["INT", "WIS"] 1546 | }, 1547 | { 1548 | "index": 36, 1549 | "name": "Philosopher", 1550 | "defaultCheckbox": true, 1551 | "weapon": { 1552 | "name": "Quill", 1553 | "weaponType": "Melee", 1554 | "weaponRange": "reach 5 ft.", 1555 | "damageStat": "STR", 1556 | "damageDice": "1d4", 1557 | "damageType": "piercing", 1558 | "avgDamage": 2.5 1559 | }, 1560 | "statBonuses": { 1561 | "STR": 0, 1562 | "DEX": 0, 1563 | "CON": 0, 1564 | "INT": 0, 1565 | "WIS": 2, 1566 | "CHA": 1 1567 | }, 1568 | "hooks": [ 1569 | [ 1570 | "Philosopher 1 - ", 1571 | "A recent traumatic event has caused them to spiral into nihilism, preaching it to others." 1572 | ], 1573 | [ 1574 | "Philosopher 2 - ", 1575 | "They have become bothered with the ethics of the ruling class in the town, and need help spreading propaganda against them." 1576 | ], 1577 | [ 1578 | "Philosopher 3 - ", 1579 | "They have a cult-like following. But the followers have started causing chaos around town, and now they don't want the followers anymore." 1580 | ] 1581 | ], 1582 | "proficiencies": ["History", "Religion"], 1583 | "savingThrows": ["INT", "WIS"] 1584 | }, 1585 | { 1586 | "index": 37, 1587 | "name": "Pirate", 1588 | "defaultCheckbox": true, 1589 | "weapon": { 1590 | "name": "Longsword", 1591 | "weaponType": "Melee", 1592 | "weaponRange": "reach 5 ft.", 1593 | "damageStat": "STR", 1594 | "damageDice": "1d8", 1595 | "damageType": "slashing", 1596 | "avgDamage": 4.5 1597 | }, 1598 | "armor": { 1599 | "name": "Hide Armor and Shield", 1600 | "acBase": 14, 1601 | "dexCap": 2 1602 | }, 1603 | "statBonuses": { 1604 | "STR": 2, 1605 | "DEX": 0, 1606 | "CON": 1, 1607 | "INT": 0, 1608 | "WIS": 0, 1609 | "CHA": 0 1610 | }, 1611 | "hooks": [ 1612 | [ 1613 | "Pirate 1 - ", 1614 | "They have been stealing ships and equipment from nobles and giving them to poor sailors and fishermen, but the guards are planning an attack against them." 1615 | ], 1616 | [ 1617 | "Pirate 2 - ", 1618 | "They are planning a mutiny, but need help convincing the others." 1619 | ], 1620 | [ 1621 | "Pirate 3 - ", 1622 | "They were recently attacked by a large sea creature, and lost all their treasure. Now they want to prepare and set out to get it back." 1623 | ], 1624 | [ 1625 | "Pirate 4 - ", 1626 | "They have been undercover as a navy sailor for years, telling their friends of unprotected treasures and safe areas." 1627 | ] 1628 | ], 1629 | "proficiencies": ["Intimidation", "Survival"], 1630 | "savingThrows": ["CON", "STR"] 1631 | }, 1632 | { 1633 | "index": 38, 1634 | "name": "Professor", 1635 | "defaultCheckbox": true, 1636 | "weapon": { 1637 | "name": "Quill", 1638 | "weaponType": "Melee", 1639 | "weaponRange": "reach 5 ft.", 1640 | "damageStat": "STR", 1641 | "damageDice": "1d4", 1642 | "damageType": "piercing", 1643 | "avgDamage": 2.5 1644 | }, 1645 | "statBonuses": { 1646 | "STR": 0, 1647 | "DEX": 0, 1648 | "CON": 0, 1649 | "INT": 3, 1650 | "WIS": 0, 1651 | "CHA": 0 1652 | }, 1653 | "hooks": [ 1654 | [ 1655 | "Professor 1 - ", 1656 | "They want to impress their students by showing them a real rare creature, but are unaware that the creature will easily be able to escape." 1657 | ], 1658 | [ 1659 | "Professor 2 - ", 1660 | "They have theorised a new spell, but lack the ability to pull it off. The spell is chaotic and acts unexpectedly." 1661 | ], 1662 | [ 1663 | "Professor 3 - ", 1664 | "They have been purposely teaching their students incorrect information. Now the whole town seems ignorant on this topic." 1665 | ] 1666 | ], 1667 | "proficiencies": ["History", "Investigation"], 1668 | "savingThrows": ["INT", "CHA"] 1669 | }, 1670 | { 1671 | "index": 39, 1672 | "name": "Royal Advisor", 1673 | "defaultCheckbox": true, 1674 | "weapon": { 1675 | "name": "Dagger", 1676 | "weaponType": "Melee", 1677 | "weaponRange": "reach 5 ft.", 1678 | "damageStat": "STR", 1679 | "damageDice": "1d4", 1680 | "damageType": "piercing", 1681 | "avgDamage": 2.5 1682 | }, 1683 | "statBonuses": { 1684 | "STR": 0, 1685 | "DEX": 0, 1686 | "CON": 0, 1687 | "INT": 1, 1688 | "WIS": 0, 1689 | "CHA": 2 1690 | }, 1691 | "hooks": [ 1692 | [ 1693 | "Royal Advisor 1 - ", 1694 | "They have been told to deliver a threat to another country, but believe doing so will start a war. They need help convincing the royalty to reconsider." 1695 | ], 1696 | [ 1697 | "Royal Advisor 2 - ", 1698 | "They are abusing their position in order to shakedown local businesses. The guards are purposefully ignoring it." 1699 | ], 1700 | [ 1701 | "Royal Advisor 3 - ", 1702 | "They have been feeding the royalty incorrect information in order to create tension between other countries." 1703 | ], 1704 | [ 1705 | "Royal Advisor 4 - ", 1706 | "They have been selling secrets from the royalty's inner circle. Someone is starting to suspect them though." 1707 | ] 1708 | ], 1709 | "proficiencies": ["Persuasion", "Deception"], 1710 | "savingThrows": ["CHA", "INT"] 1711 | }, 1712 | { 1713 | "index": 40, 1714 | "name": "Tax Collector", 1715 | "defaultCheckbox": true, 1716 | "weapon": { 1717 | "name": "Dagger", 1718 | "weaponType": "Melee", 1719 | "weaponRange": "reach 5 ft.", 1720 | "damageStat": "STR", 1721 | "damageDice": "1d4", 1722 | "damageType": "piercing", 1723 | "avgDamage": 2.5 1724 | }, 1725 | "statBonuses": { 1726 | "STR": 0, 1727 | "DEX": 0, 1728 | "CON": 2, 1729 | "INT": 2, 1730 | "WIS": 0, 1731 | "CHA": -1 1732 | }, 1733 | "hooks": [ 1734 | [ 1735 | "Tax Collector 1 - ", 1736 | "They have been undercharging the townspeople, but the nobles are starting to catch on." 1737 | ], 1738 | [ 1739 | "Tax Collector 2 - ", 1740 | "They are known to get violent when people don't pay. They recently accidentally killed someone this way." 1741 | ], 1742 | [ 1743 | "Tax Collector 3 - ", 1744 | "They are investigating a noble who appears to be tax evading, but the noble has hired assassins to kill them before they finish the investigation." 1745 | ] 1746 | ], 1747 | "proficiencies": ["Intimidation", "Investigation"], 1748 | "savingThrows": ["INT", "CHA"] 1749 | }, 1750 | { 1751 | "index": 41, 1752 | "name": "Thief", 1753 | "defaultCheckbox": true, 1754 | "weapon": { 1755 | "name": "Dagger", 1756 | "weaponType": "Melee", 1757 | "weaponRange": "reach 5 ft.", 1758 | "damageStat": "STR", 1759 | "damageDice": "1d4", 1760 | "damageType": "piercing", 1761 | "avgDamage": 2.5 1762 | }, 1763 | "armor": { 1764 | "name": "Leather Armor", 1765 | "acBase": 11 1766 | }, 1767 | "statBonuses": { 1768 | "STR": 0, 1769 | "DEX": 2, 1770 | "CON": 0, 1771 | "INT": 1, 1772 | "WIS": 0, 1773 | "CHA": 0 1774 | }, 1775 | "hooks": [ 1776 | [ 1777 | "Thief 1 - ", 1778 | "They are planning on stealing the towns most treasured relic, and need help pulling it off." 1779 | ], 1780 | [ 1781 | "Thief 2 - ", 1782 | "They have been hired to steal something from one of the players." 1783 | ], 1784 | [ 1785 | "Thief 3 - ", 1786 | "They are stealing food for those who cannot afford it, but are being hunted by the local guards." 1787 | ] 1788 | ], 1789 | "proficiencies": ["Stealth", "Sleight of Hand"], 1790 | "savingThrows": ["DEX", "WIS"] 1791 | }, 1792 | { 1793 | "index": 42, 1794 | "name": "Torturer", 1795 | "defaultCheckbox": true, 1796 | "weapon": { 1797 | "name": "Whip", 1798 | "weaponType": "Melee", 1799 | "weaponRange": "reach 10 ft.", 1800 | "damageStat": "STR", 1801 | "damageDice": "1d4", 1802 | "damageType": "slashing", 1803 | "avgDamage": 2.5 1804 | }, 1805 | "armor": { 1806 | "name": "Leather Armor", 1807 | "acBase": 11 1808 | }, 1809 | "statBonuses": { 1810 | "STR": 2, 1811 | "DEX": 0, 1812 | "CON": 1, 1813 | "INT": 0, 1814 | "WIS": 0, 1815 | "CHA": 0 1816 | }, 1817 | "hooks": [ 1818 | [ 1819 | "Torturer 1 - ", 1820 | "They have been framing innocent people of crimes, so that they may conduct their job on them." 1821 | ], 1822 | [ 1823 | "Torturer 2 - ", 1824 | "They have been harvesting and selling body parts on the black market." 1825 | ] 1826 | ], 1827 | "proficiencies": ["Athletics", "Medicine"], 1828 | "savingThrows": ["STR", "WIS"] 1829 | }, 1830 | { 1831 | "index": 43, 1832 | "name": "Wine Seller", 1833 | "defaultCheckbox": true, 1834 | "weapon": { 1835 | "name": "Wine Bottle", 1836 | "weaponType": "Melee", 1837 | "weaponRange": "reach 5 ft.", 1838 | "damageStat": "STR", 1839 | "damageDice": "1d4", 1840 | "damageType": "bludgeoning", 1841 | "avgDamage": 2.5 1842 | }, 1843 | "statBonuses": { 1844 | "STR": 0, 1845 | "DEX": 0, 1846 | "CON": 1, 1847 | "INT": 0, 1848 | "WIS": 0, 1849 | "CHA": 2 1850 | }, 1851 | "hooks": [ 1852 | [ 1853 | "Wine Seller 1 - ", 1854 | "They have garnered their impressive selection by hiring thieves to steal bottles from collectors." 1855 | ], 1856 | [ 1857 | "Wine Seller 2 - ", 1858 | "A creature has been stalking and hunting through their vineyard, although the creature is also increasing the quality of the wine." 1859 | ] 1860 | ], 1861 | "proficiencies": ["Persuasion", "Nature"], 1862 | "savingThrows": ["CON", "CHA"] 1863 | }, 1864 | { 1865 | "index": 44, 1866 | "name": "Woodcutter", 1867 | "defaultCheckbox": true, 1868 | "weapon": { 1869 | "name": "Axe", 1870 | "weaponType": "Melee", 1871 | "weaponRange": "reach 5 ft.", 1872 | "damageStat": "STR", 1873 | "damageDice": "1d6", 1874 | "damageType": "slashing", 1875 | "avgDamage": 3.5 1876 | }, 1877 | "armor": { 1878 | "name": "Leather Armor", 1879 | "acBase": 11 1880 | }, 1881 | "statBonuses": { 1882 | "STR": 2, 1883 | "DEX": 0, 1884 | "CON": 1, 1885 | "INT": 0, 1886 | "WIS": 0, 1887 | "CHA": 0 1888 | }, 1889 | "hooks": [ 1890 | [ 1891 | "Woodcutter 1 - ", 1892 | "In the new area they have been working, creatures attack them for cutting the trees down." 1893 | ], 1894 | [ 1895 | "Woodcutter 2 - ", 1896 | "They have been cutting down sentient trees, selling the wood as a special new type, hiding its origin." 1897 | ], 1898 | [ 1899 | "Woodcutter 3 - ", 1900 | "They are planning on murdering a colleague by felling a tree on them." 1901 | ] 1902 | ], 1903 | "proficiencies": ["Athletics", "Nature"], 1904 | "savingThrows": ["CON", "STR"] 1905 | }, 1906 | { 1907 | "index": 45, 1908 | "name": "Guard", 1909 | "defaultCheckbox": true, 1910 | "weapon": { 1911 | "name": "Spear", 1912 | "weaponType": "Melee", 1913 | "weaponRange": "reach 5 ft. or range 20/60 ft.", 1914 | "damageStat": "STR", 1915 | "damageDice": "1d6", 1916 | "damageType": "piercing", 1917 | "avgDamage": 3.5 1918 | }, 1919 | "armor": { 1920 | "name": "Chain Shirt and Shield", 1921 | "acBase": 15, 1922 | "dexCap": 2 1923 | }, 1924 | "statBonuses": { 1925 | "STR": 2, 1926 | "DEX": 0, 1927 | "CON": 2, 1928 | "INT": 0, 1929 | "WIS": 0, 1930 | "CHA": 0 1931 | }, 1932 | "hooks": [ 1933 | [ 1934 | "Guard 1 - ", 1935 | "They have been shaking down local businesses, and if the busniness doesn't pay then they inform criminals that they are free to loot the business." 1936 | ], 1937 | [ 1938 | "Guard 2 - ", 1939 | "They suspect that the Guard Captain is taking bribes from the local crime syndicate, although the last person to mention it has gone missing." 1940 | ], 1941 | [ 1942 | "Guard 3 - ", 1943 | "They have reason to believe that a heist will take place soon, but their boss won't listen to them, so they need help investigating and preventing." 1944 | ] 1945 | ], 1946 | "proficiencies": ["Insight", "Intimidation"], 1947 | "savingThrows": ["CON", "STR"] 1948 | }, 1949 | { 1950 | "index": 46, 1951 | "name": "Soldier", 1952 | "defaultCheckbox": true, 1953 | "weapon": { 1954 | "name": "Longsword", 1955 | "weaponType": "Melee", 1956 | "weaponRange": "reach 5 ft.", 1957 | "damageStat": "STR", 1958 | "damageDice": "1d8", 1959 | "damageType": "slashing", 1960 | "avgDamage": 4.5 1961 | }, 1962 | "armor": { 1963 | "name": "Chain Mail and Shield", 1964 | "acBase": 18, 1965 | "dexCap": 0 1966 | }, 1967 | "statBonuses": { 1968 | "STR": 2, 1969 | "DEX": 0, 1970 | "CON": 2, 1971 | "INT": 0, 1972 | "WIS": 0, 1973 | "CHA": 0 1974 | }, 1975 | "hooks": [ 1976 | [ 1977 | "Soldier 1 - ", 1978 | "They have fallen in love with an enemy soldier, the two of them sneak off and meet often." 1979 | ], 1980 | [ 1981 | "Soldier 2 - ", 1982 | "They plan on murdering their captain during the fray of a battle so that they may take the captain's place." 1983 | ], 1984 | [ 1985 | "Soldier 3 - ", 1986 | "Their sibling is a soldier but didn't return with their squad, they need someone to find the sibling." 1987 | ] 1988 | ], 1989 | "proficiencies": ["Athletics", "Perception"], 1990 | "savingThrows": ["CON", "STR"] 1991 | }, 1992 | { 1993 | "index": 47, 1994 | "name": "Thug", 1995 | "defaultCheckbox": true, 1996 | "weapon": { 1997 | "name": "Heavy Crossbow", 1998 | "weaponType": "Ranged", 1999 | "weaponRange": "range 100/400 ft.", 2000 | "damageStat": "DEX", 2001 | "damageDice": "1d10", 2002 | "damageType": "piercing", 2003 | "avgDamage": 5.5 2004 | }, 2005 | "armor": { 2006 | "name": "Leather Armor", 2007 | "acBase": 11 2008 | }, 2009 | "statBonuses": { 2010 | "STR": 0, 2011 | "DEX": 1, 2012 | "CON": 2, 2013 | "INT": 0, 2014 | "WIS": 0, 2015 | "CHA": 1 2016 | }, 2017 | "hooks": [ 2018 | [ 2019 | "Thug 1 - ", 2020 | "They need to break one of their friends out of jail, so they need a large distraction to get all the guards away." 2021 | ], 2022 | [ 2023 | "Thug 2 - ", 2024 | "They are being manipulated by a corrupt guard to commit crimes, they want to escape." 2025 | ], 2026 | [ 2027 | "Thug 3 - ", 2028 | "They are an informant for the guards, but they think that someone suspects them." 2029 | ] 2030 | ], 2031 | "proficiencies": ["Athletics", "Intimidation"], 2032 | "savingThrows": ["CON", "CHA"] 2033 | }, 2034 | { 2035 | "index": 48, 2036 | "name": "Bandit", 2037 | "defaultCheckbox": true, 2038 | "weapon": { 2039 | "name": "Light Crossbow", 2040 | "weaponType": "Ranged", 2041 | "weaponRange": "range 80/320 ft.", 2042 | "damageStat": "DEX", 2043 | "damageDice": "1d8", 2044 | "damageType": "piercing", 2045 | "avgDamage": 4.5 2046 | }, 2047 | "armor": { 2048 | "name": "Leather Armor", 2049 | "acBase": 11 2050 | }, 2051 | "statBonuses": { 2052 | "STR": 0, 2053 | "DEX": 2, 2054 | "CON": 0, 2055 | "INT": 0, 2056 | "WIS": 1, 2057 | "CHA": 1 2058 | }, 2059 | "hooks": [ 2060 | [ 2061 | "Bandit 1 - ", 2062 | "They have only been attacking a rare goods merchant, to satisfy a strange addiction." 2063 | ], 2064 | [ 2065 | "Bandit 2 - ", 2066 | "They have been stealing livestock to prepare for a big plan." 2067 | ], 2068 | [ 2069 | "Bandit 3 - ", 2070 | "They have a compelling personality that has caused many people to flock to them and do their bidding." 2071 | ] 2072 | ], 2073 | "proficiencies": ["Survival", "Intimidation"], 2074 | "savingThrows": ["WIS", "CHA"] 2075 | }, 2076 | { 2077 | "index": 49, 2078 | "name": "Spy", 2079 | "defaultCheckbox": true, 2080 | "weapon": { 2081 | "name": "Dagger", 2082 | "weaponType": "Melee", 2083 | "weaponRange": "range 5 ft.", 2084 | "damageStat": "STR", 2085 | "damageDice": "1d4", 2086 | "damageType": "piercing", 2087 | "avgDamage": 2.5 2088 | }, 2089 | "armor": { 2090 | "name": "Leather Armor", 2091 | "acBase": 11 2092 | }, 2093 | "statBonuses": { 2094 | "STR": 0, 2095 | "DEX": 0, 2096 | "CON": 0, 2097 | "INT": 2, 2098 | "WIS": 0, 2099 | "CHA": 2 2100 | }, 2101 | "hooks": [ 2102 | [ 2103 | "Spy 1 - ", 2104 | "They have been spreading misinformation in an attempt to cause a coup. Townspeople seem to be getting very riled up." 2105 | ], 2106 | [ 2107 | "Spy 2 - ", 2108 | "They are a foreign spy who has been burned by their government. They are trying to keep their identity hidden as to not be captured." 2109 | ], 2110 | [ 2111 | "Spy 3 - ", 2112 | "They have been sent on behalf of a significant figure to assess the players." 2113 | ] 2114 | ], 2115 | "proficiencies": ["Persuasion", "Insight"], 2116 | "savingThrows": ["INT", "CHA"] 2117 | } 2118 | ] 2119 | --------------------------------------------------------------------------------