");
1078 | $input.on("blur.tt", function($e) {
1079 | var active, isActive, hasActive;
1080 | active = document.activeElement;
1081 | isActive = $menu.is(active);
1082 | hasActive = $menu.has(active).length > 0;
1083 | if (_.isMsie() && (isActive || hasActive)) {
1084 | $e.preventDefault();
1085 | $e.stopImmediatePropagation();
1086 | _.defer(function() {
1087 | $input.focus();
1088 | });
1089 | }
1090 | });
1091 | $menu.on("mousedown.tt", function($e) {
1092 | $e.preventDefault();
1093 | });
1094 | },
1095 | _onSelectableClicked: function onSelectableClicked(type, $el) {
1096 | this.select($el);
1097 | },
1098 | _onDatasetCleared: function onDatasetCleared() {
1099 | this._updateHint();
1100 | },
1101 | _onDatasetRendered: function onDatasetRendered(type, dataset, suggestions, async) {
1102 | this._updateHint();
1103 | this.eventBus.trigger("render", suggestions, async, dataset);
1104 | },
1105 | _onAsyncRequested: function onAsyncRequested(type, dataset, query) {
1106 | this.eventBus.trigger("asyncrequest", query, dataset);
1107 | },
1108 | _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) {
1109 | this.eventBus.trigger("asynccancel", query, dataset);
1110 | },
1111 | _onAsyncReceived: function onAsyncReceived(type, dataset, query) {
1112 | this.eventBus.trigger("asyncreceive", query, dataset);
1113 | },
1114 | _onFocused: function onFocused() {
1115 | this._minLengthMet() && this.menu.update(this.input.getQuery());
1116 | },
1117 | _onBlurred: function onBlurred() {
1118 | if (this.input.hasQueryChangedSinceLastFocus()) {
1119 | this.eventBus.trigger("change", this.input.getQuery());
1120 | }
1121 | },
1122 | _onEnterKeyed: function onEnterKeyed(type, $e) {
1123 | var $selectable;
1124 | if ($selectable = this.menu.getActiveSelectable()) {
1125 | this.select($selectable) && $e.preventDefault();
1126 | }
1127 | },
1128 | _onTabKeyed: function onTabKeyed(type, $e) {
1129 | var $selectable;
1130 | if ($selectable = this.menu.getActiveSelectable()) {
1131 | this.select($selectable) && $e.preventDefault();
1132 | } else if ($selectable = this.menu.getTopSelectable()) {
1133 | this.autocomplete($selectable) && $e.preventDefault();
1134 | }
1135 | },
1136 | _onEscKeyed: function onEscKeyed() {
1137 | this.close();
1138 | },
1139 | _onUpKeyed: function onUpKeyed() {
1140 | this.moveCursor(-1);
1141 | },
1142 | _onDownKeyed: function onDownKeyed() {
1143 | this.moveCursor(+1);
1144 | },
1145 | _onLeftKeyed: function onLeftKeyed() {
1146 | if (this.dir === "rtl" && this.input.isCursorAtEnd()) {
1147 | this.autocomplete(this.menu.getTopSelectable());
1148 | }
1149 | },
1150 | _onRightKeyed: function onRightKeyed() {
1151 | if (this.dir === "ltr" && this.input.isCursorAtEnd()) {
1152 | this.autocomplete(this.menu.getTopSelectable());
1153 | }
1154 | },
1155 | _onQueryChanged: function onQueryChanged(e, query) {
1156 | this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty();
1157 | },
1158 | _onWhitespaceChanged: function onWhitespaceChanged() {
1159 | this._updateHint();
1160 | },
1161 | _onLangDirChanged: function onLangDirChanged(e, dir) {
1162 | if (this.dir !== dir) {
1163 | this.dir = dir;
1164 | this.menu.setLanguageDirection(dir);
1165 | }
1166 | },
1167 | _openIfActive: function openIfActive() {
1168 | this.isActive() && this.open();
1169 | },
1170 | _minLengthMet: function minLengthMet(query) {
1171 | query = _.isString(query) ? query : this.input.getQuery() || "";
1172 | return query.length >= this.minLength;
1173 | },
1174 | _updateHint: function updateHint() {
1175 | var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match;
1176 | $selectable = this.menu.getTopSelectable();
1177 | data = this.menu.getSelectableData($selectable);
1178 | val = this.input.getInputValue();
1179 | if (data && !_.isBlankString(val) && !this.input.hasOverflow()) {
1180 | query = Input.normalizeQuery(val);
1181 | escapedQuery = _.escapeRegExChars(query);
1182 | frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i");
1183 | match = frontMatchRegEx.exec(data.val);
1184 | match && this.input.setHint(val + match[1]);
1185 | } else {
1186 | this.input.clearHint();
1187 | }
1188 | },
1189 | isEnabled: function isEnabled() {
1190 | return this.enabled;
1191 | },
1192 | enable: function enable() {
1193 | this.enabled = true;
1194 | },
1195 | disable: function disable() {
1196 | this.enabled = false;
1197 | },
1198 | isActive: function isActive() {
1199 | return this.active;
1200 | },
1201 | activate: function activate() {
1202 | if (this.isActive()) {
1203 | return true;
1204 | } else if (!this.isEnabled() || this.eventBus.before("active")) {
1205 | return false;
1206 | } else {
1207 | this.active = true;
1208 | this.eventBus.trigger("active");
1209 | return true;
1210 | }
1211 | },
1212 | deactivate: function deactivate() {
1213 | if (!this.isActive()) {
1214 | return true;
1215 | } else if (this.eventBus.before("idle")) {
1216 | return false;
1217 | } else {
1218 | this.active = false;
1219 | this.close();
1220 | this.eventBus.trigger("idle");
1221 | return true;
1222 | }
1223 | },
1224 | isOpen: function isOpen() {
1225 | return this.menu.isOpen();
1226 | },
1227 | open: function open() {
1228 | if (!this.isOpen() && !this.eventBus.before("open")) {
1229 | this.menu.open();
1230 | this._updateHint();
1231 | this.eventBus.trigger("open");
1232 | }
1233 | return this.isOpen();
1234 | },
1235 | close: function close() {
1236 | if (this.isOpen() && !this.eventBus.before("close")) {
1237 | this.menu.close();
1238 | this.input.clearHint();
1239 | this.input.resetInputValue();
1240 | this.eventBus.trigger("close");
1241 | }
1242 | return !this.isOpen();
1243 | },
1244 | setVal: function setVal(val) {
1245 | this.input.setQuery(_.toStr(val));
1246 | },
1247 | getVal: function getVal() {
1248 | return this.input.getQuery();
1249 | },
1250 | select: function select($selectable) {
1251 | var data = this.menu.getSelectableData($selectable);
1252 | if (data && !this.eventBus.before("select", data.obj)) {
1253 | this.input.setQuery(data.val, true);
1254 | this.eventBus.trigger("select", data.obj);
1255 | this.close();
1256 | return true;
1257 | }
1258 | return false;
1259 | },
1260 | autocomplete: function autocomplete($selectable) {
1261 | var query, data, isValid;
1262 | query = this.input.getQuery();
1263 | data = this.menu.getSelectableData($selectable);
1264 | isValid = data && query !== data.val;
1265 | if (isValid && !this.eventBus.before("autocomplete", data.obj)) {
1266 | this.input.setQuery(data.val);
1267 | this.eventBus.trigger("autocomplete", data.obj);
1268 | return true;
1269 | }
1270 | return false;
1271 | },
1272 | moveCursor: function moveCursor(delta) {
1273 | var query, $candidate, data, payload, cancelMove;
1274 | query = this.input.getQuery();
1275 | $candidate = this.menu.selectableRelativeToCursor(delta);
1276 | data = this.menu.getSelectableData($candidate);
1277 | payload = data ? data.obj : null;
1278 | cancelMove = this._minLengthMet() && this.menu.update(query);
1279 | if (!cancelMove && !this.eventBus.before("cursorchange", payload)) {
1280 | this.menu.setCursor($candidate);
1281 | if (data) {
1282 | this.input.setInputValue(data.val);
1283 | } else {
1284 | this.input.resetInputValue();
1285 | this._updateHint();
1286 | }
1287 | this.eventBus.trigger("cursorchange", payload);
1288 | return true;
1289 | }
1290 | return false;
1291 | },
1292 | destroy: function destroy() {
1293 | this.input.destroy();
1294 | this.menu.destroy();
1295 | }
1296 | });
1297 | return Typeahead;
1298 | function c(ctx) {
1299 | var methods = [].slice.call(arguments, 1);
1300 | return function() {
1301 | var args = [].slice.call(arguments);
1302 | _.each(methods, function(method) {
1303 | return ctx[method].apply(ctx, args);
1304 | });
1305 | };
1306 | }
1307 | }();
1308 | (function() {
1309 | "use strict";
1310 | var old, keys, methods;
1311 | old = $.fn.typeahead;
1312 | keys = {
1313 | www: "tt-www",
1314 | attrs: "tt-attrs",
1315 | typeahead: "tt-typeahead"
1316 | };
1317 | methods = {
1318 | initialize: function initialize(o, datasets) {
1319 | var www;
1320 | datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);
1321 | o = o || {};
1322 | www = WWW(o.classNames);
1323 | return this.each(attach);
1324 | function attach() {
1325 | var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, typeahead, MenuConstructor;
1326 | _.each(datasets, function(d) {
1327 | d.highlight = !!o.highlight;
1328 | });
1329 | $input = $(this);
1330 | $wrapper = $(www.html.wrapper);
1331 | $hint = $elOrNull(o.hint);
1332 | $menu = $elOrNull(o.menu);
1333 | defaultHint = o.hint !== false && !$hint;
1334 | defaultMenu = o.menu !== false && !$menu;
1335 | defaultHint && ($hint = buildHintFromInput($input, www));
1336 | defaultMenu && ($menu = $(www.html.menu).css(www.css.menu));
1337 | $hint && $hint.val("");
1338 | $input = prepInput($input, www);
1339 | if (defaultHint || defaultMenu) {
1340 | $wrapper.css(www.css.wrapper);
1341 | $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint);
1342 | $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null);
1343 | }
1344 | MenuConstructor = defaultMenu ? DefaultMenu : Menu;
1345 | eventBus = new EventBus({
1346 | el: $input
1347 | });
1348 | input = new Input({
1349 | hint: $hint,
1350 | input: $input
1351 | }, www);
1352 | menu = new MenuConstructor({
1353 | node: $menu,
1354 | datasets: datasets
1355 | }, www);
1356 | typeahead = new Typeahead({
1357 | input: input,
1358 | menu: menu,
1359 | eventBus: eventBus,
1360 | minLength: o.minLength
1361 | }, www);
1362 | $input.data(keys.www, www);
1363 | $input.data(keys.typeahead, typeahead);
1364 | }
1365 | },
1366 | isEnabled: function isEnabled() {
1367 | var enabled;
1368 | ttEach(this.first(), function(t) {
1369 | enabled = t.isEnabled();
1370 | });
1371 | return enabled;
1372 | },
1373 | enable: function enable() {
1374 | ttEach(this, function(t) {
1375 | t.enable();
1376 | });
1377 | return this;
1378 | },
1379 | disable: function disable() {
1380 | ttEach(this, function(t) {
1381 | t.disable();
1382 | });
1383 | return this;
1384 | },
1385 | isActive: function isActive() {
1386 | var active;
1387 | ttEach(this.first(), function(t) {
1388 | active = t.isActive();
1389 | });
1390 | return active;
1391 | },
1392 | activate: function activate() {
1393 | ttEach(this, function(t) {
1394 | t.activate();
1395 | });
1396 | return this;
1397 | },
1398 | deactivate: function deactivate() {
1399 | ttEach(this, function(t) {
1400 | t.deactivate();
1401 | });
1402 | return this;
1403 | },
1404 | isOpen: function isOpen() {
1405 | var open;
1406 | ttEach(this.first(), function(t) {
1407 | open = t.isOpen();
1408 | });
1409 | return open;
1410 | },
1411 | open: function open() {
1412 | ttEach(this, function(t) {
1413 | t.open();
1414 | });
1415 | return this;
1416 | },
1417 | close: function close() {
1418 | ttEach(this, function(t) {
1419 | t.close();
1420 | });
1421 | return this;
1422 | },
1423 | select: function select(el) {
1424 | var success = false, $el = $(el);
1425 | ttEach(this.first(), function(t) {
1426 | success = t.select($el);
1427 | });
1428 | return success;
1429 | },
1430 | autocomplete: function autocomplete(el) {
1431 | var success = false, $el = $(el);
1432 | ttEach(this.first(), function(t) {
1433 | success = t.autocomplete($el);
1434 | });
1435 | return success;
1436 | },
1437 | moveCursor: function moveCursoe(delta) {
1438 | var success = false;
1439 | ttEach(this.first(), function(t) {
1440 | success = t.moveCursor(delta);
1441 | });
1442 | return success;
1443 | },
1444 | val: function val(newVal) {
1445 | var query;
1446 | if (!arguments.length) {
1447 | ttEach(this.first(), function(t) {
1448 | query = t.getVal();
1449 | });
1450 | return query;
1451 | } else {
1452 | ttEach(this, function(t) {
1453 | t.setVal(newVal);
1454 | });
1455 | return this;
1456 | }
1457 | },
1458 | destroy: function destroy() {
1459 | ttEach(this, function(typeahead, $input) {
1460 | revert($input);
1461 | typeahead.destroy();
1462 | });
1463 | return this;
1464 | }
1465 | };
1466 | $.fn.typeahead = function(method) {
1467 | if (methods[method]) {
1468 | return methods[method].apply(this, [].slice.call(arguments, 1));
1469 | } else {
1470 | return methods.initialize.apply(this, arguments);
1471 | }
1472 | };
1473 | $.fn.typeahead.noConflict = function noConflict() {
1474 | $.fn.typeahead = old;
1475 | return this;
1476 | };
1477 | function ttEach($els, fn) {
1478 | $els.each(function() {
1479 | var $input = $(this), typeahead;
1480 | (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input);
1481 | });
1482 | }
1483 | function buildHintFromInput($input, www) {
1484 | return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop("readonly", true).removeAttr("id name placeholder required").attr({
1485 | autocomplete: "off",
1486 | spellcheck: "false",
1487 | tabindex: -1
1488 | });
1489 | }
1490 | function prepInput($input, www) {
1491 | $input.data(keys.attrs, {
1492 | dir: $input.attr("dir"),
1493 | autocomplete: $input.attr("autocomplete"),
1494 | spellcheck: $input.attr("spellcheck"),
1495 | style: $input.attr("style")
1496 | });
1497 | $input.addClass(www.classes.input).attr({
1498 | autocomplete: "off",
1499 | spellcheck: false
1500 | });
1501 | try {
1502 | !$input.attr("dir") && $input.attr("dir", "auto");
1503 | } catch (e) {}
1504 | return $input;
1505 | }
1506 | function getBackgroundStyles($el) {
1507 | return {
1508 | backgroundAttachment: $el.css("background-attachment"),
1509 | backgroundClip: $el.css("background-clip"),
1510 | backgroundColor: $el.css("background-color"),
1511 | backgroundImage: $el.css("background-image"),
1512 | backgroundOrigin: $el.css("background-origin"),
1513 | backgroundPosition: $el.css("background-position"),
1514 | backgroundRepeat: $el.css("background-repeat"),
1515 | backgroundSize: $el.css("background-size")
1516 | };
1517 | }
1518 | function revert($input) {
1519 | var www, $wrapper;
1520 | www = $input.data(keys.www);
1521 | $wrapper = $input.parent().filter(www.selectors.wrapper);
1522 | _.each($input.data(keys.attrs), function(val, key) {
1523 | _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);
1524 | });
1525 | $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input);
1526 | if ($wrapper.length) {
1527 | $input.detach().insertAfter($wrapper);
1528 | $wrapper.remove();
1529 | }
1530 | }
1531 | function $elOrNull(obj) {
1532 | var isValid, $el;
1533 | isValid = _.isJQuery(obj) || _.isElement(obj);
1534 | $el = isValid ? $(obj).first() : [];
1535 | return $el.length ? $el : null;
1536 | }
1537 | })();
1538 | });
--------------------------------------------------------------------------------
/js/xmltojson.js:
--------------------------------------------------------------------------------
1 | /*
2 | xml2json v 1.1
3 | copyright 2005-2007 Thomas Frank
4 |
5 | This program is free software under the terms of the
6 | GNU General Public License version 2 as published by the Free
7 | Software Foundation. It is distributed without any warranty.
8 | */
9 |
10 | xml2json={
11 | parser:function(xmlcode,ignoretags,debug){
12 | if(!ignoretags){ignoretags=""};
13 | xmlcode=xmlcode.replace(/\s*\/>/g,'/>');
14 | xmlcode=xmlcode.replace(/<\?[^>]*>/g,"").replace(/<\![^>]*>/g,"");
15 | if (!ignoretags.sort){ignoretags=ignoretags.split(",")};
16 | var x=this.no_fast_endings(xmlcode);
17 | x=this.attris_to_tags(x);
18 | x=escape(x);
19 | x=x.split("%3C").join("<").split("%3E").join(">").split("%3D").join("=").split("%22").join("\"");
20 | for (var i=0;i
","g"),"*$**"+ignoretags[i]+"**$*");
22 | x=x.replace(new RegExp(""+ignoretags[i]+">","g"),"*$***"+ignoretags[i]+"**$*")
23 | };
24 | x=''+x+'';
25 | this.xmlobject={};
26 | var y=this.xml_to_object(x).jsontagwrapper;
27 | if(debug){y=this.show_json_structure(y,debug)};
28 | return y
29 | },
30 | xml_to_object:function(xmlcode){
31 | var x=xmlcode.replace(/<\//g,"§");
32 | x=x.split("<");
33 | var y=[];
34 | var level=0;
35 | var opentags=[];
36 | for (var i=1;i")[0];
38 | opentags.push(tagname);
39 | level++
40 | y.push(level+"<"+x[i].split("§")[0]);
41 | while(x[i].indexOf("§"+opentags[opentags.length-1]+">")>=0){level--;opentags.pop()}
42 | };
43 | var oldniva=-1;
44 | var objname="this.xmlobject";
45 | for (var i=0;i")[0];
49 | tagnamn=tagnamn.toLowerCase();
50 | var rest=y[i].split(">")[1];
51 | if(niva<=oldniva){
52 | var tabort=oldniva-niva+1;
53 | for (var j=0;j")
71 | }
72 | }
73 | else {rest="{}"};
74 | if(rest.charAt(0)=="'"){rest='unescape('+rest+')'};
75 | if (already && !eval(objname+".sort")){preeval+=objname+"=["+objname+"];\n"};
76 | var before="=";after="";
77 | if (already){before=".push(";after=")"};
78 | var toeval=preeval+objname+before+rest+after;
79 | eval(toeval);
80 | if(eval(objname+".sort")){objname+="["+eval(objname+".length-1")+"]"};
81 | oldniva=niva
82 | };
83 | return this.xmlobject
84 | },
85 | show_json_structure:function(obj,debug,l){
86 | var x='';
87 | if (obj.sort){x+="[\n"} else {x+="{\n"};
88 | for (var i in obj){
89 | if (!obj.sort){x+=i+":"};
90 | if (typeof obj[i] == "object"){
91 | x+=this.show_json_structure(obj[i],false,1)
92 | }
93 | else {
94 | if(typeof obj[i]=="function"){
95 | var v=obj[i]+"";
96 | //v=v.replace(/\t/g,"");
97 | x+=v
98 | }
99 | else if(typeof obj[i]!="string"){x+=obj[i]+",\n"}
100 | else {x+="'"+obj[i].replace(/\'/g,"\\'").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/\r/g,"\\r")+"',\n"}
101 | }
102 | };
103 | if (obj.sort){x+="],\n"} else {x+="},\n"};
104 | if (!l){
105 | x=x.substring(0,x.lastIndexOf(","));
106 | x=x.replace(new RegExp(",\n}","g"),"\n}");
107 | x=x.replace(new RegExp(",\n]","g"),"\n]");
108 | var y=x.split("\n");x="";
109 | var lvl=0;
110 | for (var i=0;i=0 || y[i].indexOf("]")>=0){lvl--};
112 | tabs="";for(var j=0;j=0 || y[i].indexOf("[")>=0){lvl++}
115 | };
116 | if(debug=="html"){
117 | x=x.replace(//g,">");
118 | x=x.replace(/\n/g,"
").replace(/\t/g," ")
119 | };
120 | if (debug=="compact"){x=x.replace(/\n/g,"").replace(/\t/g,"")}
121 | };
122 | return x
123 | },
124 | no_fast_endings:function(x){
125 | x=x.split("/>");
126 | for (var i=1;i"+t+">"+x[i]
129 | } ;
130 | x=x.join("");
131 | return x
132 | },
133 | attris_to_tags: function(x){
134 | var d=' ="\''.split("");
135 | x=x.split(">");
136 | for (var i=0;i");
150 | x=x.replace(/ ([^=]*)=([^ |>]*)/g,"><$1>$2$1");
151 | x=x.replace(/>"/g,">").replace(/"
2 | dnd5tools
3 |
4 | Search D&D5e Compendium
5 |
6 | UTF-8
7 | http://radai.github.io/dnd5tools/favicon.ico
8 |
9 |
--------------------------------------------------------------------------------
/rules.json:
--------------------------------------------------------------------------------
1 | {
2 | "rules": [
3 | {
4 | "name": "Strength",
5 | "tags": "ability",
6 | "text": "Measures bodily power, athletic training, and the extent to which you can exert raw physical force. A Strength check can model any attempt to lift, push, pull, or break something, to force your body through a space, or to otherwise apply brute force to a situation. For example, high Strength usually corresponds with a burly or athletic body, while a character with low Strength might be scrawny or plump",
7 | "related": [
8 | "Athletics (Strength)"
9 | ]
10 | },{
11 | "name": "Athletics (Strength)",
12 | "tags": "skill",
13 | "text": "Your Strength (Athletics) check covers difficult situations you encounter while climbing, jumping, or swimming.
Examples include the following activities:- You attempt to climb a sheer or slippery cliff, avoid hazards while scaling a wall, or cling to a surface while
- something is trying to knock you off.
- You try to jump an unusually long distance or pull off a stunt mid-jump.
- You struggle to swim or stay afloat in treacherous currents, storm-tossed waves, or areas of thick seaweed.
Or another creature tries to push or pull you underwater or otherwise interfere with your swimming.
",
14 | "related": [
15 | "Strength"
16 | ]
17 | },{
18 | "name": "Dexterity",
19 | "tags": "ability",
20 | "text": "Measuring agility, reflexes, and balance. A Dexterity check can model any attempt to move nimbly, quickly, or quietly, or to keep from falling on tricky footing. A character with high Dexterity is probably lithe and slim, while a character with low Dexterity might be either gangly and awkward or heavy and thick-fingered.
General Dexterity:- Control a heavily laden cart on a steep descent
- Steer a chariot around a tight turn
- Pick a lock
- Disable a trap
- Securely tie up a prisoner
- Wriggle free of bonds
- Play a stringed instrument
- Craft a small or detailed object
",
21 | "related": [
22 | "Acrobatics (Dexterity)", "Sleight of Hand (Dexterity)", "Stealth (Dexterity)"
23 | ]
24 | },{
25 | "name": "Acrobatics (Dexterity)",
26 | "tags": "skill",
27 | "text": "Your Dexterity (Acrobatics) check covers your attempt to stay on your feet in a tricky situation, such as when you’re trying to run across a sheet of ice, balance on a tightrope, or stay upright on a rocking ship’s deck. The DM might also call for a Dexterity (Acrobatics) check to see if you can perform acrobatic stunts, including dives, rolls, somersaults, and flips.",
28 | "related": [
29 | "Dexterity"
30 | ]
31 | },{
32 | "name": "Sleight of Hand (Dexterity)",
33 | "tags": "skill",
34 | "text": "Whenever you attempt an act of legerdemain or manual trickery, such as planting something on someone else or concealing an object on your person, make a Dexterity (Sleight of Hand) check. The DM might also call for a Dexterity (Sleight of Hand) check to determine whether you can lift a coin purse off another person or slip something out of another person’s pocket.",
35 | "related": [
36 | "Dexterity"
37 | ]
38 | },{
39 | "name": "Stealth (Dexterity)",
40 | "tags": "skill",
41 | "text": "Make a Dexterity (Stealth) check when you attempt to conceal yourself from enemies, slink past guards, slip away without being noticed, or sneak up on someone without being seen or heard.Hiding
The DM decides when circumstances are appropriate for hiding. When you try to hide, make a Dexterity (Stealth) check. Until you are discovered or you stop hiding, that check’s total is contested by the Wisdom (Perception) check of any creature that actively searches for signs of your presence.
You can’t hide from a creature that can see you clearly, and you give away your position if you make noise, such as shouting a warning or knocking over a vase. An invisible creature can’t be seen, so it can always try to hide. Signs of its passage might still be noticed, however, and it still has to stay quiet.
In combat, most creatures stay alert for signs of danger all around, so if you come out of hiding and approach a creature, it usually sees you. However, under certain circumstances, the Dungeon Master might allow you to stay hidden as you approach a creature that is distracted, allowing you to gain advantage on an attack before you are seen.
Passive Perception. When you hide, there’s a chance someone will notice you even if they aren’t searching. To determine whether such a creature notices you, the DM compares your Dexterity (Stealth) check with that creature’s passive Wisdom (Perception) score, which equals 10 + the creature’s Wisdom modifier, as well as any other bonuses or penalties. If the creature has advantage, add 5. For disadvantage, subtract 5.
For example, if a 1st-level character (with a proficiency bonus of +2) has a Wisdom of 15 (a +2 modifier) and proficiency in Perception, he or she has a passive Wisdom (Perception) of 14.
What Can You See? One of the main factors in determining whether you can find a hidden creature or object is how well you can see in an area, which might be lightly or heavily obscured, as explained in chapter 8.",
42 | "related": [
43 | "Dexterity"
44 | ]
45 | },{
46 | "name": "Constitution",
47 | "tags": "ability",
48 | "text": "Measuring endurance (health, stamina, and vital force.) Constitution checks are uncommon, and no skills apply to Constitution checks, because the endurance this ability represents is largely passive rather than involving a specific effort on the part of a character or monster. A Constitution check can model your attempt to push beyond normal limits, however. A character with high Constitution usually looks healthy, with bright eyes and abundant energy. A character with low Constitution might be sickly or frail.
General Constitution: - Hold your breath
- March or labor for hours without rest
- Go without sleep
- Survive without food or water
- Quaff an entire stein of ale in one go
Hit Points
Your Constitution modifier contributes to your hit points. Typically, you add your Constitution modifier to each Hit Die you roll for your hit points.
If your Constitution modifier changes, your hit point maximum changes as well, as though you had the new modifier from 1st level. For example, if you raise your Constitution score when you reach 4th level and your Constitution modifier increases from +1 to +2, you adjust your hit point maximum as though the modifier had always been +2. So you add 3 hit points for your first three levels, and then roll your hit points for 4th level using your new modifier. Or if you’re 7th level and some effect lowers your Constitution score so as to reduce your Constitution modifier by 1, your hit point maximum is reduced by 7.",
49 | "related": [
50 | ""
51 | ]
52 | },{
53 | "name": "Wisdom",
54 | "tags": "ability",
55 | "text": "Measuring perception and insight.
Wisdom reflects how attuned you are to the world around you and represents perceptiveness and intuition.
A Wisdom check might reflect an effort to read body language, understand someone’s feelings, notice things about the environment, or care for an injured person.
A character with high Wisdom has good judgment, empathy, and a general awareness of what’s going on. A character with low Wisdom might be absent-minded, foolhardy, or oblivious.
General Wisdom:- Get a gut feeling about what course of action to follow
- Discern whether a seemingly dead or living creature is undead
Spellcasting Ability
Clerics, Druids, and Rangers use Wisdom as their spellcasting ability, which helps determine the saving throw DCs of spells they cast.Finding a Hidden Object
When your character searches for a hidden object such as a secret door or a trap, the DM typically asks you to make a Wisdom (Perception) check. Such a check can be used to find hidden details or other information and clues that you might otherwise overlook.
In most cases, you need to describe where you are looking in order for the DM to determine your chance of success. For example, a key is hidden beneath a set of folded clothes in the top drawer of a bureau. If you tell the DM that you pace around the room, looking at the walls and furniture for clues, you have no chance of finding the key, regardless of your Wisdom (Perception) check result. You would have to specify that you were opening the drawers or searching the bureau in order to have any chance of success.",
56 | "related": [
57 | "Animal Handling (Wisdom)", "Insight (Wisdom)", "Medicine (Wisdom)", "Perception (Wisdom)", "Survival (Wisdom)"
58 | ]
59 | },{
60 | "name": "Animal Handling (Wisdom)",
61 | "tags": "skill",
62 | "text": "When there is any question whether you can calm down a domesticated animal, keep a mount from getting spooked, or intuit an animal’s intentions, the DM might call for a Wisdom Animal Handling) check. You also make a Wisdom (Animal Handling) check to control your mount when you attempt a risky maneuver.",
63 | "related": [
64 | "Wisdom"
65 | ]
66 | },{
67 | "name": "Insight (Wisdom)",
68 | "tags": "skill",
69 | "text": "Your Wisdom (Insight) check decides whether you can determine the true intentions of a creature, such as when searching out a lie or predicting someone’s next move. Doing so involves gleaning clues from body language, speech habits, and changes in mannerisms.",
70 | "related": [
71 | "Wisdom"
72 | ]
73 | },{
74 | "name": "Medicine (Wisdom)",
75 | "tags": "skill",
76 | "text": "A Wisdom (Medicine) check lets you try to stabilize a dying companion or diagnose an illness.",
77 | "related": [
78 | "Wisdom"
79 | ]
80 | },{
81 | "name": "Perception (Wisdom)",
82 | "tags": "skill",
83 | "text": "Your Wisdom (Perception) check lets you spot, hear, or otherwise detect the presence of something. It measures your general awareness of your surroundings and the keenness of your senses. For example, you might try to hear a conversation through a closed door, eavesdrop under an open window, or hear monsters moving stealthily in the forest. Or you might try to spot things that are obscured or easy to miss, whether they are orc s lying in ambush on a road, thugs hiding in the shadows of an alley, or candlelight under a closed secret door.",
84 | "related": [
85 | "Wisdom"
86 | ]
87 | },{
88 | "name": "Survival (Wisdom)",
89 | "tags": "skill",
90 | "text": "The DM might ask you to make a Wisdom (Survival) check to follow tracks, hunt wild game, guide your group through frozen wastelands, identify signs that owlbears live nearby, predict the weather, or avoid quicksand and other natural hazards.",
91 | "related": [
92 | "Wisdom"
93 | ]
94 | },{
95 | "name": "Charisma",
96 | "tags": "ability",
97 | "text": "Measuring force of personality.
Charisma measures your ability to interact effectively with others. It includes such factors as confidence and eloquence, and it can represent a charming or commanding personality.
A Charisma check might arise when you try to influence or entertain others, when you try to make an impression or tell a convincing lie, or when you are navigating a tricky social situation.
A character with high Charisma exudes confidence, which is usually mixed with a graceful or intimidating presence. A character with a low Charisma might come across as abrasive, inarticulate, or timid.
General Charisma:- Find the best person to talk to for news, rumors, and gossip
- Blend into a crowd to get the sense of key topics of conversation
Spellcasting Ability
Bards, paladins, sorcerers, and warlocks use Charisma as their spellcasting ability, which helps determine the saving throw DCs of spells they cast.",
98 | "related": [
99 | "Deception (Charisma)", "Intimidation (Charisma)", "Performance (Charisma)", "Persuasion (Charisma)"
100 | ]
101 | },{
102 | "name": "Deception (Charisma)",
103 | "tags": "skill",
104 | "text": "Your Charisma (Deception) check determines whether you can convincingly hide the truth, either verbally or through your actions. This deception can encompass everything from misleading others through ambiguity to telling outright lies. Typical situations include trying to fast-talk a guard, con a merchant, earn money through gambling, pass yourself off in a disguise, dull someone’s suspicions with false assurances, or maintain a straight face while telling a blatant lie.",
105 | "related": [
106 | "Charisma"
107 | ]
108 | },{
109 | "name": "Intimidation (Charisma)",
110 | "tags": "skill",
111 | "text": "When you attempt to influence someone through overt threats, hostile actions, and physical violence, the DM might ask you to make a Charisma (Intimidation) check. Examples include trying to pry information out o f a prisoner, convincing street thugs to back down from a confrontation, or using the edge of a broken bottle to convince a sneering vizier to reconsider a decision.",
112 | "related": [
113 | "Charisma"
114 | ]
115 | },{
116 | "name": "Performance (Charisma)",
117 | "tags": "skill",
118 | "text": "Your Charisma (Performance) check determines how well you can delight an audience with music, dance, acting, storytelling, or some other form of entertainment.",
119 | "related": [
120 | "Charisma"
121 | ]
122 | },{
123 | "name": "Persuasion (Charisma)",
124 | "tags": "skill",
125 | "text": "When you attempt to influence someone or a group of people with tact, social graces, or good nature, the DM might ask you to make a Charisma (Persuasion) check. Typically, you use persuasion when acting in good faith, to foster friendships, make cordial requests, or exhibit proper etiquette. Examples of persuading others include convincing a chamberlain to let your party see the king, negotiating peace between warring tribes, or inspiring a crowd of townsfolk.",
126 | "related": [
127 | "Charisma"
128 | ]
129 | },{
130 | "name": "Advantage and Disadvantage",
131 | "tags": "check",
132 | "text": "Sometimes a special ability or spell tells you that you have advantage or disadvantage on an ability check, a saving throw, or an attack roll. When that happens, you roll a second d20 when you make the roll. Use the higher of the two rolls if you have advantage, and use the lower roll if you have disadvantage. For example, if you have disadvantage and roll a 17 and a 5, you use the 5. If you instead have advantage and roll those numbers, you use the 17.
If multiple situations affect a roll and each one grants advantage or imposes disadvantage on it, you don’t roll more than one additional d20. If two favorable situations grant advantage, for example, you still roll only one additional d20.
If circumstances cause a roll to have both advantage and disadvantage, you are considered to have neither of them, and you roll one d20. This is true even if multiple circumstances impose disadvantage and only one grants advantage or vice versa. In such a situation, you have neither advantage nor disadvantage.
When you have advantage or disadvantage and something in the game, such as the halfling’s Lucky trait, lets you reroll the d20, you can reroll only one of the dice. You choose which one. For example, if a halfling has advantage or disadvantage on an ability check and rolls a 1 and a 13, the halfling could use the Lucky trait to reroll the 1.
You usually gain advantage or disadvantage through the use of special abilities, actions, or spells. Inspiration can also give a character advantage. The DM can also decide that circumstances influence a roll in one direction or the other and grant advantage or impose disadvantage as a result.",
133 | "related": [
134 | ""
135 | ]
136 | },{
137 | "name": "Proficiency",
138 | "tags": "check",
139 | "text": "Characters have a proficiency bonus determined by level, as detailed in chapter 1. Monsters also have this bonus, which is incorporated in their stat blocks. The bonus is used in the rules on ability checks, saving throws, and attack rolls.
Your proficiency bonus can’t be added to a single die roll or other number more than once. For example, if two different rules say you can add your proficiency bonus to a Wisdom saving throw, you nevertheless add the bonus only once when you make the save.
Occasionally, your proficiency bonus might be multiplied or divided (doubled or halved, for example) before you apply it. For example, the rogue’s Expertise feature doubles the proficiency bonus for certain ability checks. If a circumstance suggests that your proficiency bonus applies more than once to the same roll, you still add it only once and multiply or divide it only once.
By the same token, if a feature or effect allows you to multiply your proficiency bonus when making an ability check that wouldn’t normally benefit from your proficiency bonus, you still don’t add the bonus to the check. For that check your proficiency bonus is 0, given the fact that multiplying 0 by any number is still 0. For instance, if you lack proficiency in the History skill, you gain no benefit from a feature that lets you double your proficiency bonus when you make Intelligence (History) checks.
In general, you don’t multiply your proficiency bonus for attack rolls or saving throws. If a feature or effect allows you to do so, these same rules apply.
Your proficiency bonus is always based on your total character level, as shown in the Character Advancement table in chapter 1, not your level in a particular class. For example, if you are a fighter 3/rogue 2, you have the proficiency bonus of a 5th-level character, which is +3.
Proficiency Bonus
The table that appears in your class description shows your proficiency bonus, which is +2 for a 1st-level character. Your proficiency bonus applies to many of the numbers you’ll be recording on your character sheet:- Attack rolls using weapons you’re proficient with
- Attack rolls with spells you cast
- Ability checks using skills you’re proficient in
- Ability checks using tools you’re proficient with
- Saving throws you’re proficient in
- Saving throw DCs for spells you cast (explained in each spellcasting class)
Your class determines your weapon proficiencies, your saving throw proficiencies, and some of your skill and tool proficiencies. Your background gives you additional skill and tool proficiencies, and some races give you more proficiencies. Be sure to note all of these proficiencies, as well as your proficiency bonus, on your character sheet.
Your proficiency bonus can’t be added to a single die roll or other number more than once. Occasionally, your proficiency bonus might be modified (doubled or halved, for example) before you apply it. If a circumstance suggests that your proficiency bonus applies more than once to the same roll or that it should be multiplied more than once, you nevertheless add it only once, multiply it only once, and halve it only once.",
140 | "related": [
141 | ""
142 | ]
143 | },{
144 | "name": "Armor Class (AC)",
145 | "tags": "",
146 | "text": "",
147 | "related": [
148 | ""
149 | ]
150 | },{
151 | "name": "Actions in Combat",
152 | "tags": "action",
153 | "text": "",
154 | "related": [
155 | ""
156 | ]
157 | },{
158 | "name": "Attack",
159 | "tags": "action",
160 | "text": "",
161 | "related": [
162 | ""
163 | ]
164 | },{
165 | "name": "Melee Attack",
166 | "tags": "action",
167 | "text": "",
168 | "related": [
169 | "attack"
170 | ]
171 | },{
172 | "name": "Ranged Attack",
173 | "tags": "action",
174 | "text": "",
175 | "related": [
176 | "attack"
177 | ]
178 | },{
179 | "name": "Attack Rolls",
180 | "tags": "action",
181 | "text": "",
182 | "related": [
183 | "attack"
184 | ]
185 | },{
186 | "name": "Grappling",
187 | "tags": "action",
188 | "text": "",
189 | "related": [
190 | "attack"
191 | ]
192 | },{
193 | "name": "Shoving a Creature",
194 | "tags": "action",
195 | "text": "",
196 | "related": [
197 | "attack"
198 | ]
199 | },{
200 | "name": "Unarmed Strike",
201 | "tags": "action",
202 | "text": "",
203 | "related": [
204 | "attack"
205 | ]
206 | },{
207 | "name": "Cast a Spell",
208 | "tags": "action",
209 | "text": "",
210 | "related": [
211 | "Actions in Combat"
212 | ]
213 | },{
214 | "name": "Dash",
215 | "tags": "action",
216 | "text": "",
217 | "related": [
218 | "Actions in Combat"
219 | ]
220 | },{
221 | "name": "Disengage",
222 | "tags": "action",
223 | "text": "",
224 | "related": [
225 | "Actions in Combat"
226 | ]
227 | },{
228 | "name": "Dodge",
229 | "tags": "action",
230 | "text": "",
231 | "related": [
232 | "Actions in Combat"
233 | ]
234 | },{
235 | "name": "Help",
236 | "tags": "action",
237 | "text": "",
238 | "related": [
239 | "Actions in Combat"
240 | ]
241 | },{
242 | "name": "Hide",
243 | "tags": "action",
244 | "text": "",
245 | "related": [
246 | "Actions in Combat"
247 | ]
248 | },{
249 | "name": "Ready",
250 | "tags": "action",
251 | "text": "",
252 | "related": [
253 | "Actions in Combat"
254 | ]
255 | },{
256 | "name": "Search",
257 | "tags": "action",
258 | "text": "",
259 | "related": [
260 | "Actions in Combat"
261 | ]
262 | },{
263 | "name": "Use an Object",
264 | "tags": "action",
265 | "text": "",
266 | "related": [
267 | "Actions in Combat"
268 | ]
269 | },{
270 | "name": "Bonus Action",
271 | "tags": "",
272 | "text": "",
273 | "related": [
274 | ""
275 | ]
276 | },{
277 | "name": "Two-Weapon Fighting",
278 | "tags": "bonus action",
279 | "text": "",
280 | "related": [
281 | "Bonus Action"
282 | ]
283 | },{
284 | "name": "Reactions",
285 | "tags": "",
286 | "text": "",
287 | "related": [
288 | ""
289 | ]
290 | },{
291 | "name": "Opportunity Attack",
292 | "tags": "reaction",
293 | "text": "",
294 | "related": [
295 | "Reactions"
296 | ]
297 | },{
298 | "name": "Movement",
299 | "tags": "movement",
300 | "text": "",
301 | "related": [
302 | "Dash"
303 | ]
304 | },{
305 | "name": "Conditions",
306 | "tags": "",
307 | "text": "",
308 | "related": [
309 | "Blinded","Charmed","Deafened","Exhaustion","Frightened","Grappled","Incapacitated","Invisible","Paralyzed","Petrified","Poisoned","Prone","Restrained","Stunned","Unconscious"
310 | ]
311 | },{
312 | "name": "Blinded",
313 | "tags": "condition",
314 | "text": "- A blinded creature can’t see and automatically fails any ability check that requires sight.
- Attack rolls against the creature have advantage, and the creature’s attack rolls have disadvantage.
",
315 | "related": [
316 | "Conditions"
317 | ]
318 | },{
319 | "name": "Charmed",
320 | "tags": "condition",
321 | "text": "- A charmed creature can’t attack the charmer or target the charmer with harmful abilities or magical effects.
- The charmer has advantage on any ability check to interact socially with the creature.
",
322 | "related": [
323 | "Conditions"
324 | ]
325 | },{
326 | "name": "Deafened",
327 | "tags": "condition",
328 | "text": "- A deafened creature can’t hear and automatically fails any ability check that requires hearing.
",
329 | "related": [
330 | "Conditions"
331 | ]
332 | },{
333 | "name": "Exhaustion",
334 | "tags": "condition",
335 | "text": "",
336 | "related": [
337 | "Conditions"
338 | ]
339 | },{
340 | "name": "Frightened",
341 | "tags": "condition",
342 | "text": "- A frightened creature has disadvantage on ability checks and attack rolls while the source of its fear is within line of sight.
- The creature can’t willingly move closer to the source of its fear.
",
343 | "related": [
344 | "Conditions"
345 | ]
346 | },{
347 | "name": "Grappled",
348 | "tags": "condition",
349 | "text": "- A grappled creature’s speed becomes 0, and it can’t benefit from any bonus to its speed.
- The condition ends if the grappler is Incapacitated (see the condition).
- The condition also ends if an effect removes the grappled creature from the reach of the grappler or grappling effect, such as when a creature is hurled away by the thunderwave spell.
",
350 | "related": [
351 | "Conditions"
352 | ]
353 | },{
354 | "name": "Incapacitated",
355 | "tags": "condition",
356 | "text": "- An incapacitated creature can’t take actions or reactions.
",
357 | "related": [
358 | "Conditiions"
359 | ]
360 | },{
361 | "name": "Invisible",
362 | "tags": "condition",
363 | "text": "- An invisible creature is impossible to see without the aid of magic or a special sense. For the purpose of hiding, the creature is heavily obscured. The creature’s location can be detected by any noise it makes or any tracks it leaves.
- Attack rolls against the creature have disadvantage, and the creature’s attack rolls have advantage.
",
364 | "related": [
365 | "Conditions"
366 | ]
367 | },{
368 | "name": "Paralyzed",
369 | "tags": "condition",
370 | "text": "- A paralyzed creature is Incapacitated and can’t move or speak.
- The creature automatically fails Strength and Dexterity saving throws.
- Attack rolls against the creature have advantage.
- Any attack that hits the creature is a critical hit if the attacker is within 5 feet of the creature.
",
371 | "related": [
372 | "Conditions"
373 | ]
374 | },{
375 | "name": "Petrified",
376 | "tags": "condition",
377 | "text": "- A petrified creature is transformed, along with any nonmagical object it is wearing or carrying, into a solid inanimate substance (usually stone). Its weight increases by a factor of ten, and it ceases aging.
- The creature is Incapacitated, can’t move or speak, and is unaware of its surroundings.
- Attack rolls against the creature have advantage.
- The creature automatically fails Strength and Dexterity saving throws.
- The creature has resistance to all damage.
- The creature is immune to poison and disease, although a poison or disease already in its system is suspended, not neutralized.
",
378 | "related": [
379 | "Conditions"
380 | ]
381 | },{
382 | "name": "Poisoned",
383 | "tags": "condition",
384 | "text": "- A poisoned creature has disadvantage on attack rolls and ability checks.
",
385 | "related": [
386 | "Conditions"
387 | ]
388 | },{
389 | "name": "Prone",
390 | "tags": "condition",
391 | "text": "- A prone creature’s only movement option is to crawl, unless it stands up and thereby ends the condition.
- The creature has disadvantage on attack rolls.
- An attack roll against the creature has advantage if the attacker is within 5 feet of the creature. Otherwise, the attack roll has disadvantage.
",
392 | "related": [
393 | "Conditions"
394 | ]
395 | },{
396 | "name": "Restrained",
397 | "tags": "condition",
398 | "text": "- A restrained creature’s speed becomes 0, and it can’t benefit from any bonus to its speed.
- Attack rolls against the creature have advantage, and the creature’s attack rolls have disadvantage.
- The creature has disadvantage on Dexterity saving throws.
",
399 | "related": [
400 | "Conditions"
401 | ]
402 | },{
403 | "name": "Stunned",
404 | "tags": "condition",
405 | "text": "- A stunned creature is Incapacitated, can’t move, and can speak only falteringly.
- The creature automatically fails Strength and Dexterity saving throws.
- Attack rolls against the creature have advantage.
",
406 | "related": [
407 | "Conditions"
408 | ]
409 | },{
410 | "name": "Unconscious",
411 | "tags": "condition",
412 | "text": "- An unconscious creature is Incapacitated, can’t move or speak, and is unaware of its surroundings.
- The creature drops whatever it’s holding and falls Prone.
- The creature automatically fails Strength and Dexterity saving throws.
- Attack rolls against the creature have advantage.
- Any attack that hits the creature is a critical hit if the attacker is within 5 feet of the creature.
",
413 | "related": [
414 | "Conditions"
415 | ]
416 | },{
417 | "name": "Cover",
418 | "tags": "combat",
419 | "text": "",
420 | "related": [
421 | ""
422 | ]
423 | },{
424 | "name": "Damage and Healing",
425 | "tags": "",
426 | "text": "",
427 | "related": [
428 | ""
429 | ]
430 | },{
431 | "name": "Critical Rolls",
432 | "tags": "",
433 | "text": "",
434 | "related": [
435 | ""
436 | ]
437 | },{
438 | "name": "Damage Types",
439 | "tags": "",
440 | "text": "",
441 | "related": [
442 | ""
443 | ]
444 | },{
445 | "name": "Resistance and Vulnerability",
446 | "tags": "",
447 | "text": "",
448 | "related": [
449 | ""
450 | ]
451 | },{
452 | "name": "Temporary Hit Points",
453 | "tags": "",
454 | "text": "",
455 | "related": [
456 | ""
457 | ]
458 | },{
459 | "name": "Objects",
460 | "tags": "",
461 | "text": "",
462 | "related": [
463 | ""
464 | ]
465 | },{
466 | "name": "Death and Dying",
467 | "tags": "",
468 | "text": "",
469 | "related": [
470 | ""
471 | ]
472 | },{
473 | "name": "Healing",
474 | "tags": "",
475 | "text": "",
476 | "related": [
477 | ""
478 | ]
479 | },{
480 | "name": "Mounted Combat",
481 | "tags": "",
482 | "text": "",
483 | "related": [
484 | ""
485 | ]
486 | },{
487 | "name": "Underwater Combat and Visibility",
488 | "tags": "",
489 | "text": "",
490 | "related": [
491 | ""
492 | ]
493 | },{
494 | "name": "Poisons",
495 | "tags": "",
496 | "text": "",
497 | "related": [
498 | ""
499 | ]
500 | },{
501 | "name": "Stealth and Surprise",
502 | "tags": "",
503 | "text": "",
504 | "related": [
505 | ""
506 | ]
507 | },{
508 | "name": "Movement: Jumping, Climbing, Swimming",
509 | "tags": "",
510 | "text": "",
511 | "related": [
512 | "Difficult Terrain"
513 | ]
514 | },{
515 | "name": "Difficult Terrain",
516 | "tags": "",
517 | "text": "",
518 | "related": [
519 | "Movement: Jumping, Climbing, Swimming"
520 | ]
521 | },{
522 | "name": "Environmental Hazards",
523 | "tags": "",
524 | "text": "",
525 | "related": [
526 | ""
527 | ]
528 | },{
529 | "name": "Light and Vision",
530 | "tags": "",
531 | "text": "",
532 | "related": [
533 | "Dark-vision"
534 | ]
535 | },{
536 | "name": "Dark-vision",
537 | "tags": "",
538 | "text": "",
539 | "related": [
540 | "Light and Vision"
541 | ]
542 | },{
543 | "name": "Traveling",
544 | "tags": "",
545 | "text": "",
546 | "related": [
547 | "Traveling Activities"
548 | ]
549 | },{
550 | "name": "Traveling Activities",
551 | "tags": "",
552 | "text": "",
553 | "related": [
554 | "Traveling"
555 | ]
556 | },{
557 | "name": "Time",
558 | "tags": "",
559 | "text": "",
560 | "related": [
561 | ""
562 | ]
563 | },{
564 | "name": "Food and Water, Hunger and Thirst",
565 | "tags": "",
566 | "text": "",
567 | "related": [
568 | ""
569 | ]
570 | },{
571 | "name": "Traps",
572 | "tags": "",
573 | "text": "",
574 | "related": [
575 | "Trap Mechanics"
576 | ]
577 | },{
578 | "name": "Trap Mechanics",
579 | "tags": "",
580 | "text": "",
581 | "related": [
582 | "Traps"
583 | ]
584 | },{
585 | "name": "Underwater",
586 | "tags": "",
587 | "text": "",
588 | "related": [
589 | "Underwater Combat and Visibility"
590 | ]
591 | },{
592 | "name": "Resting",
593 | "tags": "",
594 | "text": "",
595 | "related": [
596 | ""
597 | ]
598 | },{
599 | "name": "Downtime",
600 | "tags": "",
601 | "text": "",
602 | "related": [
603 | "Crafting", "Recuperating", "Researching", "Practicing a Profession", "Training"
604 | ]
605 | },{
606 | "name": "Crafting",
607 | "tags": "",
608 | "text": "",
609 | "related": [
610 | "Downtime"
611 | ]
612 | },{
613 | "name": "Recuperating",
614 | "tags": "",
615 | "text": "",
616 | "related": [
617 | "Downtime"
618 | ]
619 | },{
620 | "name": "Researching",
621 | "tags": "",
622 | "text": "",
623 | "related": [
624 | "Downtime"
625 | ]
626 | },{
627 | "name": "Practicing a Profession",
628 | "tags": "",
629 | "text": "",
630 | "related": [
631 | "Downtime"
632 | ]
633 | },{
634 | "name": "Training",
635 | "tags": "",
636 | "text": "",
637 | "related": [
638 | "Downtime"
639 | ]
640 | },{
641 | "name": "Lifestyle",
642 | "tags": "",
643 | "text": "",
644 | "related": [
645 | ""
646 | ]
647 | },{
648 | "name": "Diseases",
649 | "tags": "",
650 | "text": "",
651 | "related": [
652 | ""
653 | ]
654 | },{
655 | "name": "Madness",
656 | "tags": "",
657 | "text": "",
658 | "related": [
659 | "Effects of Madness", "Curing Madness"
660 | ]
661 | },{
662 | "name": "Effects of Madness",
663 | "tags": "",
664 | "text": "",
665 | "related": [
666 | "Madness"
667 | ]
668 | },{
669 | "name": "Curing Madness",
670 | "tags": "",
671 | "text": "",
672 | "related": [
673 | "Madness"
674 | ]
675 | },{
676 | "name": "Coins and Currency",
677 | "tags": "store",
678 | "text": "",
679 | "related": [
680 | ""
681 | ]
682 | },{
683 | "name": "Selling Treasure",
684 | "tags": "store",
685 | "text": "",
686 | "related": [
687 | ""
688 | ]
689 | },{
690 | "name": "Armor",
691 | "tags": "store",
692 | "text": "",
693 | "related": [
694 | ""
695 | ]
696 | },{
697 | "name": "Equipment",
698 | "tags": "store",
699 | "text": "",
700 | "related": [
701 | ""
702 | ]
703 | },{
704 | "name": "Food, Drink, and Lodging",
705 | "tags": "store",
706 | "text": "",
707 | "related": [
708 | ""
709 | ]
710 | },{
711 | "name": "Mounts and Vehicles",
712 | "tags": "store",
713 | "text": "",
714 | "related": [
715 | ""
716 | ]
717 | },{
718 | "name": "Poisons (Store)",
719 | "tags": "store",
720 | "text": "",
721 | "related": [
722 | ""
723 | ]
724 | },{
725 | "name": "Spellcasting Services",
726 | "tags": "store",
727 | "text": "",
728 | "related": [
729 | ""
730 | ]
731 | },{
732 | "name": "Tools",
733 | "tags": "store",
734 | "text": "",
735 | "related": [
736 | ""
737 | ]
738 | },{
739 | "name": "Trade Goods",
740 | "tags": "store",
741 | "text": "",
742 | "related": [
743 | ""
744 | ]
745 | },{
746 | "name": "Trinkets",
747 | "tags": "store",
748 | "text": "",
749 | "related": [
750 | "Trinkets: Gothic"
751 | ]
752 | },{
753 | "name": "Trinkets: Gothic",
754 | "tags": "store",
755 | "text": "",
756 | "related": [
757 | "Trinkets"
758 | ]
759 | },{
760 | "name": "Weapons",
761 | "tags": "store",
762 | "text": "",
763 | "related": [
764 | ""
765 | ]
766 | }
767 | ]
768 | }
769 |
--------------------------------------------------------------------------------