' ;
+
+ const reCastMIspellCmd = /!magic\s+--cast-spell\s+MI\s*\|/im;
+ const reCastMIpowerCmd = /!magic\s+--cast-spell\s+MI-POWERS?\s*\|/im;
+ const reSpecs = /}}\s*Specs=\s*?(\[[^{]*?\])\s*?{{/im;
+ const reSpecsAll = /\[\s*?(\w[-\+\s\w\|]*?)\s*?,\s*?(\w[-\s\w\|]*?\w)\s*?,\s*?(\w[\s\w\|]*?\w)\s*?,\s*?(\w[-\+\s\w\|]*?\w)\s*?(?:,\s*?(\w[-\+\s\w\|]*?\w)\s*?)?\]/g;
+ const reData = /}}\s*?\w*?data\s*?=(.*?){{/im;
+ const reDataAll = /\[.*?\]/g;
+ const reSpecClass = /\[\s*?\w[\s\|\w\-\+]*?\s*?,\s*?(\w[\s\|\w\-]*?)\s*?,.*?\]/g;
+ const reSpecSuperType = /}}\s*Specs=\s*?\[\s*?\w[\s\|\w\-\+]*?\s*?,\s*?\w[\s\|\w\-]*?\w\s*?,\s*?\d+H(?:\|\d*H)\s*?,\s*?(\w[\s\|\w\-]*?\w)\s*?(?:,\s*?(\w[-\+\s\w\|]*?\w)\s*?)?\]/im;
+ const reDataSpeed = /}}\s*?\w*?data\s*?=.*?[\[,]\s*?sp:([d\d\+\-\*\/.]+?)[,\s\]]/im;
+ const reDataCharge = /}}\s*?\w*?data\s*?=.*?[\[,]\s*?rc:([\w\+\-]+?)[,\s\]]/im;
+ const reDataCost = /}}\s*?\w*?data\s*?=.*?[\[,]\s*?gp:(\d+?\.?\d*?)[,\s\]]/im;
+ const reDataLevel = /}}\s*?\w*?data\s*?=.*?[\[,]\s*?lv:(\d+?)[,\s\]]/im;
+ const reACData = /}}\s*acdata\s*=(.*?){{/im;
+ const reName = /[\[,]\s*?w:\s*[^\],]+?[,\]]/im;
+ const reLevel = /[\[,]\s*?lv:(\d+?)[,\s\]]/im;
+ const reClassData = /}}\s*?ClassData\s*?=(.*?){{/im;
+ const reClassRaceData = /}}\s*?(?:Class|Race)Data\s*?=.*?{{/im;
+ const reSpellData = /}}\s*?SpellData\s*?=(.*?){{/im;
+ const reRepeatingTable = /^(repeating_.*)_\$(\d+)_.*$/;
+ const reNumSpellsData = /}}[\s\w\-]*?(?"],
+ [/\\lt;?/gm, "<"],
+ [/<<|«/g, "["],
+ [/\\lbrak;?/g, "["],
+ [/>>|»/g, "]"],
+ [/\\rbrak;?/g, "]"],
+ [/\\\^/g, "?"],
+ [/\\ques;?/g, "?"],
+ [/`/g, "@"],
+ [/\\at;?/g, "@"],
+ [/~/g, "-"],
+ [/\\dash;?/g, "-"],
+ [/\\n/g, "\n"],
+ [/¦/g, "|"],
+ [/\\vbar;?/g, "|"],
+ [/\\clon;?/g, ":"],
+ [/\\amp;?/g, "&"],
+ [/\\lpar;?/g, "("],
+ [/\\rpar;?/g, ")"],
+ [/\\cr;?/g, "
"],
+ [/&&/g, "/"],
+ [/%%/g, "%"],
+ [/\\comma;?/g, ","],
+ [/\\fs;?/g, "\\"],
+ ];
+
+ const dbEncoders = [
+ [/\\/gm,"\\\\"],
+ [/\r?\n/gm,'\\n'],
+ [/'/gm,"\\'"],
+ [/&/gm,"\\\\amp"],
+ [/>/gm,"\\\\gt"],
+ [/"],
+ [/\\lt/gm, "<"],
+ ];
+
+ const pallet = Object.freeze({
+ fancy: {
+ def: {outer:'yellow',outerpad:'',shadow:'rgba(0,0,0,0) 0px 0px',titlebox:'transparent',titletext:'white; text-shadow: 1px 1px 1px gray',titlepad:'5% 5% 2px 5%',bodypad:'4px 5% 10% 10%',bodybox:'',rowbox:'purple',rowdark:'transparent',rowdarktext:'black',rowlight:'transparent',rowlighttext:'black',rowpad:'4px',outerimg:'https://s3.amazonaws.com/files.d20.io/images/279722596/LxsTe-cbwk5j9L0ipM3GLw/thumb.jpg?1649510600',titleimg:'https://s3.amazonaws.com/files.d20.io/images/279800986/SqFez5dbn2roAsokDaBAPw/thumb.jpg?1649536002',bodyimg:'https://s3.amazonaws.com/files.d20.io/images/279800959/KyHThjxjXeZQ-b_uC6yCjQ/thumb.jpg?1649535995'},
+ spell: {outer:'black',outerpad:'',shadow:'rgba(0,0,0,0) 0px 0px',titlebox:'transparent',titletext:'white; text-shadow: 1px 1px 1px gray',titlepad:'20% 10% 2px 10%',bodypad:'4px 12% 5% 12%',bodybox:'',rowbox:'purple',rowdark:'transparent',rowdarktext:'black',rowlight:'transparent',rowlighttext:'black',rowpad:'4px',outerimg:'',titleimg:'https://s3.amazonaws.com/files.d20.io/images/279801150/vQ_1KKR72-7DTAusJzkt0w/thumb.png?1649536043',bodyimg:'https://s3.amazonaws.com/files.d20.io/images/279801125/opM7Y6m20DGLPeP-hrXpCA/thumb.png?1649536037'},
+ potion: {outer:'black',outerpad:'',shadow:'rgba(0,0,0,0) 0px 0px',titlebox:'transparent',titletext:'black; text-shadow: 1px 1px 1px gray',titlepad:'60% 10% 2px 10%',bodypad:'10% 5% 15% 8%',bodybox:'',rowbox:'mediumturquoise',rowdark:'transparent',rowdarktext:'white',rowlight:'transparent',rowlighttext:'white',rowpad:'4px',outerimg:'',titleimg:'https://s3.amazonaws.com/files.d20.io/images/279798022/Qgs1fGmOup8_9mtzoEeSxw/thumb.png?1649535031',bodyimg:'https://s3.amazonaws.com/files.d20.io/images/279798050/hQ4nWnVGPDINtjidt8-1eg/thumb.png?1649535040'},
+ weapon: {outer:'yellow',outerpad:'',shadow:'rgba(0,0,0,0) 0px 0px',titlebox:'transparent',titletext:'white; text-shadow: 1px 1px 1px gray',titlepad:'5% 5% 2px 5%',bodypad:'4px 5% 10% 10%',bodybox:'',rowbox:'purple',rowdark:'transparent',rowdarktext:'black; text-shadow: 1px 1px 1px white',rowlight:'transparent',rowlighttext:'black; text-shadow: 1px 1px 1px white',rowpad:'4px',outerimg:'https://s3.amazonaws.com/files.d20.io/images/279722596/LxsTe-cbwk5j9L0ipM3GLw/thumb.jpg?1649510600',titleimg:'',bodyimg:'https://s3.amazonaws.com/files.d20.io/images/257648113/iUlG62xcBc6AdUj5lv32Ww/max.png?1638047575'},
+ attack: {outer:'purple',outerpad:'',shadow:'rgba(0,0,0,0.4) 3px 3px',titlebox:'4px solid maroon',titletext:'white; text-shadow: 1px 1px 1px gray',titlepad:'4px 4px 1px 4px',bodypad:'0px',bodybox:'4px solid gray',rowbox:'none',rowdark:'white',rowdarktext:'black',rowlight:'white',rowlighttext:'black',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:'',dmgslabel:'S/M',dmgllabel:'L'},
+ menu: {outer:'black',outerpad:'',shadow:'rgba(0,0,0,0.4) 3px 3px',titlebox:'blue',titletext:'white; text-shadow: 1px 1px 1px gray',titlepad:'1px 1px 1px 1px',bodypad:'4px 4px 4px 4px',bodybox:'',rowbox:'teal',rowdark:'lightblue',rowdarktext:'black',rowlight:'lightcyan',rowlighttext:'black',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:''},
+ message: {outer:'black',outerpad:'',shadow:'rgba(0,0,0,0.4) 3px 3px',titlebox:'white',titletext:'black',titlepad:'1px 1px 1px 1px',bodypad:'4px 4px 4px 4px',bodybox:'1px solid black',rowbox:'',rowdark:'white',rowdarktext:'black',rowlight:'white',rowlighttext:'black',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:''},
+ warning: {outer:'black',outerpad:'',shadow:'rgba(0,0,0,0.4) 3px 3px',titlebox:'crimson',titletext:'white',titlepad:'1px 1px 1px 1px',bodypad:'4px 4px 4px 4px',bodybox:'',rowbox:'purple',rowdark:'pink',rowdarktext:'black',rowlight:'mistyrose',rowlighttext:'black',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:'',rowimg:''},
+ },
+ plain: {
+ def: {outer:'blue',outerpad:'',shadow:'rgba(0,0,0,0.4) 3px 3px',titlebox:'blue',titletext:'white; text-shadow: 1px 1px 1px gray',titlepad:'1px 1px 1px 1px',bodypad:'4px 4px 4px 4px',bodybox:'',rowbox:'purple',rowdark:'lightblue',rowdarktext:'black',rowlight:'lightcyan',rowlighttext:'black',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:'',rowimg:''},
+ spell: {outer:'black',outerpad:'',shadow:'rgba(0,0,0,0) 0px 0px',titlebox:'firebrick',titletext:'white; text-shadow: 1px 1px 1px gray',titlepad:'1px 1px 1px 1px',bodypad:'4px 4px 4px 4px',bodybox:'',rowbox:'purple',rowdark:'pink',rowdarktext:'black',rowlight:'mistyrose',rowlighttext:'black',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:'',rowimg:''},
+ potion: {outer:'black',outerpad:'',shadow:'rgba(0,0,0,0) 0px 0px',titlebox:'forestgreen',titletext:'white; text-shadow: 1px 1px 1px gray',titlepad:'1px 1px 1px 1px',bodypad:'4px 4px 4px 4px',bodybox:'',rowbox:'mediumturquoise',rowdark:'khaki',rowdarktext:'black',rowlight:'lightgoldenrodyellow',rowlighttext:'black',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:'',rowimg:''},
+ weapon: {outer:'yellow',outerpad:'',shadow:'rgba(0,0,0,0) 0px 0px',titlebox:'gray',titletext:'white; text-shadow: 1px 1px 1px gray',titlepad:'1px 1px 1px 1px',bodypad:'4px 4px 4px 4px',bodybox:'',rowbox:'purple',rowdark:'gainsboro',rowdarktext:'black; text-shadow: 1px 1px 1px white',rowlight:'ghostwhite',rowlighttext:'black; text-shadow: 1px 1px 1px white',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:'',rowimg:''},
+ attack: {outer:'purple',outerpad:'',shadow:'rgba(0,0,0,0.4) 3px 3px',titlebox:'4px solid maroon',titletext:'white; text-shadow: 1px 1px 1px gray',titlepad:'4px 4px 1px 4px',bodypad:'0px',bodybox:'4px solid gray',rowbox:'none',rowdark:'white',rowdarktext:'black',rowlight:'white',rowlighttext:'black',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:'',dmgslabel:'S/M',dmgllabel:'L'},
+ menu: {outer:'black',outerpad:'',shadow:'rgba(0,0,0,0.4) 3px 3px',titlebox:'blue',titletext:'white; text-shadow: 1px 1px 1px gray',titlepad:'1px 1px 1px 1px',bodypad:'4px 4px 4px 4px',bodybox:'',rowbox:'teal',rowdark:'lightblue',rowdarktext:'black',rowlight:'lightcyan',rowlighttext:'black',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:'',rowimg:''},
+ message: {outer:'black',outerpad:'',shadow:'rgba(0,0,0,0) 0px 0px',titlebox:'white',titletext:'black',titlepad:'1px 1px 1px 1px',bodypad:'4px 4px 4px 4px',bodybox:'1px solid black',rowbox:'',rowdark:'white',rowdarktext:'black',rowlight:'white',rowlighttext:'black',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:''},
+ warning: {outer:'black',outerpad:'',shadow:'rgba(0,0,0,0.4) 3px 3px',titlebox:'crimson',titletext:'white',titlepad:'1px 1px 1px 1px',bodypad:'4px 4px 4px 4px',bodybox:'',rowbox:'purple',rowdark:'pink',rowdarktext:'black',rowlight:'mistyrose',rowlighttext:'black',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:'',rowimg:''},
+ },
+ dark: {
+ def: {outer:'darkgoldenrod',outerpad:'',shadow:'rgba(0,0,0,0.4) 3px 3px',titlebox:'blue',titletext:'white; text-shadow: 1px 1px 1px gray',titlepad:'1px 1px 1px 1px',bodypad:'4px 4px 4px 4px',bodybox:'',rowbox:'purple',rowdark:'navy',rowdarktext:'white',rowlight:'blueviolet',rowlighttext:'white',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:'',rowimg:''},
+ spell: {outer:'black',outerpad:'',shadow:'rgba(0,0,0,0) 0px 0px',titlebox:'firebrick',titletext:'white; text-shadow: 1px 1px 1px gray',titlepad:'1px 1px 1px 1px',bodypad:'4px 4px 4px 4px',bodybox:'',rowbox:'purple',rowdark:'darkmagenta',rowdarktext:'white',rowlight:'darkorchid',rowlighttext:'white',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:'',rowimg:''},
+ potion: {outer:'black',outerpad:'',shadow:'rgba(0,0,0,0) 0px 0px',titlebox:'forestgreen',titletext:'white; text-shadow: 1px 1px 1px gray',titlepad:'1px 1px 1px 1px',bodypad:'4px 4px 4px 4px',bodybox:'',rowbox:'mediumturquoise',rowdark:'darkgoldenrod',rowdarktext:'white; text-shadow: 1px 1px 1px black',rowlight:'goldenrod',rowlighttext:'white; text-shadow: 1px 1px 1px black',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:'',rowimg:''},
+ weapon: {outer:'darkgoldenrod',outerpad:'',shadow:'rgba(0,0,0,0) 0px 0px',titlebox:'gray',titletext:'white; text-shadow: 1px 1px 1px gray',titlepad:'1px 1px 1px 1px',bodypad:'4px 4px 4px 4px',bodybox:'',rowbox:'purple',rowdark:'dimgray',rowdarktext:'white; text-shadow: 1px 1px 1px black',rowlight:'darkgray',rowlighttext:'white; text-shadow: 1px 1px 1px black',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:'',rowimg:''},
+ attack: {outer:'purple',outerpad:'',shadow:'rgba(0,0,0,0.4) 3px 3px',titlebox:'4px solid maroon',titletext:'white; text-shadow: 1px 1px 1px gray',titlepad:'4px 4px 1px 4px',bodypad:'0px',bodybox:'4px solid gray',rowbox:'none',rowdark:'dimgray',rowdarktext:'white; text-shadow: 1px 1px 1px black',rowlight:'dimgray',rowlighttext:'white; text-shadow: 1px 1px 1px black',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:'',dmgslabel:'S/M',dmgllabel:'L'},
+ menu: {outer:'black',outerpad:'',shadow:'rgba(0,0,0,0.4) 3px 3px',titlebox:'blue',titletext:'white; text-shadow: 1px 1px 1px gray',titlepad:'1px 1px 1px 1px',bodypad:'4px 4px 4px 4px',bodybox:'',rowbox:'teal',rowdark:'navy',rowdarktext:'white',rowlight:'blueviolet',rowlighttext:'white',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:'',rowimg:''},
+ message: {outer:'white',outerpad:'',shadow:'rgba(0,0,0,0) 0px 0px',titlebox:'black',titletext:'white',titlepad:'1px 1px 1px 1px',bodypad:'4px 4px 4px 4px',bodybox:'1px solid white',rowbox:'',rowdark:'black',rowdarktext:'white',rowlight:'black',rowlighttext:'white',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:''},
+ warning: {outer:'black',outerpad:'',shadow:'rgba(0,0,0,0.4) 3px 3px',titlebox:'crimson',titletext:'white',titlepad:'1px 1px 1px 1px',bodypad:'4px 4px 4px 4px',bodybox:'',rowbox:'purple',rowdark:'darkmagenta',rowdarktext:'white',rowlight:'darkorchid',rowlighttext:'white',rowpad:'4px',outerimg:'',titleimg:'',bodyimg:'',rowimg:''},
+ }
+ });
+
+ const acImg = 'https://s3.amazonaws.com/files.d20.io/images/280889787/N6NbbkLDe92C4e5DDtmkaw/thumb.png?1650135426';
+ const dmgImg = 'https://s3.amazonaws.com/files.d20.io/images/280890292/ZBDEOKwQHCPeY2yQJuhkeA/thumb.png?1650135612';
+ const hpImg = 'https://s3.amazonaws.com/files.d20.io/images/281063429/1ySUC06qy_MuhY-_Be_pVQ/thumb.png?1650223020';
+ const slashImg = 'https://s3.amazonaws.com/files.d20.io/images/281331848/XnspIFctdnld8LVG3_m5RQ/thumb.png?1650393752';
+ const pierceImg = 'https://s3.amazonaws.com/files.d20.io/images/281331832/DYgW_xqlORNJ77oigkFqAA/thumb.png?1650393745';
+ const bludgeonImg = 'https://s3.amazonaws.com/files.d20.io/images/281331818/rSZVRXYkRNR4K9Ru6CXbVw/thumb.png?1650393737';
+ const sacImg = 'https://s3.amazonaws.com/files.d20.io/images/281054605/oNYktYKEmF9_ngePXyUcPw/thumb.png?1650219538';
+ const pacImg = 'https://s3.amazonaws.com/files.d20.io/images/281054578/FeeVqF8X-rgeEP6fg4CWKg/thumb.png?1650219526';
+ const bacImg = 'https://s3.amazonaws.com/files.d20.io/images/281054552/-i1SuQ4Rx1OO7cXPtlggNg/thumb.png?1650219515';
+ const heart = ['https://s3.amazonaws.com/files.d20.io/images/281063429/1ySUC06qy_MuhY-_Be_pVQ/thumb.png?1650223020',
+ 'https://s3.amazonaws.com/files.d20.io/images/281334582/74iFWTTF47pFyvmGd1WWnw/thumb.png?1650395033',
+ 'https://s3.amazonaws.com/files.d20.io/images/281334596/8yhpUHhYL7bQIlLZfHGqjw/thumb.png?1650395041',
+ 'https://s3.amazonaws.com/files.d20.io/images/281334612/FpyTBj_oaJS6_GaZmlsfvA/thumb.png?1650395047',
+ 'https://s3.amazonaws.com/files.d20.io/images/281334628/-4nbQ36qch58EK0BWgytRA/thumb.png?1650395055',
+ 'https://s3.amazonaws.com/files.d20.io/images/281334655/OH7HS1U-xYFUTJjIAypqFQ/thumb.png?1650395061',
+ 'https://s3.amazonaws.com/files.d20.io/images/281334666/CByDv4kCKWcaV9LabxwV-A/thumb.png?1650395067',
+ 'https://s3.amazonaws.com/files.d20.io/images/281334682/xbcpGhbmeEAf3ZmKEgs3Ow/thumb.png?1650395074',
+ 'https://s3.amazonaws.com/files.d20.io/images/281334693/xTlsD3NHddK4g3-nlQVCDg/thumb.png?1650395080'
+ ];
+
+ var DBindex;
+ var classesParsed = false;
+ var magicList = {};
+ var RPGMap = {};
+ var apis = {magic:false,attk:false,init:false};
+ var lastMsg = [];
+ var doneRNmsg = false;
+ var waitList = {};
+ var msg_orig = {};
+ var showMoreObj = {};
+
+ const isString = (s) => 'string' === typeof s || s instanceof String;
+ const isArray = (a) => Array.isArray(a);
+ const flatten = (a) => isArray(a) ? a.reduce((m,e)=>[...m, ...flatten(e)],[]) : [a];
+
+ /**
+ * In the inline roll evaluator from ChatSetAttr script v1.9
+ * by Joe Singhaus and C Levett.
+ **/
+
+ var processInlinerolls = function (msg) {
+ if (msg.inlinerolls && msg.inlinerolls.length) {
+ return msg.inlinerolls.map(v => {
+ const ti = v.results.rolls.filter(v2 => v2.table)
+ .map(v2 => v2.results.map(v3 => v3.tableItem.name).join(", "))
+ .join(", ");
+ return (ti.length && ti) || v.results.total || 0;
+ })
+ .reduce((m, v, k) => m.replace(new RegExp('\\$\\[\\['+k+'\\]\\]','img'),'[['+v+'['+msg.inlinerolls[k].expression+'] ]]'), msg.content);
+ } else {
+ return msg.content;
+ }
+ };
+
+ /*
+ * Check the version of a Character Sheet database against
+ * the current version in the API. Delete old versions so
+ * API versions are used and indexed.
+ */
+
+ var del_Old_DBs = function() {
+
+ var update = false;
+
+ _.each( dbNames, (db,dbName) => {
+ let dbFullName = dbName.replace(/_/g,'-'),
+ dbCS = findObjs({ type:'character', name:dbFullName },{caseInsensitive:true}),
+ dbVersion = 0.0,
+ msg, versionObj;
+
+ if (!dbCS || !dbCS.length) return;
+
+ dbCS = dbCS[0];
+
+ if (_.isUndefined(LibFunctions.attrLookup( dbCS, fields.dbVersion ))) {
+ setTimeout( () => del_Old_DBs(), 5000 );
+ return;
+
+ } else {
+
+ dbVersion = parseFloat(LibFunctions.attrLookup( dbCS, fields.dbVersion )) || dbVersion;
+
+ if (dbVersion >= (parseFloat(db.version) || 0)) return;
+
+ log('Deleting '+dbFullName+' v'+dbVersion);
+ dbCS.remove();
+ update = true;
+ }
+ });
+ if (update) LibFunctions.updateDBindex();
+ return;
+ }
+
+ /*
+ * Clear any waiting timer action saved in the playerConfig
+ */
+
+ var clearWaitTimer = function(pid) {
+ if (pid && waitList[pid]) {
+ clearTimeout(waitList[pid]);
+ waitList[pid] = undefined;
+ } else if (!pid) {
+ _.each(waitList,w=>clearTimeout(w));
+ waitList = {};
+ }
+ return;
+ };
+
+
+ /*
+ * Function to generate unique IDs for creating objects in Roll20
+ */
+
+ const generateUUID = function () {
+ var a = 0,
+ b = [];
+ return function () {
+ var c = (new Date()).getTime() + 0,
+ d = c === a;
+ a = c;
+ for (var e = new Array(8), f = 7; 0 <= f; f--) {
+ e[f] = "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".charAt(c % 64);
+ c = Math.floor(c / 64);
+ }
+ c = e.join("");
+ if (d) {
+ for (f = 11; 0 <= f && 63 === b[f]; f--) {
+ b[f] = 0;
+ }
+ b[f]++;
+ } else {
+ for (f = 0; 12 > f; f++) {
+ b[f] = Math.floor(64 * Math.random());
+ }
+ }
+ for (f = 0; 12 > f; f++) {
+ c += "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".charAt(b[f]);
+ }
+ return c;
+ };
+ }();
+ const generateRowID = function () {
+ return generateUUID().replace(/_/g, "Z");
+ };
+
+ /**
+ * Find the GM, generally when a player can't be found
+ */
+
+ var findTheGM = function() {
+ var playerGM,
+ players = findObjs({ _type:'player' });
+
+ if (players.length !== 0) {
+ if (!_.isUndefined(playerGM = _.find(players, function(p) {
+ var player = p;
+ if (player) {
+ if (playerIsGM(player.id)) {
+ return player.id;
+ }
+ }
+ }))) {
+ return playerGM.id;
+ }
+ }
+ return undefined;
+ }
+
+ /*
+ * Display a message with a link to the Release Notes
+ */
+
+ var displayReleaseNotesLink = function() {
+ var handoutIDs = LibFunctions.getHandoutIDs();
+ if (!doneRNmsg) {
+ doneRNmsg = true;
+ LibFunctions.sendFeedback(waitMsgDiv+'You can read the latest **[Release Notes here]('+fields.journalURL+handoutIDs.RPGMReleaseNotes+')**, version '+handouts.RPGM_Release_Notes.version+' updated '+(new Date(lastUpdate*1000).toDateString())+'
');
+ }
+ }
+
+ String.prototype.dbName = function() {
+ return this.toLowerCase().replace(reIgnore,'');
+ }
+
+ String.prototype.dispName = function() {
+ return (this || '').replace(/[-_]([^\d])/g,' $1');
+ }
+
+ String.prototype.hyphened = function() {
+ return (this || '').replace(/\s/g,'-');
+ }
+
+ String.prototype.trueCompare = function(txt) {
+ return (this || '').dbName() === (String(txt) || '').dbName();
+ }
+
+ class AbilityObj {
+ constructor( dBname, abilityObj, ctObj, source ) {
+ this.dB = dBname;
+ this.obj = (_.isUndefined(abilityObj) || !_.isArray(abilityObj) || abilityObj.length < 2) ? abilityObj : [_.clone(abilityObj[0]),_.clone(abilityObj[1])];
+ this.ct = ctObj;
+ this.source = source;
+ this.api = (!!abilityObj && !!abilityObj[1]) ? (abilityObj[1].body.trim()[0] == '!') : false;
+ }
+
+ specs(re = reSpecs) {
+ let specStr = (!this.obj || !this.obj[1]) ? undefined : this.obj[1].body.match(re);
+ return specStr ? [...('['+specStr[0]+']').matchAll(reSpecsAll)] : undefined;
+ }
+ data(re = reData) {
+ let specStr = (!this.obj || !this.obj[1]) ? undefined : this.obj[1].body.match(re);
+ return specStr ? [...('['+specStr[0]+']').matchAll(reDataAll)] : undefined;
+ }
+ hands(re = reSpecs) {
+ let specStr = (!this.obj || !this.obj[1]) ? undefined : this.obj[1].body.match(re);
+ return specStr ? [...('['+specStr[0]+']').matchAll(reHands)].concat([...('['+specStr[0]+']').matchAll(reHands2)] || []) : undefined;
+ }
+ classes() {
+ /**
+ * Search a database object body for the object "class"
+ **/
+ let objType = [],
+ specs = (!this.obj || !this.obj[1]) ? undefined : this.obj[1].body.match(/}}\s*?specs\s*?=(.*?){{/im);
+ specs = specs ? [...('['+specs[0]+']').matchAll(reSpecClass)] : [];
+ for (let i=0; i < specs.length; i++) {
+ objType.push(specs[i][1]);
+ }
+ return _.uniq(objType.join('|').toLowerCase().split('|')).join('|');
+ }
+
+
+ }
+
+ class CharTable {
+ constructor( property, attrs, defaultVal ) {
+ if (!property || !isArray(property) || property.length < 2) throw new Error('Invalid attribute definition in table constructor');
+ this.property = property;
+ this.attrs = attrs || {};
+ this.defaultVal = defaultVal || {current:'',max:''};
+ }
+ }
+
+ class CharTableArray {
+ constructor( character, table, col ) {
+ if (!character) throw new Error('Invalid character object in table constructor');
+ if (!table || !isArray(table) || table.length < 2) throw new Error('Invalid table definition in table constructor');
+ this.character = character;
+ this.table = table;
+ this.tableType;
+ this.fieldGroup;
+ this.values = {};
+ this.sortKeys;
+ this.col = (_.isUndefined(col) || _.isNull(col) || (table && !_.isNull(table) && !table[1] && col && col==1)) ? '' : col;
+ }
+
+ /*
+ * A method to get the whole of a repeating table in
+ * two parts: an array of objects indexed by Roll20 object IDs,
+ * and an array of object IDs indexed by repeating table row number.
+ * Returns an object containing the table, and all parameters defining
+ * that table and where it came from.
+ */
+
+ addTable(attrDef,defaultVal=null,caseSensitive) {
+ if (_.isUndefined(attrDef) || !isArray(attrDef) || attrDef.length < 2) throw new Error('No table attribute supplied to addTable() for '+this.table[0]+', attrDef '+attrDef);
+ let rowName, index = 0, name = attrDef[0];
+ if (this.table && !_.isNull(this.table)) {
+ rowName = this.table[0]+this.col+'_$0_'+attrDef[0]+this.col;
+ } else {
+ rowName = name;
+ }
+
+ if (_.isUndefined(defaultVal) || _.isNull(defaultVal)) {
+ defaultVal=attrDef[2];
+ }
+
+ if (!this.hasOwnProperty(name)) {
+ this[name] = new CharTable( attrDef );
+ }
+ if (attrDef[1] === 'max' && _.isUndefined(this[name].defaultVal.current)) this[name].defaultVal.current = '';
+ if (attrDef[1] === 'current' && _.isUndefined(this[name].defaultVal.max)) this[name].defaultVal.max = '';
+ this[name].defaultVal[attrDef[1]] = defaultVal;
+ let match=rowName.match(/^(repeating_.*)_\$(\d+)_.*$/);
+
+ if(match){
+ let createOrderKeys=[],
+ attrMatcher=new RegExp(`^${rowName.replace(/_\$\d+_/,'_([-\\da-zA-Z]+)_')}$`,(caseSensitive?'i':'')),
+ orderMatcher=new RegExp(`^${this.table[0]}${this.col}_([-\\da-zA-Z]+)_`,(caseSensitive?'i':'')),
+ attrs=_.chain(findObjs({type:'attribute', characterid:this.character.id}))
+ .map((a)=>{
+ let orderKey = (a.get('name').match(orderMatcher)||['',''])[1];
+ if (orderKey && !createOrderKeys.includes(orderKey)) {
+ createOrderKeys.push(orderKey);
+ };
+ return {attr:a,match:a.get('name').match(attrMatcher)};
+ })
+ .filter((o)=>o.match)
+ .reduce((m,o)=>{ m[o.match[1]]=o.attr; return m;},{})
+ .value(),
+ sortOrderKeys = _.chain( ((findObjs({
+ type:'attribute',
+ characterid:this.character.id,
+ name: `_reporder_${match[1]}`
+ })[0]||{get:_.noop}).get('current') || '' ).split(/\s*,\s*/))
+ .intersection(createOrderKeys)
+ .union(createOrderKeys)
+ .value();
+
+ if (_.isUndefined(this.sortKeys)) {
+ this.sortKeys = sortOrderKeys;
+ } else {
+ this.sortKeys = (sortOrderKeys.length > this.sortKeys.length) ? _.union(sortOrderKeys,this.sortKeys) : _.union(this.sortKeys,sortOrderKeys);
+ }
+ this[name].attrs=attrs;
+ if (_.isUndefined(this.values[attrDef[0]])) {
+ this.values[attrDef[0]] = Object.create({current:'',max:''});
+ }
+ this.values[attrDef[0]][attrDef[1]] = attrDef[2] || '';
+ } else {
+ this[name].attrs=[];
+ if (_.isUndefined(this.sortKeys)) {
+ this.sortKeys = [];
+ }
+ }
+ return this;
+ }
+
+ /*
+ * Find all the necessary tables to manage a repeating
+ * section of a character sheet. Dynamically driven by
+ * the table field definitions in the 'fields' object.
+ */
+
+ addAllTables( fieldGroup, caseSensitive ) {
+
+ var rows = {};
+
+ this.fieldGroup = fieldGroup;
+ this.values = {};
+ _.each( fields, (elem,key) => {
+ if (key.startsWith(fieldGroup)
+ && ['current','max'].includes(String(elem[1]).toLowerCase())) {
+ rows[key]=elem;
+ };
+ });
+ _.each(rows, (elem,key) => {
+ this.addTable( elem, elem[2], caseSensitive );
+ });
+ return this;
+ }
+
+ /**
+ * A function to take a table obtained using getTableField() and a row number, and
+ * safely return the value of the table row, or undefined. Uses the table object
+ * parameters such as the character object it came from and the field property.
+ * If the row entry is undefined use a default value if set in the getTableField() call,
+ * which can be overridden with an optional parameter. Can just return the row
+ * object or can return a different property of the object using the second optional parameter.
+ */
+
+ tableLookup( attrDef, index, defVal, retObj ) {
+
+ if (!attrDef || !isArray(attrDef) || attrDef.length < 2) throw new Error('No table attribute supplied to tableLookup() for '+this.table[0]+', attrDef '+attrDef);
+ var val, name = attrDef[0];
+ if (_.isUndefined(retObj)) {
+ retObj=false;
+ } else if (retObj === true) {
+ defVal=false;
+ }
+ if (_.isUndefined(defVal)) {
+ defVal=true;
+ }
+ if (this[name] && !_.isUndefined(index)) {
+ let property = (retObj === true) ? null : ((retObj === false) ? attrDef : retObj);
+ defVal = (defVal===false) ? (undefined) : ((defVal===true) ? this[name].defaultVal[attrDef[1]] : defVal);
+// if (!_.isUndefined(defVal)) defVal = String(defVal);
+ if (index>=0) {
+ let attrs = this[name].attrs,
+ sortOrderKeys = this.sortKeys;
+ if (index
{
+ if (_.isUndefined(elem.attrs)) return;
+ currentVal = (!rowVals || _.isUndefined(rowVals[key])) ? elem.defaultVal['current'] : rowVals[key]['current'];
+ maxVal = (!rowVals || _.isUndefined(rowVals[key])) ? elem.defaultVal['max'] : rowVals[key]['max'];
+ this.tableSet( [key,'current'], index, currentVal );
+ this.tableSet( [key,'max'], index, maxVal );
+ });
+ } else {
+ if (index > this.sortKeys.length) {
+ this.addTableRow( index-1, undefined );
+ }
+ let rowObjID = generateRowID();
+ let namePt1 = this.table[0]+this.col+'_'+rowObjID+'_';
+ let gotVals = !!rowVals && _.pairs(rowVals).length > 0;
+ _.each( list, (elem,key) => {
+ if (_.isUndefined(elem.attrs)) return;
+ rowObj = createObj( "attribute", {characterid: this.character.id, name: (namePt1+key+this.col)} );
+ if (!gotVals) {
+ newVal = _.isUndefined(this.values[key]) ? elem.defaultVal : this.values[key] ;
+ } else {
+ newVal = rowVals[key];
+ }
+ rowObj.set(newVal);
+ this[key].attrs[rowObjID] = rowObj;
+ this.sortKeys[index] = rowObjID;
+ });
+ }
+ return this;
+ }
+
+ /*
+ * Delete / remove a table row completely
+ */
+
+ delTableRow( index ) {
+
+ let rowObj, newVal, currentVal, maxVal, list = this;
+
+ let fieldGroup = this.fieldGroup;
+ if (!fieldGroup) throw new Error('undefined addTableRow fieldGroup');
+ if (index) index = parseInt(index);
+ if (_.isUndefined(index) || isNaN(index)) return this;
+
+ if ((index < 0) || ((index >= this.sortKeys.length) || _.isUndefined(this.tableLookup( fields[fieldGroup+'name'], index, false )))) return this;
+
+ _.each( list, (elem,key) => {
+ if (_.isUndefined(elem.attrs)) return;
+ elem.attrs[this.sortKeys[index]].remove();
+ _.omit(elem.attrs,this.sortKeys[index]);
+ });
+ this.sortKeys.splice(index,1);
+ return this;
+ };
+
+ /*
+ * A function to find the index of a matching entry in a table
+ */
+
+ tableFind( attrDef, val, def=true, every=false ) {
+
+ let findRE = _.isRegExp(val);
+ let findArray = _.isArray(val);
+ let findVal = !findRE && !findArray && (_.isString(val) || _.isNumber(val) || _.isBoolean(val));
+ if (!(findRE || findArray || findVal)) {
+ LibFunctions.sendError('Invalid search term "'+val+'" of type '+typeof val+' for tableFind while searching '+this.table[0]);
+ return undefined;
+ };
+ if (findVal) val = String(val).dbName() || '-';
+ if (findArray) val = val.map(v => String(v).dbName() || '-');
+ let property = attrDef[1];
+ let attrVal = LibFunctions.attrLookup( this.character, attrDef );
+ let indexArray = [], tableIndex = -1;
+
+ if ((this.table[1] < 0) && (findVal ? (val === String(attrVal.dbName() || '-')) :
+ (findRE ? (attrVal.search(val) >= 0) :
+ (findArray ? (val.includes(attrVal.dbName() || '-')) :
+ false )))) {
+ if (!every) return tableIndex;
+ indexArray.push(tableIndex);
+ }
+ let attrs = this[attrDef[0]].attrs;
+ for (let i=0; i < this.sortKeys.length; i++) {
+ let elem = _.has(attrs,this.sortKeys[i]) ? attrs[this.sortKeys[i]].get(property) : (def ? attrDef[2] : undefined);
+ if (!_.isUndefined(elem)) {
+ if (findVal ? (val === (String(elem).dbName() || '-')) :
+ (findRE ? (String(elem).search(val) >= 0) :
+ (findArray ? (val.includes(String(elem).dbName() || '-')) :
+ false ))) {
+
+ indexArray.push(i);
+ if (tableIndex < 0) tableIndex = i;
+ if (!every) break;
+ };
+ };
+ };
+
+ if (tableIndex < 0 && ((findVal && val === '-') || (findArray && val.includes('-')))) {
+ tableIndex = this.sortKeys.length;
+ indexArray.push(tableIndex);
+ }
+ return !indexArray.length ? undefined : (every ? indexArray : tableIndex)
+ };
+
+ /*
+ * Another way of calling tableFind() with the every parameter set to true
+ */
+
+ tableFindAll( attrDef, val, def ) {
+ return this.tableFind( attrDef, val, def, true );
+ };
+
+ /*
+ * A function to set all rows of just one field of a table to
+ * a provided value, or its default if value not provided
+ */
+
+ tableDefault( attrDef, val ) {
+ if (!attrDef || !isArray(attrDef) || attrDef.length < 2) throw new Error('No table attribute supplied to tableDefault() for '+this.table[0]+', attrDef '+attrDef);
+ if (_.isUndefined(val) || _.isNull(val)) val = this[attrDef[0]].defaultVal[attrDef[1]];
+ if (!this[attrDef[0]]) throw new Error('Invalid table attribute '+attrDef[0]+' supplied for '+this.table[0]);
+ _.each(this[attrDef[0]].attrs, obj => {
+ obj.set(attrDef[1],val);
+ });
+ return this;
+ }
+
+ /*
+ * Make a copy of the default values for the table
+ */
+
+ copyValues() {
+ let newValues = {};
+ _.each( this.values, (v,k) => newValues[k] = Object.create(v));
+ return newValues;
+ }
+
+ }
+
+ class CSdbIndex {
+ constructor() {
+ this.mu_spells_db = {};
+ this.pr_spells_db = {};
+ this.powers_db = {};
+ this.mi_db = {};
+ this.race_db = {};
+ this.class_db = {};
+ this.attacks_db = {};
+ }
+ }
+
+
+ class LibFunctions {
+
+ static init(){
+
+ /** ------------------------------- Table Management ---------------------------- **/
+
+ /*
+ * A function to get the whole of a repeating table in
+ * two parts: an array of objects indexed by Roll20 object IDs,
+ * and an array of object IDs indexed by repeating table row number.
+ * Returns an object containing the table, and all parameters defining
+ * that table and where it came from.
+ */
+
+ LibFunctions.getTableField = function(character,tableObj,tableDef,attrDef,col,defaultVal=null,caseSensitive) {
+ if (_.isUndefined(tableObj) || _.isUndefined(tableObj.table)) tableObj = new CharTableArray( character, tableDef, col );
+ tableObj.addTable( attrDef, defaultVal, caseSensitive );
+ return tableObj;
+ }
+
+ /*
+ * Find all the necessary tables to manage a repeating
+ * section of a character sheet. Dynamically driven by
+ * the table field definitions in the 'fields' object.
+ */
+
+ LibFunctions.getTable = function( character, fieldGroup, col, tableObj, caseSensitive ) {
+ if (!fieldGroup) return undefined;
+ let tableDef = fieldGroup.tableDef;
+ if (_.isUndefined(tableObj) || _.isUndefined(tableObj.table)) tableObj = new CharTableArray( character, tableDef, col );
+ tableObj.addAllTables( fieldGroup.prefix, caseSensitive );
+ return tableObj;
+ }
+
+ /*
+ * Get all tables in a particular numbered group of tables,
+ * based not on columns but on a numbered sequence of prefixes
+ */
+
+ LibFunctions.getLvlTable = function( character, fieldGroup, lvl, tableObj, caseSensitive ) {
+ if (_.isUndefined(lvl) || _.isNull(lvl)) lvl = '';
+ let tableDef = [fieldGroup.tableDef[0]+lvl,fieldGroup.tableDef[1]];
+ if (_.isUndefined(tableObj) || _.isUndefined(tableObj.table)) tableObj = new CharTableArray( character, tableDef, null );
+ tableObj.addAllTables( fieldGroup.prefix, caseSensitive );
+ return tableObj;
+ }
+
+ /*
+ * Function to initialise a values[] array to hold data for
+ * setting a table row to.
+ */
+
+ LibFunctions.initValues = function( fieldGroup, values ) {
+
+// let values = [new Set()];
+ if (_.isUndefined(values)) values = {};
+ let rows = _.filter( fields, (elem,f) => f.startsWith(fieldGroup))
+ .map(elem => {
+ if (_.isUndefined(values[elem[0]])) {
+ values[elem[0]] = {current:'',max:''};
+ }
+ values[elem[0]][elem[1]] = elem[2] || '';
+ });
+ return values;
+ }
+
+ /** ------------------------ Attribute Management ------------------------------ **/
+
+ /**
+ * A function to return the handle for the 'fields' object for the represented
+ * character sheet mapping, and an object of handles for other game-specific values.
+ **/
+
+ LibFunctions.getRPGMap = function() {
+ RPGMap.dbNames = dbNames;
+ RPGMap.fieldGroups = fieldGroups;
+ RPGMap.miTypeLists = miTypeLists;
+ RPGMap.clTypeLists = clTypeLists;
+ RPGMap.spTypeLists = spTypeLists;
+ RPGMap.classMap = classMap;
+ RPGMap.baseThac0table = baseThac0table;
+ RPGMap.spellsPerLevel = spellsPerLevel;
+ RPGMap.spellLevels = spellLevels;
+ RPGMap.specMU = specMU;
+ RPGMap.ordMU = ordMU;
+ RPGMap.wisdomSpells = wisdomSpells;
+ RPGMap.casterLevels = casterLevels;
+ RPGMap.primeClasses = primeClasses;
+ RPGMap.classLevels = classLevels;
+ RPGMap.rangedWeapMods = rangedWeapMods;
+ RPGMap.saveLevels = saveLevels;
+ RPGMap.baseSaves = baseSaves;
+ RPGMap.classSaveMods = classSaveMods;
+ RPGMap.raceSaveMods = raceSaveMods;
+ RPGMap.defaultNonProfPenalty = defaultNonProfPenalty;
+ RPGMap.classNonProfPenalty = classNonProfPenalty;
+ RPGMap.raceToHitMods = raceToHitMods;
+ RPGMap.classAllowedWeaps = classAllowedWeaps;
+ RPGMap.classAllowedArmour = classAllowedArmour;
+ RPGMap.weapMultiAttks = weapMultiAttks;
+ RPGMap.punchWrestle = punchWrestle;
+ RPGMap.saveFormat = saveFormat;
+ RPGMap.rogueSkills = rogueSkills;
+ RPGMap.thiefSkillFactors = thiefSkillFactors;
+ RPGMap.rogueDexMods = rogueDexMods;
+ RPGMap.reSpellSpecs = reSpellSpecs;
+ RPGMap.reWeapSpecs = reWeapSpecs;
+ RPGMap.reACSpecs = reACSpecs;
+ RPGMap.reModSpecs = reModSpecs;
+ RPGMap.reClassSpecs = reClassSpecs;
+ RPGMap.reThiefSpecs = reThiefSpecs;
+ RPGMap.reNPCThiefSpecs = reNPCThiefSpecs;
+ RPGMap.reSaveSpecs = reSaveSpecs;
+ RPGMap.reAttr = reAttr;
+ RPGMap.showMoreObj = showMoreObj;
+ return [fields,RPGMap];
+ }
+
+ /**
+ * A function to lookup the value of any attribute, including repeating rows, without errors
+ * thus avoiding the issues with getAttrByName()
+ *
+ * Thanks to The Aaron for this, which I have modded to split and
+ * allow tables to be loaded once rather than multiple times.
+ */
+
+ LibFunctions.attrLookup = function(character,attrDef,tableDef,r,c='',caseSensitive=false, defValParam=true) {
+ let name, match,
+ property = attrDef[1];
+
+ if (!character || !character.id || (tableDef && isNaN(r))) return undefined;
+
+ if (tableDef && (tableDef[1] || r >= 0)) {
+ c = (tableDef[1] || c != 1) ? c : '';
+ name = tableDef[0] + c + '_$' + r + '_' + attrDef[0] + c;
+ } else {
+ name = attrDef[0];
+ }
+ let defVal = (defValParam === false ? undefined : (defValParam === true ? attrDef[2] : defValParam));
+ if (!_.isUndefined(defVal)) defVal = String(defVal);
+ match=name.match(/^(repeating_.*)_\$(\d+)_.*$/);
+ if(match){
+ let index=match[2];
+ let tableObj = new CharTableArray( character, tableDef, c );
+ tableObj.addTable(attrDef,null,caseSensitive);
+ return tableObj.tableLookup(attrDef,index,defValParam,!attrDef[1]);
+ } else {
+ let attrObj = findObjs({ type:'attribute', characterid:character.id, name:name}, {caseInsensitive: !caseSensitive});
+ if (!attrObj || attrObj.length == 0) {
+ return (_.isUndefined(property) || _.isNull(property)) ? undefined : defVal;
+ } else if (_.isUndefined(property) || _.isNull(property)) {
+ return getObj('attribute',attrObj[0].id);
+ } else {
+ let value = getObj('attribute',attrObj[0].id).get(property);
+ return (_.isUndefined(value) ? defVal : String(value));
+ }
+ }
+ }
+
+ /**
+ * Check that an attribute exists, set it if it does, or
+ * create it if it doesn't using !setAttr
+ **/
+
+ LibFunctions.setAttr = function( character, attrDef, attrValue, tableDef, r, c, caseSensitive ) {
+
+ var name, attrObj, match;
+
+ if (_.isUndefined(attrDef)) {log('setAttr attrDef undefined:'+attrDef);return undefined;}
+ try {
+ name = attrDef[0];
+ } catch {
+ return undefined;
+ }
+
+ if (tableDef && (tableDef[1] || r >= 0)) {
+ c = (c && (tableDef[1] || c != 1)) ? c : '';
+ name = tableDef[0] + c + '_$' + r + '_' + attrDef[0] + c;
+ } else {
+ name = attrDef[0];
+ }
+ match=name.match(/^(repeating_.*)_\$(\d+)_.*$/);
+ if(match){
+ let tableObj = new CharTableArray( character, tableDef, c );
+ tableObj.addTable(attrDef,null,caseSensitive);
+ if (tableObj) {
+ attrObj = tableObj.tableLookup(attrDef,r,false,true);
+ }
+ } else {
+ attrObj = LibFunctions.attrLookup( character, [name, null], null, null, null, caseSensitive );
+ if (!attrObj) {
+ attrObj = createObj( 'attribute', {characterid:character.id, name:attrDef[0], current:'', max:''} );
+ }
+ };
+ if (attrObj) {
+ if (_.isUndefined(attrValue)) attrValue = _.isUndefined(attrDef[2]) ? '' : attrDef[2];
+ if (attrDef[3]) {
+ attrObj.setWithWorker(attrDef[1],String(attrValue));
+ } else {
+ attrObj.set(attrDef[1],String(attrValue));
+ }
+ }
+ return attrObj;
+ }
+
+ /** --------------------------- Ability Management Functions ------------------------------ **/
+
+
+ /**
+ * Find an ability macro with the specified name in any
+ * macro database with the specified root name, returning
+ * the database name, and the matching "ct-" object.
+ * If can't find a matching ability macro or "ct-" object
+ * then return undefined objects
+ * RED v2.044: Updated to use a database index of object IDs
+ * to speed up lookups.
+ **/
+
+ LibFunctions.abilityLookup = function( rootDB, ability, charCS, silent=false, def=true, isGM=false, trueAbility='' ) {
+
+ var charID, obj, ct, db, spells, items, objIndex, abilityName, action,
+ trueAbilityName = String(trueAbility || '').dbName(),
+ source = 'charDB',
+ notFound = false,
+ abilityObj = [],
+ ctObj = [],
+ rDB = rootDB.toLowerCase().replace(/-/g,'_');
+
+ var getTypes = function( body ) {
+ let objType = [],
+ specs = body.match(/}}\s*?specs\s*?=(.*?){{/im);
+ specs = specs ? [...('['+specs[0]+']').matchAll(reSpecClass)] : [];
+ for (let i=0; i < specs.length; i++) {
+ objType.push(specs[i][1]);
+ }
+ return _.uniq(objType.join('|').toLowerCase().split('|')).join('|');
+ };
+
+ if (_.isUndefined(DBindex[rDB])) {
+ for (db of _.keys(DBindex)) {
+ if (rDB.startsWith(db)) {
+ rDB = db;
+ break;
+ }
+ }
+ }
+ if (!ability || ability.length==0 || ability === '-') {
+ return (!def ? new AbilityObj( rootDB, undefined, undefined, undefined) : new AbilityObj( rDB, [undefined,blankItem], [undefined,0], 'apiDB'));
+ }
+
+ do {
+ abilityName = String(ability || '').dbName();
+ if (!_.isUndefined(DBindex[rDB]) && !_.isUndefined(DBindex[rDB][abilityName])) {
+ objIndex = DBindex[rDB][abilityName];
+ if (objIndex[0].length) {
+ obj = getObj('ability',objIndex[0]);
+ }
+ }
+ if (charCS && (!objIndex || (objIndex[0].length && !obj))) {
+ obj = findObjs({ type:'ability', characterid:charCS.id, name:(ability.replace(/\s/g,'-')) });
+ if (obj && obj.length) {
+ source = 'sheet';
+ obj = obj[0];
+ objIndex = [];
+ objIndex.push(obj.id);
+ ct = findObjs({ type:'attribute', characterid:charCS.id, name:'ct-'+ability });
+ }
+ }
+ notFound = notFound || (!objIndex || (objIndex[0].length && !obj));
+ if (notFound) ability = trueAbility;
+ } while (notFound && abilityName !== trueAbilityName && ability && ability.length);
+
+ if (!objIndex || (objIndex[0].length && !obj)) {
+// if (!silent) log('Not found ability '+abilityName+' in any '+rootDB+' database');
+ return new AbilityObj( rootDB, undefined, undefined, undefined);
+ } else if (!objIndex[0].length || !obj) {
+ source = 'apiDB';
+ db = rootDB;
+ obj = dbNames[objIndex[2]].db[objIndex[3]];
+ if (!obj) return new AbilityObj( rootDB, undefined, undefined, undefined);
+ obj.body = LibFunctions.parseStr(obj.body,dbReplacers);
+ abilityObj = [undefined,obj];
+ ctObj = [undefined,obj.ct];
+ } else {
+ charID = obj.get('characterid');
+ db = getObj('character',charID).get('name');
+ spells = db.startsWith(fields.MU_SpellsDB) || db.startsWith(fields.PR_SpellsDB) || db.startsWith(fields.Powers_DB);
+ items = db.startsWith(fields.MagicItemDB);
+ abilityObj[0] = obj;
+ action = obj.get('action');
+ ct = !ct ? getObj('attribute',objIndex[1]) : ct[0];
+ abilityObj[1] = {name:obj.get('name'),
+ type:getTypes(action),
+ ct:(!ct ? 0 : ct.get('current')),
+ charge:(!ct || spells ? 'uncharged' : ct.get('max')),
+ cost:(!ct || items ? '0' : ct.get('max')),
+ body:action};
+ ctObj = [ct,abilityObj[1].ct];
+ };
+// if (!notFound && !isGM) abilityObj[1].body = abilityObj[1].body.replace(/{{\s*?Looks Like\s*=.*?}}/img,'');
+ return new AbilityObj( db, abilityObj, ctObj, source );
+ }
+
+ /*
+ * Create or update an ability on a character sheet
+ */
+
+ LibFunctions.setAbility = function( charCS, abilityName, abilityMacro, actionBar=false ) {
+
+ if (!charCS) {log('setAbility error: invalid character sheet');return;}
+ abilityName = !abilityName ? '-' : abilityName.hyphened();
+ var abilityObj = findObjs({type: 'ability',
+ characterid: charCS.id,
+ name: abilityName},
+ {caseInsensitive:true});
+ if (!abilityObj || abilityObj.length == 0 || !abilityObj[0] || abilityObj[0].get('name') !== abilityName) {
+ abilityObj = createObj( 'ability', {characterid: charCS.id,
+ name: abilityName,
+ action: abilityMacro,
+ istokenaction: actionBar});
+ } else {
+ abilityObj = abilityObj[0];
+ abilityObj.set( 'action', abilityMacro );
+ abilityObj.set( 'istokenaction', actionBar );
+ }
+ return abilityObj;
+ }
+
+ /*
+ * Handle displaying an Ability Macro
+ */
+
+ LibFunctions.doDisplayAbility = function( args, selected, senderId, as, img ) {
+ if (!args) return;
+ if (!args[0] && selected && selected.length) {
+ args[0] = selected[0]._id;
+ }
+ if (args.length < 3) {
+ LibFunctions.sendError('Incorrect RPGMaster command syntax',msg_orig[senderId]);
+ return;
+ }
+ if ((charCS = LibFunctions.getCharacter(args[0]))) args.unshift('standard');
+ var cmd = (args[0] || 'standard').toLowerCase(),
+ tokenID = args[1],
+ db = args[2],
+ ability = args[3],
+ diceRoll1 = args[4] || '',
+ diceRoll2 = args[5] || '',
+ targetID = args[6] || '',
+ charCS = LibFunctions.getCharacter(tokenID),
+ targetToken = getObj('graphic',targetID),
+ targetCS = (targetToken ? getObj('character',targetToken.get('represents')) : undefined),
+ isView = cmd.includes('view'),
+ abObj, abilityMacro;
+
+ var diceRoll = function( rollTxt ) {
+ if (!rollTxt) return randomInteger(20);
+ var retVal = rollTxt.match(/\d+d\d+/i);
+ retVal = (!retVal) ? parseInt((rollTxt.match(/\((\d+)\)/) || rollTxt.match(/(\d+)/) || [0,randomInteger(20)])[1]) : '[['+retVal+']]';
+ return retVal;
+ };
+
+ if (!charCS) {
+ LibFunctions.sendError('The token identified does not represent a character sheet',msg_orig[senderId]);
+ return;
+ }
+
+ if (db.toLowerCase().includes('-db')) {
+ abObj = LibFunctions.getAbility( db, ability, charCS );
+ if (!abObj.obj || !abObj.obj[1]) {
+ LibFunctions.sendError(('The provided ability does not exist in any '+db+' database'),msg_orig[senderId]);
+ return;
+ }
+ abilityMacro = abObj.obj[1].body;
+ } else {
+ var abilityCS = findObjs({type:'character',_id:db});
+ if (!abilityCS || !abilityCS.length) abilityCS = findObjs({type:'character',name:db}, {caseInsensitive: true});
+ if (abilityCS && abilityCS[0]) {
+ abObj = findObjs({type:'ability',characterid:abilityCS[0].id,name:ability}, {caseInsensitive: true});
+ }
+ if (!abObj || !abObj.length) {
+ LibFunctions.sendError(('Not found ability '+ability+' for character '+db),msg_orig[senderId]);
+ return;
+ }
+ abilityMacro = abObj[0].get('action');
+ }
+ diceRoll1 = diceRoll(diceRoll1);
+ diceRoll2 = diceRoll(diceRoll2);
+
+ abilityMacro = abilityMacro.replace(/\}\}\}/g,'} }}')
+ .replace(/%%diceRoll1%%/img,diceRoll1)
+ .replace(/%%diceRoll2%%/img,diceRoll2)
+ .replace(/@{selected\|token_id}/img,tokenID)
+ .replace(/@{selected/img,'@{'+charCS.get('name'));
+ if (targetToken && targetCS) {
+ let targetHP = LibFunctions.getTokenValue( targetToken, fields.token_HP, fields.HP, null, fields.Thac0_base, false );
+ let targetMaxHP = LibFunctions.getTokenValue( targetToken, fields.token_MaxHP, fields.MaxHP, null, fields.Thac0_base, false );
+ let targetAC = LibFunctions.getTokenValue( targetToken, fields.token_AC, fields.AC, fields.MonsterAC, fields.Thac0_base, false );
+ let tokenName = targetToken.get('name');
+ let targetName = targetCS.get('name');
+ let heart = abilityMacro.match(/\{\{\s*Token[_\s]Heart\s*=.*?\}\}/im);
+ if (heart) {
+ abilityMacro = abilityMacro.replace(heart[0],'{{Token_Heart='+Math.ceil(8*Math.max(0,targetHP.val)/targetMaxHP.val)+'}}');
+ }
+ abilityMacro = abilityMacro.replace(/@\{\s*target\s*\|?[^\{\}]*?\|\s*token_id\s*\}/img,targetID)
+ .replace(/(?:\[\[)?\s*(?:0\s*\+)?\s*@\{target\|?[^\{\}]*?\|hp\|max\}\s*(?:\&\{noerror\})?\s*(?:\]\])?/img,targetMaxHP.val+' ')
+ .replace(/(?:\[\[)?\s*(?:0\s*\+)?\s*@\{target\|?[^\{\}]*?\|hp\}\s*(?:\&\{noerror\})?\s*(?:\]\])?/img,targetHP.val+' ')
+ .replace(new RegExp('(?:\\[\\[)?\\s*(?:0\\s*\\+)?\\s*@\\{target\\|?[^\\{\\}]*?\\|'+targetMaxHP.name+'\\|max\\}\\s*(?:\\&\\{noerror\\})?\\s*(?:\\]\\])?','img'),targetMaxHP.val+' ')
+ .replace(new RegExp('(?:\\[\\[)?\\s*(?:0\\s*\\+)?\\s*@\\{target\\|?[^\\{\\}]*?\\|'+targetHP.name+'\\}\s*(?:\\&\\{noerror\\})?\\s*(?:\\]\\])?','img'),targetHP.val+' ')
+ .replace(/(?:\[\[)?\s*(?:0\s*\+)?\s*@\{target\|?[^\{\}]*?\|ac\}\s*(?:\&\{noerror\})?\s*(?:\]\])?/img,targetAC+' ')
+ .replace(/@\{target\|?[^\{\}]*?\|token_name\}(?:\s*\&\{noerror\})?/img,tokenName+' ');
+ let targetFields = [...abilityMacro.matchAll(/(?:\[\[)?(?:\s*0\s*\+)?\s*(@\{target\|.*?\})\s*(?:\&\{noerror\})?\s*(?:\]\])?/img)];
+ _.each(targetFields, f => abilityMacro = abilityMacro.replace(f[0],f[1]));
+ abilityMacro = abilityMacro.replace(/@\{target\|?[^\{\}]*?\|/img,'@{'+targetName+'|');
+ }
+ cmd = cmd.replace(/\-?view/,'');
+ if (isView && !state.MagicMaster.viewActions) abilityMacro = abilityMacro.replace(/(? LibFunctions.parseStr((LibFunctions.attrLookup( charCS, [fields.ItemVar[0]+name+'+'+row+'-'+w,'current'] ) || '').split('/')[v] || '');
+
+ if (abObj.obj && abObj.obj[1]) {
+ do {
+ extra = abObj.obj[1].body.match(/%{([^\|]+?)\|([^}]+?)}/);
+ if (extra) {
+ if (!extraList.includes(extra[2].dbName())) {
+ extraList.push(extra[2].dbName());
+ extraDef = LibFunctions.abilityLookup( extra[1], extra[2], charCS, silent );
+ } else {
+ extraDef.obj = undefined;
+ }
+ if (extraDef.obj) {
+ abObj.obj[1].body = abObj.obj[1].body.replace(/%{([^\|]+?)\|([^}]+?)}/,extraDef.obj[1].body.replace('$$','$$$$'));
+ } else {
+ abObj.obj[1].body = abObj.obj[1].body.replace(/%{([^\|]+?)\|([^}]+?)}/,'');
+ }
+ }
+ } while (extra && extraDef.obj);
+
+ trueName = (trueName || '').trim();
+ if (!isGM && trueName && trueName.length && (name.dbName() === trueName.dbName())) {
+ abObj.obj[1].body = abObj.obj[1].body.replace(/{{\s*?Looks\s?Like\s*=/img,'{{Appearance=');
+ }
+ if (charCS) {
+ if (trueName && trueName.length && name.dbName() !== trueName.dbName()) {
+ let cmd = '{{GM Info=[Reveal Now](!magic --button GM-ResetSingleMI|'+charCS.id+'|'+(name)
+ + ' --message gm|'+charCS.id+'|Revealing '+(trueName.dispName())+'|The item '+(trueName.dispName())+' which was hidden as '+(name.dispName())+' has been revealed)';
+ if (/{{\s*GM\s?Info\s*=/im.test(abObj.obj[1].body)) {
+ abObj.obj[1].body = abObj.obj[1].body.replace(/{{\s*GM\s?Info\s*=([^\[])/im,(cmd + ' $1'));
+ } else {
+ abObj.obj[1].body += cmd + '}}';
+ }
+ }
+ while (reVars.test(abObj.obj[1].body)) abObj.obj[1].body = abObj.obj[1].body.replace(reVars,varRes);
+ abObj.obj[0] = LibFunctions.setAbility( charCS, name, abObj.obj[1].body );
+ LibFunctions.setAttr( charCS, [fields.CastingTimePrefix[0]+name,'current'], abObj.obj[1].ct );
+ LibFunctions.setAttr( charCS, [fields.CastingTimePrefix[0]+name,'max'], abObj.obj[1].charge );
+ abObj.dB = charCS.get('name');
+ }
+ }
+ return abObj;
+ }
+
+ /** -------------------------------------------- send messages to chat ----------------------------------------- **/
+
+ LibFunctions.parseTemplate = function( txt ) {
+// return LibFunctions.parseOutput( '', '', '', txt, null, null, null, false );
+ };
+
+ LibFunctions.redisplayOutput = function(senderId) {
+ if (senderId && senderId.length && !_.isUndefined(lastMsg[senderId])) {
+ let args = [...lastMsg[senderId]];
+ if (args.length > 3) {
+ return LibFunctions.parseOutput( args[0], args[1], args[2], args[3], senderId );
+ }
+ }
+ }
+
+ /*
+ * Parse the standard Roll Template structure for RPGMaster
+ * templates and return the converted text for display in the
+ * chat window.
+ */
+
+ LibFunctions.parseOutput = function( as, preamble, template, txt, senderId ) {
+
+ var isGM = false;
+ var originalTxt = txt;
+ if (senderId && senderId.length) {
+ for (const playerId of senderId.split(',')) {
+ lastMsg[playerId] = arguments;
+ isGM = isGM || playerIsGM(playerId);
+ }
+ }
+
+ clearWaitTimer(senderId);
+
+ txt = txt.replace(/}}\s*?k/img,'} }k')
+ .replace(/{{=/img,'{{ =')
+ .replace(/</img,'<')
+ .replace(/>/img,'>')
+ .replace(/{{\s*}}/img,'')
+ .replace(/\[\]\(/img,'[-](');
+
+ var colours, colourSet;
+
+ switch (template.toLowerCase()) {
+ case 'rpgmattack':
+ colourSet = 'attack';
+ break;
+ case 'rpgmweapon':
+ case 'rpgmammo':
+ colourSet = 'weapon';
+ break;
+ case 'rpgmpotion':
+ colourSet = 'potion';
+ break;
+ case 'rpgmspell':
+ case 'rpgmitemspell':
+ case 'rpgmwandspell':
+ case 'rpgmscroll':
+ colourSet = 'spell';
+ break;
+ case 'rpgmmenu':
+ colourSet = 'menu';
+ break;
+ case 'rpgmmessage':
+ colourSet = 'message';
+ break;
+ case 'rpgmwarning':
+ colourSet = 'warning';
+ break;
+ case 'rpgmarmour':
+ case 'rpgmitem':
+ case 'rpgmring':
+ case 'rpgmwand':
+ case 'rpgmclass':
+ case 'rpgmdefault':
+ default:
+ colourSet = 'def';
+ break;
+ }
+ if (_.isUndefined(state.MagicMaster) || _.isUndefined(state.attackMaster)) {
+ colours = Object.create(pallet.plain[colourSet]);
+ } else if (!senderId || _.isUndefined(state.MagicMaster.playerConfig) || _.isUndefined(state.MagicMaster.playerConfig[senderId])) {
+ colours = Object.create((state.attackMaster.fancy || state.MagicMaster.fancy) ? pallet.fancy[colourSet] : pallet.plain[colourSet]);
+ } else {
+ let config = state.MagicMaster.playerConfig[senderId];
+ colours = Object.create(config.menuPlain ? pallet.plain[colourSet] : (config.menuDark ? pallet.dark[colourSet] : pallet.fancy[colourSet]));
+ }
+ if (template) {
+ const txtObj = _.object([...txt.replace(/[\r\n]/g,'').matchAll(/\{\{(.+?)=(.*?)\}\}/g)].map(v => v.slice(1)).map(v => [v[0].dbName(),v[1]]));
+ _.each( txtObj, (t,k) => {
+ if (!_.isUndefined(colours[k])) {
+ colours[k] = t;
+ txt = txt.replace(new RegExp(`{{\\s*${k}\\s*=.*?}}`,'img'),'');
+ }
+ });
+ };
+ const outerFrame = '';
+ const endOuterFrame = '
';
+ const headerFrame = '';
+ const endHeaderFrame = ' |
';
+ const header1 = '';
+ const endHeader1 = '';
+ const header2 = '';
+ const endHeader2 = '';
+ const subtitle1 = '
';
+ const endSubtitle1 = '';
+ const subtitle2 = '
';
+ const endSubtitle2 = '';
+ const settings = ' ';
+
+ const bodyFrame = '';
+ const fullBodyFrame = '';
+ const lastBodyFrame = '';
+ const endBodyFrame = ' ';
+ const row1col = ['',
+ ' '];
+ const rowResult = ['',
+ ' '];
+ const endRowResult = ' '
+ const endRow1col = ' ';
+ const rowHeader = ' ';
+ const endRowHeader = ' | ';
+ const rowBodyC = ' ';
+ const endRowBodyC = ' | ';
+ const rowBody = ' ';
+ const endRowBody = ' | ';
+ const row1 = ' ';
+ const endRow1 = ' | ';
+ const row1C = ' ';
+ const endRow1C = ' | ';
+ const row2col = [' ',
+ ' '];
+ const endRow2col = ' ';
+ const rowL = ' ';
+ const endRowL = ' | ';
+ const rowR = ' ';
+ const endRowR = ' | ';
+ const rowC = ' ';
+ const endRowC = ' | ';
+ const row2 = ' ';
+ const endRow2 = ' | ';
+ const rowC2 = ' ';
+ const endRowC2 = ' | ';
+ const titleDmgSM = ' '+colours.dmgslabel+' | ';
+ const rowDmgSM = ' ';
+ const endRowDmgSM = ' | ';
+ const titleAC = ' AC Hit | ';
+ const rowAC = ' ';
+ const endRowAC = ' | ';
+ const rowType = ' ';
+ const endRowType = ' | ';
+ const titleDmgL = ' '+colours.dmgllabel+' | ';
+ const rowDmgL = ' ';
+ const endRowDmgL = ' | ';
+ const sImg = '  '
+ const pImg = '  '
+ const bImg = '  '
+ const rowTargetAC = ' Target | ';
+ const endRowTargetAC = ' | AC | ';
+ const rowTargetSAC = ' ';
+ const endRowTargetSAC = ' | ';
+ const rowTargetPAC = ' ';
+ const endRowTargetPAC = ' | ';
+ const rowTargetBAC = ' ';
+ const endRowTargetBAC = ' | ';
+ const titleTargetHP = ' Target HP | '
+ const rowTargetHP = ' ';
+ const endTableStyle = ' | ';
+
+ const addDescs = function( txtObj, j, showMore='', rowCols=row1col, rowFrame=row1 ) {
+ let content = '';
+ if (!_.isUndefined(txtObj.desc)) content += (rowCols[(j++)%2]+rowFrame+ txtObj.desc +showMore +endRow1+endRow1col);
+ for (let i=1; i<=9; ++i) {
+ if (!_.isUndefined(txtObj['desc'+i])) content += (rowCols[(j++)%2]+rowFrame+ txtObj['desc'+i] +endRow1+endRow1col);
+ };
+ return content;
+ };
+
+ const maxDiceRoll = function( diceRoll ) {
+ var rollData = diceRoll.match(/(\d+)d(\d+)/i)||fields.ToHitRoll.match(/(\d+)d(\d+)/i)||['1d20',1,20];
+ return {min:(parseInt(rollData[1])||1), max:((parseInt(rollData[1]) * parseInt(rollData[2]))||20)};
+ };
+
+ const RPGMattack = function( txt ) {
+
+ const arReplace = function( txt, ac ) {
+ let arAdj = txt.match(/([-+]?\d+)\[([\s\w\d]+?)=([-+\d\|]+?)\]/i);
+ if (!arAdj || !arAdj.length) return txt;
+ txt = arAdj[3].split('|')[arAdj[1]];
+ txt = '+-'.includes(txt[0]) ? txt : '+'+txt;
+ return '[['+(ac && ac.length ? ac : arAdj[1])+txt+' ['+txt+' ['+arAdj[2]+'] ] ]]';
+ }
+
+ const varReplace = function( str, field ) {
+ var value = '';
+ if (field) {
+ field = field.replace(/[-\s]/g,'_').toLowerCase();
+ value = (/^[-+]?[\d.]+/.test(field)|| _.isUndefined(txtObj[field])) ? parseFloat(field) : parseFloat(txtObj[field].match(/[-+]?[\d.]+/));
+ }
+ return value;
+ }
+
+ const attkDefaults = {title:'', name:'', subtitle:'', ac_hit:'', target_ac:'', attk_type:'', target_sac:'', target_pac:'', target_bac:'', dmg_s:'', dmg_l:'', target_hp:'', target_maxhp:''};
+ const txtObj = _.object([...txt.replace(/[\r\n]/g,'').replace(/\}\}\}/g,'} }}').matchAll(/\{\{(.+?)=(.*?)\}\}/g)].map(v => v.slice(1)).map(v => [v[0].replace(/[-\s]/g,'_').toLowerCase(),v[1]]));
+ const dice_roll = parseInt((txtObj.ac_hit.match(/(\d+)\[Dice roll\]/i) || ['',''])[1]);
+ const toHitRoll = (txt.match(/specs=\[.*?(\d+d\d+),.*\]/im)||['',fields.ToHitRoll])[1];
+ const minMaxRoll = maxDiceRoll(toHitRoll);
+ const isMax = state.attackMaster.naturalRolls && !isNaN(dice_roll) && dice_roll >= minMaxRoll.max;
+ const isMin = state.attackMaster.naturalRolls && !isNaN(dice_roll) && dice_roll <= minMaxRoll.min;
+ const hasDescs = /{{\s*desc\d?\s*=/im.test(txt);
+ var crit = false;
+ var fumble = false;
+ _.defaults(txtObj,attkDefaults);
+ txtObj.target_sac = arReplace( txtObj.target_sac, txtObj.target_ac );
+ txtObj.target_pac = arReplace( txtObj.target_pac, txtObj.target_ac );
+ txtObj.target_bac = arReplace( txtObj.target_bac, txtObj.target_ac );
+ txtObj.attk_type = txtObj.attk_type.toLowerCase();
+ var content = outerFrame;
+
+ if (txtObj.title.length || txtObj.name.length) {
+ content += headerFrame
+ +header1+ txtObj.title+' '+txtObj.name +endHeader1
+ +(txtObj.subtitle ? (subtitle1+ txtObj.subtitle +endSubtitle1) : '')
+ +settings
+ +endHeaderFrame;
+ }
+ if (txtObj.ac_hit != '') {
+ content += ((txtObj.crit_roll || txtObj.fumble_roll || txtObj.ar_adjust || txtObj.target_ac != '' || txtObj.result || hasDescs) ? bodyFrame : lastBodyFrame)
+ +row1col[0]
+ +titleDmgSM
+ +rowAC+ txtObj.ac_hit +endRowAC
+ +titleDmgL
+ +endRow1col
+ +row1col[1]
+ +rowDmgSM+ txtObj.dmg_s +endRowDmgSM
+ +rowDmgL+ txtObj.dmg_l +endRowDmgL
+ +endRow1col
+ +row1col[0]
+ +titleAC
+ +endRow1col
+ +row1col[1]
+ +rowType+ [sImg,pImg,bImg].filter((e,i) => txtObj.attk_type.includes(['s','p','b'][i])).join('') +endRowType
+ +endRow1col
+ +endBodyFrame;
+ }
+ if (txtObj.ar_adjust) {
+ content += ((txtObj.target_ac != '' || txtObj.result || hasDescs) ? bodyFrame : lastBodyFrame)
+ +row1col[0]
+ + rowC + txtObj.ar_adjust + endRowC
+ +endRow1col
+ +endBodyFrame;
+ }
+ if ((txtObj.crit_roll || txtObj.fumble_roll) && !isNaN(dice_roll)) {
+ const crit_roll = parseInt(txtObj.crit_roll);
+ const fumble_roll = parseInt(txtObj.fumble_roll);
+ crit = (crit_roll && (crit_roll <= dice_roll));
+ fumble = (fumble_roll && (fumble_roll >= dice_roll));
+ if (crit || fumble) {
+ content += ((txtObj.target_ac != '' || txtObj.result || hasDescs) ? bodyFrame : lastBodyFrame)
+ +(!crit ? '' : (rowResult[0]+rowC+ (txtObj.crit || 'Critical Hit!') +endRowC+endRowResult))
+ +(!fumble ? '' : (rowResult[1]+rowC+ (txtObj.fumble || 'Fumbled!') +endRowC+endRowResult))
+ +endBodyFrame;
+ }
+ }
+ if (txtObj.target_ac != '') {
+ const target_hp = parseInt(txtObj.target_hp.match(/[-+]?\d+/));
+ const target_maxhp = parseInt(txtObj.target_maxhp.match(/[-+]?\d+/));
+ const heart_url = !(isNaN(target_hp) || isNaN(target_maxhp)) ? heart[Math.min(Math.ceil(8*Math.max(target_hp,0)/target_maxhp),8)] : '';
+ content += ((txtObj.result) ? bodyFrame : lastBodyFrame)
+ +row1col[0]
+ +rowTargetAC+ txtObj.target_ac +endRowTargetAC
+ +titleTargetHP
+ +endRow1col
+ +row1col[1]
+ +rowTargetSAC+ txtObj.target_sac +endRowTargetSAC
+ +rowTargetPAC+ txtObj.target_pac +endRowTargetPAC
+ +rowTargetBAC+ txtObj.target_bac +endRowTargetBAC
+ +rowTargetHP + 'background-image: url('+heart_url+');">' +endRowTargetHP
+ +endRow1col
+ +endBodyFrame;
+ }
+ if (txtObj.result || ((isMax || isMin) && !(crit || fumble))) {
+ let result = isMax || crit;
+ if (txtObj.result) {
+ const test = txtObj.result.match(/([\w\s_.+-]+?|[-+]?[\d.]+?)((?:<=|>=|<|>|=|<>|!=))(.+)/);
+ if (test) {
+ const field1 = test[1].replace(/[-\s]/g,'_').toLowerCase();
+ const field2 = test[3].replace(/[-\s]/g,'_').toLowerCase();
+ const value1 = (/^[-+]?[\d.]+/.test(test[1])|| _.isUndefined(txtObj[field1])) ? parseFloat(test[1]) : parseFloat(txtObj[field1].match(/[-+]?[\d.]+/));
+ const value2 = (/^[-+]?[\d.]+/.test(test[3])|| _.isUndefined(txtObj[field2])) ? parseFloat(test[3]) : parseFloat(txtObj[field2].match(/[-+]?[\d.]+/));
+ switch (test[2]) {
+ case '=': result = value1 == value2; break;
+ case '<': result = value1 < value2; break;
+ case '>': result = value1 > value2; break;
+ case '<=': result = value1 <= value2; break;
+ case '>=': result = value1 >= value2; break;
+ case '<>': result = value1 != value2; break;
+ case '!=': result = value1 != value2; break;
+ default: result = false;
+ }
+ if (state.attackMaster.weapRules.naturals) result = (result || isMax) && !isMin;
+ if (state.attackMaster.weapRules.criticals) result = (result || crit) && !fumble;
+ if (txtObj.successcmd && txtObj.successcmd.length && result) {
+ while (/%%[_\d\w\+-]+?%%/.test(txtObj.successcmd)) txtObj.successcmd = txtObj.successcmd.replace( /%%([_\d\w\+-]+?)%%/, varReplace );
+ _.each(txtObj.successcmd.split(' '),cmd => LibFunctions.sendAPI(LibFunctions.parseStr(cmd)));
+ } else if (txtObj.failcmd && txtObj.failcmd.length && !result) {
+ while (/%%[_\d\w\+-]+?%%/.test(txtObj.failcmd)) txtObj.failcmd = txtObj.failcmd.replace( /%%([_\d\w\+-]+?)%%/, varReplace );
+ _.each(txtObj.failcmd.split(' '),cmd => LibFunctions.sendAPI(LibFunctions.parseStr(cmd)));
+ };
+ }
+ };
+ content += (hasDescs ? bodyFrame : lastBodyFrame)
+ +rowResult[result ? 0 : 1]+rowC+''+ ((isMax || crit) ? 'Natural '+dice_roll : ((isMin || fumble) ? 'Natural '+dice_roll : (result ? 'Success' : 'Failure'))) +''+endRowC+endRowResult
+ +endBodyFrame;
+ }
+ if (hasDescs) {
+ content += lastBodyFrame
+ +addDescs(txtObj,1)
+ +endBodyFrame;
+ }
+ content += endOuterFrame;
+ return content;
+ };
+
+ const RPGMspell = function( txt, preamble ) {
+ const spellDefaults = {prefix:'', title:'', name:'', splevel:'', school:'', range:'', components:'', duration:'', time:'', aoe:'', save:'', effects:''};
+ let k=1;
+ const txtObj = _.object([...txt.replace(/[\r\n]/g,'').matchAll(/\{\{(.+?)=(.*?)\}\}/g)].map(v => v.slice(1)).map(v => [v[0].replace(/[-\s]/g,'_').toLowerCase(),v[1]]));
+ const isLooksLike = !isGM && !!txtObj.looks_like;
+ _.defaults(txtObj,spellDefaults);
+ const showMore = /{{hide\d=/img.test(originalTxt);
+ const showLess = /{{desc\d=/img.test(originalTxt);
+ const txtRowID = generateRowID();
+ if (showMore || showLess) showMoreObj[txtRowID] = (preamble+'&{template:'+template+'}'+originalTxt.replace(/{{hide(\d)=/img,'{{reveal$1=').replace(/{{desc(\d)=/img,'{{hide$1=').replace(/{{reveal(\d)=/img,'{{desc$1=') );
+ const showMoreButton = (showMore || showLess) ? (' *show '+(showMore ? 'more' : 'less')+'...*') : '';
+ const hasDescs = !isLooksLike && /{{\s*desc\d?\s*=/im.test(txt);
+ var content = outerFrame
+ +headerFrame
+ +header2+ (!isLooksLike ? txtObj.prefix : '')+' '+txtObj.title+' '+(!isLooksLike ? txtObj.name : '')+endHeader2
+ +(!isLooksLike ? (subtitle2+ txtObj.splevel +' * '+ txtObj.school +endSubtitle2) : '')
+ +settings
+ +endHeaderFrame
+ +lastBodyFrame
+ +(!isLooksLike ? (
+ row2col[++k%2]+rowL+'Range '+ txtObj.range +endRowL
+ +rowR+'Components '+ txtObj.components +endRowR+endRow2col
+ +row2col[++k%2]+rowL+'Duration '+ txtObj.duration +endRowL
+ +rowR+'Casting Time '+ txtObj.time +endRowR+endRow2col
+ +row2col[++k%2]+rowL+'Area of Effect '+ txtObj.aoe +endRowL
+ +rowR+'Saving Throw '+ txtObj.save +endRowR+endRow2col
+ +(txtObj.healing ? (row2col[++k%2]+rowC2+'Healing: '+ txtObj.healing +endRowC2+endRow2col) : '')
+ +(txtObj.damage ? (row2col[++k%2]+rowC2+'Damage: '+ txtObj.damage +endRowC2+endRow2col) : '')
+ +(txtObj.reference ? (row2col[++k%2]+rowC2+'Reference: '+ txtObj.reference +endRowC2+endRow2col) : '')
+ +(txtObj.materials ? (row2col[++k%2]+rowC2+'Materials: '+ txtObj.materials +endRowC2+endRow2col) : '')
+ +(txtObj.use ? (row2col[++k%2]+row2+'Use: '+ txtObj.use +endRow2+endRow2col) : '')
+ +(txtObj.learn ? (row2col[++k%2]+row2+'Learn spell: '+ txtObj.learn +endRow2+endRow2col) : '')
+ +(isGM && txtObj.gm_info ? (row2col[++k%2]+row2+'GM Info: '+ txtObj.gm_info +endRow2+endRow2col) : '')
+ ) : '')
+ +(txtObj.looks_like || txtObj.appearance ? (row2col[++k%2]+row2+(!isLooksLike ? 'Looks Like: ' : '')+ (txtObj.looks_like ? txtObj.looks_like : txtObj.appearance) +endRow2+endRow2col) : '')
+ +(!isLooksLike ? (
+ row2col[++k%2]+row2+'Effects: '+ txtObj.effects +showMoreButton +endRow2+endRow2col
+ +addDescs(txtObj,++k,'',row2col,row2)
+ ) : '');
+ +endBodyFrame
+ +endOuterFrame;
+ return content;
+ }
+
+ const RPGMmessage = function( txt ) {
+
+ const txtObj = _.object([...txt.replace(/[\r\n]/g,'').matchAll(/\{\{(.+?)=(.*?)\}\}/g)].map(v => v.slice(1)).map(v => [v[0].replace(/[-\s]/g,'_').toLowerCase(),v[1]]));
+ let content = outerFrame;
+ if (txtObj.name || txtObj.title) {
+ content += headerFrame
+ +header1+ (txtObj.title || '')+(txtObj.name || '') +endHeader1
+ +settings
+ +endHeaderFrame
+ +lastBodyFrame;
+ } else {
+ content += fullBodyFrame;
+ }
+ content += addDescs(txtObj,1)
+ +endBodyFrame
+ +endOuterFrame;
+ return content;
+ }
+
+ const RPGMdefault = function( txt, preamble, isShowMore=true ) {
+
+ var value1, value2;
+
+ const resultTest = function( t ) {
+ let result = false;
+ const test = t.match(/([\w\s_.+-]+?|[-+]?[\d.]+?)((?:<=|>=|<|>|=|<>|!=))(.+)/);
+ if (test) {
+ value1 = (/^[-+]?[\d.]+/.test(test[1])|| _.isUndefined(txtObj[test[1]])) ? parseFloat(test[1]) : parseFloat(txtObj[test[1]].match(/[-+]?[\d.]+/));
+ value2 = (/^[-+]?[\d.]+/.test(test[3])|| _.isUndefined(txtObj[test[3]])) ? parseFloat(test[3]) : parseFloat(txtObj[test[3]].match(/[-+]?[\d.]+/));
+ switch (test[2]) {
+ case '=': result = value1 == value2; break;
+ case '<': result = value1 < value2; break;
+ case '>': result = value1 > value2; break;
+ case '<=': result = value1 <= value2; break;
+ case '>=': result = value1 >= value2; break;
+ case '<>': result = value1 != value2; break;
+ case '!=': result = value1 != value2; break;
+ default: result = false;
+ }
+ }
+ return result;
+ };
+
+ const rollVal = (m,v) => LibFunctions.evalAttr(v);
+
+ const defDefaults = {prefix:'', title:'', name:'', success:'', failure:''};
+ const txtObj = _.object([...txt.replace(/[\r\n]/g,'').matchAll(/\{\{(.+?)=(.*?)\}\}/g)].map(v => v.slice(1)));
+ const isLooksLike = !isGM && /{{\s*Looks\s?Like\s*=.*?}}/im.test(txt);
+ _.defaults(txtObj,defDefaults);
+ const showMore = /{{hide\d=/img.test(originalTxt);
+ const showLess = /{{desc\d=/img.test(originalTxt);
+ const txtRowID = generateRowID();
+ if (isShowMore && (showMore || showLess)) showMoreObj[txtRowID] = (preamble+' &{template:'+template+'}'+originalTxt.replace(/{{hide(\d)=/img,'{{reveal$1=').replace(/{{desc(\d)=/img,'{{hide$1=').replace(/{{reveal(\d)=/img,'{{desc$1=') );
+ const showMoreButton = (isShowMore && (showMore || showLess)) ? (' *show '+(showMore ? 'more' : 'less')+'...*') : '';
+ let content = outerFrame
+ +headerFrame
+ +header1+ (!isLooksLike ? txtObj.prefix : '')+' '+txtObj.title+' '+(!isLooksLike ? txtObj.name : '')+endHeader1
+ +(txtObj.subtitle && !isLooksLike ? (subtitle1+ txtObj.subtitle +endSubtitle1) : '')
+ +settings
+ +endHeaderFrame;
+ content += lastBodyFrame;
+ let j=1, crit=false, fumble=false, result=false;
+
+ _.each(txtObj,(t,k) => {
+ switch (k.dbName()) {
+ case 'result': result = resultTest(t); break;
+ case 'critroll': crit = state.attackMaster.weapRules.criticals && resultTest(t); break;
+ case 'fumbleroll': fumble = state.attackMaster.weapRules.criticals && resultTest(t); break;
+ default: break;
+ }
+ });
+
+ result = !fumble && (crit || result);
+ _.each(txtObj,(t,k) => {
+ t = t.replace(/\/img,tableStyle);
+ t = t.replace(/\<\/table\>/img,endTableStyle);
+ txtObj[k] = t;
+ if (!t || !t.length) return;
+ let key = k.toLowerCase().replace(/\s/g,'');
+ if (key === 'lookslike') {
+ if (!isGM) {
+ content += (row2col[(j++)%2]+row2+ t +endRow2+endRow2col);
+ } else {
+ content += (row2col[(j++)%2]+row2+ '**'+k+'**: '+t +endRow2+endRow2col);
+ }
+ } else if (isLooksLike) {
+ return;
+ } else if (key === 'result' || key === 'crit_roll' || key === 'fumble_roll') {
+ switch (key) {
+ case 'result':
+ if (result) {txtObj.success = (txtObj.Success || txtObj.success).replace(/value1/ig,value1).replace(/value2/ig,value2).replace(/\[\[\d*?\[(.+?)\]\s?\]\]/g,rollVal);}
+ else {txtObj.failure = (txtObj.Failure || txtObj.failure).replace(/value1/ig,value1).replace(/value2/ig,value2).replace(/\[\[\d*?\[(.+?)\]\s?\]\]/g,rollVal);}
+ let resultTxt = (result ? !!txtObj.success.length : !!txtObj.failure.length) ? ' ' : '';
+ content += rowResult[result ? 0 : 1]+row1C+''+ (result ? 'Success' : 'Failure') +''
+ + resultTxt+(result ? txtObj.success : txtObj.failure)+(resultTxt.length?'':'')+endRow1C+endRowResult;
+ if (txtObj.successcmd && txtObj.successcmd.length && result && !crit) {
+ LibFunctions.sendAPI(LibFunctions.parseStr(txtObj.successcmd));
+ } else if (txtObj.failcmd && txtObj.failcmd.length && !result && !fumble) {
+ LibFunctions.sendAPI(LibFunctions.parseStr(txtObj.failcmd));
+ };
+ break;
+ case 'crit_roll':
+ content += (!crit ? '' : (rowResult[0]+row1C+ (txtObj.crit || 'Critical Success!') +endRow1C+endRowResult));
+ if (txtObj.critcmd && txtObj.critcmd.length && crit) LibFunctions.sendAPI(LibFunctions.parseStr(txtObj.critcmd));
+ break;
+ case 'fumble_roll':
+ content += (!fumble ? '' : (rowResult[1]+row1C+ (txtObj.fumble || 'Critical Failure!') +endRow1C+endRowResult));
+ if (txtObj.fumblecmd && txtObj.fumblecmd.length && fumble) LibFunctions.sendAPI(LibFunctions.parseStr(txtObj.fumblecmd));
+ break;
+ }
+ } else if (key === 'use') {
+ content += (row2col[(j++)%2]+row2+ '**'+k+'**: '+t +endRow2+endRow2col);
+ } else if (key.startsWith('hide')) {
+ return;
+ } else if (key.startsWith('section')) {
+ content += row1col[(j++)%2]+row1C+ t +endRow1C+endRow1col;
+ } else if (key === 'gminfo') {
+// if (isGM) content += (row1col[(j++)%2]+rowHeader+ k +endRowHeader+rowBodyC+ t +endRowBodyC+endRow1col);
+ if (isGM) content += (row2col[(j++)%2]+row2+ '**'+k+'**: '+t +endRow2+endRow2col);
+ } else if (!['prefix','name','title','subtitle','successcmd','failcmd','success','failure','crit','fumble','critcmd','fumblecmd','gmdesc'].includes(key) && !key.startsWith('desc')) {
+ content += row1col[(j++)%2]+rowHeader+ k +endRowHeader+rowBodyC+ t +endRowBodyC+endRow1col;
+ }
+ });
+ content += (isLooksLike ? '' : addDescs(txtObj,j,showMoreButton))
+ + endBodyFrame + endOuterFrame;
+ return content;
+ }
+
+ let content;
+ switch (template.toLowerCase()) {
+ case 'rpgmattack':
+ content = RPGMattack( txt );
+ break;
+ case 'rpgmspell':
+ case 'rpgmpotion':
+ case 'rpgmitemspell':
+ case 'rpgmwandspell':
+ case 'rpgmscroll':
+ content = RPGMspell( txt, preamble );
+ break;
+ case 'rpgmmessage':
+ content = RPGMmessage( txt );
+ break;
+ case 'rpgmwarning':
+ case 'rpgmmenu':
+ content = RPGMdefault( txt, preamble, false );
+ break;
+ case 'rpgmweapon':
+ case 'rpgmammo':
+ case 'rpgmarmour':
+ case 'rpgmitem':
+ case 'rpgmring':
+ case 'rpgmwand':
+ case 'rpgmclass':
+ case 'rpgmdefault':
+ content = RPGMdefault( txt, preamble, true );
+ break;
+ default:
+ content = (template ? '&{template:'+template+'}' : '' ) + txt;
+ break;
+ }
+ while (/
/.test(content)) {content = content.replace(/
/mg,' ')};
+ content = (content[0] === '!' ? '' : preamble) + content;
+ setTimeout(() => sendChat(as?as:defaultAs,content,null,{noarchive:!archive, use3d:use3Ddice}), 0);
+ return content;
+ }
+
+ /*
+ * Determine who to send a Response to: use who controls
+ * the character - if no one or if none of the controlling
+ * players are on-line send the response to the GM
+ */
+
+ LibFunctions.sendToWho = function(charCS,senderId,makePublic=false,embedded=false) {
+
+ var to, controlledBy, players, viewerID, isPlayer=LibFunctions.checkPlayersLive( charCS );
+ controlledBy = (!charCS ? '' : charCS.get('controlledby'));
+ if (controlledBy.includes('all')) {
+ to = '';
+ } else if (playerIsGM(senderId) || !charCS || !isPlayer) {
+ to = embedded ? '/w gm ' : '/w gm ';
+ } else if (makePublic) {
+ to = '';
+ } else {
+ to = (embedded ? ('/w "'+charCS.get('name')+'" ') : ('/w "' + charCS.get('name') + '" '));
+ }
+ return to;
+ }
+
+ /*
+ * A more reliable form of function to determine who
+ * to send a Response to: use who controls
+ * the character - if no one or if none of the controlling
+ * players are on-line send the response to the GM
+ */
+
+ LibFunctions.sendMsgToWho = function(charCS,senderId,msg,div='',makePublic=false,embedded=false) {
+
+ var to, controlledBy, players, viewerID, isPlayer=false;
+// match = !embedded ? /(?<=^|}}\s*)^(?!\!|\/)/mg : /(? 0) {
+ controlledBy = controlledBy.split(',');
+ viewerID = (state.roundMaster && state.roundMaster.viewer && state.roundMaster.viewer.is_set) ? (state.roundMaster.viewer.pid || null) : null;
+ players = controlledBy.filter(id => id != viewerID);
+ if (players.length) {
+ isPlayer = _.some( controlledBy, function(playerID) {
+ players = findObjs({_type: 'player', _id: playerID, _online: true});
+ return (players && players.length > 0);
+ });
+ };
+ };
+ if (controlledBy.includes('all')) {
+ to = '';
+ } else if (playerIsGM(senderId) || !charCS || controlledBy.length == 0 || !isPlayer) {
+ to = embedded ? '/w gm ' : '/w gm ';
+ } else if (makePublic) {
+ to = '';
+ } else {
+ to = (embedded ? ('/w "'+charCS.get('name')+'" ') : ('/w "' + charCS.get('name') + '" '));
+ }
+ if (!embedded) msg = msg.replace(/^&{template:/img,(to+div+'$&'))
+ .replace(/^(?!\!|\/)/,('$&'+to+div))
+ .replace(/^\!.*^(?!\!|\/)/mg,('$&'+to+div))
+ .replace(/^\/(?:w|em|ooc|talktomyself|fx|desc|as|emas)\s.*?^(?!\!|\/)/img,('$&'+to+div));
+
+ return embedded ? to : msg;
+ }
+
+ /**
+ * Insert a whisper into a body with a template.
+ * If no template, inserts the whisper at the start of
+ * the first line not starting with an API call.
+ **/
+
+ LibFunctions.insertWhisper = function(to, msg='') {
+ let splitMsg = msg.match(/([^]*?)^.*?((?:&|\\amp|\\amp;){template:.*)/msi);
+ if (!splitMsg || !splitMsg.length > 2) return to+' '+msg;
+ return splitMsg[1]+'\n'+to+' '+splitMsg[2];
+ }
+
+ /**
+ * Send public message with 3d dice rolls (if enabled)
+ */
+
+ LibFunctions.sendPublic = function(msg,charCS,senderId) {
+ if (!msg)
+ {return undefined;}
+ var who;
+
+ if (charCS) {
+ who = 'character|'+charCS.id;
+ } else {
+ who = '';
+ }
+ clearWaitTimer();
+ setTimeout(() => sendChat(who,msg,null,{use3d:use3Ddice}), 0);
+ };
+
+ /**
+ * Send API command to chat
+ */
+ LibFunctions.sendAPI = function(msg, senderId, from='', noSplit=false) {
+ var as;
+ if (!msg) {
+ log('sendMagicAPI: no msg');
+ return undefined;
+ }
+ if (!senderId || senderId.length == 0) {
+ as = '';
+ } else {
+ as = 'player|' + senderId;
+ }
+ let msgArray = noSplit ? [msg] : msg.split(/(?:
|\n)/);
+ _.each(msgArray, m => sendChat(as,m, null,{noarchive:!archive, use3d:use3Ddice}));
+ };
+
+ /**
+ * Send locally parsed feedback to the GM only!
+ */
+ LibFunctions.sendFeedback = function(msg,as,img) {
+ if (!msg)
+ {return;}
+ var gm = findTheGM(),
+ div = ''
+ + '  + ') '
+ + ' ';
+ clearWaitTimer(gm);
+ setTimeout(() => sendChat(('player|'+gm),LibFunctions.sendMsgToWho(null,null,msg,div),null,{noarchive:!archive,use3d:false}), 100); //,use3d:false
+ };
+
+ /**
+ * Sends a response to everyone who controls the character
+ * RED: v0.003 Check the player(s) controlling the character are valid for this campaign
+ * if they are not, send to the GM instead - Transmogrifier can introduce invalid IDs
+ * Also check if the controlling player(s) are online. If they are not
+ * assume the GM is doing some testing and send the message to them.
+ */
+
+ LibFunctions.sendResponse = function(charCS,msg,senderId,as,img) {
+ if (!msg)
+ {return;}
+ if (!charCS || (senderId && playerIsGM(senderId))) {
+ LibFunctions.sendFeedback( msg, as, img );
+ } else {
+ var div = ''
+ + '  + ') '
+ + ' ';
+ clearWaitTimer(senderId);
+ setTimeout(() => sendChat((senderId ? 'player|'+senderId : charCS.get('name')),LibFunctions.sendMsgToWho(charCS,senderId,msg,div),null,{noarchive:!archive, use3d:use3Ddice}), 100);
+ }
+ };
+
+ /*
+ * Send a message to the player (rather than the character)
+ */
+
+ LibFunctions.sendResponseError = function(pid,msg,as,img) {
+ msg = '&{template:'+fields.warningTemplate+'}{{title=Warning!}}{{desc='+msg+'}}';
+ LibFunctions.sendResponsePlayer(pid,msg,as,img);
+ return;
+ }
+
+ /*
+ * Send an error message to the identified player.
+ * If that player is not online, send to the GM
+ */
+
+ LibFunctions.sendResponsePlayer = function(pid,msg,as,img) {
+ if (!pid || !msg)
+ {return null;}
+ var player = getObj('player',pid),
+ to;
+ if (player && player.get('_online')) {
+ to = '/w "' + player.get('_displayname') + '" ';
+ } else {
+ to = '/w gm ';
+ }
+ var content = to
+ + ''
+ + '  + ') '
+ + ' '+msg;
+ clearWaitTimer(pid);
+ setTimeout(() => sendChat((as?as:defaultAs),content,null,{noarchive:false, use3d:use3Ddice}), 100);
+ };
+
+ /*
+ * Send to all players other than those that control the specified character
+ * and/or other than the specified player
+ */
+
+ LibFunctions.sendToOthers = function(pid,msg,as,img,charCS) {
+ if (!msg || (!pid && !charCS))
+ {return null;}
+ let controllers = charCS ? charCS.get('controlledby').split(',') : [];
+ let players = filterObjs(obj => {
+ if (obj.get('_type') != 'player' || obj.id == pid) return false;
+ if (controllers.includes(obj.id)) return false;
+ return obj.get('_online');
+ });
+ _.each(players, p => LibFunctions.sendResponsePlayer(p,msg,as,img));
+ };
+
+ /**
+ * Send a simple error
+ */
+
+ LibFunctions.sendError = function(msg, cmd) {
+ var postErrorMsg = function( msg, cmd ) {
+ var content = '/w GM '
+ + ''
+ + '  '
+ + ' '
+ + errorMsgDiv + 'Error: ' + msg
+ + (cmd ? (' while processing command
' + cmd.content + ' ') : '')
+ + '';
+
+ sendChat(((cmd && cmd.who) ? cmd.who : defaultAs),content,null,{noarchive:false, use3d:false});
+ log('RPGMaster error: '+msg+ (cmd ? (' while processing command '+cmd.content) : ''));
+ };
+ setTimeout(postErrorMsg,500,msg,cmd);
+ };
+
+ /**
+ * Send an error caught by try/catch
+ */
+
+ LibFunctions.sendCatchError = function(apiName,msg,e,cmdStr='') {
+ var postCatchMsg = function(apiName,msg,e,cmdStr) {
+ if (!msg || !msg.content) {msg= {};msg.content = ''};
+ if (!cmdStr) cmdStr = msg.content;
+ log(apiName + ' error: ' + e.name + ', ' + e.message + ' when processing command ' + cmdStr);
+ let who=(getObj('player',msg.playerid)||{get:()=>'API'}).get('_displayname');
+ sendChat(apiName,`/w gm `+
+ ``+
+ ` There was an error while trying to run ${who}'s command: `+
+ ` ${cmdStr}
`+
+ ` Please send me this information so I can make sure this doesn't happen again (triple click for easy select in most browsers.): `+
+ ` `+
+ JSON.stringify({msg:msg, version:version, stack: e.stack, API_Meta})+
+ ` `+
+ ` `
+ )
+ };
+ setTimeout(postCatchMsg,500,apiName,msg,e,cmdStr);
+ };
+
+ /**
+ * Pare a message with ^^...^^ parameters in it and send to chat
+ * This allows character and token names for selected characters to be sent
+ * Must be called with a validated tokenID
+ */
+
+ LibFunctions.sendParsedMsg = function( tid, msg, senderId, msgFrom, t2id ) {
+ var cid, tname, charCS, cname, curToken,
+ parsedMsg = msg;
+
+ curToken = getObj( 'graphic', tid );
+ tname = (curToken ? curToken.get('name') : '');
+ cid = (curToken ? curToken.get('represents') : '');
+ charCS = getObj('character',cid);
+ cname = (charCS ? charCS.get('name') : '');
+
+ parsedMsg = parsedMsg.replace( /\^\^cid\^\^/gi , cid );
+ parsedMsg = parsedMsg.replace( /\^\^tid\^\^/gi , tid );
+ parsedMsg = parsedMsg.replace( /\^\^cname\^\^/gi , cname );
+ parsedMsg = parsedMsg.replace( /\^\^tname\^\^/gi , tname );
+
+ if (t2id) {
+ curToken = getObj( 'graphic', t2id );
+ tname = curToken.get('name');
+ cid = curToken.get('represents');
+ charCS = getObj('character',cid);
+ cname = charCS.get('name');
+
+ parsedMsg = parsedMsg.replace( /\^\^c2id\^\^/gi , cid );
+ parsedMsg = parsedMsg.replace( /\^\^t2id\^\^/gi , t2id );
+ parsedMsg = parsedMsg.replace( /\^\^c2name\^\^/gi , cname );
+ parsedMsg = parsedMsg.replace( /\^\^t2name\^\^/gi , tname );
+ }
+ LibFunctions.sendResponse( charCS, parsedMsg, senderId, msgFrom, null );
+ };
+
+ /*
+ * Check to see if a command string includes a gm roll query. If so,
+ * convert it to a normal roll query and send it to the GM to answer.
+ * Return true if a gm query has been found.
+ */
+
+ LibFunctions.sendGMquery = function( api, command, senderId ) {
+ var rollQuery;
+ if (command.toLowerCase().includes('gm{')) {
+ while ((rollQuery = command.match(/gm{.+?}/i))) {
+ if (!rollQuery || !rollQuery.length) break;
+ rollQuery = rollQuery[0].replace(/gm{/i,'?{').replace(/\//g,'|');
+ rollQuery = LibFunctions.parseStr(rollQuery);
+ command = command.replace(/gm{.+?}/i,rollQuery);
+ };
+ LibFunctions.sendFeedback( '&{template:'+fields.warningTemplate+'}{{title=DM Selection}}{{desc=As DM, you need to make [selections](!'+api+' '+senderId+' --'+command+') for '+getObj('player',senderId).get('_displayname')+'. Press the button and the selections and their reasons will be presented to you in Roll Querys in the centre of the screen.}}');
+ LibFunctions.sendResponsePlayer( senderId, '&{template:'+fields.messageTemplate+'}{{title=DM Selection}}{{desc=Please wait while the DM makes a choice or dice roll.}}' );
+ return true;
+ } else {
+ return false;
+ }
+ };
+
+ /*
+ * Send a formatted "please wait" message to the specified player.
+ */
+
+ LibFunctions.sendWait = function(senderId,timer=500,source='') {
+ if (timer === 0) {
+ clearWaitTimer(senderId);
+ return;
+ } else if (waitList[senderId]) {
+ clearWaitTimer(senderId);
+ }
+ if (playerIsGM(senderId)) {
+ waitList[senderId] = setTimeout(() => {sendChat(defaultAs,('/w GM ' + waitMsgDiv + 'Gathering data - please wait'),null,{noarchive:!archive});
+ clearWaitTimer(senderId);
+ }, timer);
+ } else {
+ var player = getObj('player',senderId),
+ to = '/w "' + (!player ? 'GM' : player.get('_displayname')) + '" ';
+ waitList[senderId] = setTimeout(() => {sendChat('player|'+senderId,(to + waitMsgDiv + 'Gathering data - please wait'),null,{noarchive:!archive, use3d:false});
+ clearWaitTimer(senderId);
+ }, timer);
+ }
+ };
+
+
+ /* ------------------------------- Character Sheet Database Management -------------------------- */
+
+ /*
+ * Check the version of a Character Sheet database against
+ * the current version in the API. Return true if needs updating
+ */
+
+ LibFunctions.checkDBver = function( dbFullName, dbObj, silent ) {
+
+ dbFullName = dbFullName.replace(/_/g,'-');
+
+ var dbCS = findObjs({ type:'character', name:dbFullName },{caseInsensitive:true}),
+ dbVersion = 0.0,
+ msg, versionObj;
+
+ if (!dbCS || !dbCS.length) return true;
+
+ dbCS = dbCS[0];
+ dbVersion = parseFloat(LibFunctions.attrLookup( dbCS, fields.dbVersion ) || dbVersion);
+
+ if (dbVersion < (parseFloat(dbObj.version) || 0)) {log('checkDBver: dB '+dbFullName+' API version='+(parseFloat(dbObj.version) || 0)+', CS version='+dbVersion); return true;}
+
+ msg = dbFullName+' v'+dbVersion+' not updated as is already latest version';
+ if (!silent) LibFunctions.sendFeedback(msg,fields.feedbackName);
+ return false;
+ }
+
+ /*
+ * A function to read the abilities of a database character sheet
+ * and write them to a handout, so they can be cut&pasted to an API
+ * for saving as a new version.
+ */
+
+ LibFunctions.saveDBtoHandout = function( dbName, version, typeFilter='' ) {
+
+ var dbCS = findObjs({ type: 'character', name: dbName })[0] || undefined,
+ objDef,
+ objHeader = '',
+ foundItems = [],
+ dbHandout,csDBlist,
+ reDBdata = {speed:reSpellSpecs.speed,cost:reSpellSpecs.cost,recharge:reSpellSpecs.recharge};
+
+ var encodeStr = (str,encoders=dbEncoders) => encoders.reduce((m, rep) => m.replace(rep[0], rep[1]), str);
+
+ if (!dbCS) {
+ LibFunctions.sendError(('Database '+dbName+' not found'),null);
+ return undefined;
+ }
+ if (!version || !version.length) {
+ version = (parseFloat(LibFunctions.attrLookup( dbCS, fields.dbVersion ) || '1.0') + 0.01).toFixed(2).toString();
+ } else if (version === '=') {
+ version = parseFloat(LibFunctions.attrLookup( dbCS, fields.dbVersion ) || '1.0');
+ }
+ dbHandout = findObjs({ type: 'handout', name: dbName+'-object v'+version });
+
+ if (!dbHandout || !dbHandout.length) {
+ dbHandout = createObj('handout',{name:(dbName+'-object v'+version)});
+ } else {
+ dbHandout = dbHandout[0];
+ }
+
+ objHeader = 'avatar:\''+dbCS.get('avatar')+'\', '
+ + 'version:'+version+', ';
+ objDef = 'db:[';
+ csDBlist = findObjs({ type: 'ability', characterid: dbCS.id });
+
+ _.each( _.sortBy(csDBlist,item => item.get('name')), function( item ) {
+ let itemName = item.get('name');
+ if (foundItems.includes(itemName)) return;
+ foundItems.push(itemName);
+
+ let objData = LibFunctions.resolveData(itemName,dbName,reNotAttackData,null,reDBdata).parsed,
+ objHitData = LibFunctions.resolveData(itemName,dbName,reToHitData,null,reDBdata).parsed,
+ objBody = encodeStr(item.get('action')),
+ objCT = objData.speed || objHitData.speed || 0,
+ objChg = (objData.type !== 'uncharged') ? objData.type : objHitData.type,
+ objCost = objData.cost || objHitData.cost || 0,
+ objType = '',
+ specs = objBody.match(/}}\s*?specs\s*?=(.*?){{/im);
+
+ specs = specs ? [...('['+specs[0]+']').matchAll(reSpecClass)] : [];
+ for (let i=0; i < specs.length; i++) {
+ objType += (objType && objType.length) ? ('|' + specs[i][1]) : specs[i][1];
+ }
+ objType = _.uniq(objType.toLowerCase().split('|')).join('|');
+ if (typeFilter && typeFilter.length && !objType.includes(typeFilter)) return;
+
+ objBody = objBody.replace(/template:2Edefault/i,'template:\'+fields.CSdefaultTemplate+\'')
+ .replace(/template:2Espell/i,'template:\'+fields.CSspellTemplate+\'')
+ .replace(/template:2Eattack/i,'template:\'+fields.CSweaponTemplate+\'')
+ .replace(/template:RPGMdefault/i,'template:\'+fields.defaultTemplate+\'')
+ .replace(/template:RPGMspell/i,'template:\'+fields.spellTemplate+\'')
+ .replace(/template:RPGMweapon/i,'template:\'+fields.weaponTemplate+\'')
+ .replace(/template:RPGMpotion/i,'template:\'+fields.potionTemplate+\'')
+ .replace(/template:RPGMattack/i,'template:\'+fields.targetTemplate+\'')
+ .replace(/template:RPGMammo/i,'template:\'+fields.ammoTemplate+\'')
+ .replace(/template:RPGMarmour/i,'template:\'+fields.armourTemplate+\'')
+ .replace(/template:RPGMitem/i,'template:\'+fields.itemTemplate+\'')
+ .replace(/template:RPGMitemSpell/i,'template:\'+fields.itemSpellTemplate+\'')
+ .replace(/template:RPGMring/i,'template:\'+fields.ringTemplate+\'')
+ .replace(/template:RPGMscroll/i,'template:\'+fields.scrollTemplate+\'')
+ .replace(/template:RPGMwand/i,'template:\'+fields.wandTemplate+\'')
+ .replace(/template:RPGMwandSpell/i,'template:\'+fields.wandSpellTemplate+\'')
+ .replace(/template:RPGMmessage/i,'template:\'+fields.messageTemplate+\'')
+ .replace(/template:RPGMwarning/i,'template:\'+fields.warningTemplate+\'')
+ .replace(/template:RPGMclass/i,'template:\'+fields.classTemplate+\'');
+
+ objDef += '{name:\''+itemName+'\','
+ + 'type:\''+objType+'\','
+ + 'ct:\''+objCT+'\','
+ + 'charge:\''+objChg+'\','
+ + 'cost:\''+objCost+'\','
+ + 'body:\''+objBody+'\'}, ';
+ });
+ objDef += ']}, ';
+ dbHandout.set('notes',objHeader+objDef);
+ LibFunctions.sendFeedback('Extracted '+dbName+' v'+version,fields.feedbackName);
+ LibFunctions.setAttr( dbCS, fields.dbVersion, version );
+ return dbHandout;
+ }
+
+ /*
+ * Check the version of a Character Sheet database and, if
+ * it is earlier than the static data held in this API, update
+ * it to the latest version.
+ */
+
+ LibFunctions.buildCSdb = function( dbFullName, dbObj, typeList, silent ) {
+
+ dbFullName = dbFullName.replace(/_/g,'-');
+
+ const spells = dbObj.type.includes('spell') || dbObj.type.includes('power'),
+ charClass = dbObj.type.includes('class'),
+ rootDB = dbObj.root.toLowerCase();
+
+ var dbVersion = 0.0,
+ dbCS = findObjs({ type:'character', name:dbFullName },{caseInsensitive:true}),
+ errFlag = false,
+ lists = {},
+ foundItems = [],
+ csDBlist, specs, objType, objBody,
+ msg, versionObj, curDB;
+
+ if (LibFunctions.checkDBver( dbFullName, dbObj, silent )) {
+
+ if (dbCS && dbCS.length) {
+ let abilities = findObjs({ _type:'ability', _characterid:dbCS[0].id });
+ _.each( abilities, a => a.remove() );
+ dbCS = dbCS[0];
+ } else {
+ dbCS = createObj( 'character', {name:dbFullName} );
+ }
+
+ let sorted = _.sortBy(dbObj.db,'name');
+
+ _.each(sorted, item => {
+ if (!!item.body && !foundItems.includes(item.name)) {
+ foundItems.push(item.name);
+ item.body = LibFunctions.parseStr(item.body,dbReplacers);
+ if (!LibFunctions.setAbility( dbCS, item.name, item.body )) {
+ errFlag = true;
+ } else {
+ LibFunctions.setAttr( dbCS, [fields.CastingTimePrefix[0]+item.name, 'current'], item.ct );
+ LibFunctions.setAttr( dbCS, [fields.CastingTimePrefix[0]+item.name, 'max'], (spells ? item.cost : item.charge) );
+ LibFunctions.addMIspells( dbCS, item );
+ item.type.dbName().split('|').filter(t => !!t).map(t => {
+ let listType = typeList[t] ? typeList[t].type.toLowerCase() : (typeList.miscellaneous ? typeList.miscellaneous.type.toLowerCase() : undefined);
+ if (listType) {
+ if (!lists[listType]) lists[listType] = [];
+ if (!lists[listType].includes(item.name)) {
+ lists[listType].push(item.name);
+ }
+ } else if (_.isUndefined(listType)) {
+ LibFunctions.sendError(('Unable to identify item type '+t+' when updating '+item.name+' in database '+dbFullName));
+ };
+ });
+ };
+ };
+ });
+ if (errFlag) {
+ LibFunctions.sendError( ('Unable to completely update database '+dbFullName) );
+ } else {
+ _.each(typeList, dbList => dbList.field[0].length ? LibFunctions.setAttr( dbCS, [dbList.field[0],'current'], (lists[dbList.type.toLowerCase()] || ['']).join('|')) : '');
+ LibFunctions.setAttr( dbCS, fields.dbVersion, (dbObj.version || 1.0));
+ dbCS.set('avatar',(dbObj.avatar || ''));
+ dbCS.set('bio',(dbObj.bio || ''));
+ dbCS.set('controlledby',(dbObj.controlledby || 'All'));
+ dbCS.set('gmnotes',(dbObj.gmnotes || ''));
+ let msg = 'Updated database '+dbFullName+' to version '+String(dbObj.version);
+ if (!silent) LibFunctions.sendFeedback( msg, fields.feedbackName ); else log(msg);
+ }
+ }
+ return (errFlag);
+ }
+
+ /**
+ * Create an internal index of items in the databases
+ * to make searches much faster. Index entries indexed by
+ * database root name & short name (name in lower case with
+ * '-', '_' and ' ' ignored). index[0] = abilityID,
+ * index[1] = ct-attributeID
+ * v3.051 Check that other database-handling APIs have finished
+ * updating their databases and performed a handshake
+ **/
+
+ LibFunctions.updateDBindex = function() {
+ var rootDB, magicDB, validDB,
+ db, shortName, attrName, objList,
+ rootList = ['mu_spells_db','pr_spells_db','powers_db','mi_db','race_db','class_db','attacks_db','styles_db','locks_traps_db'],
+ index = {};
+
+ _.each( dbNames, (dbFields, db) => {
+ if (state.MagicMaster.spellRules.denyCustom && db.toLowerCase().includes('custom')) return;
+ _.each( dbFields.db, (item, i) => {
+ rootDB = db.toLowerCase().match( /[a-z_]+?_db/i );
+ if (!item || !item.name) log('updateDBindex: item='+item.name+', i='+i+', unable to create shortName');
+ shortName = item.name.dbName();
+ if (_.isUndefined(index[rootDB])) index[rootDB] = {};
+ if (_.isUndefined(index[rootDB][shortName])) index[rootDB][shortName] = ['',String(item.ct),db,i];
+ });
+ });
+
+ objList = filterObjs( function(obj) {
+ if (obj.get('type') != 'ability') return false;
+ if (!(magicDB = getObj('character',obj.get('characterid')))) {
+ return false;
+ }
+ db = magicDB.get('name').toLowerCase().replace(/-/g,'_');
+ if (/\s*v\d*\.\d*/.test(db)) {
+ return false;
+ }
+ let validDB = false;
+ for (const rDB of rootList) {
+ if (db.startsWith(rDB)) {
+ validDB = true;
+ rootDB = rDB;
+ break;
+ }
+ }
+ if (!validDB) {return false;}
+ let shortName = obj.get('name').dbName();
+
+ if (_.isUndefined(index[rootDB])) {index[rootDB] = {};}
+ if (_.isUndefined(index[rootDB][shortName]) || !index[rootDB][shortName][0].length || !stdDB.includes(db)) {
+ index[rootDB][shortName] = [obj.id,''];
+ }
+ return true;
+ });
+ objList = filterObjs( function(obj) {
+ if (obj.get('type') != 'attribute') {return false;}
+ attrName = obj.get('name');
+ if (!attrName || !attrName.toLowerCase().startsWith('ct-')) {return false;}
+ if (!(magicDB = getObj('character',obj.get('characterid')))) {
+ return false;
+ }
+ db = magicDB.get('name').toLowerCase().replace(/-/g,'_');
+ if (/\s*v\d*\.\d*/.test(db)) {return false;}
+ let validDB = false;
+ for (const rDB of rootList) {
+ if (db.startsWith(rDB)) {
+ validDB = true;
+ rootDB = rDB;
+ }
+ }
+ if (!validDB)
+ {return false;}
+ let shortName = attrName.dbName().substring(2);
+
+ if (!!!index[rootDB][shortName]) {
+ return false;
+ }
+ if (!stdDB.includes(db) || (!!!index[rootDB][shortName][1]) || (index[rootDB][shortName][1].length === 0)) {
+ index[rootDB][shortName][1] = obj.id;
+ };
+ return true;
+ });
+ magicList = {}; // Blank the internal index of items, as it might have changed and needs rebuilding
+// LibFunctions.sendFeedback( waitMsgDiv+'RPGMaster is now ready.' );
+
+ return index;
+ }
+
+ /*
+ * Check a character sheet database and update/create the
+ * required attributes from the definitions. This should
+ * be run after updating or adding item or spell definitions.
+ */
+
+ LibFunctions.checkCSdb = function( dbFullName ) {
+
+ var db = dbFullName.toLowerCase(),
+ lists = {},
+ spellsDB,
+ dbCSlist,
+ dbTypeList;
+
+ var checkObj = function( obj ) {
+ var objCS, objCSname, objName, objBody, type, objCT, objChg, objCost, specs, spellsDB, classDB;
+
+ if (!obj || obj.get('type') !== 'ability') return false;
+ objCS = getObj('character',obj.get('characterid'));
+ if (!objCS) {log('checkObj: not found database object');return false;}
+ objCSname = objCS.get('name').toLowerCase();
+ if (db && db.length && (db !== '-db' && !objCSname.startsWith(db))) return false;
+ if (!objCSname.includes('-db') || (/\s*v\d*\.\d*/.test(objCSname))) return false;
+ objBody = obj.get('action');
+ spellsDB = objCSname.includes('spells') || objCSname.includes('powers');
+ classDB = objCSname.includes('class') || objCSname.includes('race');
+ specs = objBody.match(reSpecs);
+ objName = obj.get('name');
+ if (specs) {
+ dbTypeList = (spellsDB ? spTypeLists : (classDB ? clTypeLists : miTypeLists));
+ specs = specs ? [...('['+specs[0]+']').matchAll(reSpecClass)] : [];
+ for (const i of specs) {
+ type = i[1];
+ if (type && type.length) {
+ let typeList = type.dbName().split('|');
+ for (const t of typeList) {
+ let itemType = dbTypeList[t] ? dbTypeList[t].type : (dbTypeList.miscellaneous ? dbTypeList.miscellaneous.type : undefined);
+ if (itemType) {
+ if (!lists[objCS.id]) lists[objCS.id] = {};
+ if (!lists[objCS.id][itemType]) lists[objCS.id][itemType] = [];
+ if (!lists[objCS.id][itemType].includes(objName)) {
+ lists[objCS.id][itemType].push(objName);
+ };
+ };
+ };
+ };
+ };
+ };
+ objCT = (objBody.match(reDataSpeed) || ['',0])[1];
+ objChg = (objBody.match(reDataCharge) || ['','uncharged'])[1];
+ objCost = (objBody.match(reDataCost) || ['',0])[1];
+ LibFunctions.setAttr( objCS, [fields.CastingTimePrefix[0]+objName, 'current'], objCT );
+ LibFunctions.setAttr( objCS, [fields.CastingTimePrefix[0]+objName, 'max'], (spellsDB ? objCost : objChg) );
+ LibFunctions.addMIspells( objCS, {name:objName,body:objBody} );
+ return true;
+ };
+
+ dbCSlist = filterObjs( obj => checkObj(obj) );
+ if (!dbCSlist || !dbCSlist.length) {
+ LibFunctions.sendFeedback('No databases found with a name that includes '+db,fields.feedbackName);
+ } else {
+ _.each(lists,(types,dbID) => {
+ let dbCS = getObj('character',dbID);
+ _.each(dbTypeList, dbList => {
+ if (types[dbList.type]) {
+ LibFunctions.setAttr( dbCS, [dbList.field[0],'current'], (types[dbList.type].sort().join('|') || '' ));
+ }
+ });
+ });
+ LibFunctions.sendFeedback(((!db || !db.length || db === '-db') ? 'All databases have' : ('Database '+dbFullName+' has')) + ' been updated',fields.feedbackName);
+ }
+ return;
+ }
+
+ /**
+ * Get a new DB index of all Ability Objects stored in
+ * database character sheets
+ **/
+
+ LibFunctions.getDBindex = function(forceUpdate = false) {
+ if (_.isUndefined(DBindex) || forceUpdate) {
+ DBindex = LibFunctions.updateDBindex();
+ }
+ return DBindex;
+ }
+
+ /**
+ * Update or create the help handouts
+ **/
+
+ LibFunctions.updateHandouts = function(handouts,silent,senderId) {
+
+ let classHelp = findObjs({ _type:'handout', name:'Class Database Help' });
+ if (classHelp && classHelp[0]) classHelp[0].remove();
+ _.each(handouts,(obj,k) => {
+ let dbCS = findObjs({ type:'handout', name:obj.name },{caseInsensitive:true});
+ if (!dbCS || !dbCS[0]) {
+ log(obj.name+' not found. Creating version '+obj.version);
+ if (!silent) LibFunctions.sendFeedback(obj.name+' not found. Creating version '+obj.version);
+ dbCS = createObj('handout',{name:obj.name,inplayerjournals:(_.isUndefined(senderId) ? '' : senderId)});
+ dbCS.set('notes',obj.bio.replace('[General DB Help]',General_DB_Help)
+ .replace('[Item Inheritance]',itemInheritance)
+ .replace('[General API Help]',General_API_Help));
+ dbCS.set('avatar',obj.avatar);
+ } else {
+ dbCS = dbCS[0];
+ dbCS.get('notes',function(note) {
+ let reVersion = new RegExp(obj.name+'\\s*?v(\\d+?.\\d*?)', 'im');
+ let version = note.match(reVersion);
+ version = (version && version.length) ? (parseFloat(version[1]) || 0) : 0;
+ if (version >= obj.version) {
+ if (!silent) LibFunctions.sendFeedback('Not updating handout '+obj.name+' as is already version '+obj.version);
+ return;
+ }
+ dbCS.set('notes',obj.bio.replace('[General DB Help]',General_DB_Help)
+ .replace('[Item Inheritance]',itemInheritance)
+ .replace('[General API Help]',General_API_Help));
+ dbCS.set('avatar',obj.avatar);
+ if (!silent) LibFunctions.sendFeedback(obj.name+' handout updated to version '+obj.version);
+ log(obj.name+' handout updated to version '+obj.version);
+ });
+ }
+ });
+ return;
+ }
+
+ /**
+ * Get the handout IDs for all handouts
+ **/
+
+ LibFunctions.getHandoutIDs = function() {
+
+ var handoutObjs = findObjs({ type: 'handout' }),
+ handoutIDs = {};
+ _.each( handoutObjs, h => {
+ let name = h.get('name').replace(/[-_&\s]/g,'');
+ handoutIDs[name] = h.id;
+ });
+ return handoutIDs;
+ };
+
+ /* -------------------------------- Utility Functions ---------------------------- */
+
+ /**
+ * Calculate/roll an attribute value that has a range
+ * Always tries to create a 3 dice bell curve for the value
+ **/
+
+ LibFunctions.calcAttr = function( attr='3:18' ) {
+ let attrRange = attr.split(':'),
+ low = parseInt(attrRange[0]),
+ high = parseInt(attrRange[1]);
+ if (high && !isNaN(low) && !isNaN(high)) {
+ let range = high - (low - 1);
+ if (range === 2) {
+ return low - 1 + randomInteger(2);
+ } else if (range === 3) {
+ return low - 2 + randomInteger(2) + randomInteger(2);
+ } else if (range === 5) {
+ return low - 2 + randomInteger(3) + randomInteger(3);
+ } else if ((range-2)%3 === 0) {
+ return low - 3 + randomInteger(Math.ceil(range/3)+1) + randomInteger(Math.floor(range/3)+1) + randomInteger(Math.floor(range/3)+1);
+ } else if ((range-1)%3 === 0) {
+ return low - 3 + randomInteger(Math.ceil(range/3)) + randomInteger(Math.ceil(range/3)) + randomInteger(Math.ceil(range/3));
+ } else if ((range)%3 === 0) {
+ return low - 3 + randomInteger((range/3)+1) + randomInteger((range/3)+1) + randomInteger(range/3);
+ }
+ }
+ return attr;
+ }
+
+ /**
+ * A function to calculate an internal dice roll
+ */
+
+ LibFunctions.rollDice = function( count, dice, reroll ) {
+ count = parseInt(count || 1);
+ dice = parseInt(dice || 8);
+ reroll = parseInt(reroll || 0);
+ let total = 0,
+ roll;
+ for (let d=0; d= 30) {
+ log('evalAttr: loop count exceeded, returning '+v);
+ return v;
+ }
+ while (rePar.test(v)) v = v.replace(rePar,eval).replace(/\-\-/g,'+').replace(/\+\-/g,'-');
+ v = v.replace(reRange,LibFunctions.calcAttr).replace(/\-\-/g,'+').replace(/\+\-/g,'-');
+ } while (rePar.test(v) || reRange.test(v));
+ v = v.replace(reDice,reRoll).replace(/\-\-/g,'+').replace(/\+\-/g,'-');
+ } while (rePar.test(v) || reRange.test(v) || reDice.test(v));
+ v = v.replace(reMinMax,eval).replace(/\-\-/g,'+').replace(/\+\-/g,'-');
+ } while (rePar.test(v) || reRange.test(v) || reDice.test(v) || reMinMax.test(v));
+ return String(v)+(orig[2] || '');
+ };
+ } catch (e) {
+ LibFunctions.sendError('Invalid attribute value given: calculating "'+orig[0]+'" but only **\'+ - * / ( ) : d r f c ^ v , ;\'** can be used. Current evaluation is '+v);
+// LibFunctions.sendCatchError('LibFunctions',null,e);
+ return v;
+ };
+ };
+
+ /**
+ * Find the player's ID from a player name or a character name,
+ * or if no player name provided, return the GM's ID
+ **/
+
+ LibFunctions.findThePlayer = function(who) {
+ let playerObjs = findObjs({_type:'player',_displayname:who});
+ let GMid = findTheGM();
+ if (!playerObjs || !playerObjs.length) {
+ let charObj = LibFunctions.findCharacter(who);
+ if (charObj) {
+ let playerIds = charObj.get('controlledby').split(',').filter(id => id !== '' && id !== GMid);
+ if (!playerIds || !playerIds.length) return GMid;
+ if (playerIds[0] !== 'all') {
+ let pid = playerIds.find( p => (getObj('player',p) && !!getObj('player',p).get('_online')));
+ if (pid) return pid;
+ }
+ playerObjs = filterObjs(p => (p.get('_type') === 'player' && !!p.get('_online') && p.id !== GMid));
+ }
+ }
+ return (!playerObjs || !playerObjs.length) ? GMid : playerObjs[0].id;
+ };
+
+ /**
+ * Find a Character object given a name only,
+ * returning the first match or undefined
+ */
+
+ LibFunctions.findCharacter = function( name ) {
+ var charObj = findObjs({ _type: 'character' , name: name },{caseInsensitive: true});
+ return ((charObj && charObj.length) ? charObj[0] : undefined);
+ }
+
+ /**
+ * Function to find the ID of a live player
+ * that controls the specified character
+ */
+
+ LibFunctions.checkPlayersLive = function( charCS ) {
+ let playerID, controlledBy = (!charCS ? '' : charCS.get('controlledby'));
+ if (controlledBy.length > 0) {
+ controlledBy = controlledBy.split(',');
+ let viewerID = (state.roundMaster && state.roundMaster.viewer && state.roundMaster.viewer.is_set) ? (state.roundMaster.viewer.pid || null) : null;
+ let players = controlledBy.filter(id => id != viewerID);
+ if (players.length) {
+ playerID = _.find( controlledBy, function(playerID) {
+ players = findObjs({_type: 'player', _id: playerID, _online: true});
+ return (players && players.length > 0);
+ });
+ };
+ };
+ return playerID;
+ };
+
+ /**
+ * A function to return the specified player ID, or
+ * the first live player who controls the character,
+ * or the first live player who controls the token
+ * representing a character, or senderId, or the GM.
+ */
+
+ LibFunctions.fixSenderId = function( args, selected, senderId ) {
+
+ let playerID = args[0] || (selected && selected.length ? selected[0]._id : senderId),
+ playerObj = getObj('player',playerID);
+ if (!playerObj) playerID = LibFunctions.checkPlayersLive( getObj('character',args[0]) );
+ if (!playerID) playerID = LibFunctions.checkPlayersLive( LibFunctions.getCharacter(args[0]) );
+
+ return playerID || senderId;
+ };
+
+ /*
+ * Parse a data string for attribute settings
+ */
+
+ LibFunctions.parseData = function( attributes, reSpecs, def=true, charCS, item='', row='' ) {
+
+ var parsedData = {},
+ val,
+ varRes = ( m, w, v = 'current' ) => LibFunctions.parseStr((LibFunctions.attrLookup( charCS, [fields.ItemVar[0]+item+'+'+row+'-'+w,'current'] ) || '').split('/')[v] || '');
+
+ attributes = String(attributes) || '';
+ if (charCS) while (reVars.test(attributes)) attributes = attributes.replace(reVars,varRes);
+ _.each( reSpecs, spec => {
+ if (_.isUndefined(spec) || _.isUndefined(spec.re)) return;
+ val = attributes.match(spec.re);
+ if (!!val && val.length>1 && val[1].length) {
+ parsedData[spec.field] = (val.length == 3 && val[2]) ? [val[1],val[2]] : val[1];
+ } else if (!def) {
+ parsedData[spec.field] = undefined;
+ } else {
+ parsedData[spec.field] = spec.def;
+ }
+ });
+ return parsedData;
+ }
+
+ /*
+ * Follow an inheritance chain of Class or Race database objects and
+ * consolidate their parsed data and attribute specifications
+ */
+
+ LibFunctions.resolveData = function( name, dBase, reThisData, charCS, reParseTable, row='', quals=[], defBase=true, doneList=[], topItem, debugging=false ) {
+
+ try {
+
+ if (_.isEmpty(reParseTable)) reParseTable = undefined;
+
+ var thisObj, thisSpecs, baseObj, thisData, thisAttr, parsedData,
+ rDB = dBase.toLowerCase().replace(/-/g,'_'),
+ isSpell = rDB.includes('spells_db'),
+ isMI = rDB.startsWith('mi_db'),
+ isRC = !isSpell && !isMI,
+ parseTable = reClassSpecs,
+ baseData = [['']],
+ baseParsed = LibFunctions.parseData( '', (reParseTable || (!isRC ? reSpellSpecs : reClassSpecs)), defBase ),
+ baseAttr = LibFunctions.parseData( '', reAttr, defBase ),
+ debugging = debugging || false, // name.dbName().includes('berserking'),
+ varRes = ( m, w, v = 0 ) => LibFunctions.parseStr((LibFunctions.attrLookup( charCS, [fields.ItemVar[0]+(topItem || name)+'+'+row+'-'+w,'current'] ) || '').split('/')[v] || '');
+
+ if (!name || !name.trim().length || doneList.includes(name.dbName())) throw new Error('resolveData: no name or already processed '+name);
+ thisObj = LibFunctions.abilityLookup( dBase, name, charCS, true );
+ if (!thisObj.obj || !thisObj.obj[1]) throw new Error('resolveData: no definition of '+name+' in '+dBase);
+ doneList.push(name.dbName());
+ thisSpecs = thisObj.specs();
+ if (!thisSpecs || !thisSpecs[0]) throw new Error('resolveData: no Specs in definition of '+name);
+ if (debugging) log('resolveData: weapon '+name+' thisSpecs = '+thisSpecs[0]+', item body = '+thisObj.obj[1].body);
+ baseObj = LibFunctions.resolveData( ((isMI ? thisSpecs[0][5] : thisSpecs[0][4]) || ''), dBase, reThisData, charCS, reParseTable, row, quals, defBase, doneList, (topItem || name), debugging );
+ baseParsed = baseObj.parsed; baseAttr = baseObj.attrs; baseData = baseObj.raw;
+ thisData = thisObj.data(reThisData);
+ if (!thisData || !thisData[0]) thisData = [['']];
+ thisData.forEach( td => {_.each( quals, (q,k) => td[0] = td[0].replace(new RegExp('\\?\\?'+k,'g'),q));});
+ if (debugging) log('resolveData: weapon '+name+' quals = '+quals+', after ??# replacement, thisData.length = '+thisData.length+', thisData = '+thisData);
+ thisData[0][0] = thisData[0][0].replace(/\?\?\d/g,'0');
+ if (isMI || isSpell) {
+ if (debugging && !miTypeLists[thisSpecs[0][2].dbName().split('|')[0]]) log('resolveData: unable to find '+thisSpecs[0][2].dbName().split('|')[0]);
+ switch ((miTypeLists[thisSpecs[0][2].dbName().split('|')[0]] || {type:''}).type) {
+ case 'weapon':
+ case 'ammo':
+ parseTable = reWeapSpecs;
+ break;
+ case 'armour':
+ case 'armor':
+ parseTable = reACSpecs;
+ break;
+ default:
+ parseTable = reSpellSpecs;
+ break;
+ };
+ };
+ while (reVars.test(thisData[0][0])) thisData[0][0] = thisData[0][0].replace(reVars,varRes);
+ parsedData = LibFunctions.parseData( thisData[0][0], (reParseTable || parseTable), false, charCS, name, row );
+ thisAttr = LibFunctions.parseData( (parsedData.cattr || '')+',', reAttr, false, charCS, name, row );
+ if (baseParsed) {
+ if (!parsedData.cattr) {
+ parsedData.cattr = baseParsed.cattr;
+ thisAttr = baseAttr;
+ } else if (baseAttr) {
+ thisAttr = _.mapObject(Object.assign(baseAttr,_.pick(thisAttr,a => !!a)), attr => attr !== '-' ? attr : '');
+ }
+ if (debugging) log('resolveData: baseParsed = '+_.pairs(baseParsed).flat()+', parsedData = '+_.pairs(parsedData).flat());
+ parsedData = _.mapObject(Object.assign(baseParsed,_.pick(parsedData,a => !!a)), attr => attr !== '-' ? attr : '');
+ let dataCount = reIsAttackData.test(thisData[0][0]) ? thisData.length : 1;
+ for (let i=0; i < dataCount; i++) {
+ while (reVars.test(thisData[i][0])) thisData[i][0] = thisData[i][0].replace(reVars,varRes);
+ if (!!baseData.length && i < thisSpecs.length) {
+ thisData[i][0] = '['+_.pairs(Object.assign(
+ _.object(baseData[0][0].replace(/^.*?=\[/,'').replace(/[\[\]]/g,'').split(',').map(v => {v = v.trim().split(':');v[0] = v[0].toLowerCase();return v})),
+ _.object(thisData[i][0].replace(/^.*?=\[/,'').replace(/[\[\]]/g,'').split(',').map(v => {v = v.trim().split(':');v[0] = v[0].toLowerCase();return v}))
+ )
+ ).map(v => v.join(':')).filter(v => v !== ':').join()+']';
+ if (baseData.length > 1) {baseData.shift();} // else {baseData = [['']]};
+ };
+ };
+ }
+ if (debugging)log('resolveData: merged data for '+name+' thisData = '+thisData);
+ if (parsedData.bag || (parsedData.numpowers && parsedData.numpowers[0]!=='=')) thisData = thisData.concat(baseData);
+ if (debugging)log('resolveData: result is '+thisData.length+' long = '+thisData);
+ return {parsed:parsedData, attrs:thisAttr, raw:((thisData[0].length === 1 && thisData[0][0].trim() === '[]') ? '' : thisData)};
+
+ } catch (err) {
+ if (err.message.startsWith('resolveData')) {
+ if (debugging) log(err.message);
+ return {parsed:baseParsed, attrs:baseAttr, raw:baseData};
+ } else {
+ LibFunctions.sendCatchError( 'RPGM Library',null,err,'RPGM Library resolveData()');
+ }
+ }
+ };
+
+ /*
+ * Function to replace special characters in a string
+ */
+
+ LibFunctions.parseStr = function(str='',replaced=replacers){
+ return replaced.reduce((m, rep) => m.replace(rep[0], rep[1]), str);
+ }
+
+ /**
+ * Get valid character from a tokenID
+ */
+
+ LibFunctions.getCharacter = function( tokenID, silent=true ) {
+
+ var curToken,
+ charID,
+ charCS;
+
+ if (!tokenID) {
+ if (!silent) LibFunctions.sendError('Invalid token_id in arguments');
+ return undefined;
+ };
+
+ charCS = getObj( 'character', tokenID );
+ if (charCS) return charCS;
+
+ curToken = getObj( 'graphic', tokenID );
+
+ if (!curToken) {
+ if (!silent) LibFunctions.sendError('Invalid token_id in arguments');
+ return undefined;
+ };
+
+ charID = curToken.get('represents');
+
+ if (!charID) {
+ if (!silent) LibFunctions.sendError(('The token "'+curToken.get('name')+'" does not represent a character sheet'));
+ return undefined;
+ };
+
+ charCS = getObj('character',charID);
+
+ if (!charCS) {
+ if (!silent) LibFunctions.sendError(('The token "'+curToken.get('name')+'" does not represent a character sheet'));
+ return undefined;
+ };
+ return charCS;
+ };
+
+ /*
+ * Get linked values from the right place for this token. These can be
+ * re-mapped by the GM so need to check all links to assess correct
+ * source for a token value
+ */
+
+ LibFunctions.getTokenValue = function( curToken, tokenBar, field, altField, thac0_base ) {
+
+ if (!curToken) return undefined;
+ var charCS = LibFunctions.getCharacter(curToken.id),
+ attr = field[0].toLowerCase(),
+ altAttr = altField ? altField[0].toLowerCase() : 'EMPTY',
+ property = field[1],
+ token_property = (property.toLowerCase() == 'current' ? 'value' : 'max'),
+ linkedToken = false,
+ barName, attrVal, attrObj, attrName, tokenField,
+ fieldIndex = _.isUndefined(state.RPGMaster.tokenFields) ? -1 : state.RPGMaster.tokenFields.indexOf( field[0] );
+
+ if (!charCS) {return undefined;}
+
+ if (_.some( ['bar2_link','bar1_link','bar3_link'], linkName=>{
+ let linkID = curToken.get(linkName);
+ tokenField = linkName;
+ barName == '';
+ if (linkID && linkID.length) {
+ attrObj = getObj('attribute',linkID);
+ if (attrObj) {
+ attrName = attrObj.get('name').toLowerCase();
+ barName = tokenField.substring(0,4);
+ return (attrName == attr) || (attrName == altAttr);
+ }
+ }
+ return false;
+ })) {
+ linkedToken = true;
+ attrVal = parseFloat(curToken.get(barName+'_'+token_property));
+ attrVal = !isNaN(attrVal) ? parseFloat(attrVal) : undefined;
+ }
+ if (isNaN(attrVal) && !linkedToken && fieldIndex >= 0) {
+ attrVal = parseFloat(curToken.get('bar'+(fieldIndex+1)+'_'+token_property));
+ attrName = barName = 'bar'+(fieldIndex+1);
+ }
+ if (isNaN(attrVal) && attr.includes('thac0')) {
+ if (!thac0_base) thac0_base = ['thac0-base','current','20'];
+ attrVal = parseFloat(LibFunctions.attrLookup( charCS, thac0_base ));
+ attrName = thac0_base[0];
+ barName = undefined;
+ }
+ if (isNaN(attrVal)) {
+ attrVal = parseFloat(LibFunctions.attrLookup( charCS, field ));
+ attrName = field[0];
+ barName = undefined;
+ }
+ if (isNaN(attrVal) && altField) {
+ attrVal = parseFloat(LibFunctions.attrLookup( charCS, altField ));
+ attrName = altField[0];
+ }
+ return {val:attrVal, name:(isNaN(attrVal) ? undefined : attrName), barName:(barName || attrName)};
+ }
+
+ /*
+ * Create an array of class objects for the classes
+ * of the specified character.
+ */
+
+ LibFunctions.classObjects = function( charCS, senderId, parseTable ) {
+
+ try {
+ var charLevels = ((_.filter( fields, (elem,l) => {return l.toLowerCase().includes('_level')}).filter( elem => 0 < (LibFunctions.attrLookup( charCS, elem ) || 0))) || fields.Fighter_level);
+ var charClass, baseClass, charLevel, isCreature = false, isClass = false, dB = fields.ClassDB;
+
+ var classDef = _.filter( classLevels, a => {
+ return _.some( charLevels, b => {
+ return (a[1].includes(b[0]))
+ })
+ })
+ .map( elem => {
+ charClass = LibFunctions.attrLookup(charCS,elem[0]) || '';
+ charLevel = LibFunctions.attrLookup( charCS, elem[1] ) || 0;
+ if (elem[0][0] == fields.Wizard_class[0]) {
+ baseClass = 'wizard';
+ } else if (elem[0][0] == fields.Priest_class[0]) {
+ baseClass = 'priest';
+ } else if (elem[0][0] == fields.Rogue_class[0]) {
+ baseClass = 'rogue';
+ } else if (elem[0][0] == fields.Psion_class[0]) {
+ baseClass = 'psion';
+ } else if (elem[1][0] == fields.Fighter_level[0] && charLevel > 0) {
+ baseClass = 'warrior';
+ } else if (elem[1][0] == fields.Monster_hitDice[0]) {
+ let monsterHD = parseInt(LibFunctions.attrLookup( charCS, fields.Monster_hitDice )) || 0,
+ monsterHPplus = parseInt(LibFunctions.attrLookup( charCS, fields.Monster_hpExtra )) || 0,
+ monsterIntField = LibFunctions.attrLookup( charCS, fields.Monster_int ) || '',
+ monsterIntNum = parseInt((monsterIntField.match(/\d+/)||["1"])[0]) || 0,
+ monsterInt = monsterIntField.toLowerCase().includes('non') ? 0 : monsterIntNum;
+ charLevel = Math.ceil((monsterHD + Math.ceil(monsterHPplus/4)) / (monsterInt != 0 ? 1 : 2)); // Calculation based on p65 of DMG
+ baseClass = 'creature';
+ isCreature = true;
+ if (!charClass || !charClass.length) {
+ charClass = LibFunctions.attrLookup(charCS,fields.Race);
+ dB = fields.RaceDB;
+ };
+ if (!charClass || !charClass.length) {
+ charClass = 'creature';
+ dB = fields.ClassDB;
+ };
+
+ } else {
+ baseClass = 'warrior';
+ }
+ isClass = isClass || baseClass !== 'creature';
+ let classObj = LibFunctions.abilityLookup( dB, charClass, charCS, true );
+ if (!charClass.length || !classObj.obj) {
+ charClass = baseClass;
+ classObj = LibFunctions.abilityLookup( dB, baseClass, charCS, true );
+ }
+ return {name:charClass.dbName(), dB:classObj.dB, base:baseClass.dbName(), dBbase:fields.ClassDB, level:charLevel, obj:classObj.obj};
+ });
+ if (isCreature && isClass) {classDef = classDef.filter( c => c.base !== 'creature')};
+ if (_.isUndefined(classDef) || !classDef.length) classDef = [{name:'creature', dB:fields.RaceDB, base:'warrior', dBbase:fields.ClassDB, level:0, obj:LibFunctions.abilityLookup( fields.ClassDB, 'creature', charCS ).obj}];
+ classDef = classDef.map(c => {let d = LibFunctions.resolveData((c.name || charClass), (c.dB || dB), reData, null, parseTable); c.classData = d.parsed; c.attrData = d.attrs; c.rawData = d.raw; return c});
+
+ } catch (e) {
+ LibFunctions.sendCatchError( 'RPGM Library',(senderId ? msg_orig[senderId] : null),e,'RPGM Library classObjects()');
+ }
+ return classDef;
+ };
+
+ /*
+ * Determine if a particular item type or superType is an
+ * allowed type for a specific class.
+ */
+
+ LibFunctions.classAllowedItem = function( charCS, wname, wt, wst, allowedItemsByClass ) {
+
+ wt = wt ? wt.dbName() : '-';
+ wst = wst ? wst.dbName() : '-';
+ wname = wname ? wname.dbName() : '-';
+ allowedItemsByClass = allowedItemsByClass.dbName();
+
+ var typeDefaults = {weaps:'any',ac:'any',sps:'any',spm:'',spb:'',align:'any',race:'any'},
+ itemType = !_.isUndefined(typeDefaults[allowedItemsByClass]) ? allowedItemsByClass : 'weaps',
+ forceFalse = false,
+ reItemSpecs = { weapons: reClassSpecs.weapons,
+ armour: reClassSpecs.armour,
+ majorsphere:reClassSpecs.majorsphere,
+ minorsphere:reClassSpecs.minorsphere,
+ bannedsphere:reClassSpecs.bannedsphere,
+ alignment: reClassSpecs.alignment,
+ race: reClassSpecs.race,
+ };
+
+ var classAllowed = LibFunctions.classObjects( charCS ).some( elem => {
+ if (wt.includes('innate') || wst.includes('innate')) return true;
+
+ if (!elem.obj) return false;
+ let allowedItems = (elem.classData[itemType] || typeDefaults[itemType]).toLowerCase().replace(reIgnore,'').split('|');
+ return allowedItems.reduce((p,c) => {
+ let item = '!+'.includes(c[0]) ? c.slice(1) : c,
+ found = item.includes('any') || (wt.includes(item) || wst.includes(item) || (wt=='-' && wst=='-' && wname.includes(item)));
+ forceFalse = (forceFalse || (c[0] === '!' && found)) && !(c[0] === '+' && found);
+ return (p || found) && !forceFalse;
+ }, false);
+ }),
+ raceAllowed = true;
+
+ forceFalse = false;
+ let allowedItems = LibFunctions.resolveData( (LibFunctions.attrLookup( charCS, fields.Race ) || 'human'), fields.RaceDB, reClassRaceData, charCS, reItemSpecs, '', [], true, [] ).parsed[itemType];
+ if (!allowedItems || !allowedItems.length) {
+ allowedItems = typeDefaults[itemType];
+ }
+ allowedItems = allowedItems.dbName().split('|');
+ raceAllowed = allowedItems.reduce((p,c) => {
+ let item = '!+'.includes(c[0]) ? c.slice(1) : c,
+ found = item.includes('any') || (wt.includes(item) || wst.includes(item) || (wt=='-' && wst=='-' && wname.includes(item)));
+ forceFalse = (forceFalse || (c[0] === '!' && found)) && !(c[0] === '+' && found);
+ return (p || found) && !forceFalse;
+ }, false);
+ return (classAllowed && raceAllowed);
+ };
+
+ /*
+ * For magic items that have stored spells or powers, extract
+ * these from the MI definition and create or update the
+ * related character sheet database attribute.
+ */
+
+ LibFunctions.addMIspells = function( dbCS, dbItem ) {
+
+ var itemData = LibFunctions.resolveData( dbItem.name, fields.MagicItemDB, reNumSpellsData ).raw,
+ itemSpells = itemData ? [...('['+itemData+']').matchAll(/\[.+?\]/g)] : [],
+ spellSet = {MU:[[],[]],PR:[[],[]],PW:[[],[]],AB:[[],[]]};
+
+ _.each(itemSpells, spell => {
+ let parsedData = LibFunctions.parseData( spell[0], reSpellSpecs );
+ if (parsedData && parsedData.spell && ['MU','PR','PW','AB'].includes(parsedData.spell.toUpperCase())) {
+ let spellType = parsedData.spell.toUpperCase();
+ spellSet[spellType][0].push(parsedData.name);
+ spellSet[spellType][1].push((spellType == 'PW') ? (parsedData.perDay+'.'+parsedData.perDay) : (parsedData.level+'.0'));
+ }
+ });
+ if (spellSet.PW[0].length) {
+ LibFunctions.setAttr( dbCS, [fields.ItemPowersList[0]+dbItem.name,fields.ItemPowersList[1]], spellSet.PW[0].join() );
+ if (spellSet.PW[1].length) {
+ LibFunctions.setAttr( dbCS, [fields.ItemPowerValues[0]+dbItem.name,fields.ItemPowerValues[1]], spellSet.PW[1].join() );
+ }
+ }
+ if (spellSet.PR[0].length) {
+ LibFunctions.setAttr( dbCS, [fields.ItemPRspellsList[0]+dbItem.name,fields.ItemPRspellsList[1]], spellSet.PR[0].join() );
+ if (spellSet.PR[1].length) {
+ LibFunctions.setAttr( dbCS, [fields.ItemPRspellValues[0]+dbItem.name,fields.ItemPRspellValues[1]], spellSet.PR[1].join() );
+ }
+ }
+ if (spellSet.MU[0].length) {
+ LibFunctions.setAttr( dbCS, [fields.ItemMUspellsList[0]+dbItem.name,fields.ItemMUspellsList[1]], spellSet.MU[0].join() );
+ if (spellSet.MU[1].length) {
+ LibFunctions.setAttr( dbCS, [fields.ItemMUspellValues[0]+dbItem.name,fields.ItemMUspellValues[1]], spellSet.MU[1].join() );
+ }
+ }
+ return spellSet;
+ }
+
+ /**
+ * String together the value of the specified item type from
+ * all databases with the specified root name, separated
+ * by |. This is used to get a complete list of available
+ * magic spell or item macros across all databases of a
+ * specific type.
+ **/
+
+ LibFunctions.getMagicList = function( rootDB, mapObj, objType, senderId, defList='', other=false, otherMsg='Specify', alphabet=false ) {
+
+ objType = _.isArray(objType) ? objType.join('-').toLowerCase() : objType.toLowerCase();
+ if (!magicList[rootDB] || !magicList[rootDB][objType] || magicList[rootDB][objType].alpha != alphabet) {
+
+ var list = [],
+ alphaList = [],
+ rDB = rootDB.toLowerCase().replace(/-/g,'_'),
+ typeList;
+
+ var addItemToList = function( objIndex, objName, mapObj, objType ) {
+ var error = false;
+ try {
+ var typeList;
+ if (objIndex[0].length) {
+ let obj = getObj('ability',objIndex[0]);
+ if (!obj) return true;
+ let objDef = obj.get('action');
+ let specs = objDef.match(reSpecs);
+ specs = specs ? [...('['+specs[0]+']').matchAll(reSpecsAll)] : [];
+
+ outer_block: {
+ for (const s of specs) {
+ typeList = s[2].dbName().split('|');
+ if (typeList.includes('format') || typeList.includes('hide')) continue;
+ for (const t of typeList) {
+ if (t==='magic') continue;
+ if ((mapObj[t] && !!mapObj[t].type && objType.includes(mapObj[t].type))
+ || (!mapObj[t] && mapObj.miscellaneous && objType.includes(mapObj.miscellaneous.type))) {
+ let listName = obj.get('name').dispName();
+ let listQuery = !mapObj[t] ? '' : (!mapObj[t].query ? '' : '%%'+mapObj[t].query).replace(/%/g,'%%')
+ .replace(/\&/g,'&')
+ .replace(/\?/g,'?')
+ .replace(/{/g,'&#123;')
+ .replace(/}/g,'&#125;')
+ .replace(/\|/g,'&#124;')
+ .replace(/\,/g,'&#44;');
+ list.push(listName+(alphabet ? ',' : ',')+listName+listQuery);
+ break outer_block;
+ }
+ }
+ }
+ }
+ } else {
+ typeList = dbNames[objIndex[2]].db[objIndex[3]].type.dbName().split('|');
+ if (typeList.includes('format') || typeList.includes('hide')) return error;
+
+ for (const t of typeList) {
+ if (t === 'magic') continue;
+ if ((mapObj[t] && !!mapObj[t].type && objType.includes(mapObj[t].type))
+ || (!mapObj[t] && mapObj.miscellaneous && objType.includes(mapObj.miscellaneous.type))) {
+ let listName = dbNames[objIndex[2]].db[objIndex[3]].name.dispName();
+ let listQuery = !mapObj[t] ? '' : (!mapObj[t].query ? '' : '%%'+mapObj[t].query).replace(/%/g,'%%')
+ .replace(/\&/g,'&')
+ .replace(/\?/g,'?')
+ .replace(/{/g,'&#123;')
+ .replace(/}/g,'&#125;')
+ .replace(/\|/g,'&#124;')
+ .replace(/\,/g,'&#44;');
+ list.push(listName+(alphabet ? ',' : ',')+listName+listQuery);
+ break;
+ }
+ }
+ }
+ } catch (e) {
+ log('LibFunction getMagicList: JavaScript '+e.name+': '+e.message+' while processing object '+objName);
+ LibFunctions.sendCatchError('RPGMaster Library',(senderId ? msg_orig[senderId] : null),e);
+ error = true;
+
+ } finally {
+ return error;
+ }
+ };
+
+ if (_.isUndefined(DBindex[rDB])) {
+ for (const db of _.keys(DBindex)) {
+ if (rDB.startsWith(db)) {
+ rDB = db;
+ break;
+ }
+ }
+ }
+ _.each( DBindex[rDB], (objIndex,objName) => {
+ addItemToList( objIndex, objName, mapObj, objType );
+ });
+ if (!list.length || !list[0].length) {
+ list = defList.split('|');
+ }
+ list = _.uniq(list.filter( list => !!list ).sort(),true);
+
+ if (alphabet) {
+ if (_.isBoolean(alphabet)) {
+ for (let i=65; i<=90; i++) {
+ let subList = list.filter( n => n.toUpperCase().charCodeAt(0)==i )
+ .concat(list.filter( n => n.toUpperCase().startsWith('POTION OF ') && n.toUpperCase().charCodeAt(10)==i ),
+ list.filter( n => n.toUpperCase().startsWith('RING OF ') && n.toUpperCase().charCodeAt(8)==i ),
+ list.filter( n => n.toUpperCase().startsWith('SCROLL OF ') && n.toUpperCase().charCodeAt(10)==i ));
+ if (subList && subList.length) {
+ if (subList.length === 1) subList.push(subList[0]);
+ alphaList.push(String.fromCharCode(i)+',?{Choose from |'+(subList.join('|'))+'}');
+ }
+ }
+ } else if (_.isArray(alphabet)) {
+ for (const group of alphabet) {
+ let subList = list.filter( n => n.dbName().startsWith(group.dbName()));
+ if (subList && subList.length) {
+ if (subList.length === 1) subList.push(subList[0]);
+ alphaList.push(group+',?{Choose from |'+(subList.join('|'))+'}');
+ };
+ };
+ };
+ list = alphaList;
+ }
+ if (other) {
+ list.push('Other,?{'+otherMsg+'}');
+ }
+
+ if (!magicList[rootDB]) magicList[rootDB] = {};
+ if (!magicList[rootDB][objType]) magicList[rootDB][objType] = {};
+ magicList[rootDB][objType].list = list.join('|');
+ magicList[rootDB][objType].alpha = alphabet;
+ }
+ return magicList[rootDB][objType].list;
+ };
+
+ /**
+ * Get the displayable type of an item, derived from the
+ * item's database "Specs" field, for display in search-able
+ * containers
+ **/
+
+ LibFunctions.getShownType = function( miObj, row, miAlt ) {
+ var specs = miObj.specs(),
+ mi, miType, miAlt, data;
+ if (specs) {
+ let miClasses = specs.reduce((a,b) => a.concat([b[2]]), []).join('|');
+ let lowerMI = miClasses.toLowerCase();
+
+ mi = miClasses.split('|').find(itemClass => _.isUndefined(miTypeLists[itemClass.dbName()]) || !(['weapon','ammo','armour','armor'].includes(miTypeLists[itemClass.dbName()].type)));
+ if (!mi) {
+ mi = miClasses.split('|').find(itemClass => ['weapon','ammo','armour','armor'].includes(miTypeLists[itemClass.dbName()].type));
+ }
+ miType = miTypeLists[mi.dbName()] ? miTypeLists[mi.dbName()].type : 'miscellaneous';
+ if (!miAlt) miAlt = LibFunctions.resolveData(miObj.obj[1].name,fields.MagicItemDB,reNotAttackData,null,{itemType:reSpellSpecs.itemType},row,null,false).parsed.itemType;
+ specs = specs.find(itemSpecs => itemSpecs[2].toLowerCase().includes(mi.toLowerCase()));
+ switch (miType) {
+ case 'weapon':
+ case 'ammo':
+ mi = miAlt || ((specs || ['','','','','item'])[4]);
+ break;
+ case 'armour':
+ case 'armor':
+ mi = miAlt || ((specs || ['','mi'])[1]);
+ break;
+ case 'miscellaneous':
+ mi = miAlt || mi;
+ break;
+ default:
+ if (mi.toLowerCase() === 'magic') {
+ mi = miAlt || ((specs || ['','','','','item'])[4]);
+ }
+ break;
+ }
+ }
+ return mi.replace(/[-_]/g,' ').replace(/\|/g,'/');
+ };
+
+ /**
+ * Find an item identified as a Power, but which might actually
+ * be in a different database, as powers can be anything magical
+ **/
+
+ LibFunctions.findPower = function( charCS, power, silent=false, def=true ) {
+
+ if (!power || !power.length) return LibFunctions.abilityLookup( fields.PowersDB, '', charCS, true, false );
+
+ const dbList = [['PW-',fields.PowersDB],['MU-',fields.MU_SpellsDB],['PR-',fields.PR_SpellsDB],['MI-',fields.MagicItemDB]];
+
+ var powerType = power.substring(0,3),
+ powerLib;
+
+ if (_.some(dbList,dB=>dB[0]===powerType.toUpperCase())) power = power.slice(powerType.length);
+
+ if (!_.some(dbList, dB => {
+ if (powerType.toUpperCase() === dB[0]) {
+ powerLib = LibFunctions.abilityLookup( dB[1], power, null, true, def );
+ return true;
+ } else {
+ return false;
+ }
+ })) {
+ _.some(dbList, dB => {
+ powerLib = LibFunctions.abilityLookup( dB[1], power, null, true, false );
+ return !_.isUndefined(powerLib.obj);
+ });
+ };
+ if (!powerLib.obj) {
+ powerLib = LibFunctions.abilityLookup( fields.PowersDB, power, charCS, silent, def );
+ }
+ powerLib.name = power;
+ return powerLib;
+ }
+
+ /**
+ * Find and return total level of a character
+ **/
+
+ LibFunctions.characterLevel = function( charCS ) {
+// var level = parseInt((LibFunctions.attrLookup( charCS, fields.Total_level ) || 0),10);
+// if (!level) {
+ var level = Math.max(((parseInt((LibFunctions.attrLookup( charCS, fields.Monster_hitDice ) || 0),10)
+ + ((parseInt((LibFunctions.attrLookup( charCS, fields.Monster_hpExtra ) || 0),10) >= 3) ? 1 : 0)) || 0),
+ ((parseInt((LibFunctions.attrLookup( charCS, fields.Fighter_level ) || 0),10)
+ + parseInt((LibFunctions.attrLookup( charCS, fields.Wizard_level ) || 0),10)
+ + parseInt((LibFunctions.attrLookup( charCS, fields.Priest_level ) || 0),10)
+ + parseInt((LibFunctions.attrLookup( charCS, fields.Rogue_level ) || 0),10)
+ + parseInt((LibFunctions.attrLookup( charCS, fields.Psion_level ) || 0),10)) || 0));
+// }
+ return level;
+ }
+
+ /*
+ * Find and return the level for spell casting.
+ * MU: Wizard_level
+ * PR: Priest_level
+ * POWER or MI: all levels added
+ */
+
+ LibFunctions.caster = function( charCS, casterType ) {
+
+ var level=0, castingLevel=0, charClass, castingClass;
+
+ casterType = casterType.toUpperCase();
+
+ if (casterType == 'MI' || casterType == 'POWER' || casterType == 'PW') {
+ level = LibFunctions.characterLevel( charCS );
+ return {lv:level,cl:'',clv:level,ccl:''};
+ }
+
+ for (const casterData of casterLevels) {
+ charClass = (LibFunctions.attrLookup( charCS, casterData[0] ) || '');
+ castingClass = charClass.dbName();
+ level = LibFunctions.attrLookup(charCS,casterData[1]) || 0;
+ if (level > 0 && (_.isUndefined(spellsPerLevel[castingClass]) || _.isUndefined(spellsPerLevel[castingClass][casterType]))) {
+ if (casterType == 'MU' && casterData[0][0] == fields.Wizard_class[0]) {
+ castingClass = 'wizard';
+ } else if (casterType == 'PR' && casterData[0][0] == fields.Priest_class[0]) {
+ castingClass ='priest';
+ } else {
+ level = 0;
+ }
+ }
+ if (level > 0) break;
+ }
+ if (level>0 && castingClass) {
+ castingLevel = Math.min(Math.max((1+parseInt(level) - spellsPerLevel[castingClass][casterType][0][1]),0),spellsPerLevel[castingClass][casterType][0][2]);
+ if (castingLevel <= 0) castingLevel = -1;
+ };
+ return {lv:level,cl:charClass,clv:castingLevel,ccl:castingClass};
+ };
+
+ /* ---------------------------- Game Rule-Specific Functions -------------------------------- */
+
+ /*
+ * Set the attributes and the dependent mods for a character / NPC
+ * that has not had them previously set, using either the range/roll
+ * specifications in their class & race definitions or default ranges
+ * set by configuration.
+ */
+
+ LibFunctions.handleSetNPCAttributes = function( charCS ) {
+
+ if (state.attackMaster.attrRoll && !LibFunctions.attrLookup( charCS, fields.Strength )) {
+ let monInt = LibFunctions.attrLookup( charCS, fields.Monster_int );
+ let attrData = LibFunctions.resolveData( (LibFunctions.attrLookup( charCS, fields.Race ) || 'human'), fields.RaceDB, reRaceData, charCS, {name:reClassSpecs.name} ).attrs;
+ if (!LibFunctions.attrLookup( charCS, fields.Strength )) LibFunctions.setAttr( charCS, fields.Strength, LibFunctions.evalAttr(attrData.str || (state.attackMaster.attrRestrict ? '8:15' : '3d6')) );
+ if (!LibFunctions.attrLookup( charCS, fields.Dexterity )) LibFunctions.setAttr( charCS, fields.Dexterity, LibFunctions.evalAttr(attrData.dex || (state.attackMaster.attrRestrict ? '7:14' : '3d6')) );
+ if (!LibFunctions.attrLookup( charCS, fields.Constitution )) LibFunctions.setAttr( charCS, fields.Constitution, LibFunctions.evalAttr(attrData.con || (state.attackMaster.attrRestrict ? '7:14' : '3d6')) );
+ if (!LibFunctions.attrLookup( charCS, fields.Intelligence )) LibFunctions.setAttr( charCS, fields.Intelligence, LibFunctions.evalAttr(monInt || attrData.int || (state.attackMaster.attrRestrict ? '7:15' : '3d6')) );
+ if (!LibFunctions.attrLookup( charCS, fields.Wisdom )) LibFunctions.setAttr( charCS, fields.Wisdom, LibFunctions.evalAttr(attrData.wis || (state.attackMaster.attrRestrict ? '7:15' : '3d6')) );
+ if (!LibFunctions.attrLookup( charCS, fields.Charisma )) LibFunctions.setAttr( charCS, fields.Charisma, LibFunctions.evalAttr(attrData.chr || (state.attackMaster.attrRestrict ? '7:15' : '3d6')) );
+ };
+
+ let str = LibFunctions.attrLookup( charCS, fields.Strength ) || '';
+ let baseStr = (parseInt((str.match(/(\d+)(?:\(\d*\))?/) || ['','0'])[1]) || 0);
+ let exStr = parseInt(str.match(/d+\((\d*)\)/));
+ if (exStr === 0 || baseStr > 18) {
+ exStr = 100;
+ } else {
+ exStr = (parseInt((exStr || ['','0'])[1]) || 0);
+ }
+ let strIndex = baseStr + Math.max(0,exstrIndex.findIndex(x => x >= exStr));
+ let dexIndex = parseInt(LibFunctions.attrLookup( charCS, fields.Dexterity )) || 0;
+ let conIndex = parseInt(LibFunctions.attrLookup( charCS, fields.Constitution )) || 0;
+ let intIndex = parseInt(LibFunctions.attrLookup( charCS, fields.Intelligence )) || 0;
+ let wisIndex = parseInt(LibFunctions.attrLookup( charCS, fields.Wisdom )) || 0;
+ let chrIndex = parseInt(LibFunctions.attrLookup( charCS, fields.Charisma )) || 0;
+ let fighterFlag = LibFunctions.attrLookup( charCS, fields.Fighter_level ) || 0;
+ _.each( attrMods.str, (s,i) => {
+ if (i === 'opendoor') {
+ LibFunctions.setAttr( charCS, s.field, (String(s.data[0][strIndex]) + (s.data[1][strIndex] ? ('('+s.data[1][strIndex]+')') : '' )));
+ } else {
+ LibFunctions.setAttr( charCS, s.field, s.data[strIndex]);
+ };
+ });
+ _.each( attrMods.dex, d => {
+ LibFunctions.setAttr( charCS, d.field, d.data[dexIndex] );
+ });
+ _.each( attrMods.con, (c,i) => {
+ if (i === (fighterFlag ? 'hpadj' : 'fighthp')) return;
+ LibFunctions.setAttr( charCS, c.field, c.data[strIndex] );
+ });
+ _.each( attrMods.int, (j,i) => {
+ if (i === 'illusion') {
+ for (let lv=1; lv <= intIndex; lv++) {
+ if (j.data[lv]) LibFunctions.setAttr( charCS, [j.field[0]+j.data[lv],j.field[1]], j.data[lv]+'-level' );
+ };
+ } else {
+ LibFunctions.setAttr( charCS, j.field, j.data[intIndex] );
+ };
+ });
+ _.each( attrMods.wis, (w,i) => {
+ if (i === 'wisbonus') {
+ let count = [0,0,0,0,0,0,0,0];
+ for (let lv=1; lv<=wisIndex; lv++) {
+ count[w.data[0][lv]]++;
+ count[w.data[1][lv]]++;
+ };
+ let content = [];
+ for (let lv=1; lv<=7; lv++) {
+ if (count[lv]) content.push(String(count[lv])+'x'+numNames[lv]+'-level');
+ };
+ LibFunctions.setAttr( charCS, w.field, content.join(', ') );
+ } else {
+ LibFunctions.setAttr( charCS, w.field, w.data[wisIndex] );
+ }
+ });
+ _.each( attrMods.chr, c => {
+ LibFunctions.setAttr( charCS, c.field, c.data[intIndex] );
+ });
+ };
+
+ /*
+ * Return the base Thac0 of a character based on class & level
+ */
+
+ LibFunctions.handleGetBaseThac0 = function( charCS, type ) {
+
+ if (!type) {
+ return Math.max(1,Math.min( parseInt(LibFunctions.attrLookup( charCS, fields.MonsterThac0 )) || 20,
+ baseThac0table[0][(LibFunctions.attrLookup( charCS, fields.Fighter_class ).toUpperCase() === 'CREATURE') ? 0 : (LibFunctions.attrLookup( charCS, fields.Fighter_level ) || 0)],
+ baseThac0table[0][(LibFunctions.attrLookup( charCS, fields.Wizard_class ).toUpperCase() === 'CREATURE') ? 0 : (LibFunctions.attrLookup( charCS, fields.Wizard_level ) || 0)],
+ baseThac0table[0][(LibFunctions.attrLookup( charCS, fields.Priest_class ).toUpperCase() === 'CREATURE') ? 0 : (LibFunctions.attrLookup( charCS, fields.Priest_level ) || 0)],
+ baseThac0table[0][(LibFunctions.attrLookup( charCS, fields.Rogue_class ).toUpperCase() === 'CREATURE') ? 0 : (LibFunctions.attrLookup( charCS, fields.Rogue_level ) || 0)],
+ baseThac0table[0][(LibFunctions.attrLookup( charCS, fields.Psion_class ).toUpperCase() === 'CREATURE') ? 0 : (LibFunctions.attrLookup( charCS, fields.Psion_level ) || 0)]
+ ));
+ } else if (!isNaN(type)) {
+ return parseInt(type);
+ } else {
+ type = type.split('=');
+ let fromType = type[0].split('|'),
+ toType = (type[1].toUpperCase() === 'WARRIOR') ? 'F' : (type[1].toUpperCase() || 'F')[0],
+ classNum = toType === 'O' ? 4
+ :(toType === 'W' ? 1
+ :(toType === 'P' ? 2
+ :(toType === 'R' ? 3
+ : 0 ))),
+ thac0 = 20,
+ field;
+
+ _.each( fromType, t => {
+ t = t.toUpperCase()
+ switch ((t.toUpperCase() === 'WARRIOR') ? 'F' : t[0].toUpperCase()) {
+ default: field = fields.Fighter_level;break;
+ case 'W': field = fields.Wizard_level; break;
+ case 'P': field = fields.Priest_level; break;
+ case 'R': field = fields.Rogue_level; break;
+ case 'O': field = fields.Psion_level; break;
+ }
+ thac0 = Math.max(1,Math.min( thac0, baseThac0table[classNum][parseInt(LibFunctions.attrLookup( charCS, field )) || 0]));
+ });
+ return thac0;
+ }
+ }
+
+ /*
+ * Return the rogue level points available to the character specified
+ */
+
+ LibFunctions.rogueLevelPoints = function( charCS, classes ) {
+
+ let rogue = _.find( classes, c => c.base === 'rogue' ),
+ startPts = 0,
+ ptsPerLevel = 0;
+ if (rogue && !isNaN(rogue.classData.roguePts) && (rogue.classData.roguePts != 0)) {
+ startPts = parseInt(rogue.classData.roguePts);
+ ptsPerLevel = (parseFloat(rogue.classData.roguePts) * 100) % 100;
+ } else if (rogue) {
+ switch (rogue.charClass) {
+ case 'bard':
+ startPts = 20;
+ ptsPerLevel = 15;
+ break;
+ case 'assassin':
+ startPts = 40;
+ ptsPerLevel = 20;
+ break;
+ default:
+ startPts = 60;
+ ptsPerLevel = 30;
+ break;
+ };
+ } else {
+ startPts = 0;
+ ptsPerLevel = 0;
+ };
+ LibFunctions.setAttr( charCS, fields.RogueLevelPts, ((startPts-ptsPerLevel)+'+('+ptsPerLevel+'*@{'+fields.Rogue_level[0]+')}'));
+ return (rogue ? ((startPts - ptsPerLevel) + (ptsPerLevel * rogue.level)) : 0);
+ };
+
+ /**
+ * Handle automatically checking the thief skill modifiers for
+ * current race, dexterity & armour.
+ **/
+
+ LibFunctions.handleCheckThiefMods = function( args, senderId, silent = false ) {
+
+ var tokenID = args[0],
+ silent = silent || String(args[1] || '').dbName() === 'silent',
+ charCS = LibFunctions.getCharacter( tokenID ),
+ skillFlags = {pp:false,ol:false,rt:false,ms:false,hs:false,dn:false,cw:false,rl:false,ib:false},
+ blankSkills = {pp:0,ol:0,rt:0,ms:0,hs:0,dn:0,cw:0,rl:0,ib:0,rules:[]},
+ disguiseACData = {pp:-70,ol:-40,rt:-40,ms:-60,hs:-60,dn:-40,cw:-80,rl:0,ib:0},
+ skillMods = {},
+ mods = {},
+ skillText = '',
+ itemText = {},
+ startPts = 0,
+ ptsPerLevel = 0;
+
+ if (!charCS) {
+ // Handle internal error
+ return;
+ };
+
+ var raceData = LibFunctions.resolveData( LibFunctions.attrLookup( charCS, fields.Race ), fields.RaceDB, reRaceData, charCS, reThiefSpecs ).parsed || {},
+ classes = LibFunctions.classObjects( charCS, senderId ),
+ dexData = rogueDexMods[Math.max(0,( LibFunctions.attrLookup( charCS, fields.Dexterity ) - rogueDexMods[0].lv ))] || {},
+ rogue = _.find( classes, c => c.base === 'rogue' ),
+ armourData = LibFunctions.resolveData( LibFunctions.attrLookup( charCS, fields.Armor_trueName ), fields.MagicItemDB, reACData, charCS, reThiefSpecs ).parsed || disguiseACData,
+ maxTotal = 95,
+ minTotal = state.attackMaster.thieveCrit;
+
+ [mods,skillMods,skillFlags,itemText] = LibFunctions.scanItemMods( charCS, {}, {}, blankSkills, skillFlags, reThiefSpecs, {}, silent, false );
+
+ _.each(skillMods, function(s,c) {
+ mods = _.mapObject(mods, function(v,k) {
+ return (_.isUndefined(s[k]) ? v : (skillFlags[k] ? s[k] : (v + s[k])));
+ });
+ });
+ _.each(rogueSkills, skill => {
+ let base = -100;
+ classes.forEach( c => base = Math.max( base, LibFunctions.evalAttr(c.classData[skill.tag] || 0) ));
+ LibFunctions.setAttr( charCS, [skill.factors[0], 'current'], base );
+ LibFunctions.setAttr( charCS, [skill.factors[1], 'current'], LibFunctions.evalAttr(raceData[skill.tag] || 0) );
+ LibFunctions.setAttr( charCS, [skill.factors[2], 'current'], LibFunctions.evalAttr(dexData[skill.tag] || 0) );
+ LibFunctions.setAttr( charCS, [skill.factors[4], 'current'], LibFunctions.evalAttr(armourData[skill.tag] || 0) );
+ LibFunctions.setAttr( charCS, [skill.factors[5], 'current'], (mods[skill.tag] || 0) );
+
+ LibFunctions.setAttr( charCS, skill.save, Math.min(maxTotal,Math.max(minTotal,
+ (base + parseInt(raceData[skill.tag] || 0)
+ + parseInt(dexData[skill.tag] || 0)
+ + parseInt(armourData[skill.tag] || 0)
+ + parseInt(mods[skill.tag] || 0)
+ + parseInt(LibFunctions.attrLookup(charCS,[skill.factors[3], 'current']) || 0)
+ + parseInt(LibFunctions.attrLookup(charCS,[skill.factors[6], 'current']) || 0))
+ )));
+ });
+
+ LibFunctions.rogueLevelPoints( charCS, classes );
+ skillText += _.reduce(itemText, (t,i) => (t + i));
+ return skillText;
+ };
+ /*
+ * Parse the Class Databases to update internal rule tables with
+ * any changes held for specific Class definitions
+ */
+
+ LibFunctions.parseClassDB = function(forceUpdate=false) {
+
+ var doParse = function( rootDB, saveMods ) {
+ let isClass = rootDB === fields.ClassDB,
+ indexDB = rootDB.toLowerCase().replace(/-/g,'_');
+ if (!DBindex[indexDB]) return;
+ for (const ClassName in DBindex[indexDB]) {
+ let def = LibFunctions.abilityLookup(rootDB, ClassName),
+ type = !def.obj ? '' : def.obj[1].type,
+ classSpecs = def.specs(reSpecs) || [['','','','','']],
+ isCreature = type.toLowerCase().includes('creature') || (classSpecs && classSpecs[0] && classSpecs[0][4] && String(classSpecs[0][4]).toLowerCase().includes('creature')),
+ dataObj = LibFunctions.resolveData( ClassName, rootDB, /}}\s*?(?:Class|Race)Data\s*?=(.*?){{/im, null, null, '', [], false );
+
+ if (isClass) {
+ let classType;
+ if (classSpecs && !_.isNull(classSpecs)) {
+ if (classSpecs.some( s => {
+ if (s && s.length >= 5) {
+ classType = String(s[1]||'').dbName();
+ return (((s[4]||'').dbName() == 'wizard' ) && !ordMU.includes(classType) && (dataObj.parsed.specmu == 1));
+ }
+ return false;
+ })) {
+ if (!specMU.includes(classType)) specMU.push(classType);
+ } else {
+ if (!ordMU.includes(classType)) ordMU.push(classType);
+ };
+ };
+ }
+
+ if (dataObj.raw) {
+ for (let r=0; r {
+ pen = pen.toLowerCase().split('=');
+ pen[0] = pen[0].dbName();
+ pen[1] = parseInt(pen[1]) || 0;
+ return pen;
+ });
+ }
+ let rowArray = rowData.toLowerCase().replace(/\[/g,'').replace(/\]/g,'').split(','),
+ svlArray = rowArray.filter(elem => elem.startsWith('svl'));
+
+ if (svlArray && svlArray.length) {
+ svlArray.sort((a,b)=>{parseInt((a.match(/svl(\d+):/)||[0,0])[1])-parseInt((b.match(/svl(\d+):/)||[0,0])[1]);});
+ saveLevels[name] = [];
+ baseSaves[name] = [];
+ let oldLevel = 0,
+ baseIndex = 0;
+ svlArray.forEach(svl => {
+ let sv = svl.match(/svl(\d+):([\d\|]+)/),
+ level = parseInt(sv[1] || 0),
+ saves = (sv[2] || '20|20|20|20|20').split('|');
+ saveLevels[name].length = level+1;
+ saveLevels[name].fill(baseIndex,oldLevel,level+1);
+ if (baseIndex == 0 && level != 0) {
+ baseSaves[name].push([16,18,17,20,19]);
+ baseIndex++;
+ }
+ saves.length = 5;
+ baseSaves[name].push(saves);
+ baseIndex++
+ oldLevel = level+1;
+ });
+ };
+ svlArray = rowArray.filter(elem => {return ((/^\s*sv[a-z0-9]{3}:/.test(elem)) && !(/^\s*svl\d\d:/.test(elem)));});
+ if (svlArray && svlArray.length) {
+ saveMods[name] = {att:'con',par:0.0,poi:0.0,dea:0.0,rod:0.0,sta:0.0,wan:0.0,pet:0.0,pol:0.0,bre:0.0,spe:0.0,str:0.0,con:0.0,dex:0.0,int:0.0,wis:0.0,chr:0.0};
+ svlArray.forEach(svm => {
+ let sv = svm.match(/sv([a-z0-9]{3}):([+-]?\d+\.?\d*|\w{3})(L\d+)?/i);
+ if (sv[1] == 'all') {
+ saveMods[name] = _.mapObject(saveMods[name], (v,k) => {return k != 'att' ? v + (parseFloat(sv[2] || 0) || 0) : v;});
+ } else if (['sav','atr','chk'].includes(sv[1])) {
+ let saves = sv[1] === 'sav' ? saveFormat.Saves : (sv[1] === 'atr' ? saveFormat.Attributes : saveFormat.Checks);
+ _.each(saves, s => saveMods[name][s.tag] = saveMods[name][s.tag] + (parseFloat(sv[2] || 0) || 0));
+ } else {
+ let plv = parseInt(sv[3]) || 1;
+ saveMods[name][sv[1]] = (sv[1] != 'att') ? (String(parseFloat(sv[2] || 0) || 0)+(sv[3] || '')) : (sv[2] || 'con').dbName();
+ };
+ });
+ };
+ svlArray = rowArray.filter(elem => {return /^\s*sv[a-z0-9]{3}\+:/.test(elem);});
+ if (svlArray && svlArray.length) {
+ classSaveMods[name] = {att:'con',par:0.0,poi:0.0,dea:0.0,rod:0.0,sta:0.0,wan:0.0,pet:0.0,pol:0.0,bre:0.0,spe:0.0,str:0.0,con:0.0,dex:0.0,int:0.0,wis:0.0,chr:0.0};
+ svlArray.forEach(svm => {
+ let sv = svm.match(/sv([a-z0-9]{3})\+:([+-]?\d+\.?\d*|\w{3})/);
+ if (_.isUndefined(sv)) return;
+ if (sv[1] == 'all') {
+ classSaveMods[name] = _.mapObject(classSaveMods[name], (v,k) => {return k != 'att' ? v + (parseFloat(sv[2] || 0) || 0) : v;});
+ } else if (['sav','atr','chk'].includes(sv[1])) {
+ let saves = sv[1] === 'sav' ? saveFormat.Saves : (sv[1] === 'atr' ? saveFormat.Attributes : saveFormat.Checks);
+ _.each(saves, s => classSaveMods[name][s.tag] = classSaveMods[name][s.tag] + (parseFloat(sv[2] || 0) || 0));
+ } else {
+ classSaveMods[name][sv[1]] = (sv[1] != 'att') ? (parseFloat(sv[2] || 0) || 0) : (sv[2] || 'con').dbName();
+ }
+ });
+ };
+ };
+ };
+ if (isCreature) {
+ if (!clTypeLists[classSpecs[0][2].toLowerCase()]) clTypeLists[classSpecs[0][2].toLowerCase()] = {type:'creature',field:fields.RaceCreatureList,query:''};
+ if (dataObj.parsed.query && dataObj.parsed.query.length) {
+ let storedQuestions = {NPClevel:['What level NPC?','0%0%0%Not-Prof','1%1%1%Specialist','2%1%1%Specialist','3%1%1%Specialist','4%2%1%Specialist','5%2%1%Specialist','6%2%1%Specialist','7%2%1%Mastery','8%3%2%Mastery','9%3%2%Mastery','10%3%2%Mastery','11%3%2%Mastery','12%4%2%Mastery','13%4%2%Mastery','14%4%3%Mastery','15%4%3%Mastery','16%5%3%Mastery','17%5%3%Mastery','18%5%3%Mastery','19%5%3%Mastery','20%5%3%Mastery']};
+ let query = LibFunctions.parseStr(dataObj.parsed.query).split('|');
+ if (query.length === 1 && !!storedQuestions[query[0]]) query = storedQuestions[query[0]];
+ let question = query.shift();
+ clTypeLists[classSpecs[0][2].toLowerCase()].query = '?{'+question + '|'
+ + query.map( q => {
+ let sq = q.split('%');
+ return sq[0]+','+sq.join('%%');
+ }).join('|')
+ + '}';
+ };
+ };
+ };
+ return;
+ };
+ if (classesParsed && !forceUpdate) return;
+ doParse( fields.ClassDB, classSaveMods );
+ doParse( fields.RaceDB, raceSaveMods );
+ classesParsed = true;
+ LibFunctions.sendFeedback( waitMsgDiv+'RPGMaster is now ready.' );
+
+ return;
+ };
+
+ /*
+ * Scan a particular item definition for effects on saves, or thieving
+ * skills, or any other set of tags passed in.
+ */
+
+ LibFunctions.scanForMods = function( charCS, item, trueItem, classArray, specsArray, dataArray, mods, itemMods, blanks, setFlags, reValues, addedText, silent=false ) { // mods
+ let modsClass = classArray[((classArray.length === 1 || classArray[0] !== 'magic') ? 0 : 1)],
+ dispItem = item.dispName(),
+ types = {par:'sav',poi:'sav',dea:'sav',rod:'sav',sta:'sav',wan:'sav',pet:'sav',pol:'sav',bre:'sav',spe:'sav',str:'atr',con:'atr',dex:'atr',int:'atr',wis:'atr',chr:'atr',pp:'th',ol:'th',rt:'th',ms:'th',hs:'th',dn:'th',cw:'th',rl:'th',ib:'th'},
+ reRules = /[,\[\s]rules:(.*?)[,\s\]]/i,
+ saveMods = [];
+
+ _.each( dataArray, data => {
+ if (!data) return;
+ if (!itemMods[modsClass] || _.size(itemMods[modsClass]) < _.size(blanks)) itemMods[modsClass] = JSON.parse(JSON.stringify(blanks));
+
+ let svRules = (data[0].match(reRules) || ['',''])[1].toLowerCase().replace(/[_\s]/g,'').split('|').map(r => r.replace(/\-/g,(match,i,s)=>(i>0?'':match))),
+ inHand = !svRules.includes('+inhand') || !_.isUndefined(LibFunctions.getTableField( charCS, {}, fields.InHand_table, fields.InHand_trueName ).tableFind( fields.InHand_trueName, trueItem )),
+ worn = !svRules.includes('+worn') || LibFunctions.classAllowedItem( charCS, trueItem, specsArray[0][1].dbName(), specsArray[0][4].dbName(), 'ac' ),
+ conflict = '',
+ testRules = [];
+ let adds = !(_.some(itemMods,(mi,c) => {conflict=c;return (svRules.includes( '-'+c ) || _.some(classArray,mic => {return (mi.rules || []).includes('-'+mic);}))}));
+ if (_.isUndefined(addedText[modsClass]) && (!inHand || !worn || !adds)) addedText[modsClass] = '';
+ if (!inHand && !silent) addedText[modsClass] += '{{'+dispItem+'=Is not currently in hand}}';
+ if (!worn && !silent) addedText[modsClass] += '{{'+dispItem+'=Is not of a usable type}}';
+ if (!adds && !silent) addedText[modsClass] += '{{'+dispItem+'=Does not combine with items of class '+conflict+'}}';
+ if (!inHand || !worn || !adds) return;
+ _.each(_.pick(LibFunctions.parseData( data[0], reValues, false, charCS ), (val,key) => !_.isUndefined(val)), (val,key) => saveMods.push( [(key+':'+val),key,val] ));
+
+ if (!silent && !!saveMods && saveMods.length) {
+ if (!addedText[modsClass]) addedText[modsClass]='';
+ addedText[modsClass] += '{{'+dispItem+'=';
+ };
+
+ _.each( saveMods, m => {
+
+ let n = LibFunctions.evalAttr('-+='.includes(m[2][0]) ? m[2].substring(1) : m[2]);
+ m[2] = ('-+='.includes(m[2][0]) ? m[2][0] : '') + String(n);
+ let saveSpec;
+ let every = m[1] === 'all' || m[1] === 'th',
+ attr = m[1] === 'atr',
+ save = m[1] === 'sav';
+ if (save || every || attr) {
+ let msg = 'All '+(every ? '' : (attr ? 'attribute ' : 'save '))+'mods: '+m[2];
+ if (!silent) addedText[modsClass] += msg;
+ let tempObj = itemMods[modsClass];
+ itemMods[modsClass] = _.mapObject(tempObj, function(v,k) {
+ if (k != 'att' && k != 'rules' && !_.isUndefined(blanks[k])) {
+ if (every || (!!types[k] && types[k] == m[1])) {
+ if ('+-'.includes(m[2][0]) && !setFlags[k]) {
+ return (v+(parseInt(m[2]) || 0));
+ } else if (m[2][0] == '=') {
+ let newVal = parseInt(m[2].substring(1)) || 0;
+ if (setFlags[k]) {
+ return Math.max(v,newVal);
+ } else {
+ setFlags[k] = true;
+ return newVal;
+ }
+ } else if (!setFlags[k]) {
+ return Math.max(v,(parseInt(m[2]) || 0));
+ } else {
+ return v;
+ }
+ } else {
+ return v;
+ }
+ } else {
+ return v;
+ }
+ log('scanForMods: checked everything, should not get here');
+ return v;
+ });
+ } else {
+ if (_.isUndefined(mods[m[1]])) mods[m[1]] = 0;
+ if (_.isUndefined(itemMods[modsClass][m[1]])) itemMods[modsClass][m[1]] = 0;
+ if (_.isUndefined(setFlags[m[1]])) setFlags[m[1]] = false;
+ let v = itemMods[modsClass][m[1]] || 0;
+ if (m[1] != 'att') {
+ if (!silent) addedText[modsClass] += (xlateSave[m[1]] || trueItem)+': '+m[2]+', ';
+ if ('+-'.includes(m[2][0]) && !setFlags[m[1]]) {
+ itemMods[modsClass][m[1]] += (parseInt(m[2]) || 0);
+ } else if (m[2][0] === '=') {
+ let newVal = parseInt(m[2].substring(1)) || 0;
+ if (setFlags[m[1]]) {
+ itemMods[modsClass][m[1]] = Math.max(v,newVal);
+ } else {
+ setFlags[m[1]] = true;
+ itemMods[modsClass][m[1]] = newVal;
+ }
+ } else if (!setFlags[m[1]]) {
+ itemMods[modsClass][m[1]] = Math.max(v,(parseInt(m[2]) || 0));
+ }
+ } else {
+ itemMods[modsClass].att = v;
+ }
+ };
+ });
+ if (!silent && !!saveMods && saveMods.length) addedText[modsClass] += '}}';
+ itemMods[modsClass].rules = itemMods[modsClass].rules ? itemMods[modsClass].rules.concat(svRules) : svRules;
+ });
+ return [mods,itemMods,setFlags,addedText];
+ };
+
+ /*
+ * Scan all items in the character's possession for effects
+ * on saving throws or thieving skills (or any other list of
+ * possible mods passed in).
+ */
+
+ LibFunctions.scanItemMods = function( charCS, mods, itemMods, blanks, itemFlags, reValues, itemText, silent=false, scanArmour=true ) {
+ let ItemNames = LibFunctions.getTableField( charCS, {}, fields.Items_table, fields.Items_name ),
+ currentArmour = LibFunctions.attrLookup( charCS, fields.Armor_trueName ) || 'No Armor',
+ item;
+ for (let itemRow = ItemNames.table[1]; !_.isUndefined(item = ItemNames.tableLookup( fields.Items_name, itemRow, false )); itemRow++) {
+ if (item && item.length && item != '-') {
+ let trueItem = ItemNames.tableLookup( fields.Items_trueName, itemRow );
+ let itemObj = LibFunctions.abilityLookup( fields.MagicItemDB, trueItem, charCS );
+ if (itemObj.obj) {
+ let specsArray = itemObj.specs(/}}\s*specs=\s*?(.*?)\s*?{{/im),
+ miClass = specsArray ? (specsArray[0][2].dbName() || 'magicitem') : 'magicitem';
+
+ if ((miClass.includes('armour') || miClass.includes('armor')) && (!scanArmour || trueItem !== currentArmour)) continue;
+ if (miClass.includes('ring') && miClass.includes('protection')) {
+ let leftRing = LibFunctions.attrLookup( charCS, fields.Equip_leftTrueRing ) || '-',
+ rightRing = LibFunctions.attrLookup( charCS, fields.Equip_rightTrueRing ) || '-';
+ if (![leftRing,rightRing].includes(trueItem)) {
+ if (!silent) itemText.Not_Worn += '{{'+item+'=Is not currently worn}}';
+ continue;
+ }
+ }
+ let itemData = LibFunctions.resolveData( trueItem, fields.MagicItemDB, reNotAttackData, charCS, reValues );
+ [mods,itemMods,itemFlags,itemText] = LibFunctions.scanForMods( charCS, item, trueItem, miClass.dbName().split('|'), specsArray, itemData.raw, mods, itemMods, blanks, itemFlags, reValues, itemText );
+ };
+ };
+ };
+ return [mods,itemMods,itemFlags,itemText];
+ };
+
+ /*
+ * Scan Race, Class, Level and MI data to set the saving throws table
+ * for a particular Token
+ */
+
+ LibFunctions.handleCheckSaves = function( args, senderId, selected, silent=false ) {
+
+ const blankMods = {par:0,poi:0,dea:0,rod:0,sta:0,wan:0,pet:0,pol:0,bre:0,spe:0,str:0,con:0,dex:0,int:0,wis:0,chr:0,rules:[]},
+ reSave = /[,\[\s]sv([a-z0-9]{3}):([-\+\*\/\=\^vfc\d\.;\(\)]+)[,\s\]]/g;
+
+ var tokenID,
+ charCS,
+ attkMenu,
+ msg = '';
+
+ var checkThisSave = function(attkMenu,curToken,senderId,silent,selected) {
+
+ return new Promise(resolve => {
+ try {
+ tokenID = attkMenu ? curToken.id : curToken._id;
+ charCS = LibFunctions.getCharacter( tokenID, true );
+
+ if (!charCS) {
+ log('checkThisSave: invalid charCS');
+ return;
+ }
+
+ var tokenName = getObj('graphic',tokenID).get('name'),
+ classes = LibFunctions.classObjects( charCS ),
+ race = (LibFunctions.attrLookup( charCS, fields.Race ) || 'human').dbName(),
+ ItemNames = LibFunctions.getTableField( charCS, {}, fields.Items_table, fields.Items_name ),
+ saves = [],
+ classSaves, classMods,
+ SaveMods = LibFunctions.getTable( charCS, fieldGroups.MODS ),
+ mods = _.isUndefined(raceSaveMods[race]) ? (_.find(raceSaveMods, (m,k) => race.includes(k)) || raceSaveMods.human) : raceSaveMods[race],
+ raceBonus = _.isUndefined(classSaveMods[race]) ? (_.find(classSaveMods, (m,k) => race.includes(k)) || _.create(blankMods)) : classSaveMods[race],
+ setFlags = {att:false,par:false,poi:false,dea:false,rod:false,sta:false,wan:false,pet:false,pol:false,bre:false,spe:false,str:false,con:false,dex:false,int:false,wis:false,chr:false},
+ miMods = {},
+ skillMods = {},
+ modName,
+ attribute, attrVal, item,
+ addedText = {},
+ itemText = '',
+ content = silent ? '' : '&{template:'+fields.defaultTemplate+'}';
+
+ content += silent ? '' : '{{name='+tokenName+'\'s Saving Throws}}';
+
+ classes.forEach( c => {
+ if (!saveLevels[c.name]) {
+ classSaves = baseSaves[c.base][saveLevels[c.base][Math.min(c.level,saveLevels[c.base].length-1)]];
+ } else {
+ classSaves = baseSaves[c.name][saveLevels[c.name][Math.min(c.level,saveLevels[c.name].length-1)]];
+ }
+ if (!saves || !saves.length) {
+ saves = classSaves;
+ } else {
+ saves = saves.map((v,k)=> Math.min(v,classSaves[k]));
+ }
+ if (!silent) itemText += '{{'+c.obj[1].name+'=Level '+c.level+'='+classSaves+'}}';
+ });
+
+ switch (mods.att.toLowerCase()) {
+ case 'str':
+ attribute = fields.Strength;
+ break;
+ case 'dex':
+ attribute = fields.Dexterity;
+ break;
+ case 'con':
+ attribute = fields.Constitution;
+ break;
+ case 'int':
+ attribute = fields.Intelligence;
+ break;
+ case 'wis':
+ attribute = fields.Wisdom;
+ break;
+ case 'chr':
+ attribute = fields.Charisma;
+ break;
+ default:
+ attribute = undefined;
+ };
+ if (attribute) {
+ attrVal = parseInt(LibFunctions.attrLookup( charCS, attribute )) || -1;
+ } else {
+ attrVal = -1;
+ }
+ let dispBonus = (!silent && (_.some(mods,(m,k)=>!!m && k!='att') || _.some(raceBonus,(m,k)=>!!m && k!='att')));
+ if (dispBonus) itemText += '{{'+LibFunctions.attrLookup( charCS, fields.Race )+'=';
+ mods = _.mapObject(mods,(v,k) => {
+ if (k == 'att') {
+ return v;
+ } else {
+ let saveVal = Math.floor(v != 0 ? (attrVal != -1 ? (attrVal/v) : v) : 0)+raceBonus[k];
+ if (!silent && saveVal != 0) itemText += xlateSave[k]+':'+(saveVal >= 0 ? '+' : '')+saveVal+', ';
+ return saveVal;
+ }
+ });
+ if (dispBonus) itemText += '}}';
+
+ let dexBonus = 0-(parseInt(LibFunctions.attrLookup( charCS, fields.Dex_acBonus )) || 0);
+ if (dexBonus) {
+ mods.dex += dexBonus;
+ itemText += '{{Dexterity of '+LibFunctions.attrLookup( charCS, fields.Dexterity )+'='+(dexBonus > 0 ? 'Bonus' : 'Penalty')+' of '+dexBonus+'}}';
+ }
+
+ classes.forEach( c => {
+ if (c.name === race) c.name = c.base;
+ classMods = classSaveMods[c.name] || classSaveMods[c.base] || classSaveMods.undefined;
+ classMods = _.mapObject(classMods,v=>{
+ let plv = String(v || '').match(/([-\+]?\d+)L(\d+)/i);
+ if (plv && plv[2] != 0) v = plv[1] * Math.ceil(c.level/plv[2]);
+ return parseInt(v);
+ });
+ if (!mods && !mods.length) {
+ mods = classMods;
+ } else {
+ mods = _.mapObject(mods,(v,k)=>{return k != 'att' ? v+classMods[k] : v;});
+ }
+ if (classMods.att) classMods.att = classMods.par;
+ if (!silent && _.some(classMods)) {
+ itemText += '{{'+c.name+' Mods=';
+ let vals = _.chain(classMods).values().uniq().value();
+ if (vals.length == 1) {
+ itemText += 'All mods:'+vals[0];
+ } else {
+ _.mapObject(classMods,(v,k)=> ((k!='att' && v) ? (itemText += xlateSave[k]+':'+v+' ') : ''));
+ }
+ itemText += '}}';
+ }
+ });
+ [mods,miMods,setFlags,addedText] = LibFunctions.scanItemMods( charCS, mods, miMods, blankMods, setFlags, reSaveSpecs, addedText, silent );
+
+ for (let modRow = SaveMods.table[1]; !_.isUndefined(modName = SaveMods.tableLookup( fields.Mods_name, modRow, false )); modRow++) {
+ let saveToken = SaveMods.tableLookup( fields.Mods_tokenID, modRow);
+ let modType = SaveMods.tableLookup( fields.Mods_modType, modRow);
+ if (modName === '-' || (saveToken.length && saveToken !== tokenID) || (modType.length && modType !== 'save')) continue;
+ let curRound = parseInt(SaveMods.tableLookup(fields.Mods_curRound,modRow)) || 0,
+ toRound = parseInt(SaveMods.tableLookup(fields.Mods_round,modRow)) || 0,
+ diff = state.initMaster.round - curRound;
+ if (diff < 0 && !isNaN(toRound) && toRound !== 0) toRound += diff;
+ curRound += diff;
+ let saveCount = SaveMods.tableLookup(fields.Mods_modCount,modRow);
+ if ((saveCount !== '' && saveCount <= 0) || (!isNaN(toRound) && toRound > 0 && toRound < state.initMaster.round)) {
+ SaveMods.addTableRow(modRow);
+ continue;
+ } else if (diff !== 0 && !isNaN(toRound) && toRound > 0) {
+ SaveMods.tableSet(fields.Mods_curRound,modRow,curRound);
+ SaveMods.tableSet(fields.Mods_round,modRow,toRound);
+ };
+ let spellName = SaveMods.tableLookup(fields.Mods_spellName,modRow);
+ let itemName = spellName;
+ if (spellName.trueCompare(modName)) itemName += ':' + modName;
+ [mods,miMods,setFlags,addedText] = LibFunctions.scanForMods( charCS, spellName, modName, spellName.toLowerCase().split('|'), [['','','','','']], [['['+SaveMods.tableLookup(fields.Mods_saveSpec,modRow)+']']], mods, miMods, blankMods, setFlags, reSaveSpecs, addedText, silent );
+ };
+
+ _.each(miMods, function(s,c) {
+ mods = _.mapObject(mods, function(v,k) {
+ return (_.isUndefined(s[k]) ? v : (setFlags[k] ? s[k] : (v + s[k])));
+ });
+ });
+
+ _.each( saveFormat.Saves, (s,k) => {
+ LibFunctions.setAttr( charCS, s.mon, saves[s.index] );
+ LibFunctions.setAttr( charCS, s.save, saves[s.index] );
+ LibFunctions.setAttr( charCS, s.mod, mods[s.tag] );
+ });
+
+ for (let modRow = SaveMods.table[1]; !_.isUndefined(modName = SaveMods.tableLookup( fields.Mods_name, modRow, false )); modRow++) {
+ let saveToken = SaveMods.tableLookup( fields.Mods_tokenID, modRow);
+ let modType = SaveMods.tableLookup( fields.Mods_modType, modRow);
+ if (modName === '-' || (saveToken.length && saveToken !== tokenID) || (modType.length && modType !== 'save')) continue;
+ let tag = SaveMods.tableLookup( fields.Mods_tag, modRow ),
+ basis = SaveMods.tableLookup( fields.Mods_basis, modRow, false ),
+ i = SaveMods.tableLookup( fields.Mods_index, modRow );
+ if (_.isUndefined(mods[tag])) {
+ mods[tag] = 0;
+ setFlags[tag] = false;
+ }
+ if (!_.isUndefined(basis) && !setFlags[tag]) mods[tag] += mods[basis];
+ LibFunctions.setAttr( charCS, [SaveMods.tableLookup( fields.Mods_saveField, modRow ),'current'], saves[i] );
+ LibFunctions.setAttr( charCS, [SaveMods.tableLookup( fields.Mods_modField, modRow ),'current'], mods[tag] );
+ };
+
+ if (!silent) {
+ itemText += _.reduce(addedText, (t,i) => (t + i));
+ content +='{{Saves=';
+ let i = -1,
+ a = [];
+ _.each( saveFormat.Saves, (s,k) => {
+ if (s.index != i) {
+ content += a.join(', ');
+ a = [];
+ content += (i>0?'':'')+'**'+saves[(i=s.index)]+'** | ';
+ }
+ a.push(k+'('+(mods[s.tag]>=0?'+':'')+mods[s.tag]+')');
+ });
+ content += a.join(', ')+' | ';
+ for (let modRow = SaveMods.table[1]; !_.isUndefined(modName = SaveMods.tableLookup( fields.Mods_name, modRow, false )); modRow++) {
+ let saveToken = SaveMods.tableLookup( fields.Mods_tokenID, modRow);
+ let modType = SaveMods.tableLookup( fields.Mods_modType, modRow);
+ if (modName === '-' || (saveToken.length && saveToken !== tokenID) || (modType.length && modType !== 'save')) continue;
+ let tag = SaveMods.tableLookup( fields.Mods_tag, modRow );
+ if (!tag || !tag.length) continue;
+ let index = SaveMods.tableLookup( fields.Mods_index, modRow );
+ content += '**'+saves[index]+'** | '+modName+'('+(mods[tag]>=0?'+':'')+mods[tag]+') | ';
+ };
+
+ content += ' }}';
+ content += '{{Attribute Checks=';
+ _.each( saveFormat.Attributes, (a,k) => content += '**'+LibFunctions.attrLookup(charCS,a.save)+'** | '+k+'('+(mods[a.tag]>=0?'+':'')+mods[a.tag]+') | ');
+ content +=' }}'
+ + ((selected.length == 1) ? itemText : '');
+ };
+ } catch (e) {
+ sendCatchError('RPGM Library',null,e,'RPGM Library handleCheckSaves()');
+ content = '';
+ } finally {
+ setTimeout(() => {
+ resolve(content);
+ }, 1000);
+ };
+ });
+ };
+
+ async function checkAllSaves( args, selected, senderId, silent ) {
+ try {
+ var who = LibFunctions.sendToWho(null,senderId);
+
+ if (attkMenu = (args && args[0])) {
+ selected = [];
+ selected.push(getObj('graphic',args[0]));
+ }
+ let nomenu = args && ((args[2] || '') === 'nomenu');
+
+ for (const token of selected) {
+ if (msg && msg.length) msg += '\n'+who;
+ msg += await checkThisSave( attkMenu, token, senderId, silent, selected );
+ };
+
+ if (!silent && !nomenu && (attkMenu || (args && args[1]))) {
+ if (!msg) msg = '&{template:'+fields.defaultTemplate+'}';
+ msg += '{{desc=[Return to Menu]('+(attkMenu ? ('!attk --button '+(args[1] || 'SAVES')+'|'+args[0]) : ('!cmd --button '+args[1]))+')}}';
+ }
+ if (!silent) {
+ LibFunctions.sendResponse( charCS, msg, senderId );
+ } else {
+ clearWaitTimer(senderId);
+ }
+ return;
+ } catch (e) {
+ sendCatchError( 'RPGM Library', msg_orig[senderId], e);
+ }
+ };
+
+ checkAllSaves( args, selected, senderId, silent );
+ return;
+ }
+
+ /*
+ * Reload all weapons in the InHand tables, to set correct
+ * data after a race, class or level change. Will not work
+ * for weapons entered manually into the weapon tables
+ */
+
+ LibFunctions.handleCheckWeapons = function( tokenID, charCS ) {
+
+ var InHand = LibFunctions.getTable( charCS, fieldGroups.INHAND ),
+ itemIndex = InHand.tableLookup( fields.InHand_index, 0 );
+ if (itemIndex.length && !isNaN(itemIndex)) {
+ LibFunctions.sendAPI('!attk --button PRIMARY|'+tokenID+'|'+itemIndex+'|0||silent');
+ }
+ itemIndex = InHand.tableLookup( fields.InHand_index, 1 );
+ if (itemIndex.length && !isNaN(itemIndex)) {
+ LibFunctions.sendAPI('!attk --button OFFHAND|'+tokenID+'|'+itemIndex+'|1||silent');
+ }
+ itemIndex = InHand.tableLookup( fields.InHand_index, 2 );
+ if (itemIndex.length && !isNaN(itemIndex)) {
+ LibFunctions.sendAPI('!attk --button BOTH|'+tokenID+'|'+itemIndex+'|2||silent');
+ }
+
+ for (let r=3; !_.isUndefined(itemIndex = InHand.tableLookup( fields.InHand_index, r, false )); r++) {
+ if (itemIndex.length && !isNaN(itemIndex)) {
+ LibFunctions.sendAPI('!attk --button HAND|'+tokenID+'|'+itemIndex+'|'+r+'||silent');
+ }
+ }
+ return;
+ }
+
+/* ------------------------------------------------------------ Configuration ------------------------------------------------ */
+
+ /**
+ * Get the configuration for the player who's ID is passed in
+ * or, if the config is passed back in, set it in the state variable
+ **/
+
+ LibFunctions.getSetPlayerConfig = function( playerID, configObj ) {
+
+ if (!state.MagicMaster.playerConfig[playerID]) {
+ state.MagicMaster.playerConfig[playerID]={};
+ }
+ if (!_.isUndefined(configObj)) {
+ state.MagicMaster.playerConfig[playerID] = configObj;
+ };
+ return state.MagicMaster.playerConfig[playerID];
+ };
+
+ /*
+ * Make a configuration menu to allow the DM to select:
+ * - strict mode: follow the rules precisely,
+ * - house rules mode: follow "old fogies" house rules
+ * - no restrictions: allow anything goes
+ */
+
+ LibFunctions.makeConfigMenu = function( args, msg='' ) {
+
+ var configButtons = function( flag, txtOn, cmdOn, txtOff, cmdOff ) {
+ const liveButton = (txt) =>''+txt+' | ',
+ selButton = (txt,cmd) => ''+txt+' | ';
+ var buttons = (flag ? (selButton(txtOn,cmdOn)+liveButton(txtOff)) : (liveButton(txtOn)+selButton(txtOff,cmdOff)));
+// + (flag ? ('['+txtOn+']('+cmdOn+')'+txtOff+'')
+// : (''+txtOn+' | ['+txtOff+']('+cmdOff+')'))
+ return buttons;
+ };
+
+ var content = '&{template:'+fields.menuTemplate+'}{{name=Configure RPGMaster}}{{subtitle=AttackMaster}}'
+ + (msg.length ? '{{ ='+msg+'}}' : '')
+ + '{{desc=Select which configuration you wish for this campaign using the toggle buttons below.}}'
+ + '{{desc1=';
+
+// content += ('undefined' !== typeof MagicMaster ? ('Menus | '+configButtons(state.MagicMaster.fancy, 'Plain menus', '!magic --config fancy-menus|false', 'Fancy menus', '!magic --config fancy-menus|true')+' ') : '');
+ if ('undefined' !== typeof attackMaster) {
+ content += 'Player Targeted Attks | '+configButtons(!state.attackMaster.weapRules.dmTarget, 'Not Allowed', '!attk --config dm-target|true', 'Allowed by All', '!attk --config dm-target|false')+' '
+ + 'Allowed weapons | '+configButtons(state.attackMaster.weapRules.allowAll, 'Restrict Usage', '!attk --config all-weaps|false', 'All Can Use Any', '!attk --config all-weaps|true')+' '
+ + (state.attackMaster.weapRules.allowAll ? '' : ('Restrict weapons | '+configButtons(!state.attackMaster.weapRules.classBan, 'Strict Denial', '!attk --config weap-class|true', 'Apply Penalty', '!attk --config weap-class|false')+' '))
+ + 'Weapon Speed | '+configButtons(!state.attackMaster.weapRules.initPlus, 'Plus affects speed', '!attk --config weap-plus|true', 'Magic Plus Ignored', '!attk --config weap-plus|false')+' '
+ + 'Critical Rolls | '+configButtons(!state.attackMaster.weapRules.criticals, 'Always hit/miss', '!attk --config criticals|true', 'Calculate hit/miss', '!attk --config criticals|false')+' '
+ + 'Natural Max Min Rolls | '+configButtons(!state.attackMaster.weapRules.naturals, 'Always hit/miss', '!attk --config naturals|true', 'Calculate hit/miss', '!attk --config naturals|false')+' '
+ + 'Allowed Armour | '+configButtons(state.attackMaster.weapRules.allowArmour, 'Strict Denial', '!attk --config all-armour|false', 'All Can Use Any', '!attk --config all-armour|true')+' '
+ + 'Non-Prof Penalty | '+configButtons(!state.attackMaster.weapRules.prof, 'Class Penalty', '!attk --config prof|true', 'Character Sheet', '!attk --config prof|false')+' '
+ + 'Ranged Mastery | '+configButtons(state.attackMaster.weapRules.masterRange, 'Not Allowed', '!attk --config master-range|false', 'Mastery Allowed', '!attk --config master-range|true')+' '
+ + 'Rogue Skills | '+configButtons(state.attackMaster.thieveCrit, 'No Critical', '!attk --config rogue-crit|false', 'Critical Success', '!attk --config rogue-crit|true')+' '
+ + ((state.attackMaster.thieveCrit > 0) ? ('Rogue Crit Value | '+configButtons(state.attackMaster.thieveCrit>1, 'Critical = 1%', '!attk --config rogue-crit-val|false', 'Critical = 5%', '!attk --config rogue-crit-val|true')+' ') : '')
+ + 'NPC Attributes | '+configButtons(state.attackMaster.attrRoll, 'No Attributes', '!attk --config attr-roll|false', 'Roll Attributes', '!attk --config attr-roll|true')+' '
+ + ((state.attackMaster.attrRoll) ? ('NPC Attr Range | '+configButtons(state.attackMaster.attrRestrict, 'Full Range', '!attk --config attr-restrict|false', 'Restrict', '!attk --config attr-restrict|true')+' ') : '');
+ }
+ if ('undefined' !== typeof MagicMaster) {
+ content += 'Specialist Wizards | '+configButtons(!state.MagicMaster.spellRules.specMU, 'Specified in Rules', '!magic --config specialist-rules|true', 'Allow Any Specialist', '!magic --config specialist-rules|false')+' '
+ + 'Spells per Level | '+configButtons(!state.MagicMaster.spellRules.strictNum, 'Strict by Rules', '!magic --config spell-num|true', 'Allow to Set Misc', '!magic --config spell-num|false')+' '
+ + 'Spell Schools | '+configButtons(state.MagicMaster.spellRules.allowAll, 'Strict by Rules', '!magic --config all-spells|false', 'All Can Use Any', '!magic --config all-spells|true')+' '
+ + 'Powers by Level | '+configButtons(state.MagicMaster.spellRules.allowAnyPower, 'Strict by Rules', '!magic --config all-powers|false', 'All Can Use Any', '!magic --config all-powers|true')+' '
+ + 'Custom Objects | '+configButtons(!state.MagicMaster.spellRules.denyCustom, 'External / GM Defined', '!magic --config custom-spells|true', 'All Objects Allowed', '!magic --config custom-spells|false')+' '
+ + 'Auto-Hide Items | '+configButtons(state.MagicMaster.autoHide, 'GM Hide Manually', '!magic --config auto-hide|false', 'Auto-Hide if Possible', '!magic --config auto-hide|true')+' '
+ + 'Reveal Hidden Items | '+configButtons(state.MagicMaster.reveal, 'Reveal Manually', '!magic --config reveal|false', 'Reveal on Use', '!magic --config reveal|true')+' '
+ + 'Action Buttons | '+configButtons(state.MagicMaster.viewActions, 'Grey on View', '!magic --config view-action|false', 'Active on View', '!magic --config view-action|true')+' '
+ + 'Alphabetic Lists | '+configButtons(!state.MagicMaster.alphaLists, 'Alphabetic', '!magic --config alpha-lists|true', 'Not Alphabetic', '!magic --config alpha-lists|false')+' '
+ + 'Skill-Based Chance | '+configButtons(!state.MagicMaster.gmRolls, 'GM rolls', '!magic --config gm-rolls|true', 'Player rolls', '!magic --config gm-rolls|false')+' ';
+ }
+ content += ('undefined' !== typeof CommandMaster ? ('[Set Default Token Bars](!cmd --button AB_ASK_TOKENBARS|) | ') : '')
+ + ' }}';
+ LibFunctions.sendFeedback( content );
+ return;
+ };
+
+/* -------------------------------------------------- Code stubs for alternate versions -------------------------------------- */
+
+ LibFunctions.creatureAttkDefs = function() {};
+ LibFunctions.creatureWeapDefs = function() {};
+ LibFunctions.updateClassLevel = function() {};
+ LibFunctions.displayClassLevel = function() {};
+
+/* --------------------------------------------------- End of Library Functions ---------------------------------------------------- */
+
+
+/* ---------------------------------------------------- Finish Initialisation ---------------------------------------------- */
+
+ LibFunctions.sendFeedback( waitMsgDiv+'Please wait while RPGMaster initialises...' );
+ apis.magic = ('undefined' !== typeof MagicMaster);
+ apis.attk = ('undefined' !== typeof attackMaster);
+ apis.init = ('undefined' !== typeof initMaster);
+ DBindex = undefined;
+
+ if (_.isUndefined(state.RPGMaster)) state.RPGMaster = {};
+ if (_.isUndefined(state.RPGMaster.tokenFields)) {
+ state.RPGMaster.tokenFields = [fields.AC[0],fields.Thac0_base[0],fields.HP[0]];
+ };
+ if (_.isUndefined(state.MagicMaster)) state.MagicMaster = {};
+ if (_.isUndefined(state.MagicMaster.spellRules)) state.MagicMaster.spellRules = {};
+
+ setTimeout( del_Old_DBs, 5000 );
+
+ // RED: v1.036 create help handouts from stored data
+ setTimeout( () => LibFunctions.updateHandouts(handouts,true,findTheGM()),300);
+ setTimeout( () => displayReleaseNotesLink(), 5000 );
+ setTimeout( () => LibFunctions.sendAPI('!token-mod --api-as '+findTheGM()+' --config players-can-ids|on',findTheGM()), 10000);
+ }
+ }
+
+ const handleChatMessage = (msg) => {
+ try {
+ var preamble, targetid,
+ playerid = msg.playerid;
+
+ msg_orig[playerid] = msg;
+
+ if (msg.type === "api") {
+ return;
+ } else if (msg.content.trim().startsWith('!')) {
+ log('lib handleChatMessage: msg not api but starts with ! so re-send. Msg = '+msg.content);
+ return;
+ }
+ if (msg.rolltemplate && msg.rolltemplate.startsWith('RPGM')) {
+
+ targetid = findTheGM();
+ if (msg.target) {
+ if (msg.target != 'gm') {
+ let targetObjs = findObjs({_type:'player',_displayname:msg.who});
+ targetid = (!targetObjs || !targetObjs.length) ? targetid : targetObjs[0].id;
+ }
+ }
+ let newMsg = Object.create(msg);
+ newMsg = processInlinerolls(newMsg);
+ const template = newMsg.match(/^([^{]*)({{[^]*}}).*?$([^]*)/im);
+ switch (msg.type.toLowerCase()) {
+ case 'emote':
+ preamble = '/em';
+ break;
+ case 'desc':
+ preamble = '/desc';
+ break;
+ case 'whisper':
+ preamble = '/w "'+msg.target_name+'"';
+ break;
+ default:
+ preamble = '';
+ break;
+ }
+ if (/^\s*\/i.test(template[1])) preamble += ' '+template[1]; else if (template[1].trim().length) log('RPGM output parser: extra preamble = '+template[1]);
+ LibFunctions.parseOutput( msg.who, preamble, msg.rolltemplate, template[2], targetid );
+ }
+ return;
+ } catch (e) {
+ log('RPGMaster Library handleChatMessage: JavaScript '+e.name+': '+e.message+' while processing a chat message');
+ LibFunctions.sendCatchError('RPGMaster Library',msg_orig[playerid],e);
+ }
+ };
+
+ const tryInit = ()=>{
+ if(Campaign()) {
+ LibFunctions.init();
+ } else {
+ setTimeout(tryInit,10);
+ }
+ };
+ setTimeout(tryInit,0);
+
+ const checkInstall = () => {
+ log('-=> libRPGMaster v'+version+' <=- ['+(new Date(lastUpdate*1000))+']');
+
+ if( ! state.hasOwnProperty('libRPGMaster') || state.libRPGMaster.version !== schemaVersion) {
+ switch(state.libRPGMaster && state.libRPGMaster.version) {
+
+ case 0.1:
+ /* break; // intentional dropthrough */
+
+ case 'UpdateSchemaVersion':
+ state.libRPGMaster.version = schemaVersion;
+ break;
+
+ default:
+ state.libRPGMaster = {
+ version: schemaVersion
+ };
+ break;
+ }
+ }
+ };
+
+ const registerLib = () => {
+ on('chat:message',handleChatMessage);
+ };
+
+ on('ready', function () {
+ checkInstall();
+ registerLib();
+ });
+
+ return {
+ getRPGMap: (...a) => LibFunctions.getRPGMap(...a),
+ getTableField: (...a) => LibFunctions.getTableField(...a),
+ getTable: (...a) => LibFunctions.getTable(...a),
+ getLvlTable: (...a) => LibFunctions.getLvlTable(...a),
+ initValues: (...a) => LibFunctions.initValues(...a),
+ attrLookup: (...a) => LibFunctions.attrLookup(...a),
+ setAttr: (...a) => LibFunctions.setAttr(...a),
+ abilityLookup: (...a) => LibFunctions.abilityLookup(...a),
+ setAbility: (...a) => LibFunctions.setAbility(...a),
+ doDisplayAbility: (...a) => LibFunctions.doDisplayAbility(...a),
+ getAbility: (...a) => LibFunctions.getAbility(...a),
+ parseTemplate: (...a) => LibFunctions.parseTemplate(...a),
+ redisplayOutput: (...a) => LibFunctions.redisplayOutput(...a),
+ parseOutput: (...a) => LibFunctions.parseOutput(...a),
+ sendToWho: (...a) => LibFunctions.sendToWho(...a),
+ sendMsgToWho: (...a) => LibFunctions.sendMsgToWho(...a),
+ sendPublic: (...a) => LibFunctions.sendPublic(...a),
+ sendAPI: (...a) => LibFunctions.sendAPI(...a),
+ sendFeedback: (...a) => LibFunctions.sendFeedback(...a),
+ sendResponse: (...a) => LibFunctions.sendResponse(...a),
+ sendResponsePlayer: (...a) => LibFunctions.sendResponsePlayer(...a),
+ sendResponseError: (...a) => LibFunctions.sendResponseError(...a),
+ sendToOthers: (...a) => LibFunctions.sendToOthers(...a),
+ sendError: (...a) => LibFunctions.sendError(...a),
+ sendCatchError: (...a) => LibFunctions.sendCatchError(...a),
+ sendParsedMsg: (...a) => LibFunctions.sendParsedMsg(...a),
+ sendGMquery: (...a) => LibFunctions.sendGMquery(...a),
+ sendWait: (...a) => LibFunctions.sendWait(...a),
+ checkDBver: (...a) => LibFunctions.checkDBver(...a),
+ saveDBtoHandout: (...a) => LibFunctions.saveDBtoHandout(...a),
+ buildCSdb: (...a) => LibFunctions.buildCSdb(...a),
+ checkCSdb: (...a) => LibFunctions.checkCSdb(...a),
+ getDBindex: (...a) => LibFunctions.getDBindex(...a),
+ updateHandouts: (...a) => LibFunctions.updateHandouts(...a),
+ findThePlayer: (...a) => LibFunctions.findThePlayer(...a),
+ findCharacter: (...a) => LibFunctions.findCharacter(...a),
+ fixSenderId: (...a) => LibFunctions.fixSenderId(...a),
+ calcAttr: (...a) => LibFunctions.calcAttr(...a),
+ rollDice: (...a) => LibFunctions.rollDice(...a),
+ evalAttr: (...a) => LibFunctions.evalAttr(...a),
+ getCharacter: (...a) => LibFunctions.getCharacter(...a),
+ getTokenValue: (...a) => LibFunctions.getTokenValue(...a),
+ classObjects: (...a) => LibFunctions.classObjects(...a),
+ addMIspells: (...a) => LibFunctions.addMIspells(...a),
+ getMagicList: (...a) => LibFunctions.getMagicList(...a),
+ getShownType: (...a) => LibFunctions.getShownType(...a),
+ parseClassDB: (...a) => LibFunctions.parseClassDB(...a),
+ rogueLevelPoints: (...a) => LibFunctions.rogueLevelPoints(...a),
+ handleCheckThiefMods: (...a) => LibFunctions.handleCheckThiefMods(...a),
+ scanItemMods: (...a) => LibFunctions.scanItemMods(...a),
+ scanForMods: (...a) => LibFunctions.scanForMods(...a),
+ handleCheckSaves: (...a) => LibFunctions.handleCheckSaves(...a),
+ handleCheckWeapons: (...a) => LibFunctions.handleCheckWeapons(...a),
+ handleSetNPCAttributes: (...a) => LibFunctions.handleSetNPCAttributes(...a),
+ getHandoutIDs: (...a) => LibFunctions.getHandoutIDs(...a),
+ classAllowedItem: (...a) => LibFunctions.classAllowedItem(...a),
+ parseData: (...a) => LibFunctions.parseData(...a),
+ parseStr: (...a) => LibFunctions.parseStr(...a),
+ resolveData: (...a) => LibFunctions.resolveData(...a),
+ findPower: (...a) => LibFunctions.findPower(...a),
+ handleGetBaseThac0: (...a) => LibFunctions.handleGetBaseThac0(...a),
+ characterLevel: (...a) => LibFunctions.characterLevel(...a),
+ caster: (...a) => LibFunctions.caster(...a),
+ creatureAttkDefs: (...a) => LibFunctions.creatureAttkDefs(...a),
+ creatureWeapDefs: (...a) => LibFunctions.creatureWeapDefs(...a),
+ getSetPlayerConfig: (...a) => LibFunctions.getSetPlayerConfig(...a),
+ makeConfigMenu: (...a) => LibFunctions.makeConfigMenu(...a),
+ displayClassLevel: (...a) => LibFunctions.displayClassLevel(...a),
+ updateClassLevel: (...a) => LibFunctions.updateClassLevel(...a),
+ };
+
+})();
+
+{try{throw new Error('');}catch(e){API_Meta.libRPGMaster.lineCount=(parseInt(e.stack.split(/\n/)[1].replace(/^.*:(\d+):.*$/,'$1'),10)-API_Meta.libRPGMaster.offset);}}
diff --git a/RPGMlibrary AD+D2e/libRPGMaster2e.js b/RPGMlibrary AD+D2e/libRPGMaster2e.js
index 824dce002..42b7407ab 100644
--- a/RPGMlibrary AD+D2e/libRPGMaster2e.js
+++ b/RPGMlibrary AD+D2e/libRPGMaster2e.js
@@ -95,14 +95,18 @@ API_Meta.libRPGMaster={offset:Number.MAX_SAFE_INTEGER,lineCount:-1};
* for multi-line data sections. Fixed classObjects() resolution of certain creature
* classes. Fixed handleGetBaseThac0() for Warrior classes. Added new database for
* treasure items.
- * v4.0.2 25/02/2025 Fixed error with AoE for the Bless spell.
+ * v4.0.2 25/02/2025 Fixed error with AoE for the Bless spell.
+ * v4.0.3 04/04/2025 Any base class with "CREATURE" as the class name will use the "MonsterThac0" when
+ * handleGetBaseThac0() is called. API buttons with empty button name strings will be
+ * trapped by the output parser and a dash inserted to ensure the button is displayed,
+ * rather than code. Made parseData() robust to non-string Attribute parameters.
**/
const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
'use strict';
- const version = '4.0.2';
+ const version = '4.0.3';
API_Meta.libRPGMaster.version = version;
- const lastUpdate = 1740502257;
+ const lastUpdate = 1743865263;
const schemaVersion = 0.1;
log('now in seconds is '+Date.now()/1000);
@@ -181,12 +185,12 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
Age: ['age','current',''],
AgeVal: ['age','max',''],
Total_level: ['level-total','current'],
- Fighter_class: ['class1','current'],
- Wizard_class: ['class2','current'],
- Priest_class: ['class3','current'],
- Rogue_class: ['class4','current'],
- Psion_class: ['class5','current'],
- Monster_class: ['class1','current'],
+ Fighter_class: ['class1','current',''],
+ Wizard_class: ['class2','current',''],
+ Priest_class: ['class3','current',''],
+ Rogue_class: ['class4','current',''],
+ Psion_class: ['class5','current',''],
+ Monster_class: ['class1','current',''],
Fighter_level: ['level-class1','current'],
Wizard_level: ['level-class2','current'],
Priest_level: ['level-class3','current'],
@@ -1193,19 +1197,19 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Human-Wizard-Necromancer',type:'npccreature',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}Specs=[Human-Necromancer,NPCCreature,2H,Human-Wizard]{{}}RaceData=[w:Human-Necromancer, query:NPClevel]{{}}%{Race-DB|Human-Necromancer}{{}}'},
{name:'Human-Wizard-Transmuter',type:'npccreature',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}Specs=[Human-Transmuter,NPCCreature,2H,Human-Wizard]{{}}RaceData=[w:Human-Transmuter, query:NPClevel]{{}}%{Race-DB|Human-Transmuter}{{}}'},
]},
- Race_DB_Creatures_A_E:{bio:'Creatures Database v2.05 26/01/2025
This sheet holds definitions of pre-defined creatures from The Monsterous Compendium that can be used by the RPGMaster API system (creatures can also be added directly to a character sheet by editing the Monster tab on the sheet). The definitions include automatically setable attributes, valid alignments, the weapons & armour each creature can use, bonuses and penalties to saves, attacks, surprise etc, and the powers that the creature gets. Depending on API configuration, the APIs can restrict creatures to these specifications, or not as desired.',
- gmnotes:'Change Log: v2.05 26/01/2025 Added chance of random items to be added to humanoid Drag & Drop creatures v2.04 14/09/2024 Force database update to remove any temporary DB fixes done by users v2.02 14/10/2023 Fixed issue with War Dog & added Leopard & Snow Leopard v2.01 29/09/2023 Added several families of Giants, and all Chromatic & Metalic Dragons, Titans, & others with substantial functional upgrades v1.34 24/09/2023 Fixed issues with Goblin definition v1.33 13/08/2023 Added a basic chest to act as the basis for the *Drag & Drop* container system v1.32 11/07/2023 Added creatures that can be contained in an Iron Flask v1.31 07/06/2023 Corrected some spattk & spdef entries with wrong syntax v1.30 30/04/2023 Added creatures to support Figurines of Wonderous Power and other MIs v1.28 03/03/2023 Added Elephant, Rhino and Mouse to support Wand of Wonder v1.27 12/02/2023 Added Adder as a creature to support Staff of the Serpent (Adder) v1.26 16/01/2023 Added both attkmsg & dmgmsg to display with attack & damage respectively. v1.25 14/01/2023 Switched round creature attack names and dice rolls so will work with character sheet buttons as well as APIs v1.15-24 16/12/2022 Added more creatures and changed format for inherrited template fields v1.14 25/11/2022 Added more creatures, especially undead at DM request v1.10 14/11/2022 Initial live release of a sample creatures database v1.02 10/11/2022 Fixes and additional creatures v1.01 01/11/2022 First version of Race-DB-Creatures',
+ Race_DB_Creatures_A_E:{bio:'Creatures Database v2.06 05/04/2025
This sheet holds definitions of pre-defined creatures from The Monsterous Compendium that can be used by the RPGMaster API system (creatures can also be added directly to a character sheet by editing the Monster tab on the sheet). The definitions include automatically setable attributes, valid alignments, the weapons & armour each creature can use, bonuses and penalties to saves, attacks, surprise etc, and the powers that the creature gets. Depending on API configuration, the APIs can restrict creatures to these specifications, or not as desired.',
+ gmnotes:'Change Log: v2.06 05/04/2025 Added Doppleganger, Centipedes & Black Pudding v2.05 26/01/2025 Added chance of random items to be added to humanoid Drag & Drop creatures v2.04 14/09/2024 Force database update to remove any temporary DB fixes done by users v2.02 14/10/2023 Fixed issue with War Dog & added Leopard & Snow Leopard v2.01 29/09/2023 Added several families of Giants, and all Chromatic & Metalic Dragons, Titans, & others with substantial functional upgrades v1.34 24/09/2023 Fixed issues with Goblin definition v1.33 13/08/2023 Added a basic chest to act as the basis for the *Drag & Drop* container system v1.32 11/07/2023 Added creatures that can be contained in an Iron Flask v1.31 07/06/2023 Corrected some spattk & spdef entries with wrong syntax v1.30 30/04/2023 Added creatures to support Figurines of Wonderous Power and other MIs v1.28 03/03/2023 Added Elephant, Rhino and Mouse to support Wand of Wonder v1.27 12/02/2023 Added Adder as a creature to support Staff of the Serpent (Adder) v1.26 16/01/2023 Added both attkmsg & dmgmsg to display with attack & damage respectively. v1.25 14/01/2023 Switched round creature attack names and dice rolls so will work with character sheet buttons as well as APIs v1.15-24 16/12/2022 Added more creatures and changed format for inherrited template fields v1.14 25/11/2022 Added more creatures, especially undead at DM request v1.10 14/11/2022 Initial live release of a sample creatures database v1.02 10/11/2022 Fixes and additional creatures v1.01 01/11/2022 First version of Race-DB-Creatures',
root:'Race-DB',
api:'cmd',
type:'class,race',
controlledby:'all',
- avatar:'https://s3.amazonaws.com/files.d20.io/images/241737383/GL25pkAS2z5JJ4S9cMKkjw/max.png?1629918721',
- version:2.05,
+ avatar:'https://files.d20.io/images/241737383/GL25pkAS2z5JJ4S9cMKkjw/max.png?1629918721',
+ version:2.06,
db:[{name:'Adder',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Poison-Snake-20}{{}}Specs=[Poison Snake,CreatureRace,0H,Poison Snake 20]{{}}RaceData=[w:Poison Snake 20]{{title=Adder}}'},
{name:'Advanced-Bullywug',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=, Advanced}}RaceData=[w:Advanced Bullywug, cattr:int=8:11|size=M,ns:1],[cl:MI,%:10,items:random:1d43{{}}Specs=[Advanced Bullywug,CreatureRace,0H,Bullywug]{{subtitle=Creature}}%{Race-DB-Creatures|Bullywug}{{Intelligence=Average (8 to 10)}}{{Size=M, 5-6ft tall}}Specs=[Bullywug Leader,CreatureRace,0H,Bullywug]{{desc1=**Advanced Bullywug:** A small number of bullywugs are larger and more intelligent than the rest of their kind. These bullywugs make their homes in abandoned buildings and caves, and send out regular patrols and hunting parties. These groups tend to be well equipped and organized, and stake out a regular territory, which varies with the size of the group. They are more aggressive than their smaller cousins, and will fight not only other bullywugs but other monsters as well. The intelligent bullywugs also organize regular raids outside their territory for food and booty, and especially prize human flesh. Since they are chaotic evil, all trespassers, including other bullywugs, are considered threats or sources of food.}}'},
{name:'Advanced-Bullywug-Shaman',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=, Advanced Shaman}}RaceData=[w:Advanced Bullywug Shaman, cattr:str=int=10:14|wis=12:14|con=12:18|size=M|cl=pr:Shaman|lv=2,ns:1],[cl:MI,%:20,items:random:2d2]{{}}Specs=[Advanced Bullywug Shaman,CreatureRace,0H,Bullywug]{{subtitle=Creature}}%{Race-DB-Creatures|Bullywug}{{Intelligence=Average (8 to 10)}}{{Size=M, 5-6ft tall}}{{desc=**Advanced Bullywug Shaman:** For every 10 advanced bullywugs in a community, there is a 10% chance of a 2nd-level shaman being present. The creature requires the spellbook setting up, and spells to be memorised}}'},
{name:'African-Elephant',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Elephant}{{}}RaceData=[w:African Elephant]{{}}Specs=[African Elephant,CreatureRace,0H,Elephant]{{}}'},
- {name:'Air-Elemental',type:'creaturerace',ct:'100',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Air Elemental}}{{subtitle=Creature}}Specs=[Elemental,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low (5-7)}}{{AC=2}}{{Alignment=Neutral}}{{Move=FL36 (A)}}{{Hit Dice=8, 12, or 16}}{{THAC0=13, 9, or 5}}{{Attack=1 x 2d10 (+1 bonus to hit, +4 to damage if in aerial combat)}}{{Languages=They rarely speak, but their language can be heard in the high-pitched shriek of a tornado or the low moan of a midnight storm}}{{Size=L to H [7+1d8](!\\amp#13;\\amp#47;r 7+1d8 feet height)feet,}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Whirlwind=1 turn to form and dissipate, lasts for 1 round, and kills or does damage to those in its area of effect}}{{Aerial Combat=Gains +1 to hit and +4 damage bonuses when in aerial combat}}{{Section4=**Special Advantages**}}{{Special Defense=Only hit by +2 or better weapons}}RaceData=[w:Air Elemental, cattr:int=5:7|ac=2|mov=36|fly=36(A)|size=L|hd=8|thac0=13|attk1=2d10:Air Punch:0:B,spattk:Whirlwind power,spdef:+2 weapon or better to hit, ns:2],[cl:PW,w:Whirlwind,sp:100,lv:0,pd:-1],[cl:PW,w:AE-Aerial-Combat,sp:0,lv:0,pd:-1]{{Section9=**Description**}}{{desc=Air elementals can be conjured in any area of open air where gusts of wind are present. The common air elemental appears as an amorphous, shifting cloud when it answers its summons to the Prime Material plane. They rarely speak, but their language can be heard in the high-pitched shriek of a tornado or the low moan of a midnight storm.}}{{desc1=While air elementals are not readily tangible to the inhabitants of planes other than its own, they can strike an opponent with a strong, focused blast of air that, like a giant, invisible fist, does 2-20 points of damage. The extremely rapid rate at which these creatures can move make them very useful on vast battlefields or in extended aerial combat. In fact, the air elemental\'s mastery of its natural element gives it a strong advantage in combat above the ground. In aerial battles, they gain a +1 to hit and a +4 to the damage they inflict.\nThe most feared power of an air elemental is its ability to form a whirlwind upon command. Using this form, the air elemental appears as a truncated, reversed cone. It takes one\nfull turn to form and dissipate this cone. See the power description - suffice to say this whirlwind lasts for one melee round and, if it reaches full height, sweeps away and kills all creatures under 3 Hit Dice in the area of its cone, and does 2-16 points of damage to all creatures it fails to kill outright. If, because of overhead obstructions, the whirlwind fails to reach its full height, it can only sweep up creatures under 2 Hit Dice and do 1-8 points of damage to all others in its cone.}}'},
+ {name:'Air-Elemental',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Air Elemental}}{{subtitle=Creature}}Specs=[Elemental,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low (5-7)}}{{AC=2}}{{Alignment=Neutral}}{{Move=FL36 (A)}}{{Hit Dice=8, 12, or 16}}{{THAC0=13, 9, or 5}}{{Attack=1 x 2d10 (+1 bonus to hit, +4 to damage if in aerial combat)}}{{Languages=They rarely speak, but their language can be heard in the high-pitched shriek of a tornado or the low moan of a midnight storm}}{{Size=L to H [7+1d8](!\\amp#13;\\amp#47;r 7+1d8 feet height)feet,}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Whirlwind=1 turn to form and dissipate, lasts for 1 round, and kills or does damage to those in its area of effect}}{{Aerial Combat=Gains +1 to hit and +4 damage bonuses when in aerial combat}}{{Section4=**Special Advantages**}}{{Special Defense=Only hit by +2 or better weapons}}RaceData=[w:Air Elemental, cattr:int=5:7|ac=2|mov=36|fly=36(A)|size=L|hd=8|thac0=13|attk1=2d10:Air Punch:0:B,spattk:Whirlwind power,spdef:+2 weapon or better to hit, ns:2],[cl:PW,w:Whirlwind,sp:100,lv:0,pd:-1],[cl:PW,w:AE-Aerial-Combat,sp:0,lv:0,pd:-1]{{Section9=**Description**}}{{desc=Air elementals can be conjured in any area of open air where gusts of wind are present. The common air elemental appears as an amorphous, shifting cloud when it answers its summons to the Prime Material plane. They rarely speak, but their language can be heard in the high-pitched shriek of a tornado or the low moan of a midnight storm.}}{{desc1=While air elementals are not readily tangible to the inhabitants of planes other than its own, they can strike an opponent with a strong, focused blast of air that, like a giant, invisible fist, does 2-20 points of damage. The extremely rapid rate at which these creatures can move make them very useful on vast battlefields or in extended aerial combat. In fact, the air elemental\'s mastery of its natural element gives it a strong advantage in combat above the ground. In aerial battles, they gain a +1 to hit and a +4 to the damage they inflict.\nThe most feared power of an air elemental is its ability to form a whirlwind upon command. Using this form, the air elemental appears as a truncated, reversed cone. It takes one\nfull turn to form and dissipate this cone. See the power description - suffice to say this whirlwind lasts for one melee round and, if it reaches full height, sweeps away and kills all creatures under 3 Hit Dice in the area of its cone, and does 2-16 points of damage to all creatures it fails to kill outright. If, because of overhead obstructions, the whirlwind fails to reach its full height, it can only sweep up creatures under 2 Hit Dice and do 1-8 points of damage to all others in its cone.}}'},
{name:'Amphisbaena',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Amphisbaena, cattr:mov=12|ac=3|hd=6r2|thac0=15|size=M| attk1=1d3:Bite1:0:P|attk2=1d3:Bite2:0:P|dmgmsg=If successfully hit victim must save vs. poison or immediately **die**! Remember immune to *cold* attacks, spattk:Poisonous - victim must save vs. poison or immediately **die**, spdef:Immune to *cold* attacks]{{}}Specs=[Poison Snake,CreatureRace,0H,Poison Snake 1-4]{{}}%{Race-DB-Creatures|Poison-Snake-1-4}{{title=Amphisbaena}}{{AC=3}}{{Move=12}}{{Hit Dice=6}}{{THAC0=15}}{{Attacks=2 Bites, one from each head, with an immediately fatal poison}}{{Size=M, 13ft long}}{{Section5=**Poison:** Victim must save vs. poison or immediately **die**\n**Immunity:** Immune to all forms of cold attacks}}{{desc=**Amphisbaena:** These monsters have heads at both ends, and both heads are armed with poisonous fangs. The creature travels by grasping one of its necks and rolling like a hoop. It can attack with both heads, each head attacking a separate target. Victims failing to make a saving throw vs. poison when bitten die instantly. Amphisbaena are immune to cold-based attacks.}}'},
{name:'Animal-Skeleton',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Animal }}RaceData=[w:Animal Skeleton, cattr:mov=6|ac=8|hd=1-1r4|thac0=20|attk1=1d4:Bite:0:S]{{subtitle=Creature}}%{Race-DB-Creatures|Skeleton}{{AC=8}}Specs=[Skeleton,CreatureRace,0H,Skeleton]{{Move=6}}{{Hit Dice=1-1}}{{THAC0=20}}{{Attack=1d4 bite}}{{Size=S to M 3-5ft tall}}{{desc9=**Combat:** Animal skeletons almost always bite for 1-4 points of damage, unless they would obviously inflict less (i.e., skeletal rats should inflict only 1-2 points, etc.). Skeletons need never check morale, usually being magically commanded to fight to the death. When a skeleton dies, it falls to pieces with loud clunks and rattles.}}'},
{name:'Aquatic-Ogre-Chief',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Merrow-Chief}{{}}RaceData=[w:Merrow Chief]{{}}Specs=[Merrow Chief,CreatureRace,0H,Merrow Chief]{{}}'},
@@ -1223,24 +1227,26 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Bear-Brown',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Brown-Bear}{{}}RaceData=[w:Brown Bear]{{}}Specs=[Brown Bear,CreatureRace,0H,Brown-Bear]{{}}'},
{name:'Bear-Cave',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Cave-Bear}{{}}RaceData=[w:Cave Bear]{{}}Specs=[Cave Bear,CreatureRace,0H,Cave-Bear]{{}}'},
{name:'Bear-Polar',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Polar-Bear}{{}}RaceData=[w:Polar Bear]{{}}Specs=[Polar Bear,CreatureRace,0H,Polar-Bear]{{}}'},
- {name:'Beholder-45-49HP',type:'creaturerace',ct:'1',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Beholder}}{{subtitle=Creature}}Specs=[Beholder,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Exceptional (15 to 16)}}{{AC=0/2/7 [Body=0 Stalks=2 Eyes=7}}{{Alignment=Lawful Evil}}{{Move=FL 3(B)}}{{Hit Points=45 to 49HP. Body=2/3rds, Central Eye 1/3rd, Eye stalks=additional 1d8+4HP each}}{{THAC0=11}}{{Attack=Bite 2d8}}{{Languages=*Beholder* and other Lawful Evil languages}}{{Size=M, 4-6ft diameter}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=**Magic Use:** Each of the eyes deploy a specific magical power. The central large eye delivers the *Anti-Magic Ray*, and the small eyes the other powers in the order shown in the Powers menu}}{{Section4=**Special Advantages**}}{{Section5=**Magic Resistance:** The central large eye casts an *anti-magic ray* with range 140yds over a 90 degree angle. Use the Power to see the area of effect.}}{{Regeneration=Destroyed eye stalks regrow within 1 week}}{{Section6=**Special Disadvantages**}}{{Section7=**Targeted Attacks:** If the body is destroyed (2/3rds of total HP) the Beholder dies. If the central eye is destroyed (1/3rd HP) the Anti-Magic ray is disabled. Destroying each eye stalk (1d8+4HP each) stops individual powers}}{{Section8=**Open to Bribery:** If confronted with a particular party there is a 50% chance they will listen to negotiations (bribery) before raining death upon their foes.}}RaceData=[w:Beholder 45-49HP, align:LE, cattr:int=15:16|fly=3(B)|ac=0 \\lbrak;body=0 eye stalks=2 eyes=7\\rbrak;|size=M|hd=9|hp=45:49|thac0=11|attk1=2d8:Bite:0:P|,spdef:AC body=0 eye stalks=2 eyes=7. HP body=2/3rds central eye=1/3rd eye stalks \\lbrak;4+1d8\\rbrak;\\lpar;!\\amp#13;\\amp#47;gr 4+1d8 eye stalk HP\\rpar;HP,spattk:Magic use - each eye separate power (see powers),ns:11],[cl:PW,w:Charm-Person,sp:1,pd:-1],[cl:PW,w:Charm-Monster,sp:4,pd:-1],[cl:PW,w:Sleep,sp:1,pd:-1],[cl:PW,w:Telekinesis,sp:5,pd:-1],[cl:PW,w:Flesh-to-Stone,sp:6,pd:-1],[cl:PW,w:Disintegrate,sp:6,pd:-1],[cl:PW,w:Wand-of-Fear,sp:4,pd:-1],[cl:PW,w:Slow,sp:3,pd:-1],[cl:PW,w:Cause-Serious-Wounds,sp:7,pd:-1],[cl:PW,w:Death-Spell,sp:6,pd:-1],[cl:PW,w:Beholder-Anti-Magic-Ray,sp:0,pd:-1]{{Section9=**Description**}}{{desc=The beholder is the stuff of nightmares. This creature, also called the sphere of many eyes or the eye tyrant, appears as a large orb dominated by a central eye and a large toothy maw, has 10 smaller eyes on stalks sprouting from the top of the orb. Among adventurers, beholders are known as deadly adversaries.\nThe globular body of the beholder and its kin is supported by levitation, allowing it to float slowly about as it wills.}}{{desc1=**Combat:** The beholder has different Armor Classes for different parts of their body. When attacking a beholder, determine the location of the attack **before** striking. Each of the beholder\'s eyes, including the central one has a different function. See Powers for the list, and take the order there as eyes 1 to 10, with ccentral eye being Anti-Magic Ray.\n**Number of Eyes in use:** A beholder may activate the magical powers of its eyes\' at will. Generally, a beholder can use 1d4 smaller eyes if attackers are within a 90 degree angle in front, 1d6 if attacked from within a 180 degree angle, 1d8 if attacked from a 270 degree arc, and all 10 eyes if attacked from all sides. The central eye can be used only against attacks from the front. If attacked from above, the beholder can use all of the smaller eyes.}}'},
+ {name:'Beholder-45-49HP',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Beholder}}{{subtitle=Creature}}Specs=[Beholder,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Exceptional (15 to 16)}}{{AC=0/2/7 [Body=0 Stalks=2 Eyes=7}}{{Alignment=Lawful Evil}}{{Move=FL 3(B)}}{{Hit Points=45 to 49HP. Body=2/3rds, Central Eye 1/3rd, Eye stalks=additional 1d8+4HP each}}{{THAC0=11}}{{Attack=Bite 2d8}}{{Languages=*Beholder* and other Lawful Evil languages}}{{Size=M, 4-6ft diameter}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=**Magic Use:** Each of the eyes deploy a specific magical power. The central large eye delivers the *Anti-Magic Ray*, and the small eyes the other powers in the order shown in the Powers menu}}{{Section4=**Special Advantages**}}{{Section5=**Magic Resistance:** The central large eye casts an *anti-magic ray* with range 140yds over a 90 degree angle. Use the Power to see the area of effect.}}{{Regeneration=Destroyed eye stalks regrow within 1 week}}{{Section6=**Special Disadvantages**}}{{Section7=**Targeted Attacks:** If the body is destroyed (2/3rds of total HP) the Beholder dies. If the central eye is destroyed (1/3rd HP) the Anti-Magic ray is disabled. Destroying each eye stalk (1d8+4HP each) stops individual powers}}{{Section8=**Open to Bribery:** If confronted with a particular party there is a 50% chance they will listen to negotiations (bribery) before raining death upon their foes.}}RaceData=[w:Beholder 45-49HP, align:LE, cattr:int=15:16|fly=3(B)|ac=0 \\lbrak;body=0 eye stalks=2 eyes=7\\rbrak;|size=M|hd=9|hp=45:49|thac0=11|attk1=2d8:Bite:0:P|,spdef:AC body=0 eye stalks=2 eyes=7. HP body=2/3rds central eye=1/3rd eye stalks \\lbrak;4+1d8\\rbrak;\\lpar;!\\amp#13;\\amp#47;gr 4+1d8 eye stalk HP\\rpar;HP,spattk:Magic use - each eye separate power (see powers),ns:11],[cl:PW,w:Charm-Person,sp:1,pd:-1],[cl:PW,w:Charm-Monster,sp:4,pd:-1],[cl:PW,w:Sleep,sp:1,pd:-1],[cl:PW,w:Telekinesis,sp:5,pd:-1],[cl:PW,w:Flesh-to-Stone,sp:6,pd:-1],[cl:PW,w:Disintegrate,sp:6,pd:-1],[cl:PW,w:Wand-of-Fear,sp:4,pd:-1],[cl:PW,w:Slow,sp:3,pd:-1],[cl:PW,w:Cause-Serious-Wounds,sp:7,pd:-1],[cl:PW,w:Death-Spell,sp:6,pd:-1],[cl:PW,w:Beholder-Anti-Magic-Ray,sp:0,pd:-1]{{Section9=**Description**}}{{desc=The beholder is the stuff of nightmares. This creature, also called the sphere of many eyes or the eye tyrant, appears as a large orb dominated by a central eye and a large toothy maw, has 10 smaller eyes on stalks sprouting from the top of the orb. Among adventurers, beholders are known as deadly adversaries.\nThe globular body of the beholder and its kin is supported by levitation, allowing it to float slowly about as it wills.}}{{desc1=**Combat:** The beholder has different Armor Classes for different parts of their body. When attacking a beholder, determine the location of the attack **before** striking. Each of the beholder\'s eyes, including the central one has a different function. See Powers for the list, and take the order there as eyes 1 to 10, with ccentral eye being Anti-Magic Ray.\n**Number of Eyes in use:** A beholder may activate the magical powers of its eyes\' at will. Generally, a beholder can use 1d4 smaller eyes if attackers are within a 90 degree angle in front, 1d6 if attacked from within a 180 degree angle, 1d8 if attacked from a 270 degree arc, and all 10 eyes if attacked from all sides. The central eye can be used only against attacks from the front. If attacked from above, the beholder can use all of the smaller eyes.}}'},
{name:'Beholder-50-59HP',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= 50 to 59HP}}RaceData=[w:Beholder 50-59HP, cattr:hd=11|hp=50:59|thac0=9]{{subtitle=Creature}}%{Race-DB-Creatures|Beholder-45-49HP}{{Hit Points=50 to 59HP. Body=2/3rds, Central Eye 1/3rd, Eye stalks=additional 1d8+4HP each}}Specs=[Beholder,CreatureRace,0H,Beholder-45-49HP]{{}}'},
{name:'Beholder-60-69HP',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= 60 to 69HP}}RaceData=[w:Beholder 60-69HP, cattr:hd=13|hp=60:69|thac0=7]{{subtitle=Creature}}%{Race-DB-Creatures|Beholder-45-49HP}{{Hit Points=60 to 69HP. Body=2/3rds, Central Eye 1/3rd, Eye stalks=additional 1d8+4HP each}}Specs=[Beholder,CreatureRace,0H,Beholder-45-49HP]{{}}'},
{name:'Beholder-70-75HP',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= 70 to 75HP}}RaceData=[w:Beholder 70-75HP, cattr:hd=15|hp=70:75|thac0=5]{{subtitle=Creature}}%{Race-DB-Creatures|Beholder-45-49HP}{{Hit Points=45 to 49HP. Body=2/3rds, Central Eye 1/3rd, Eye stalks=additional 1d8+4HP each}}Specs=[Beholder,CreatureRace,0H,Beholder-45-49HP]{{}}'},
- {name:'Birdcharmer',type:'creaturerace',ct:'10',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Birdcharmer Snake, cattr:mov=9|hd=3+2r3|thac0=17|size=M| attk1=1:Bite:0:P|attk2=1d3:Constrict:0:B|dmgmsg=$$If successfully hit as well as damage this round \\lbrak;all future rounds\\rbrak;\\lpar;!rounds --target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the Unfortunate Victim?¦token_id}¦Constrict¦\\amp#91;\\lbrak;99\\rbrak;\\amp#93;¦0¦Argh... The squeeze is on...¦back-pain\\rpar; automatically hit and do crushing damage.\nRemember the birdcharmer charm can work on Animal intelligence \\lpar;1\\rpar; creatures, spattk:Once coiled victim takes crushing damage each round. Birdcharmer charm power vs. animal intelligence creatures, ns:1],[cl:PW,w:Birdcharmer Charm,sp:10,pd:-1]{{}}Specs=[Constrictor Snake,CreatureRace,0H,Constrictor Snake]{{}}%{Race-DB-Creatures|Constrictor-Snake}{{title=Birdcharmer Constrictor Snake}}{{Attacks=Bite and attempt to charm, coil \\amp constrict}}{{Charm=Can sway \\amp charm creatures of animal intelligence(1)}}{{desc=**Birdcharmer:** Some constrictor snakes are known as birdcharmers; these innately magical snakes can mesmerize their prey by swaying slowly and steadily while staring down their victims. Creatures of animal intelligence or less must make a saving throw against paralyzation or be effectively paralyzed for as long as the snake continues to sway, and for 2d6 rounds thereafter.}}'},
+ {name:'Birdcharmer',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Birdcharmer Snake, cattr:mov=9|hd=3+2r3|thac0=17|size=M| attk1=1:Bite:0:P|attk2=1d3:Constrict:0:B|dmgmsg=$$If successfully hit as well as damage this round \\lbrak;all future rounds\\rbrak;\\lpar;!rounds --target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the Unfortunate Victim?¦token_id}¦Constrict¦\\amp#91;\\lbrak;99\\rbrak;\\amp#93;¦0¦Argh... The squeeze is on...¦back-pain\\rpar; automatically hit and do crushing damage.\nRemember the birdcharmer charm can work on Animal intelligence \\lpar;1\\rpar; creatures, spattk:Once coiled victim takes crushing damage each round. Birdcharmer charm power vs. animal intelligence creatures, ns:1],[cl:PW,w:Birdcharmer Charm,sp:10,pd:-1]{{}}Specs=[Constrictor Snake,CreatureRace,0H,Constrictor Snake]{{}}%{Race-DB-Creatures|Constrictor-Snake}{{title=Birdcharmer Constrictor Snake}}{{Attacks=Bite and attempt to charm, coil \\amp constrict}}{{Charm=Can sway \\amp charm creatures of animal intelligence(1)}}{{desc=**Birdcharmer:** Some constrictor snakes are known as birdcharmers; these innately magical snakes can mesmerize their prey by swaying slowly and steadily while staring down their victims. Creatures of animal intelligence or less must make a saving throw against paralyzation or be effectively paralyzed for as long as the snake continues to sway, and for 2d6 rounds thereafter.}}'},
{name:'Black-Bear',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Black Bear}}{{subtitle=Creature}}Specs=[Black Bear,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Semi- (2 to 4)}}{{AC=7}}{{Alignment=Neutral}}{{Move=12}}{{Hit Dice=3+3}}{{THAC0=17}}{{Attack=2 x Claw 1d3, 1 x Bite 1d6}}{{Languages=None}}{{Size=M, 6ft tall}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=**Hug:** If score a critical hit (natural roll of 18 or better), then also do a hug for 2d4 additional damage}}{{Section6=**Special Disadvantages**}}{{Section7=None}}RaceData=[w:Black Bear, align:N, cattr:int=2:4|mov=12|ac=7|size=M|hd=3+3r3|thac0=17|ch=18|attk1=1d3:Claw1:0:S|attk2=1d3:Claw2:0:S|attk3=1d6:Bite:1:P|dmgmsg=If get a Critical Hit \\lpar;18 or better natural roll\\rpar; also get to \\lbrak;Hug for another 2d4\\rbrak;\\lpar;!\\amp#13;\\amp#47;gmroll 2d4 Hug damage\\rpar;,spattk:Hug if roll a critical hit of 18 or better]{{Section9=**Description**}}{{desc=A rather common omnivorous mammal, bears tend to avoid humans unless provoked. Exceptions to this rule can be a most unfortunate occurrence. Bears are, in general, large and powerful animals which are found throughout the world\'s temperate and cooler climates. With dense fur protecting them from the elements and powerful claws protecting them from other animals, bears are the true rulers of the animal kingdom in the areas where they live.\nThe so-called black bear actually ranges in color from black to light brown. It is smaller than the brown bear and the most widespread species by far.}}{{desc1=**Combat:** Although black bears are usually not aggressive, they are able fighters when pressed. If a black bear scores a paw hit with an 18 or better it also hugs for 2-8 (2d4) points of additional damage.}}'},
- {name:'Black-Dragon',type:'dragonrace',ct:'1',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}Specs=[Black-Dragon,DragonRace,2H,Red-Dragon]{{}}RaceData=[w:Black Dragon, cattr:int=8:10|mov=12|fly=30C|swim=12|ac=5-??1|hd=(12+??2)d8r1|mr=(v(^((??1-4);0);1)*(??1-3)*5)|cl=mu:black-dragon|lv=4+??1|thac0=9-??2|dmg=??1|size=G|attk1=1d6:Claw x 2 or Claw+Kick:0:S|attk2=3d6:Bite:0:P|attk3=2d6:Tail Swipe:0:B|attkmsg=Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$\\lbrak;Show the radius\\rbrak;\\lpar;!rounds ~~aoe `{selected¦token_id}¦arc180¦feet¦0¦\\lbrak;\\lbrak;`{selected¦age¦max}*7\\rbrak;\\rbrak;¦\\lbrak;\\lbrak;`{selected¦age¦max}*14\\rbrak;\\rbrak;¦black\\rpar; then up to \\lbrak;\\lbrak;`{selected¦age¦max}\\rbrak;\\rbrak; opponents in the area take damage and Save vs. Petrification with the penalty shown below or be \\lbrak;Stunned\\rbrak;\\lpar;!rounds ~~target area¦`{selected¦token_id}¦\\amp#64;{target¦Select the stunned creature¦token_id}¦Stunned¦\\lbrak;\\amp#91;1+1d4\\amp#93;\\rbrak;¦-1¦Stunned by a dragon tail slap¦back-pain\\rpar; for 1d4+1 rounds., spattk:*Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*, spdef:Magic resistance @{selected|monstermagicresist}% and immune to acid. Has innate *water breathing* so is amphibious, ns:=11],[cl:PW,w:Black-Dragon-Breath,pd:-1,sp:1],[cl:PW,age:4,w:PW-Black-Dragon-Darkness,pd:3,sp:1],[cl:PW,w:PW-Corrupt-Water,age:6,pd:1,sp:1],[cl:PW,w:PR-Plant-Growth,age:8,pd:1,sp:1],[cl:PW,w:PR-Summon-Insects,age:10,pd:1,sp:1],[cl:PW,w:PW-Charm-Reptiles,age:12,pd:3,sp:1]{{}}%{Race-DB-Creatures|Red-Dragon}{{title=Black}}{{Intelligence=Average (8-10)}}{{AC=Varies with age, adult black dragon is AC -1}}{{Move=12, FL 30(C), Sw 12}}{{Hit Dice=Varies with age, adult black dragon is 14 HD}}{{THAC0=Varies with age, adult black dragon is 7}}{{Section1=**Attacks:** Damage bonus varies with age, adult black dragon is +6. 2 x Claws for 1d6 HP each, possibly with 1 or 2 kicks for 1d6 each, bite for 3d6, and tail slap for 2d6 and possible *stun* within an area varying with age. Several other attacks possible - see *Powers*}}{{Languages=*Black Dragon* and *Evil Dragon Common*, and 10% of hatchlings (+5% per age level) can perform universal communication with any intelligent creature}}{{Breath Weapon=A blast of acid, 5ft wide extending 60ft from the dragon. Damage varies by age from 2d4+1 to 24d4+12. Save vs. Breath Weapon to take half damage}}{{Spell Casting=Knows a number of random wizard spells cast at a level from 5 to 16 varying with age. All spells are cast at a speed of 1 segment regardless of the spell}}{{Spell-like Powers=*Juvenile* dragons can cast *darkness* x 3 per day for 10ft radius per age category, *Adults* gain *Corrupt Water* once a day, *Old* dragons gains *Plant Growth* once a day, *Venerable* gain *Summon Insects* x 1 per day, and *Great Wyrms* gain *Charm Reptiles* x 3 per day}}{{desc8=**Black Dragons:** Black dragons are abusive, quick to anger, and resent intrusions of any kind. They like dismal surroundings, heavy vegetation, and prefer darkness to daylight. Although not as intelligent as other dragons, black dragons are instinctively cunning and malevolent.\nAt birth, a black dragon\'s scales are thin, small, and glossy. But as the dragon ages, its scales become larger, thicker, and duller, which helps it camouflage itself in swamps and marshes.\nBlack dragons are found in swamps, marshes, rain forests, and jungles. They revel in a steamy environment where canopies of trees filter out most of the sunlight, swarms of insects fill the air, and stagnant moss-covered ponds lie in abundance. Black dragons are excellent swimmers and enjoy lurking in the gloomy depths of swamps and bogs. They also are graceful in flight; however, they prefer to fly at night when their great forms are hidden by the darkness of the sky. Black dragons are extremely selfish, and the majority of those encountered will be alone. When a family of black dragons is encountered, the adults will protect their young. However, if it appears the adults\' lives are in jeopardy they will abandon their young to save themselves.\nThey lair in large, damp caves and multi-chambered subterranean caverns. Older dragons are able to hide the entrance to their lairs with their plant growth ability. Black dragons are especially fond of coins. Older black dragons sometimes capture and question humans, before killing them, to find out where stockpiles of gold, silver, and platinum coins are kept.}}{{desc9=**Combat:** Black dragons prefer to ambush their targets, using their surroundings as cover. Their favorite targets are men, who they will sometimes stalk for several minutes in an attempt to gauge their strength and wealth before attacking. Against a band of men or a formidable creature, of the marsh can weaken the targets before the dragon joins the fight. Black dragons will also use their breath weapon before closing in melee. When fighting in heavily vegetated swamps and marshes, black dragons attempt to stay in the water or along the ground; the numerous trees and leafy canopies limit their flying maneuverability. When faced with an opponent which poses too much of a threat, a black dragon will attempt to fly out of sight, so it will not leave tracks, and hide in a deep pond or bog.}}'},
+ {name:'Black-Dragon',type:'dragonrace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}Specs=[Black-Dragon,DragonRace,2H,Red-Dragon]{{}}RaceData=[w:Black Dragon, cattr:int=8:10|mov=12|fly=30C|swim=12|ac=5-??1|hd=(12+??2)d8r1|mr=(v(^((??1-4);0);1)*(??1-3)*5)|cl=mu:black-dragon|lv=4+??1|thac0=9-??2|dmg=??1|size=G|attk1=1d6:Claw x 2 or Claw+Kick:0:S|attk2=3d6:Bite:0:P|attk3=2d6:Tail Swipe:0:B|attkmsg=Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$\\lbrak;Show the radius\\rbrak;\\lpar;!rounds ~~aoe `{selected¦token_id}¦arc180¦feet¦0¦\\lbrak;\\lbrak;`{selected¦age¦max}*7\\rbrak;\\rbrak;¦\\lbrak;\\lbrak;`{selected¦age¦max}*14\\rbrak;\\rbrak;¦black\\rpar; then up to \\lbrak;\\lbrak;`{selected¦age¦max}\\rbrak;\\rbrak; opponents in the area take damage and Save vs. Petrification with the penalty shown below or be \\lbrak;Stunned\\rbrak;\\lpar;!rounds ~~target area¦`{selected¦token_id}¦\\amp#64;{target¦Select the stunned creature¦token_id}¦Stunned¦\\lbrak;\\amp#91;1+1d4\\amp#93;\\rbrak;¦-1¦Stunned by a dragon tail slap¦back-pain\\rpar; for 1d4+1 rounds., spattk:*Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*, spdef:Magic resistance @{selected|monstermagicresist}% and immune to acid. Has innate *water breathing* so is amphibious, ns:=11],[cl:PW,w:Black-Dragon-Breath,pd:-1,sp:1],[cl:PW,age:4,w:PW-Black-Dragon-Darkness,pd:3,sp:1],[cl:PW,w:PW-Corrupt-Water,age:6,pd:1,sp:1],[cl:PW,w:PR-Plant-Growth,age:8,pd:1,sp:1],[cl:PW,w:PR-Summon-Insects,age:10,pd:1,sp:1],[cl:PW,w:PW-Charm-Reptiles,age:12,pd:3,sp:1]{{}}%{Race-DB-Creatures|Red-Dragon}{{title=Black}}{{Intelligence=Average (8-10)}}{{AC=Varies with age, adult black dragon is AC -1}}{{Move=12, FL 30(C), Sw 12}}{{Hit Dice=Varies with age, adult black dragon is 14 HD}}{{THAC0=Varies with age, adult black dragon is 7}}{{Section1=**Attacks:** Damage bonus varies with age, adult black dragon is +6. 2 x Claws for 1d6 HP each, possibly with 1 or 2 kicks for 1d6 each, bite for 3d6, and tail slap for 2d6 and possible *stun* within an area varying with age. Several other attacks possible - see *Powers*}}{{Languages=*Black Dragon* and *Evil Dragon Common*, and 10% of hatchlings (+5% per age level) can perform universal communication with any intelligent creature}}{{Breath Weapon=A blast of acid, 5ft wide extending 60ft from the dragon. Damage varies by age from 2d4+1 to 24d4+12. Save vs. Breath Weapon to take half damage}}{{Spell Casting=Knows a number of random wizard spells cast at a level from 5 to 16 varying with age. All spells are cast at a speed of 1 segment regardless of the spell}}{{Spell-like Powers=*Juvenile* dragons can cast *darkness* x 3 per day for 10ft radius per age category, *Adults* gain *Corrupt Water* once a day, *Old* dragons gains *Plant Growth* once a day, *Venerable* gain *Summon Insects* x 1 per day, and *Great Wyrms* gain *Charm Reptiles* x 3 per day}}{{desc8=**Black Dragons:** Black dragons are abusive, quick to anger, and resent intrusions of any kind. They like dismal surroundings, heavy vegetation, and prefer darkness to daylight. Although not as intelligent as other dragons, black dragons are instinctively cunning and malevolent.\nAt birth, a black dragon\'s scales are thin, small, and glossy. But as the dragon ages, its scales become larger, thicker, and duller, which helps it camouflage itself in swamps and marshes.\nBlack dragons are found in swamps, marshes, rain forests, and jungles. They revel in a steamy environment where canopies of trees filter out most of the sunlight, swarms of insects fill the air, and stagnant moss-covered ponds lie in abundance. Black dragons are excellent swimmers and enjoy lurking in the gloomy depths of swamps and bogs. They also are graceful in flight; however, they prefer to fly at night when their great forms are hidden by the darkness of the sky. Black dragons are extremely selfish, and the majority of those encountered will be alone. When a family of black dragons is encountered, the adults will protect their young. However, if it appears the adults\' lives are in jeopardy they will abandon their young to save themselves.\nThey lair in large, damp caves and multi-chambered subterranean caverns. Older dragons are able to hide the entrance to their lairs with their plant growth ability. Black dragons are especially fond of coins. Older black dragons sometimes capture and question humans, before killing them, to find out where stockpiles of gold, silver, and platinum coins are kept.}}{{desc9=**Combat:** Black dragons prefer to ambush their targets, using their surroundings as cover. Their favorite targets are men, who they will sometimes stalk for several minutes in an attempt to gauge their strength and wealth before attacking. Against a band of men or a formidable creature, of the marsh can weaken the targets before the dragon joins the fight. Black dragons will also use their breath weapon before closing in melee. When fighting in heavily vegetated swamps and marshes, black dragons attempt to stay in the water or along the ground; the numerous trees and leafy canopies limit their flying maneuverability. When faced with an opponent which poses too much of a threat, a black dragon will attempt to fly out of sight, so it will not leave tracks, and hide in a deep pond or bog.}}'},
+ {name:'Black-Pudding',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Pudding}}{{prefix=Black}}RaceData=[w:Black Pudding, align:N, cattr:int=0|mov=6|ac=6|size=M|hd=10|thac0=11|attk1=3d8:Bites:0:P|dmgmsg=Disolves a 2-inch thickness of wood equal to its diameter in one round. Chain mail dissolves in one round; plate mail in two; each magical "plus" increases the time it takes to dissolve the metal by one round, spattk:Disolves a 2-inch thickness of wood equal to its diameter in one round. Chain mail dissolves in one round; plate mail in two; each magical "plus" increases the time it takes to dissolve the metal by one round]{{subtitle=Creature}}Specs=[Black Pudding,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Non (0)}}{{AC=6}}{{Alignment=Neutral}}{{Move=6}}{{Hit Dice=10 HD}}{{THAC0=11}}{{Attack=Multiple bites with acid juices doing 3d8 damage}}{{Size=S to L, depending on HP: \\lt30% 3-4ft (S), 31-50% 5ft (M), 51-70% 6ft (M), 71-90% 7ft (L), \\gt91% 8ft (L)}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=**Immunity:** Acid, Cold, and poison have no effect.\n**Dividing:** *Lightning Bolts* and weapon blows divide the pudding into smaller puddings each able to attack with no penalty}}{{Section6=**Acid:** A successful attack disolves a 2-inch thickness of wood equal to its diameter in one round. Chain mail dissolves in one round, plate mail in two; each magical "plus" increases the time it takes to dissolve the metal by one round}}{{Section7=**Special Disadvantages**}}{{Section8=If a pudding is split up so it becomes less than 3 feet wide, it becomes thinner but retains its 3-foot diameter.}}{{Section9=**Description**}}{{desc7=Puddings are voracious, puddinglike monsters composed of groups of cell colonies that scavenge and hunt for food. They typically inhabit ruins and dungeons. They have the ability to sense heat and analyze material structure from a distance of up to 90 feet to determine if something is edible. Deadly puddings attack any animals (including humans) or vegetable matter on sight.Puddings can ooze through cracks that are at least 1 inch wide and can travel on ceilings and walls (falling on victims as a nasty surprise) at the same speed as on a level surface.\nPuddings reproduce by fission. They are adapted to live in a wide variety of climates.\nBecause puddings do not use all of their mouth openings (which cover their exposed surfaces), the smallest pudding does the same damage as the largest.}}{{desc9=**Combat:** Black pudding acid is highly corrosive, inflicting 3-24 points of damage per round to organic matter and dissolving a 2-inch thickness of wood equal to its diameter in one round. Black puddings also dissolve metal. Chain mail dissolves in one round, plate mail in two; each magical "plus" increases the time it takes to dissolve the metal by one round (thus plate mail +3 takes two rounds to dissolve for being plate mail, plus three rounds for having a +3 magical bonus, for a total of five rounds).}}'},
{name:'Black-Rat',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Rat}}RaceData=[w:Black Rat, align:N, weaps:none, ac:none, cattr:int=1|mov=15|ac=7|hd=1-6r6|hp=1:2|thac0=20|size=T|attk1=1:Bite:0:P|dmgmsg=If hit \\lbrak;5% chance\\rbrak;\\lpar;!\\amp#13;\\amp#47;gr 1d100\\lt5 if 5 or less rat carries disease\\rpar; of the ratcarrying disease. Save vs. Poison or \\lbrak;catch disease\\rbrak;\\lpar;!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who\'s been bitten?¦token_id}¦Rat Disease¦99¦0¦Caught disease from a rat¦death-zone\\rpar;, spattk:5% chance of carrying disease. On successful hit target save vs. poison or catch disease]{{subtitle=Creature}}Specs=[Black Rat,CreatureRace,0H,Creature]{{title=Black }}{{Section=**Attributes**}}{{Intelligence=Animal (1)}}{{AC=7}}{{Alignment=Neutral}}{{Move=15, Climb 3}}{{Hit Dice=¼ HD}}{{THAC0=20}}{{Attacks=Bite for 1HP damage \\amp 5% chance of save vs. poison or disease}}{{Size=T, 8ins long}}{{Life Expectancy=Short}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=**Possible disease:** There is a 5% chance that the rat carries disease of some type. If diseased, suffering a bite requires a save vs. poison or contract the diease}}{{Area Effects To Hit=}}{{Section6=**Special Disadvantages**}}{{Fear of Fire=Unless driven by hunger or magic, will avoid fire}}{{Section9=**Description**}}{{desc8=Rats are long-tailed rodents 5-12 inches long. They are aggressive, omnivorous, and adaptable, and they often carry diseases. The black rat is about 8 inches long, with a tail at least that long, a lean body, pointed nose, and long ears. The "black" rat is dark gray with brownish patches, and a gray or white belly. It is a good climber (climb 3) and jumper, but cannot swim. If rats infest a building, black rats inhabit the upper floors, and brown rats occupy the lower floor and the cellars.}}{{desc9=**Combat:** Rats normally flee anything bigger than themselves, but a trapped rat will do anything to survive and a pack of starving rats will attack anything in order to feed. Rats attack with their sharp front teeth and often carry diseases, so that a rat bite has a 5% chance of infecting its victim with a serious disease unless the victim makes a successful saving throw vs. poison. Normal rats fear fire, but brave it when very hungry.}}'},
{name:'Blink-Dog',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Blink Dog}}{{subtitle=Creature}}Specs=[Blink Dog,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Average (8 to 10)}}{{AC=5}}{{Alignment=Lawful Good}}{{Move=12}}{{Hit Dice=4}}{{THAC0=17}}{{Attack=Bite 1d6}}{{Languages=Blink Dog}}{{Size=M, 4ft long}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=**Teleport:** A dog will teleport on a roll of 7 or better on a 12-sided die. To determine where the dog appears, roll a 12-sided die: 1 = in front of opponent, 2 = shielded (or offhand) front flank, 3 = unshielded (or primary hand) front flank, 4-12 = behind. When blinking, the dog will appear from 1 to 3 feet from its opponent and will immediately be able to attack. Innate ability, never into objects}}{{Section6=**Special Disadvantages**}}{{Section7=None}}RaceData=[w:Blink Dog, align:LG, cattr:int=8:10|mov=12|ac=5|size=M|hd=4r3|thac0=17|attk1=1d6:Bite:0:P|attkmsg=Teleport on \\lbrak;7 on d12\\rbrak;\\lpar;!\\amp#13;\\amp#47;gr 1d12cs\\gt7 teleports on 7 or better\\rpar; to 1=front 2=shield/offhand 3=prime hand 4-12 rear on \\lbrak;1d12\\rbrak;\\lpar;!\\amp#13;\\amp#47;gr 1d12\\rpar; just before next attack (no retreating attack),spattk:Teleport just before attack, 75% to behind opponent]{{Section9=**Description**}}{{desc=Blink dogs are yellowish brown canines which are stockier and more muscular than other wild dogs. They are intelligent and employ a limited form of teleportation when they hunt.\nA blink dog attack is well organized. They will blink to and fro without any obvious pattern, using their powers to position themselves for an attack. Fully 75% of the time they are able to attack their targets from the rear. A dog will teleport on a roll of 7 or better on a 12-sided die. To determine where the dog appears, roll a 12-sided die: 1 = in front of opponent, 2 = shielded (or left) front flank, 3 = unshielded (or right) front flank, 4-12 = behind. When blinking, the dog will appear from 1 to 3 feet from its opponent and will immediately be able to attack.\nBlinking is an innate power and the animal will never appear inside a space occupied by a solid object. If seriously threatened, the entire pack will blink out and not return. Blink dogs are intelligent, and communicate in a complex language of barks, yaps, whines, and growls.}}'},
- {name:'Blue-Dragon',type:'dragonrace',ct:'1',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}Specs=[Blue-Dragon,DragonRace,2H,Red-Dragon]{{}}RaceData=[w:Blue Dragon, cattr:int=11:12|mov=9|fly=30C|burrow=4|ac=4-??1|hd=(14+??2)d8r1|mr=(v(^((??1-4);0);1)*(??1-1)*5)|cl=mu:blue-dragon/pr:blue-dragon|lv=6+??1/6+??1|thac0=7-??2|dmg=??1|size=G|attk1=1d8:Claw x 2 or Claw+Kick:0:S|attk2=3d8:Bite:0:P|attk3=2d8:Tail Swipe:0:B|attkmsg=Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$\\lbrak;Show the radius\\rbrak;\\lpar;!rounds ~~aoe `{selected¦token_id}¦arc180¦feet¦0¦\\lbrak;\\lbrak;`{selected¦age¦max}*8\\rbrak;\\rbrak;¦\\lbrak;\\lbrak;`{selected¦age¦max}*16\\rbrak;\\rbrak;¦black\\rpar; then up to \\lbrak;\\lbrak;`{selected¦age¦max}\\rbrak;\\rbrak; opponents in the area take damage and Save vs. Petrification with the penalty shown below or be \\lbrak;Stunned\\rbrak;\\lpar;!rounds ~~target area¦`{selected¦token_id}¦\\amp#64;{target¦Select the stunned creature¦token_id}¦Stunned¦\\lbrak;\\amp#91;1+1d4\\amp#93;\\rbrak;¦-1¦Stunned by a dragon tail slap¦back-pain\\rpar; for 1d4+1 rounds., spattk:*Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*, spdef:Magic resistance @{selected|monstermagicresist}% and immune to electricity from birth, ns:=11],[cl:PW,w:Blue-Dragon-Breath,pd:-1,sp:1],[cl:PW,age:3,w:PR-Create-Water,pd:3,sp:1],[cl:PW,age:3,w:PR-Destroy-Water,pd:3,sp:1],[cl:PW,w:PW-Sound-Imitation,age:4,pd:-1,sp:1],[cl:PW,w:PR-Dust-Devil,age:6,pd:1,sp:1],[cl:PW,w:MU-Ventriloquism,age:8,pd:1,sp:1],[cl:PW,w:MU-Hallucinatory-Terrain,age:10,pd:1,sp:1],[cl:PR,lv:1,w:]{{}}%{Race-DB-Creatures|Red-Dragon}{{title=Blue}}{{Intelligence=Very intelligent (11-12)}}{{AC=Varies with age, adult blue dragon is AC -2}}{{Move=9, FL 30(C), Burrow 4}}{{Hit Dice=Varies with age, adult blue dragon is 16 HD}}{{THAC0=Varies with age, adult blue dragon is 5}}{{Section1=**Attacks:** Damage bonus varies with age, adult blue dragon is +6. 2 x Claws for 1d8 HP each, possibly with 1 or 2 kicks for 1d8 each, bite for 3d8, and tail slap for 2d8 and possible *stun* within an area varying with age. Several other attacks possible - see *Powers*}}{{Languages=*Blue Dragon* and *Evil Dragon Common*, and 12% of hatchlings (+5% per age level) can perform universal communication with any intelligent creature}}{{Breath Weapon=A bolt of electricity, 5ft wide extending 100ft from the dragon. Damage varies by age from 2d8+1 to 24d8+12. Save vs. Breath Weapon to take half damage}}{{Spell Casting=Knows a number of random wizard and priest spells cast at a level from 10 to 18 varying with age. All spells are cast at a speed of 1 segment regardless of the spell}}{{Spell-like Powers=*Young* dragons can cast *create or destroy water* x 3 per day, *Juveniles* can do *Sound Imitation* at will, *Adult* dragons gain *Dust Devil* once a day, *Old* dragons gain *Ventriloquism* x 1 per day, and *Venerable* gain *Hallucinatory Terrain* x 1 per day}}{{desc8=**Blue Dragons:** Blue dragons are extremely territorial and voracious. They love to spend long hours preparing ambushes for herd animals and unwary travelers, and they spend equally long hours dwelling on their success and admiring their trophies.\nThe size of a blue dragon\'s scales increases little as the dragon ages, although they do become thicker and harder. The scales vary in color from an iridescent azure to a deep indigo, retaining a glossy finish through all of the dragon\'s stages because the blowing desert sands polish them. This makes blue dragons easy to spot in barren desert surroundings. However, the dragons often conceal themselves, burrowing into the sand so only part of their heads are exposed.\nBlue dragons love to soar in the hot desert air; usually flying in the daytime when temperatures are the highest. Some blue dragons nearly match the color of the desert sky and use this coloration to their advantage in combat.\nBlue dragons are found in deserts; arid, windswept plains; and hot humid badlands. They enjoy the bleak terrain because there are few obstacles-only an occasional rock outcropping or dune-to interrupt the view of their territories. They spend hours looking out over their domains, watching for trespassers and admiring their property. Most of the blue dragons encountered will be alone because they do not want to share their territories with others. However, when a family is encountered the male dragon will attack ferociously, protecting his property-his mate and young. The female dragon also will join in the attack if the threat proves significant.\nBlue dragons\' enemies are men, who kill the dragons for their skin and treasure, and brass dragons, which share the same environment. If a blue dragon discovers a brass dragon in the same region, it will not rest until the trespassing dragon is killed or driven away.\nBlue dragons lair in vast underground caverns in which they store their treasure. Although blue dragons will collect anything which looks valuable, they are fond of gems - especially sapphires.}}{{desc9=**Combat:** Blue dragons prefer to fight from a distance so their opponents can clearly witness the full force of their breath weapon and so little or no threat is posed to themselves. Often blue dragons will attack from directly above or will burrow beneath the sands until opponents come within 100 feet. Older blue dragons will use their special abilities, such as hallucinatory terrain, in concert with these tactics to mask the land and aid in their chances to surprise. Blue dragons will only run from a fight if they are severely damaged, since they view retreat as cowardly.}}'},
+ {name:'Blue-Dragon',type:'dragonrace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}Specs=[Blue-Dragon,DragonRace,2H,Red-Dragon]{{}}RaceData=[w:Blue Dragon, cattr:int=11:12|mov=9|fly=30C|burrow=4|ac=4-??1|hd=(14+??2)d8r1|mr=(v(^((??1-4);0);1)*(??1-1)*5)|cl=mu:blue-dragon/pr:blue-dragon|lv=6+??1/6+??1|thac0=7-??2|dmg=??1|size=G|attk1=1d8:Claw x 2 or Claw+Kick:0:S|attk2=3d8:Bite:0:P|attk3=2d8:Tail Swipe:0:B|attkmsg=Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$\\lbrak;Show the radius\\rbrak;\\lpar;!rounds ~~aoe `{selected¦token_id}¦arc180¦feet¦0¦\\lbrak;\\lbrak;`{selected¦age¦max}*8\\rbrak;\\rbrak;¦\\lbrak;\\lbrak;`{selected¦age¦max}*16\\rbrak;\\rbrak;¦black\\rpar; then up to \\lbrak;\\lbrak;`{selected¦age¦max}\\rbrak;\\rbrak; opponents in the area take damage and Save vs. Petrification with the penalty shown below or be \\lbrak;Stunned\\rbrak;\\lpar;!rounds ~~target area¦`{selected¦token_id}¦\\amp#64;{target¦Select the stunned creature¦token_id}¦Stunned¦\\lbrak;\\amp#91;1+1d4\\amp#93;\\rbrak;¦-1¦Stunned by a dragon tail slap¦back-pain\\rpar; for 1d4+1 rounds., spattk:*Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*, spdef:Magic resistance @{selected|monstermagicresist}% and immune to electricity from birth, ns:=11],[cl:PW,w:Blue-Dragon-Breath,pd:-1,sp:1],[cl:PW,age:3,w:PR-Create-Water,pd:3,sp:1],[cl:PW,age:3,w:PR-Destroy-Water,pd:3,sp:1],[cl:PW,w:PW-Sound-Imitation,age:4,pd:-1,sp:1],[cl:PW,w:PR-Dust-Devil,age:6,pd:1,sp:1],[cl:PW,w:MU-Ventriloquism,age:8,pd:1,sp:1],[cl:PW,w:MU-Hallucinatory-Terrain,age:10,pd:1,sp:1],[cl:PR,lv:1,w:]{{}}%{Race-DB-Creatures|Red-Dragon}{{title=Blue}}{{Intelligence=Very intelligent (11-12)}}{{AC=Varies with age, adult blue dragon is AC -2}}{{Move=9, FL 30(C), Burrow 4}}{{Hit Dice=Varies with age, adult blue dragon is 16 HD}}{{THAC0=Varies with age, adult blue dragon is 5}}{{Section1=**Attacks:** Damage bonus varies with age, adult blue dragon is +6. 2 x Claws for 1d8 HP each, possibly with 1 or 2 kicks for 1d8 each, bite for 3d8, and tail slap for 2d8 and possible *stun* within an area varying with age. Several other attacks possible - see *Powers*}}{{Languages=*Blue Dragon* and *Evil Dragon Common*, and 12% of hatchlings (+5% per age level) can perform universal communication with any intelligent creature}}{{Breath Weapon=A bolt of electricity, 5ft wide extending 100ft from the dragon. Damage varies by age from 2d8+1 to 24d8+12. Save vs. Breath Weapon to take half damage}}{{Spell Casting=Knows a number of random wizard and priest spells cast at a level from 10 to 18 varying with age. All spells are cast at a speed of 1 segment regardless of the spell}}{{Spell-like Powers=*Young* dragons can cast *create or destroy water* x 3 per day, *Juveniles* can do *Sound Imitation* at will, *Adult* dragons gain *Dust Devil* once a day, *Old* dragons gain *Ventriloquism* x 1 per day, and *Venerable* gain *Hallucinatory Terrain* x 1 per day}}{{desc8=**Blue Dragons:** Blue dragons are extremely territorial and voracious. They love to spend long hours preparing ambushes for herd animals and unwary travelers, and they spend equally long hours dwelling on their success and admiring their trophies.\nThe size of a blue dragon\'s scales increases little as the dragon ages, although they do become thicker and harder. The scales vary in color from an iridescent azure to a deep indigo, retaining a glossy finish through all of the dragon\'s stages because the blowing desert sands polish them. This makes blue dragons easy to spot in barren desert surroundings. However, the dragons often conceal themselves, burrowing into the sand so only part of their heads are exposed.\nBlue dragons love to soar in the hot desert air; usually flying in the daytime when temperatures are the highest. Some blue dragons nearly match the color of the desert sky and use this coloration to their advantage in combat.\nBlue dragons are found in deserts; arid, windswept plains; and hot humid badlands. They enjoy the bleak terrain because there are few obstacles-only an occasional rock outcropping or dune-to interrupt the view of their territories. They spend hours looking out over their domains, watching for trespassers and admiring their property. Most of the blue dragons encountered will be alone because they do not want to share their territories with others. However, when a family is encountered the male dragon will attack ferociously, protecting his property-his mate and young. The female dragon also will join in the attack if the threat proves significant.\nBlue dragons\' enemies are men, who kill the dragons for their skin and treasure, and brass dragons, which share the same environment. If a blue dragon discovers a brass dragon in the same region, it will not rest until the trespassing dragon is killed or driven away.\nBlue dragons lair in vast underground caverns in which they store their treasure. Although blue dragons will collect anything which looks valuable, they are fond of gems - especially sapphires.}}{{desc9=**Combat:** Blue dragons prefer to fight from a distance so their opponents can clearly witness the full force of their breath weapon and so little or no threat is posed to themselves. Often blue dragons will attack from directly above or will burrow beneath the sands until opponents come within 100 feet. Older blue dragons will use their special abilities, such as hallucinatory terrain, in concert with these tactics to mask the land and aid in their chances to surprise. Blue dragons will only run from a fight if they are severely damaged, since they view retreat as cowardly.}}'},
{name:'Boalisk',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Boalisk, cattr:mov=12|hd=5+1r3|thac0=17|size=L| attk1=1d3:Bite:0:P|attk2=1+1d6:Constrict:0:B|attkmsg=A single creature meeing gaze e.g. surprised or attacking without -4 penalty must save vs. petrification or \\lbrak;suffer rot\\rbrak;\\lpar;!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who\'s the Victim?¦\\token_id}¦Boalisk Rot¦1¦1¦Suffering from a rotting disease. Oh... it\'ll be alright...?¦radioactive\\rpar;. Can do as a 3rd attack$$If successfully hit as well as damage this round \\lbrak;all future rounds\\rbrak;\\lpar;!rounds --target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the Unfortunate Victim?¦token_id}¦Boalisk Constrict¦\\amp#91;\\lbrak;99\\rbrak;\\amp#93;¦0¦Argh... The squeeze is on...¦back-pain\\rpar; automatically hit and do crushing damage, spattk:Once coiled victim takes crushing damage each round. Gaze attack causes rotting disease]{{}}Specs=[Constrictor Snake,CreatureRace,0H,Constrictor Snake]{{}}%{Race-DB-Creatures|Constrictor-Snake}{{title=Boalisk}}{{Move=12}}{{Hit Dice=5+1}}{{Attacks=Bite, attempt to coil \\amp constrict, and *Gaze* inflicts rotting disease}}{{Size=L, 25ft long}}{{Life Expectancy=Unknown}}{{Section5=**Constriction:** Suffering damage every round. Constricted humanoid creatures can escape the coils of normal constrictors with a successful open doors roll (at a -1 penalty).\n**Gaze Attack:** Any creature meeting its gaze (failing a saving throw vs. petrification) is infected with a magical rotting disease, identical to that inflicted by a mummy. Characters refusing to look at the boalisk automatically avoid its gaze but suffer a -4 penalty to their AC. Surprised victims always meet its gaze and gain no saving throw. The boalisk can use its gaze on a single victim each round in addition to normal biting and constriction attacks.}}'},
{name:'Boar',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Wild Boar}}RaceData=[w:Boar, align:N, weaps:none, ac:none, cattr:int=1|mov=15|ac=7|hd=3+3r4|thac0=17|size=M|attk1=3d4:Bite:0:P]{{subtitle=Creature}}Specs=[Boar,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Animal (1)}}{{AC=7}}{{Alignment=Neutral}}{{Move=15}}{{Hit Dice=3+3 HD}}{{THAC0=17}}{{Attacks=Bite for 3d4. Resilient in battle, meaning will continue to fight down to -7 HP}}{{Size=M}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=*Resilient in battle* meaning the Boar will continue to fight down to -7 HP}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=Wild boar continue to attack until they are reduced to -7 hit points. The giant boar is often called an alothere.}}'},
- {name:'Brass-Dragon',type:'dragonrace',ct:'1',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}Specs=[Brass-Dragon,DragonRace,2H,Red-Dragon]{{}}RaceData=[w:Brass Dragon, cattr:int=13:14|mov=12|fly=30C|burrow=6|ac=1-??1|hd=(12+??2)d8r1|mr=(v(^((??1-4);0);1)*(??1-2)*5)|cl=mu:brass-dragon/pr:brass-dragon|lv=5+??1/5+??1|thac0=9-??2|dmg=??1|size=G|attk1=1d6:Claw x 2 or Claw+Kick:0:S|attk2=4d4:Bite:0:P|attk3=2d6:Tail Swipe:0:B|attkmsg=Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$\\lbrak;Show the radius\\rbrak;\\lpar;!rounds ~~aoe `{selected¦token_id}¦arc180¦feet¦0¦\\lbrak;\\lbrak;`{selected¦age¦max}*7\\rbrak;\\rbrak;¦\\lbrak;\\lbrak;`{selected¦age¦max}*14\\rbrak;\\rbrak;¦black\\rpar; then up to \\lbrak;\\lbrak;`{selected¦age¦max}\\rbrak;\\rbrak; opponents in the area take damage and Save vs. Petrification with the penalty shown below or be \\lbrak;Stunned\\rbrak;\\lpar;!rounds ~~target area¦`{selected¦token_id}¦\\amp#64;{target¦Select the stunned creature¦token_id}¦Stunned¦\\lbrak;\\amp#91;1+1d4\\amp#93;\\rbrak;¦-1¦Stunned by a dragon tail slap¦back-pain\\rpar; for 1d4+1 rounds., spattk:*Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*, spdef:Magic resistance @{selected|monstermagicresist}% and immune to fire and heat from birth, ns:=11],[cl:PW,w:Brass-Dragon-Breath,pd:-1,sp:1],[cl:PW,age:3,w:PR-Create-Water,pd:3,sp:1],[cl:PW,age:3,w:PR-Destroy-Water,pd:3,sp:1],[cl:PW,w:PR-Dust-Devil,age:4,pd:1,sp:1],[cl:PW,w:MU-Suggestion,age:6,pd:1,sp:1],[cl:PW,w:PR-Control-Temperature-10ft-Radius,age:7,pd:3,sp:1],[cl:PW,w:PR-Control-Winds,age:8,pd:1,sp:1],[cl:PW,w:PW-Summon-Djinni,age:12,pd:1,sp:1],[cl:PR,lv:1,w:],[cl:PR,lv:2,w:]{{}}%{Race-DB-Creatures|Red-Dragon}{{title=Brass}}{{Intelligence=Highly intelligent (13-14)}}{{AC=Varies with age, adult brass dragon is AC -2}}{{Move=12, FL 30(C), Burrow 6}}{{Hit Dice=Varies with age, adult brass dragon is 14 HD}}{{THAC0=Varies with age, adult brass dragon is 7}}{{Section1=**Attacks:** Damage bonus varies with age, adult brass dragon is +6. 2 x Claws for 1d6 HP each, possibly with 1 or 2 kicks for 1d6 each, bite for 4d4, and tail slap for 2d6 and possible *stun* within an area varying with age. Several other attacks possible - see *Powers*}}{{Languages=*Brass Dragon* and *Good Dragon Common*, and can *speak with animals* freely from birth. 12% of hatchlings (+5% per age level) can perform universal communication with any intelligent creature}}{{Breath Weapon=A brass dragon has two breath weapons: a cone of sleep gas 70\' long, 5\' wide at the dragon\'s mouth, and 20\' wide at its end; or a cloud of blistering desert heat 50\' long, 40\' wide, and 20\' high. Creatures caught in the gas, regardless of Hit Dice or level, must save vs. breath weapon for half or fall asleep (as per *sleep* spell). Damage from the heat breath weapon varies by age from 2d4+1 to 24d4+12. Save vs. Breath Weapon to take half damage}}{{Spell Casting=Knows a number of random wizard and priest spells cast at a level from 10 to 17 varying with age. All spells are cast at a speed of 1 segment regardless of the spell}}{{Spell-like Powers=*Young* dragons can cast *create or destroy water* x 3 per day, *Juveniles* can do *Dust Devil* x1 per day, *Adult* dragons gain *Suggestion* once a day, *Mature Adults* can do *Control Temperature 10ft Radius* x3 per day, *Old* dragons *Control Winds* x 1 per day, and a *Great Wyrm* can *Summon a Djinni* x 1 per day}}{{desc8=**Brass Dragons:** Brass dragons are great talkers, but not particularly good conversationalists. They are egotistical and often boorish. They oftern have useful information, but will divulge it only after drifting off the subject many times and after hints that a gift would be appreciated.\nAt birth, a brass dragon\'s scales are dull. Their color is a brassy, mottled brown. As the dragon gets older, the scales become more brassy, until they reach a warm burnished appearance.\nBrass dragons are found in arid, warm climates; ranging from sandy deserts to dry steppes. They love intense, dry heat and spend most of their time basking in the sun. They lair in high caves, preferably facing east where the sun can warm the rocks, and their territories always contain several spots where they can bask and trap unwary travelers into conversation.\nBrass dragons are very social. They usually are on good terms with neighboring brass dragons and sphinxes. Brass dragons are dedicated parents. If their young are attacked they will try to slay the enemy, using their heat breath weapons and taking full advantage of their own immunity. Because they share the same habitat, blue dragons are brass dragons\' worst enemies. Brass dragons usually get the worst of a one-on-one confrontation, mostly because of the longer reach of the blue dragon\'s breath weapon. Because of this, brass dragons usually try to evade blue dragons until they can rally their neighbors for a mass attack.}}{{desc9=**Combat:** Brass dragons would rather talk than fight. If an intelligent creature tries to take its leave of a brass dragon without talking to it at length, the dragon might have a fit of pique and try to force a conversation with suggestion or by giving the a dose of sleep gas. If the victim falls asleep it will awaken to find itself pinned under the dragon or buried to the neck in the sand until the dragon\'s thirst for small talk is slaked. Before melee, brass dragons create a cloud of dust with dust devil or control winds, then charge or snatch. Brass dragons often use control temperature to create heat to discomfort their opponents. When faced with real danger, younger brass dragons will fly out of sight, then hide by burrowing. Older dragons spurn this ploy.}}'},
- {name:'Bronze-Dragon',type:'dragonrace',ct:'1',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}Specs=[Bronze-Dragon,DragonRace,2H,Red-Dragon]{{}}RaceData=[w:Bronze Dragon, cattr:int=15:16|mov=9|fly=30C|swim=12|ac=2-??1|hd=(14+??2)d8r1|mr=(v(^((??1-4);0);1)*(??1-1)*5)|cl=mu:bronze-dragon/pr:bronze-dragon|lv=7+??1/7+??1|thac0=8-??2|dmg=??1|size=G|attk1=1d8:Claw x 2 or Claw+Kick:0:S|attk2=4d6:Bite:0:P|attk3=2d8:Tail Swipe:0:B|attkmsg=Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$\\lbrak;Show the radius\\rbrak;\\lpar;!rounds ~~aoe `{selected¦token_id}¦arc180¦feet¦0¦\\lbrak;\\lbrak;`{selected¦age¦max}*10\\rbrak;\\rbrak;¦\\lbrak;\\lbrak;`{selected¦age¦max}*20\\rbrak;\\rbrak;¦black\\rpar; then up to \\lbrak;\\lbrak;`{selected¦age¦max}\\rbrak;\\rbrak; opponents in the area take damage and Save vs. Petrification with the penalty shown below or be \\lbrak;Stunned\\rbrak;\\lpar;!rounds ~~target area¦`{selected¦token_id}¦\\amp#64;{target¦Select the stunned creature¦token_id}¦Stunned¦\\lbrak;\\amp#91;1+1d4\\amp#93;\\rbrak;¦-1¦Stunned by a dragon tail slap¦back-pain\\rpar; for 1d4+1 rounds., spattk:*Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*, spdef:Magic resistance @{selected|monstermagicresist}% and immune to electricity from birth, ns:=11],[cl:PW,w:Bronze-Dragon-Breath,pd:-1,sp:1],[cl:PW,age:1,w:MU-Water-Breathing,pd:-1,sp:1],[cl:PW,age:3,w:PR-Create-Food-and-Water,pd:3,sp:1],[cl:PW,w:MU-Polymorph-Self,age:3,pd:3,sp:1],[cl:PW,w:MU-Wall-of-Fog,age:4,pd:1,sp:1],[cl:PW,w:MU-ESP,age:6,pd:3,sp:1],[cl:PW,w:PW-Bronze-Dragon-Airy-Water,age:7,pd:3,sp:1],[cl:PW,w:PR-Weather-Summoning,age:8,pd:1,sp:1],[cl:PR,lv:1,w:],[cl:PR,lv:2,w:],[cl:PR,lv:3,w:]{{}}%{Race-DB-Creatures|Red-Dragon}{{title=Bronze}}{{Intelligence=Exceptional (15-16)}}{{AC=Varies with age, adult bronze dragon is AC -4}}{{Move=9, FL 30(C), Swim 12}}{{Hit Dice=Varies with age, adult bronze dragon is 16 HD}}{{THAC0=Varies with age, adult bronze dragon is 6}}{{Section1=**Attacks:** Damage bonus varies with age, adult bronze dragon is +6. 2 x Claws for 1d8 HP each, possibly with 1 or 2 kicks for 1d8 each, bite for 4d6, and tail slap for 2d8 and possible *stun* within an area varying with age. Several other attacks possible - see *Powers*}}{{Languages=*Bronze Dragon* and *Good Dragon Common*, and can *speak with animals* freely from birth. 16% of hatchlings (+5% per age level) can perform universal communication with any intelligent creature}}{{Breath Weapon=A bronze dragon has two breath weapons: a stroke of lightning 100\' long and 5\' side or a cloud of repulsion gas 20\' long, 30\' wide, and 30\' high. Creatures caught in the gas must save vs. breath weapon or move away from the dragon for two minutes per age level of the dragon, plus 1-6 minutes. Creature caught in the lightning take damage, save vs. breath weapon for half. Damage from the lightning breath weapon varies by age from 2d8+1 to 24d8+12. Save vs. Breath Weapon to take half damage}}{{Spell Casting=Knows a number of random wizard and priest spells cast at a level from 11 to 19 varying with age. All spells are cast at a speed of 1 segment regardless of the spell}}{{Spell-like Powers=*Young* dragons can *create food and water* and *polymorph self* x 3 per day, *Juveniles* can do *Wall of Fog* x1 per day, *Adult* dragons gain *ESP* x3 a day, *Mature Adults* can do *Air Water* x3 per day in a [[10*@{selected|age|max}]]ft radius, and *Old* dragons can *Summon Weather* x 1 per day}}{{desc8=**Bronze Dragons:** Bronze dragons are inquisitive and fond of humans and demi-humans. They enjoy polymorphing into small, friendly animals so they can unobtrusively observe humans and demi-humans, especially adventurers. Bronze dragons thrive on simple challenges such as riddles and harmless contests. They are fascinated by warfare and will eagerly join an army if the cause is just and the pay is good.\nAt birth, a bronze dragon\'s scales are yellow tinged with green, showing only a hint of bronze. As the dragon approached adulthood, its color deepens slowly changing to a rich bronze tone that gets darker as the dragon ages. Dragons from the very old stage on develop a blue-black tint to the edges of their scales, similar to a patina on ancient bronze armor or statues.\nBronze dragons like to be near deep fresh or salt water. They are good swimmers and often visit the depths to cool off or to hunt for pearls or treasure from sunken ships. They prefer caves that are accessible only from the water, but their lairs are always dry--they do not lay eggs, sleep, or store treasure under water.\nBronze dragons are fond of sea mammals, especially dolphins and whales. These animals provide the dragons with a wealth of information on shipwrecks, which the dragons love to plunder, and detail the haunts of large sharks. Bronze dragons detest pirates, disabling or destroying their ships.}}{{desc9=**Combat:** Bronze dragons dislike killing creatures with animal intelligence and would rather bribe them (perhaps with food), or force them away with repulsion. When confronted with intelligent opponents bronze dragons use their ESP ability to learn their opponents\' intentions. When attacking they blind their opponents with wall of fog, then charge. Or, if they are flying they will snatch opponents. When fighting under water, they use airy water to maintain the effectiveness of their breath weapons, and to keep away purely aquatic opponents. Against boats or ship they summon a storm or use their tail slap to smash the vessels\' hulls. If the dragon is inclined to be lenient, seafaring opponents might merely find themselves becalmed, fog bound, or with broken masts.}}'},
+ {name:'Brass-Dragon',type:'dragonrace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}Specs=[Brass-Dragon,DragonRace,2H,Red-Dragon]{{}}RaceData=[w:Brass Dragon, cattr:int=13:14|mov=12|fly=30C|burrow=6|ac=1-??1|hd=(12+??2)d8r1|mr=(v(^((??1-4);0);1)*(??1-2)*5)|cl=mu:brass-dragon/pr:brass-dragon|lv=5+??1/5+??1|thac0=9-??2|dmg=??1|size=G|attk1=1d6:Claw x 2 or Claw+Kick:0:S|attk2=4d4:Bite:0:P|attk3=2d6:Tail Swipe:0:B|attkmsg=Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$\\lbrak;Show the radius\\rbrak;\\lpar;!rounds ~~aoe `{selected¦token_id}¦arc180¦feet¦0¦\\lbrak;\\lbrak;`{selected¦age¦max}*7\\rbrak;\\rbrak;¦\\lbrak;\\lbrak;`{selected¦age¦max}*14\\rbrak;\\rbrak;¦black\\rpar; then up to \\lbrak;\\lbrak;`{selected¦age¦max}\\rbrak;\\rbrak; opponents in the area take damage and Save vs. Petrification with the penalty shown below or be \\lbrak;Stunned\\rbrak;\\lpar;!rounds ~~target area¦`{selected¦token_id}¦\\amp#64;{target¦Select the stunned creature¦token_id}¦Stunned¦\\lbrak;\\amp#91;1+1d4\\amp#93;\\rbrak;¦-1¦Stunned by a dragon tail slap¦back-pain\\rpar; for 1d4+1 rounds., spattk:*Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*, spdef:Magic resistance @{selected|monstermagicresist}% and immune to fire and heat from birth, ns:=11],[cl:PW,w:Brass-Dragon-Breath,pd:-1,sp:1],[cl:PW,age:3,w:PR-Create-Water,pd:3,sp:1],[cl:PW,age:3,w:PR-Destroy-Water,pd:3,sp:1],[cl:PW,w:PR-Dust-Devil,age:4,pd:1,sp:1],[cl:PW,w:MU-Suggestion,age:6,pd:1,sp:1],[cl:PW,w:PR-Control-Temperature-10ft-Radius,age:7,pd:3,sp:1],[cl:PW,w:PR-Control-Winds,age:8,pd:1,sp:1],[cl:PW,w:PW-Summon-Djinni,age:12,pd:1,sp:1],[cl:PR,lv:1,w:],[cl:PR,lv:2,w:]{{}}%{Race-DB-Creatures|Red-Dragon}{{title=Brass}}{{Intelligence=Highly intelligent (13-14)}}{{AC=Varies with age, adult brass dragon is AC -2}}{{Move=12, FL 30(C), Burrow 6}}{{Hit Dice=Varies with age, adult brass dragon is 14 HD}}{{THAC0=Varies with age, adult brass dragon is 7}}{{Section1=**Attacks:** Damage bonus varies with age, adult brass dragon is +6. 2 x Claws for 1d6 HP each, possibly with 1 or 2 kicks for 1d6 each, bite for 4d4, and tail slap for 2d6 and possible *stun* within an area varying with age. Several other attacks possible - see *Powers*}}{{Languages=*Brass Dragon* and *Good Dragon Common*, and can *speak with animals* freely from birth. 12% of hatchlings (+5% per age level) can perform universal communication with any intelligent creature}}{{Breath Weapon=A brass dragon has two breath weapons: a cone of sleep gas 70\' long, 5\' wide at the dragon\'s mouth, and 20\' wide at its end; or a cloud of blistering desert heat 50\' long, 40\' wide, and 20\' high. Creatures caught in the gas, regardless of Hit Dice or level, must save vs. breath weapon for half or fall asleep (as per *sleep* spell). Damage from the heat breath weapon varies by age from 2d4+1 to 24d4+12. Save vs. Breath Weapon to take half damage}}{{Spell Casting=Knows a number of random wizard and priest spells cast at a level from 10 to 17 varying with age. All spells are cast at a speed of 1 segment regardless of the spell}}{{Spell-like Powers=*Young* dragons can cast *create or destroy water* x 3 per day, *Juveniles* can do *Dust Devil* x1 per day, *Adult* dragons gain *Suggestion* once a day, *Mature Adults* can do *Control Temperature 10ft Radius* x3 per day, *Old* dragons *Control Winds* x 1 per day, and a *Great Wyrm* can *Summon a Djinni* x 1 per day}}{{desc8=**Brass Dragons:** Brass dragons are great talkers, but not particularly good conversationalists. They are egotistical and often boorish. They oftern have useful information, but will divulge it only after drifting off the subject many times and after hints that a gift would be appreciated.\nAt birth, a brass dragon\'s scales are dull. Their color is a brassy, mottled brown. As the dragon gets older, the scales become more brassy, until they reach a warm burnished appearance.\nBrass dragons are found in arid, warm climates; ranging from sandy deserts to dry steppes. They love intense, dry heat and spend most of their time basking in the sun. They lair in high caves, preferably facing east where the sun can warm the rocks, and their territories always contain several spots where they can bask and trap unwary travelers into conversation.\nBrass dragons are very social. They usually are on good terms with neighboring brass dragons and sphinxes. Brass dragons are dedicated parents. If their young are attacked they will try to slay the enemy, using their heat breath weapons and taking full advantage of their own immunity. Because they share the same habitat, blue dragons are brass dragons\' worst enemies. Brass dragons usually get the worst of a one-on-one confrontation, mostly because of the longer reach of the blue dragon\'s breath weapon. Because of this, brass dragons usually try to evade blue dragons until they can rally their neighbors for a mass attack.}}{{desc9=**Combat:** Brass dragons would rather talk than fight. If an intelligent creature tries to take its leave of a brass dragon without talking to it at length, the dragon might have a fit of pique and try to force a conversation with suggestion or by giving the a dose of sleep gas. If the victim falls asleep it will awaken to find itself pinned under the dragon or buried to the neck in the sand until the dragon\'s thirst for small talk is slaked. Before melee, brass dragons create a cloud of dust with dust devil or control winds, then charge or snatch. Brass dragons often use control temperature to create heat to discomfort their opponents. When faced with real danger, younger brass dragons will fly out of sight, then hide by burrowing. Older dragons spurn this ploy.}}'},
+ {name:'Bronze-Dragon',type:'dragonrace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}Specs=[Bronze-Dragon,DragonRace,2H,Red-Dragon]{{}}RaceData=[w:Bronze Dragon, cattr:int=15:16|mov=9|fly=30C|swim=12|ac=2-??1|hd=(14+??2)d8r1|mr=(v(^((??1-4);0);1)*(??1-1)*5)|cl=mu:bronze-dragon/pr:bronze-dragon|lv=7+??1/7+??1|thac0=8-??2|dmg=??1|size=G|attk1=1d8:Claw x 2 or Claw+Kick:0:S|attk2=4d6:Bite:0:P|attk3=2d8:Tail Swipe:0:B|attkmsg=Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$\\lbrak;Show the radius\\rbrak;\\lpar;!rounds ~~aoe `{selected¦token_id}¦arc180¦feet¦0¦\\lbrak;\\lbrak;`{selected¦age¦max}*10\\rbrak;\\rbrak;¦\\lbrak;\\lbrak;`{selected¦age¦max}*20\\rbrak;\\rbrak;¦black\\rpar; then up to \\lbrak;\\lbrak;`{selected¦age¦max}\\rbrak;\\rbrak; opponents in the area take damage and Save vs. Petrification with the penalty shown below or be \\lbrak;Stunned\\rbrak;\\lpar;!rounds ~~target area¦`{selected¦token_id}¦\\amp#64;{target¦Select the stunned creature¦token_id}¦Stunned¦\\lbrak;\\amp#91;1+1d4\\amp#93;\\rbrak;¦-1¦Stunned by a dragon tail slap¦back-pain\\rpar; for 1d4+1 rounds., spattk:*Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*, spdef:Magic resistance @{selected|monstermagicresist}% and immune to electricity from birth, ns:=11],[cl:PW,w:Bronze-Dragon-Breath,pd:-1,sp:1],[cl:PW,age:1,w:MU-Water-Breathing,pd:-1,sp:1],[cl:PW,age:3,w:PR-Create-Food-and-Water,pd:3,sp:1],[cl:PW,w:MU-Polymorph-Self,age:3,pd:3,sp:1],[cl:PW,w:MU-Wall-of-Fog,age:4,pd:1,sp:1],[cl:PW,w:MU-ESP,age:6,pd:3,sp:1],[cl:PW,w:PW-Bronze-Dragon-Airy-Water,age:7,pd:3,sp:1],[cl:PW,w:PR-Weather-Summoning,age:8,pd:1,sp:1],[cl:PR,lv:1,w:],[cl:PR,lv:2,w:],[cl:PR,lv:3,w:]{{}}%{Race-DB-Creatures|Red-Dragon}{{title=Bronze}}{{Intelligence=Exceptional (15-16)}}{{AC=Varies with age, adult bronze dragon is AC -4}}{{Move=9, FL 30(C), Swim 12}}{{Hit Dice=Varies with age, adult bronze dragon is 16 HD}}{{THAC0=Varies with age, adult bronze dragon is 6}}{{Section1=**Attacks:** Damage bonus varies with age, adult bronze dragon is +6. 2 x Claws for 1d8 HP each, possibly with 1 or 2 kicks for 1d8 each, bite for 4d6, and tail slap for 2d8 and possible *stun* within an area varying with age. Several other attacks possible - see *Powers*}}{{Languages=*Bronze Dragon* and *Good Dragon Common*, and can *speak with animals* freely from birth. 16% of hatchlings (+5% per age level) can perform universal communication with any intelligent creature}}{{Breath Weapon=A bronze dragon has two breath weapons: a stroke of lightning 100\' long and 5\' side or a cloud of repulsion gas 20\' long, 30\' wide, and 30\' high. Creatures caught in the gas must save vs. breath weapon or move away from the dragon for two minutes per age level of the dragon, plus 1-6 minutes. Creature caught in the lightning take damage, save vs. breath weapon for half. Damage from the lightning breath weapon varies by age from 2d8+1 to 24d8+12. Save vs. Breath Weapon to take half damage}}{{Spell Casting=Knows a number of random wizard and priest spells cast at a level from 11 to 19 varying with age. All spells are cast at a speed of 1 segment regardless of the spell}}{{Spell-like Powers=*Young* dragons can *create food and water* and *polymorph self* x 3 per day, *Juveniles* can do *Wall of Fog* x1 per day, *Adult* dragons gain *ESP* x3 a day, *Mature Adults* can do *Air Water* x3 per day in a [[10*@{selected|age|max}]]ft radius, and *Old* dragons can *Summon Weather* x 1 per day}}{{desc8=**Bronze Dragons:** Bronze dragons are inquisitive and fond of humans and demi-humans. They enjoy polymorphing into small, friendly animals so they can unobtrusively observe humans and demi-humans, especially adventurers. Bronze dragons thrive on simple challenges such as riddles and harmless contests. They are fascinated by warfare and will eagerly join an army if the cause is just and the pay is good.\nAt birth, a bronze dragon\'s scales are yellow tinged with green, showing only a hint of bronze. As the dragon approached adulthood, its color deepens slowly changing to a rich bronze tone that gets darker as the dragon ages. Dragons from the very old stage on develop a blue-black tint to the edges of their scales, similar to a patina on ancient bronze armor or statues.\nBronze dragons like to be near deep fresh or salt water. They are good swimmers and often visit the depths to cool off or to hunt for pearls or treasure from sunken ships. They prefer caves that are accessible only from the water, but their lairs are always dry--they do not lay eggs, sleep, or store treasure under water.\nBronze dragons are fond of sea mammals, especially dolphins and whales. These animals provide the dragons with a wealth of information on shipwrecks, which the dragons love to plunder, and detail the haunts of large sharks. Bronze dragons detest pirates, disabling or destroying their ships.}}{{desc9=**Combat:** Bronze dragons dislike killing creatures with animal intelligence and would rather bribe them (perhaps with food), or force them away with repulsion. When confronted with intelligent opponents bronze dragons use their ESP ability to learn their opponents\' intentions. When attacking they blind their opponents with wall of fog, then charge. Or, if they are flying they will snatch opponents. When fighting under water, they use airy water to maintain the effectiveness of their breath weapons, and to keep away purely aquatic opponents. Against boats or ship they summon a storm or use their tail slap to smash the vessels\' hulls. If the dragon is inclined to be lenient, seafaring opponents might merely find themselves becalmed, fog bound, or with broken masts.}}'},
{name:'Broom-of-Animated-Attack',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Broom of Animated Attack}}RaceData=[w:Broom of Animated Attack, align:N, weaps:none, ac:none, cattr:int=0|mov=12|ac=7|hd=4|hp=18|thac0=17|size=M|attk1=1d3:Handle End x 2:0:B|attk2=0:Broom End x 2:0:S|attkmsg=$$Instead of doing damage the broom end blinds for 1 round on a successful hit|dmgmsg=$$Blinds victim for 1 round]{{subtitle=Creature}}Specs=[Broom of Animated Attack,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Not (0)}}{{AC=7}}{{Alignment=Neutral}}{{Move=12}}{{Hit Dice=4 HD}}{{Hit Points=18HP}}{{THAC0=17}}{{Attacks=2 x bludgeoning with handle for 1d3 each, 2 x slashes with broom which blinds if hits}}{{Size=M}}{{Section2=**Powers**}}{{Section3=Broom animates if commanded to act like a *Broom of Flying*}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=If a command word ("fly,\'\' "soar,\'\' etc.) is spoken, the broom will do a loop-the-loop with its hopeful rider, dumping him on his head from 1d4 + 5 feet off the ground. The broom will then attack the stunned victim, swatting the face with the straw/twig end to blind and beating with the handle end.\nThe broom gets two attacks per round with each end (two swats with the straw, two with the handle). It attacks as if it were a 4-Hit-Dice monster. The straw end causes blindness for one round if it hits. The other end causes 1d3 points of damage when it hits. The broom is Armor Class 7 and takes 18 hit points to destroy.}}'},
{name:'Brown-Bear',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Brown }}{{name=Bear}}{{subtitle=Creature}}Specs=[Brown Bear,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Semi- (2 to 4)}}{{AC=6}}{{Alignment=Neutral}}{{Move=12}}{{Hit Dice=5+5}}{{THAC0=15}}{{Attack=2 x Claw 1d6, 1 x Bite 1d8}}{{Languages=None}}{{Size=L, 9ft tall}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=**Hug:** If score a critical hit (natural roll of 18 or better), then also do a hug for 2d6 additional damage}}{{Section6=**Fortitude:** Continue to fight for 1-4 melee rounds after reaching 0 to -8 hit points. At -9 or fewer hit points, they are killed immediately.}}{{Section7=**Special Disadvantages**}}{{Section8=None}}RaceData=[w:Brown Bear, cattr:int=2:4|mov=12|ac=6|size=L|hd=5+5r3|thac0=15|ch=18|attk1=1d6:Claw1:0:S|attk2=1d6:Claw2:0:S|attk3=1d8:Bite:1:P|dmgmsg=If get a Critical Hit \\lpar;18 or better natural roll\\rpar; also get to \\lbrak;Hug for another 2d6\\rbrak;\\lpar;!\\amp#13;\\amp#47;gmroll 2d6 Hug damage\\rpar;. Continue to fight for 4 rounds to -8HP,spattk:Hug if roll a critical hit of 18 or better \\amp continue to fight to -8HP]{{Section9=**Description**}}{{desc=The brown bear, of which the infamous grizzly is the most well known variety, is a bear of very aggressive disposition. Brown bears are more carnivorous than their smaller cousins, the black bears. The grizzly in particular will often bring down large game such as deer and elk.\nBrown bears are aggressive hunters. If a brown bear scores a paw hit with a roll of 18 or better it will also hug for 2-12 (2d6) points of additional damage. Brown bears will continue to fight for 1-4 melee rounds after reaching 0 to -8 hit points. At -9 or fewer hit points, they are killed immediately.}}'},
+ {name:'Brown-Pudding',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Brown Pudding, cattr:ac=5|hd=11|thac0=9|attk1=5d4:Bites:0:P|dmgmsg=Cannot affect metals but dissolves leather and wood in a single round, spattk:annot affect metals but dissolves leather and wood in a single round]{{}}Specs=[Brown Pudding,CreatureRace,0H,Black Pudding]{{}}%{Race-DB-Creatures|Black-Pudding}{{prefix=Brown}}{{AC=5}}{{Hit Dice=11 HD}}{{Attack=Multiple bites with acid juices doing 5d4 damage}}{{Section6=**Acid:** Brown Puddings cannot affect metals but dissolve leather and wood in a single round}}{{desc9=**Combat:** Brown Puddings dwell principally in marsh areas. It has a tough skin but its attack is less dangerous than other types of puddings. Brown puddings cannot affect metals but dissolve leather and wood in a single round, regardless of magical pluses.}}'},
{name:'Brown-Rat',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Brown Rat, cattr:swim=3]{{}}Specs=[Brown Rat,CreatureRace,0H,Black Rat]{{}}%{Race-DB-Creatures|Black-Rat}{{title=Brown }}{{Move=15, Swim 3}}{{desc8=Rats are long-tailed rodents 5-12 inches long. They are aggressive, omnivorous, and adaptable, and they often carry diseases. The brown rat, also known as the sewer rat or the wharf rat, is 5-10 inches long, and its tail is shorter than the black rat\'s. Its eyes and ears are also smaller, but it has a larger, fatter body. Brown rats may be gray, white, black, or piebald in color. They cannot climb, but are excellent swimmers (swim 3) and burrowers.If rats infest a building, black rats inhabit the upper floors, and brown rats occupy the lower floor and the cellars.}}'},
- {name:'Brownie',type:'creaturerace',ct:'1',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Brownie}}{{subtitle=Creature}}Specs=[Brownie,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=High (13 to 14)}}{{AC=3}}{{Alignment=Lawful Good}}{{Move=12}}{{Hit Dice=1/2}}{{THAC0=20}}{{Attack=Weapon 1d2}}{{Languages=*Brownie, elvish, pixie, sprite,* and *halfling,* as well as *common*}}{{Size=T, 2ft tall}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=**Spells:** *protection from evil, ventriloquism, dancing lights, continual light, mirror image (3 images), confusion,* and and *dimension door* each once per day}}{{Section4=**Special Advantages**}}{{Section5=**Blend into Surroundings:** They are superb at blending into\ntheir surroundings and can become all but invisible when they choose}}{{Section6=**Not Surprised:** Since their senses are so keen, it is impossible to surprise brownies.}}{{Section7=**Special Disadvantages**}}{{Section8=None}}RaceData=[w:Brownie, align:LG, cattr:int=13:14|str=3:12|dex=15:18|con=6:12|wis=13:14|chr=10:18|mov=12|ac=3|size=T|hd=1-4r5|thac0=20|attk1=1d2:Weapon:0:S,spattk:Spell-casting powers,spdef:Can blend into surroundings to become almost undetectable. Cannot be surprised,ns:1],[cl:PW,w:Protection From Evil,sp:1,pd:1],[cl:PW,w:Ventriloquism,sp:1,pd:1],[cl:PW,w:Dancing Lights,sp:1,pd:1],[cl:PW,w:Continual Light,sp:2,pd:1],[cl:PW,w:Mirror Image,sp:2,pd:1],[cl:PW,w:confusion,sp:4,pd:1],[cl:PW,w:Dimension Door,sp:1,pd:1],[cl:MI,%:80],[cl:MI,%:20,items:random:1d2]{{Section9=**Description**}}{{desc8=Brownies are small, benign humanoids who may be very distantly related to halflings. Peaceful and friendly, brownies live in pastoral regions, foraging and gleaning their food. Standing no taller than 2 feet, brownies are exceedingly nimble. They resemble small elves with brown hair and bright blue eyes. Their brightly colored garments are made from wool or linen with gold ornamentation. They normally carry leather pouches and tools for repairing leather, wood, and metal.}}{{desc9=**Combat:** Brownies prefer not to engage in combat, and only do so if threatened. Angry brownies rarely meet their foes in hand to hand combat, relying instead on magic. Since their senses are so keen, it is impossible to surprise brownies. They are superb at blending into their surroundings and can become all but invisible when they choose. This, combined with their great agility, gives them an AC of 3.\nBrownies use spells to harass and drive away enemies. They can use the following spells, once per day: *protection from evil, ventriloquism, dancing lights, continual light, mirror image* (3 images), *confusion,* and *dimension door*. If cornered and unable to employ any spells, brownies attack with tiny short swords (doing 1-2HP).}}'},
+ {name:'Brownie',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Brownie}}{{subtitle=Creature}}Specs=[Brownie,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=High (13 to 14)}}{{AC=3}}{{Alignment=Lawful Good}}{{Move=12}}{{Hit Dice=1/2}}{{THAC0=20}}{{Attack=Weapon 1d2}}{{Languages=*Brownie, elvish, pixie, sprite,* and *halfling,* as well as *common*}}{{Size=T, 2ft tall}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=**Spells:** *protection from evil, ventriloquism, dancing lights, continual light, mirror image (3 images), confusion,* and and *dimension door* each once per day}}{{Section4=**Special Advantages**}}{{Section5=**Blend into Surroundings:** They are superb at blending into\ntheir surroundings and can become all but invisible when they choose}}{{Section6=**Not Surprised:** Since their senses are so keen, it is impossible to surprise brownies.}}{{Section7=**Special Disadvantages**}}{{Section8=None}}RaceData=[w:Brownie, align:LG, cattr:int=13:14|str=3:12|dex=15:18|con=6:12|wis=13:14|chr=10:18|mov=12|ac=3|size=T|hd=1-4r5|thac0=20|attk1=1d2:Weapon:0:S,spattk:Spell-casting powers,spdef:Can blend into surroundings to become almost undetectable. Cannot be surprised,ns:1],[cl:PW,w:Protection From Evil,sp:1,pd:1],[cl:PW,w:Ventriloquism,sp:1,pd:1],[cl:PW,w:Dancing Lights,sp:1,pd:1],[cl:PW,w:Continual Light,sp:2,pd:1],[cl:PW,w:Mirror Image,sp:2,pd:1],[cl:PW,w:confusion,sp:4,pd:1],[cl:PW,w:Dimension Door,sp:1,pd:1],[cl:MI,%:80],[cl:MI,%:20,items:random:1d2]{{Section9=**Description**}}{{desc8=Brownies are small, benign humanoids who may be very distantly related to halflings. Peaceful and friendly, brownies live in pastoral regions, foraging and gleaning their food. Standing no taller than 2 feet, brownies are exceedingly nimble. They resemble small elves with brown hair and bright blue eyes. Their brightly colored garments are made from wool or linen with gold ornamentation. They normally carry leather pouches and tools for repairing leather, wood, and metal.}}{{desc9=**Combat:** Brownies prefer not to engage in combat, and only do so if threatened. Angry brownies rarely meet their foes in hand to hand combat, relying instead on magic. Since their senses are so keen, it is impossible to surprise brownies. They are superb at blending into their surroundings and can become all but invisible when they choose. This, combined with their great agility, gives them an AC of 3.\nBrownies use spells to harass and drive away enemies. They can use the following spells, once per day: *protection from evil, ventriloquism, dancing lights, continual light, mirror image* (3 images), *confusion,* and *dimension door*. If cornered and unable to employ any spells, brownies attack with tiny short swords (doing 1-2HP).}}'},
{name:'Buffalo',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Buffalo}}RaceData=[w:Buffalo, align:N, weaps:none, ac:none, cattr:int=1|mov=15|ac=7|hd=5r4|thac0=15|size=L|attk1=1d8:2 x Horns:0:P|attk2=3d6:Charge Horns:2:P|attk3=1d4:Charge Trample:2:B|attkmsg=Charge must be from a distance of at least 40ft. Also a 25% chance of a herd of buffalo *Stampeding* with each creature in their path taking 2d4 x 1d6 trampling damage]{{subtitle=Creature}}Specs=[Buffalo,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Animal (1)}}{{AC=7}}{{Alignment=Neutral}}{{Move=15}}{{Hit Dice=5 HD}}{{THAC0=15}}{{Attacks=Gore with horns for 2 x 1d8. Charge from at least 40ft for 3d8HP impale with horns and 1d4HP trampling. Herd might stampede 25% of the time}}{{Size=L (5ft at shoulder)}}{{Life Expectancy=10 to 20 years}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=Herd animals are four-legged hoofed mammals covered with hair. Buffalo have sharp horns.}}{{desc9=**Combat:** Buffalo defend themselves with their horns, usually attacking if approached too closely (6\' or less); if charging from a distance of at least 40\', a buffalo does 3-18 hp of impaling damage plus 1-4 hp of trampling damage.}}'},
{name:'Bugbear',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Bugbear}}{{subtitle=Creature}}Specs=[Bugbear,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low to Average (5-10)}}{{AC=10 (can wear simple armour)}}{{Alignment=Chaotic Evil}}{{Move=9}}{{Hit Dice=3d8+1}}{{THAC0=17}}{{Attack=2d4 or by weapon}}{{Languages=a foul sounding mixture of gestures, grunts, and snarls which leads many to underestimate the intelligence of these creatures. In addition, most bugbears can speak the language of goblins and hobgoblins.}}{{Size=L, 7 feet}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Infravision=60 feet}}{{Ambush=Imposes a -3 on others\' surprise rolls.}}{{Strong=+2 on damage}}{{Weapons and Armour=Can use any weapons, and armour up to AC5. Add using menus as per PC/NPCs}}RaceData=[w:Bugbear, align:CE, ac:shield|leather|padded|studded-leather|ring-mail|studded-leather|brigandine|scale-mail|hide|chain-mail|ring|cloak|magic-item, cattr:int=5:10|mov=9|size=L|dmg=+2|hd=3+1|thac0=17|attk1=2d4:Claw:4:S,ns:1],[cl:MI,%:90],[cl:MI,%:10,items:random:1]{{Section9=**Description**}}{{desc8=Bugbears are giant, hairy cousins of goblins who frequent the same areas as their smaller relatives. Their hides range from light yellow to yellow brown and their thick coarse hair varies in color from brown to brick red. Though vaguely humanoid in appearance, bugbears seem to contain the blood of some large carnivore. Their eyes recall those of some savage bestial animal, being greenish white with red pupils, while their ears are wedge shaped, rising from the top of their heads. A bugbear\'s mouth is full of long sharp fangs.\nBugbears have a nose much like that of a bear with the same fine sense of smell. It is this feature which earned them their name, despite the fact that they are not actually related to bears in any way. Their tough leathery hide and long sharp nails also look something like those of a bear, but are far more\ndexterous.\nThe typical bugbear\'s sight and hearing are exceptional, and they can move with amazing agility when the need arises. Bugbear eyesight extends somewhat into the infrared, giving them infravision out to 60 feet}}{{desc9=**Combat:** Whenever possible, bugbears prefer to ambush their foes. They impose a -3 on others\' surprise rolls.\nIf a party looks dangerous, bugbear scouts will not hesitate to fetch reinforcements. A bugbear attack will be tactically sound, if not brilliant. They will hurl small weapons, such as maces, hammers, and spears before closing with their foes. If they think they are outnumbered or overmatched, bugbears will retreat, preferring to live to fight another day.}}'},
{name:'Bugbear-Chieftain',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Chieftain}}RaceData=[w:Bugbear Chieftain, ac:any|!plate, cattr:int=8:10|dmg=+4|hp=28:30|thac0=16,ns:1],[cl:MI,%:10,items:random:1d4]{{subtitle=Creature}}%{Race-DB-Creatures|Bugbear}{{Intelligence=Average (8-10)}}Specs=[Bugbear Chieftain,CreatureRace,0H,Bugbear]{{AC=10 (can wear simple armour up to AC3)}}{{Hit Points=28 to 30HP}}{{THAC0=16}}{{Strong=+4 on damage}}{{Weapons and Armour=Can use any weapons, and armour up to AC3. Add using menus as per PC/NPCs}}{{desc=**Chieftain:** If 24 or more bugbears are encountered, they will have a chief in addition to their leaders. Chiefs have between 28 and 30 hit points, an Armor Class of 3, and attack as 4 Hit Die monsters. Chiefs are so strong that they gain a +4 bonus to all damage caused in melee. Each chief will also have a sub-chief who is identical to the leaders described above.}}'},
@@ -1258,7 +1264,10 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Centaur',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Centaur}}RaceData=[w:Centaur, align:N|NN|NG|CG, ac:magicitem|ring|cloak, cattr:int=5:10|str=10:18|dex=3d6|con=3d6|wis=5:15|chr=3:18|mov=18|ac=5|hd=4r3|thac0=17|size=L|attk1=1d6:Hooves x 2:0:B, ns:1],[cl:WP,%:50,prime:Morningstar],[cl:WP,%:15,prime:composite-shortbow,items:sheaf-arrows:10*1d3],[cl:WP,%:10,prime:composite-longbow,items:flight-arrows:10*1d3],[cl:MI,%:70],[cl:MI,%:30,items:random:1d4]{{subtitle=Creature}}Specs=[Centaur,CreatureRace,2H,Creature]{{Section=**Attributes**}}{{Intelligence=Low to Average (5-10)}}{{AC=4 is natural AC. Do not wear armour, but may use a shield}}{{Alignment=Neutral or Chaotic Good}}{{Move=18}}{{Hit Dice=4HD}}{{THAC0=17}}{{Section1=**Attacks:** 2 x Hooves for 1d6 HP damage, and either using a large Club (equivalent of a morningstar) for 1d6 damage (50%), or a Composite long- or shortbow with flight or sheaf arrows (25%). The remaining 25% are leaders.}}{{Languages=Their own language and some among them (about 10%) can converse in the tongue of elves.}}{{Size=L, 8ft to 9ft tall}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Spell Casting=}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=Centaurs are woodland beings who shun the company of men. They dwell in remote, secluded glades and pastures.\nThe appearance of a centaur is unmistakable: they have the upper torso, arms, and head of a human being and the lower body of a large, powerful horse.\nCentaurs are sociable creatures, taking great pleasure in the society of others of their kind. Their overall organization is tribal, with a tribe divided into family groups living together in harmony. The size of the tribe varies, it range from 3-4 families to upwards of 20 families. Since males have the dangerous roles of hunter and protector, females outnumber males by two to one. The centaur mates for life, and the entire tribe participates in the education of the young.\nThe lair is located deep within a forest, and consists of a large, hidden glade and pasture with a good supply of running water. Depending upon the climate, the lair may contain huts or lean-tos to shelter the individual families. Centaurs are skilled in horticulture, and have been known to cultivate useful plants in the vicinity of their lair. In dangerous, monster infested areas, centaurs will sometimes plant a thick barrier of tough thorn bushes around their lair and even set traps and snares. In the open area, away from the trees, are hearths for cooking and warmth. If encountered in their lair, there will be 1-6 additional males, females equal to twice the number of males, and 5-30 young. The females (3 Hit Dice) and the young (1-3 Hit Dice) will fight only with their hooves, and only in a life or death situation.\nCentaurs survive through a mixture of hunting, foraging, fishing, agriculture and trade. Though they shun dealings with humans, centaurs have been known to trade with elves, especially for food and wine. The elves are paid from the group treasury, which comes from the booty of slain monsters. \nThe territory of a centaur tribe varies with its size and the nature of the area it inhabits. Centaurs are also not above sharing a territory with elves.\nCentaurs will take the treasure of their fallen foes, and are fully aware of its value. Most male centaurs have a small coin supply, while the tribe has a treasury which may well include some magical items. This treasure is used to buy food for the group, or to ransom (90% likely) captured or threatened members of the tribe.\nWhile basically neutral or chaotic good, centaurs have been known to become rowdy, boorish, and aggressive when under the influence of alcohol. They are also extremely protective of their females and young. Centaurs are basically pastoral, but will react with violence if their lifestyle and survival is threatened.}}{{desc9=**Combat:** A band of centaurs is always armed. Half of the centaurs will be wielding oaken clubs (the equivalent of morning stars), one quarter will carry composite bows and have 10-30 arrows (either flight or sheaf, depending on the current state of affairs in the area). The remainder of the band will be leaders. Centaurs make 3 attacks each round in melee: once with their weapons and twice with their hooves.\nThe attitude of a centaur toward a stranger in its territory will vary with the visitor. Humans and dwarves will usually be asked to leave in a polite manner, while halflings or gnomes will be tolerated, and elves will be welcomed. Monsters will be dealt with in a manner according to the threat they represent to the welfare and survival of the tribe. Were a giant or dragon to enter the territory, the centaurs would pull up stakes and relocate, while trolls and orcs and their like will be killed.}}'},
{name:'Centaur-Druid',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Centaur Druid, cattr:cl=pr:druid|lv=3, ns:1],[cl:MI,%:10,items:random:1d6]{{}}Specs=[Centaur Druid,CreatureRace,2H,Centaur-Leader]{{}}%{Race-DB-Creatures|Centaur-Leader}{{name=Druid}}{{Spell Casting=Each tribe will have a priest who is treated as a leader but has the spell abilities of a 3rd level druid.}}{{desc7=**Centaur Druid:** A band of centaurs is always armed, and the leaders carry shields. 25% of any band of Centaurs will be leaders (AC4; HD5) using medium shields and medium horse lances. Each tribe will have a priest who is treated as a leader but has the spell abilities of a 3rd level druid.}}'},
{name:'Centaur-Leader',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Centaur Leader, ac:shield|magicitem|ring|cloak, cattr:int=8:10|hd=5r3, ns:1],[cl:WP,prime:Light-Horse-Lance,offhand:shield],[cl:MI,%:10,items:random:1d6]{{}}Specs=[Centaur Leader,CreatureRace,2H,Centaur]{{}}%{Race-DB-Creatures|Centaur}{{name=Leader}}{{Intelligence=Average (8-10)}}{{AC=4 is natural AC. May use a shield}}{{Hit Dice=5HD}}{{Section1=**Attacks:** 2 x Hooves for 1d6 HP damage, and a light horse lance}}{{desc7=**Centaur Leader:** A band of centaurs is always armed, and the leaders carry shields. 25% of any band of Centaurs will be leaders (AC4; HD5) using medium shields and medium horse lances.}}'},
- {name:'Cloud-Castle-Giant',type:'creaturerace',ct:'2',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Cloud Castle Giant, align:NG, ns:3],[cl:PW,w:MU-Levitate,sp:2,pd:3],[cl:PW,w:MU-Fog-Cloud, sp:2, pd:3],[cl:PW,w:MU-Wall-Of-Fog,sp:1, pd:1]{{{}}Specs=[Cloud-Giant-Priest,CreatureRace,2H,Cloud-Giant]{{}}%{Race-DB-Creatures|Cloud-Giant}{{name=Priest}}{{Section3=}}{{Spell Casting=10% of good cloud giants live in castles on enchanted clouds. All giants dwelling there are able to levitate their own weight plus 2,000 pounds three times a day, create a fog cloud three times a day, and create a wall of fog once a day. These abilities are performed as a 6th level wizard.}}'},
+ {name:'Centipede-Giant',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Giant Centipede}{{}}Specs=[Giant Centipede,CreatureRace,0H,Giant Centipede]{{}}RaceData=[w:Giant Centipede]{{}}'},
+ {name:'Centipede-Huge',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Huge Centipede}{{}}Specs=[Huge Centipede,CreatureRace,0H,Huge Centipede]{{}}RaceData=[w:Huge Centipede]{{}}'},
+ {name:'Centipede-Megalo',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Megalo-Centipede}{{}}Specs=[Megalo Centipede,CreatureRace,0H,Megalo Centipede]{{}}RaceData=[w:Megalo Centipede]{{}}'},
+ {name:'Cloud-Castle-Giant',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Cloud Castle Giant, align:NG, ns:3],[cl:PW,w:MU-Levitate,sp:2,pd:3],[cl:PW,w:MU-Fog-Cloud, sp:2, pd:3],[cl:PW,w:MU-Wall-Of-Fog,sp:1, pd:1]{{{}}Specs=[Cloud-Giant-Priest,CreatureRace,2H,Cloud-Giant]{{}}%{Race-DB-Creatures|Cloud-Giant}{{name=Priest}}{{Section3=}}{{Spell Casting=10% of good cloud giants live in castles on enchanted clouds. All giants dwelling there are able to levitate their own weight plus 2,000 pounds three times a day, create a fog cloud three times a day, and create a wall of fog once a day. These abilities are performed as a 6th level wizard.}}'},
{name:'Cloud-Giant',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{prefix=Cloud }}{{title=Giant}}RaceData=[w:Cloud Giant, align:NG|NE, ac:magicitem|ring|cloak, cattr:int=8:12|str=23|dex=3:9|con=15:18|wis=3d6|chr=3:12|mov=15|ac=0|hd=16+1d6+1r1|thac0=5|tohit=+5|dmg=+11|size=H|attk1=1d10:Fist:0:B, ns:1],[cl:WP,prime:Cloud-Giant-Morningstar,items:CG-Rock:1d4+1],[cl:MI,%:70],[cl:MI,%:20,items:random:1d4],[cl:MI,%:10,items:random:3d2]{{subtitle=Creature}}Specs=[Cloud-Giant,CreatureRace,2H,Creature]{{Section=**Attributes**}}{{Intelligence=Average to Very (8-12)}}{{AC=0 is natural AC. Do not wear armour, but prize magical devices (and 5% will have one)}}{{Alignment=Neutral, 50% NG, 50% NE, often living in small groups of no more than 6}}{{Move=15}}{{Hit Dice=16HD +1d6+1}}{{THAC0=5}}{{Section1=**Attacks:** +5 on ToHit rolls from strength. 1 x Fist for 1d10 HP damage, or using a Cloud Giant Morningstar for 6d4 plus strength bonus of +11. Throw rocks 3 to 230 yards doing 2d12 damage}}{{Languages=*Cloud Giant* and *Giant Common*. In addition, 60% of Cloud Giants speak *Common*}}{{Size=H, 24ft tall}}{{Life Expectancy=About 400 years}}{{Section2=**Powers**}}{{Section3=None}}{{Spell Casting=}}{{Levitate=}}{{Fog Cloud=}}{{Wall of Fog=}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc7=**Cloud giants:** consider themselves above all other giants, save storm giants, whom they consider equals.\nThey are creative, appreciate fine things, and are master strategists in battle. Cloud giants have muscular human builds and handsome, well-defined features. The typical cloud giant is 24 feet tall and weighs 11,500 pounds. Female cloud giants can be 1 to 2 feet shorter and 1,000 to 2,000 pounds lighter. Cloud giants\' skin ranges in color from a milky-white tinged with blue to a light sky blue. Their hair is silvery white or brass and their eyes are an iridescent blue.\nCloud giants dress in clothing made of the finest materials available and wear jewelry. Many of the giants consider their appearance an indication of their station; the more jewelry and the better the clothes, the more important the giant. Cloud giants also appreciate music, and the majority of giants are able to play one or more instruments (their favorite is the harp). Unlike most other giant races, cloud giants leave their treasure in their lairs, carrying with them only food, throwing rocks, 10-100 (10d10) coins, and a musical instrument.\nCloud giants live in small clans of no more than six giants. However, these clans know the location of 1-8 other clans and will band together with some of these clans for celebrations, battles, or to trade. These joined clans will recognize one among them to be their leader -- this is usually an older cloud giant who has magical abilities. One in 10 cloud giants will have spells equivalent to a 4th level wizard, and one in 20 cloud giants will be the equivalent of a 4th level priest. A cloud giant cannot have both priest and wizard abilities.\nThe majority of cloud giants live on cloud-covered mountain peaks in temperate and sub-tropical areas. These giants make their lairs in crude castles.}}{{desc9=**Combat:** Cloud giants fight in well-organized units, using carefully developed battle plans. They prefer to fight from a position above their opponents. A favorite tactic is to circle the enemy, barraging them with rocks while the giants with magical abilities assault them with spells. Cloud giants can hurl rocks to a maximum of 240 yards, causing 2-24 (2d12) points of damage. Their huge morningstars do 6-24 (6d4)+11 points of damage, three times normal (man-sized) damage plus their strength bonus. One in 10 cloud giants will have a magical weapon.}}'},
{name:'Cloud-Giant-Juvenile-1',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Cloud Giant Juvenile 1,cattr:hd:13+1d4+1|tohit=+4|dmg=+10,ns:=1],[cl:WP,both:Cloud-Giant-Morningstar]{{}}Specs=[Cloud-Giant-Juvenile-1,CreatureRace,2H,Cloud-Giant]{{}}%{Race-DB-Creatures|Cloud-Giant}{{name= Juvenile-1}}'},
{name:'Cloud-Giant-Juvenile-2',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Cloud Giant Juvenile 2,cattr:hd:14+1d4+1|tohit=+4|dmg=+10,ns:=1],[cl:WP,both:Cloud-Giant-Morningstar]{{}}Specs=[Cloud-Giant-Juvenile-2,CreatureRace,2H,Cloud-Giant]{{}}%{Race-DB-Creatures|Cloud-Giant}{{name= Juvenile-2}}'},
@@ -1266,16 +1275,17 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Cloud-Giant-Priest',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Cloud Giant Priest,cattr:cl=pr|lv=4,ns:-1],[cl:MI,%:20,items:random:1d4]{{}}Specs=[Cloud-Giant-Priest,CreatureRace,2H,Cloud-Giant]{{}}%{Race-DB-Creatures|Cloud-Giant}{{name=Priest}}{{Section3=}}{{Spell Casting=One in 20 cloud giants will be the equivalent of a 4th level priest. A cloud giant cannot have both priest and wizard abilities.}}'},
{name:'Cloud-Giant-Wizard',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Cloud Giant Wizard,cattr:cl=mu:wizard|lv=4,ns:=-1],[cl:MU,lv:1,w:random|random|random|random|random|random|random|random|random|random],[cl:MU,lv:2,w:random|random|random|random|random|random|random|random|random|random],[cl:MI,%:60],[cl:MI,%:35,items:random:1d4],[cl:MI,%:5,items:random:2d4]{{}}Specs=[Cloud-Giant-Wizard,CreatureRace,2H,Cloud-Giant]{{}}%{Race-DB-Creatures|Cloud-Giant}{{name=Wizard}}{{Section3=}}{{Spell Casting=One in 10 cloud giants will have spells equivalent to a 4th level wizard. A cloud giant cannot have both priest and wizard abilities.}}'},
{name:'Constrictor-Snake',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Constrictor Snake, cattr:mov=9|hd=3+2r3|thac0=17|size=M| attk1=1:Bite:0:P|attk2=1d3:Constrict:0:B|dmgmsg=$$If successfully hit as well as damage this round \\lbrak;all future rounds\\rbrak;\\lpar;!rounds --target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the Unfortunate Victim?¦token_id}¦Constrict¦\\amp#91;\\lbrak;99\\rbrak;\\amp#93;¦0¦Argh... The squeeze is on...¦back-pain\\rpar; automatically hit and do crushing damage, spattk:Once coiled victim takes crushing damage each round]{{}}Specs=[Constrictor Snake,CreatureRace,0H,Poison Snake 1-4]{{}}%{Race-DB-Creatures|Poison-Snake-1-4}{{title=Constrictor Snake}}{{Move=9}}{{Hit Dice=3+2}}{{THAC0=17}}{{Attacks=Bite and attempt to coil \\amp constrict}}{{Size=M 10-20ft long}}{{Life Expectancy=Various}}{{Section5=**Constriction:** Suffering damage every round. Constricted humanoid creatures can escape the coils of normal constrictors with a successful open doors roll (at a -1 penalty).}}{{desc8=Snakes are long, slender reptiles that can be found anywhere in the entire world, even in the coldest arctic regions.\nThere are basically two types of snakes, in all manner of sizes. The poisonous snakes make up for their relatively smaller size with deadly venoms, while the larger constrictors squeeze their victims to death. Both types sleep for days after eating. All snakes shed their skin several times each year.\nCommon constrictor species include anacondas, boas, and reticulate pythons, all of which can reach lengths of 30 feet. Their skin is valuable, with an unblemished skin selling for as much as 100 gp.}}{{desc9=**Combat:** Constrictors of all sizes hide in the branches of trees, waiting patiently until they can slowly lower themselves or suddenly drop onto their unsuspecting victims. Once they strike, the victim is constricted automatically, suffering damage every round. Constricted humanoid creatures can escape the coils of normal constrictors with a successful open doors roll (at a -1 penalty). Anyone who attempts to free a captive by hacking at the constrictor has a 20% chance of striking the victim instead (roll normal damage\nand apply it to the victim). Area spells like fireball will likewise affect both combatants, but target-specific spells like charm monster and magic missile are more precise.}}'},
- {name:'Copper-Dragon',type:'dragonrace',ct:'1',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}Specs=[Copper-Dragon,DragonRace,2H,Red-Dragon]{{}}RaceData=[w:Copper Dragon, cattr:int=13:14|chr=10:18|mov=9|fly=30C|Jump=3|ac=3-??1|hd=(13+??2)d8r1|mr=(v(^((??1-4);0);1)*(??1-3)*5)|cl=mu:copper-dragon/pr:copper-dragon|lv=6+??1/6+??1|thac0=9-??2|dmg=??1|size=G|attk1=1d6:Claw x 2 or Claw+Kick:0:S|attk2=5d4:Bite:0:P|attk3=2d6:Tail Swipe:0:B|attkmsg=Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$\\lbrak;Show the radius\\rbrak;\\lpar;!rounds ~~aoe `{selected¦token_id}¦arc180¦feet¦0¦\\lbrak;\\lbrak;`{selected¦age¦max}*10\\rbrak;\\rbrak;¦\\lbrak;\\lbrak;`{selected¦age¦max}*20\\rbrak;\\rbrak;¦black\\rpar; then up to \\lbrak;\\lbrak;`{selected¦age¦max}\\rbrak;\\rbrak; opponents in the area take damage and Save vs. Petrification with the penalty shown below or be \\lbrak;Stunned\\rbrak;\\lpar;!rounds ~~target area¦`{selected¦token_id}¦\\amp#64;{target¦Select the stunned creature¦token_id}¦Stunned¦\\lbrak;\\amp#91;1+1d4\\amp#93;\\rbrak;¦-1¦Stunned by a dragon tail slap¦back-pain\\rpar; for 1d4+1 rounds., spattk:*Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*, spdef:Magic resistance @{selected|monstermagicresist}% and immune to acid from birth, ns:=11],[cl:PW,w:Copper-Dragon-Breath,pd:-1,sp:1],[cl:PW,age:1,w:MU-Spider-Climb,pd:-1,sp:1],[cl:PW,age:3,w:PR-Neutralize-Poison,pd:3,sp:1],[cl:PW,w:MU-Stone-Shape,age:4,pd:2,sp:1],[cl:PW,w:MU-Forget,age:6,pd:1,sp:1],[cl:PW,w:MU-Transmute-Rock-to-Mud,age:7,pd:1,sp:1],[cl:PW,w:MU-Move-Earth,age:8,pd:1,sp:1],[cl:PW,w:MU-Wall-of-Stone,age:12,pd:1,sp:1],[cl:PR,lv:1,w:],[cl:PR,lv:2,w:]{{}}%{Race-DB-Creatures|Red-Dragon}{{title=Copper}}{{Intelligence=Highly intelligent (13-14)}}{{AC=Varies with age, adult copper dragon is AC -3}}{{Move=9, FL 30(C), Jump 3}}{{Hit Dice=Varies with age, adult copper dragon is 15 HD}}{{THAC0=Varies with age, adult copper dragon is 7}}{{Section1=**Attacks:** Damage bonus varies with age, adult copper dragon is +6. 2 x Claws for 1d6 HP each, possibly with 1 or 2 kicks for 1d6 each, bite for 5d4, and tail slap for 2d6 and possible *stun* within an area varying with age. Several other attacks possible - see *Powers*}}{{Languages=*Copper Dragon* and *Good Dragon Common*, and can *speak with animals* freely from birth. 14% of hatchlings (+5% per age level) can perform universal communication with any intelligent creature}}{{Breath Weapon=A copper dragon\'s breath is either a cloud of *slow* gas 30\' long, 20\' wide, and 20\' high or a spurt of *acid* 70\' long and 5\' wide. Creatures caught in the gas must save vs. breath weapon or be *slowed* for three minutes per age level of the dragon. Creatures caught in the *acid* take damage, save vs. breath weapon for half. Damage from the acid breath weapon varies by age from 2d6+1 to 24d6+12. }}{{Spell Casting=Knows a number of random wizard and priest spells cast at a level from 10 to 18 varying with age. All spells are cast at a speed of 1 segment regardless of the spell}}{{Spell-like Powers=All copper dragons can use *spider climb* on stone surfaces only. *Young* dragons can *neutralize poison* x 3 per day, *Juveniles* can do *Stone Shape* x2 per day, *Adult* dragons gain *Forget* x1 a day, *Mature Adults* can *Transmute Rock to Mud* x1 per day, *Old* dragons can *Move Earth* x 1 per day, and *Great Wyrms* can cast *Wall of Stone* once per day}}{{desc8=**Copper Dragons:** Incorrigible pranksters, joke tellers, and riddlers. They are prideful and are not good losers, although they are reasonable good winner. They are particularly selfish, and greedy for their alignment, and have an almost neutral outlook where wealth is concerned.\nAt birth, a copper dragon\'s scales have a ruddy brown color with a copper tint. As the dragon gets older, the scales become finer and more coppery, assuming a soft, warm gloss by the time the dragon becomes a young adult. Beginning at the venerable stage, the dragons\' scales pick up a green tint.\nCopper dragons like dry, rocky uplands and mountains. They lair in narrow caves and often conceal the entrances using move earth and stone shape. Within the lair, they construct twisting mazes with open tops. These allow the dragon to fly or jump over intruders struggling through the maze.\nCopper dragons appreciate wit, and will usually leave good or neutral creatures alone if they can relate a joke, humorous story, or riddle the dragon has not heard before. They quickly get annoyed with creatures who don\'t laugh at their joked or do not accept the dragon\'s tricks and antics with good humor.\nBecause they often inhabit hills in sight of red dragons\' lairs conflicts between the two subspecies often occur. Copper dragons usually run for cover until they can equal the odds.}}{{desc9=**Combat:** Copper dragons like to taunt and annoy their opponents, hoping they will give up or become angry and act foolishly. Early in an encounter, a copper dragon will jump from one side of an opponent to another, landing on inaccessible or vertical stone surfaces. If there are no such places around a dragon\'s lair, the dragon will create them ahead of time using *stone shape, move earth,* and *wall of stone.*\nAn angry copper dragon will mire its opponents using *rock to mud,* and will force victims who escape the mud into it with kicks. Once opponents are trapped in the mud, the dragon will crush them with a *wall of stone* or snatch them and carry them aloft. When fighting airborne opponents, a dragon will draw its enemies into narrow, stony gorges where it can use its *spider climb* ability in an attempt to maneuver the enemy into colliding with the walls.}}'},
+ {name:'Copper-Dragon',type:'dragonrace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}Specs=[Copper-Dragon,DragonRace,2H,Red-Dragon]{{}}RaceData=[w:Copper Dragon, cattr:int=13:14|chr=10:18|mov=9|fly=30C|Jump=3|ac=3-??1|hd=(13+??2)d8r1|mr=(v(^((??1-4);0);1)*(??1-3)*5)|cl=mu:copper-dragon/pr:copper-dragon|lv=6+??1/6+??1|thac0=9-??2|dmg=??1|size=G|attk1=1d6:Claw x 2 or Claw+Kick:0:S|attk2=5d4:Bite:0:P|attk3=2d6:Tail Swipe:0:B|attkmsg=Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$\\lbrak;Show the radius\\rbrak;\\lpar;!rounds ~~aoe `{selected¦token_id}¦arc180¦feet¦0¦\\lbrak;\\lbrak;`{selected¦age¦max}*10\\rbrak;\\rbrak;¦\\lbrak;\\lbrak;`{selected¦age¦max}*20\\rbrak;\\rbrak;¦black\\rpar; then up to \\lbrak;\\lbrak;`{selected¦age¦max}\\rbrak;\\rbrak; opponents in the area take damage and Save vs. Petrification with the penalty shown below or be \\lbrak;Stunned\\rbrak;\\lpar;!rounds ~~target area¦`{selected¦token_id}¦\\amp#64;{target¦Select the stunned creature¦token_id}¦Stunned¦\\lbrak;\\amp#91;1+1d4\\amp#93;\\rbrak;¦-1¦Stunned by a dragon tail slap¦back-pain\\rpar; for 1d4+1 rounds., spattk:*Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*, spdef:Magic resistance @{selected|monstermagicresist}% and immune to acid from birth, ns:=11],[cl:PW,w:Copper-Dragon-Breath,pd:-1,sp:1],[cl:PW,age:1,w:MU-Spider-Climb,pd:-1,sp:1],[cl:PW,age:3,w:PR-Neutralize-Poison,pd:3,sp:1],[cl:PW,w:MU-Stone-Shape,age:4,pd:2,sp:1],[cl:PW,w:MU-Forget,age:6,pd:1,sp:1],[cl:PW,w:MU-Transmute-Rock-to-Mud,age:7,pd:1,sp:1],[cl:PW,w:MU-Move-Earth,age:8,pd:1,sp:1],[cl:PW,w:MU-Wall-of-Stone,age:12,pd:1,sp:1],[cl:PR,lv:1,w:],[cl:PR,lv:2,w:]{{}}%{Race-DB-Creatures|Red-Dragon}{{title=Copper}}{{Intelligence=Highly intelligent (13-14)}}{{AC=Varies with age, adult copper dragon is AC -3}}{{Move=9, FL 30(C), Jump 3}}{{Hit Dice=Varies with age, adult copper dragon is 15 HD}}{{THAC0=Varies with age, adult copper dragon is 7}}{{Section1=**Attacks:** Damage bonus varies with age, adult copper dragon is +6. 2 x Claws for 1d6 HP each, possibly with 1 or 2 kicks for 1d6 each, bite for 5d4, and tail slap for 2d6 and possible *stun* within an area varying with age. Several other attacks possible - see *Powers*}}{{Languages=*Copper Dragon* and *Good Dragon Common*, and can *speak with animals* freely from birth. 14% of hatchlings (+5% per age level) can perform universal communication with any intelligent creature}}{{Breath Weapon=A copper dragon\'s breath is either a cloud of *slow* gas 30\' long, 20\' wide, and 20\' high or a spurt of *acid* 70\' long and 5\' wide. Creatures caught in the gas must save vs. breath weapon or be *slowed* for three minutes per age level of the dragon. Creatures caught in the *acid* take damage, save vs. breath weapon for half. Damage from the acid breath weapon varies by age from 2d6+1 to 24d6+12. }}{{Spell Casting=Knows a number of random wizard and priest spells cast at a level from 10 to 18 varying with age. All spells are cast at a speed of 1 segment regardless of the spell}}{{Spell-like Powers=All copper dragons can use *spider climb* on stone surfaces only. *Young* dragons can *neutralize poison* x 3 per day, *Juveniles* can do *Stone Shape* x2 per day, *Adult* dragons gain *Forget* x1 a day, *Mature Adults* can *Transmute Rock to Mud* x1 per day, *Old* dragons can *Move Earth* x 1 per day, and *Great Wyrms* can cast *Wall of Stone* once per day}}{{desc8=**Copper Dragons:** Incorrigible pranksters, joke tellers, and riddlers. They are prideful and are not good losers, although they are reasonable good winner. They are particularly selfish, and greedy for their alignment, and have an almost neutral outlook where wealth is concerned.\nAt birth, a copper dragon\'s scales have a ruddy brown color with a copper tint. As the dragon gets older, the scales become finer and more coppery, assuming a soft, warm gloss by the time the dragon becomes a young adult. Beginning at the venerable stage, the dragons\' scales pick up a green tint.\nCopper dragons like dry, rocky uplands and mountains. They lair in narrow caves and often conceal the entrances using move earth and stone shape. Within the lair, they construct twisting mazes with open tops. These allow the dragon to fly or jump over intruders struggling through the maze.\nCopper dragons appreciate wit, and will usually leave good or neutral creatures alone if they can relate a joke, humorous story, or riddle the dragon has not heard before. They quickly get annoyed with creatures who don\'t laugh at their joked or do not accept the dragon\'s tricks and antics with good humor.\nBecause they often inhabit hills in sight of red dragons\' lairs conflicts between the two subspecies often occur. Copper dragons usually run for cover until they can equal the odds.}}{{desc9=**Combat:** Copper dragons like to taunt and annoy their opponents, hoping they will give up or become angry and act foolishly. Early in an encounter, a copper dragon will jump from one side of an opponent to another, landing on inaccessible or vertical stone surfaces. If there are no such places around a dragon\'s lair, the dragon will create them ahead of time using *stone shape, move earth,* and *wall of stone.*\nAn angry copper dragon will mire its opponents using *rock to mud,* and will force victims who escape the mud into it with kicks. Once opponents are trapped in the mud, the dragon will crush them with a *wall of stone* or snatch them and carry them aloft. When fighting airborne opponents, a dragon will draw its enemies into narrow, stony gorges where it can use its *spider climb* ability in an attempt to maneuver the enemy into colliding with the walls.}}'},
{name:'Courser-Stone-Horse',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Courser Stone Horse, cattr:mov=24,hp=18,ac=3]{{}}Specs=[Courser Stone Horse,CreatureRace,0H,Medium-War-Horse]{{}}%{Race-DB-Creatures|Medium-War-Horse}{{name=(Courser Stone)}}{{desc7=**Courser Stone Horse:** Summoned by a *Stone Horse* magic item. This stone horse travels at the same movement rate as a light horse (movement rate 24) and attacks as if it were a medium warhorse (three attacks for 1d6/1d6/1d3). It is Armor Class 3 and has 18 hit points. It saves versus all applicable attack forms as if it were "Metal, hard." It can carry 1,000 pounds tirelessly and never needs to rest or feed.}}{{desc8=**Medium War Horse:** Warhorses are bred and trained to the lance, the spear, and the sword. They have higher morale than other horses, and are not as skittish about sudden movements and loud noises. *War Horses* are specially trained, and are accustomed to loud noises, strange smells, fire, or sudden movements, panicing only 10% of the time.}}{{desc9=**Combat:** War horses will fight independently of the rider on the second and succeeding rounds of a melee. They attack three-times per round by kicking with their front hooves and biting.}}'},
{name:'Death-Dog',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Death Dog}}{{subtitle=Creature}}Specs=[Death Dog,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Semi-(2 to 4)}}{{AC=7}}{{Alignment=Neutral Evil}}{{Move=12}}{{Hit Dice=2+1}}{{THAC0=19}}{{Attack=2 x Bite 1d10 (one per independent head)}}{{Languages=None}}{{Size=M, 6ft long}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Rot=Save vs. poison if bitten or contract a rotting disease which will kill them in 4-24 (4d6) days. Only a cure disease spell can save them.}}{{Knock Prone=On a critical hit (set to \\gt=19) knock opponent prone}}{{Section6=**Special Disadvantages**}}{{Section7=None}}RaceData=[w:Death Dog, align:NE, cattr:int=2:4|mov=12|ac=7|size=M|hd=2+1r4|thac0=19|ch:19|attk1=1d10:Bite:0:P|attk2=1d10:Bite:0:P|dmgmsg=Save vs. Poison or contract \\lbrak;rotting disease\\rbrak;\\lpar;!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who becomes diseased?¦token_id}¦Death Dog rot_You dont feel well..._\\vbar99¦0¦You really don\'t feel well...¦skull\\rpar; which kills in 4d6 days. Knock opponent prone if critical hit,spattk:Rotting disease inflicted by bite. Knock opponent prone on critical hit]{{Section9=**Description**}}{{desc=Death dogs are large two-headed hounds which are distinguished by their penetrating double bark. Death dogs hunt in large packs.\nEach head is independent, and a bite does 1-10 points of damage. Victims must save vs. poison or contract a rotting disease which will kill them in 4-24 (4d6) days. Only a *cure disease* spell can save them. A natural roll of 19 or 20 on their attack die means that a man-sized opponent is knocked prone and attacks at a -4 until able to rise to its feet again. There is an 85% chance that death dogs will attack humans on sight.}}'},
{name:'Destrier-Stone-Horse',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Destrier Stone Horse, cattr:mov=18,hp=26,ac=1]{{}}Specs=[Destrier Stone Horse,CreatureRace,0H,Heavy-War-Horse]{{}}%{Race-DB-Creatures|Heavy-War-Horse}{{name=(Destrier Stone)}}{{desc7=**Destrier Stone Horse:** Summoned by a *Stone Horse* magic item. This stone horse travels at the same movement rate as a medium horse (movement rate 18) and attacks as if it were a heavy warhorse (three attacks for 1d8/1d8/1d3). It is Armor Class 1 and has 26 hit points. It saves versus all applicable attack forms as if it were "Metal, hard." It can carry 1,000 pounds tirelessly and never needs to rest or feed.}}{{desc8=**Heavy War Horse:** Warhorses are bred and trained to the lance, the spear, and the sword. They have higher morale than other horses, and are not as skittish about sudden movements and loud noises. *War Horses* are specially trained, and are accustomed to loud noises, strange smells, fire, or sudden movements, panicing only 10% of the time.}}{{desc9=**Combat:** War horses will fight independently of the rider on the second and succeeding rounds of a melee. They attack three-times per round by kicking with their front hooves and biting.}}'},
- {name:'Djinni',type:'creaturerace',ct:'100',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Djinni}}RaceData=[w:Djinni, align:CG, weaps:any, ac:none, cattr:int=8:14|wis=16:20|chr=3d6|mov=9|fly=24A|ac=4|hd=7+3r4|thac0=13|size=L|attk1=2d8:Punch:1:SPB,spdef:Airbourne creatures or attacks receive -1 penalty to attack and damage. Djinn get +4 bonus to saves vs gas attack and air-based spells,ns:10],[cl:PW,w:Djinni-Whirlwind,sp:100,pd:1],[cl:PW,w:Djinni-Create-Nutritious-Food,sp:10,pd:1],[cl:PW,w:Djinni-Create-Wine-or-Water,sp:10,pd:1],[cl:PW,w:Djinni-Create-Soft-Goods,sp:10,pd:1],[cl:PW,w:Djinni-Create-Wooden-Items,sp:10,pd:1],[cl:PW,w:Djinni-Create-Metal,sp:10,pd:1],[cl:PW,w:Djinni-Create-Illusion,sp:2,pd:1],[cl:PW,w:MU-Invisibility,sp:2,pd:1],[cl:PW,w:Gaseous-Form,sp:1,pd:1],[cl:PW,w:PR-Wind-Walk,sp:10,pd:1],[cl:MI,%:80,items:random:1d4],[cl:MI,%:20,items:random:4d2]{{subtitle=Genie}}Specs=[Djinni,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Average to Highly (8-14))}}{{AC=4}}{{Alignment=Chaotic Good}}{{Move=9 FL 24(A)}}{{Hit Dice=7+3 HD}}{{THAC0=13}}{{Attacks=1 x Punch for 2d8}}{{Size=L, 10.5ft tall}}{{Section2=**Powers**}}{{Whirlwind=Once per day, the genie can create a whirlwind, which the it can ride or even direct at will from a distance. A cone-shaped spiral, measuring up to 10 feet across at its base, 40 feet across at the top, and up to 70 feet in height (the djinni chooses the dimensions). Its maximum speed is 18, with maneuverability class A. It\'s base must touch water or a solid surface, or it will dissolve. It takes a full turn for it to form or dissolve. During that time, it has no effect. It lasts as long as the djinni concentrates on it.\nIf it strikes a non-aerial creature with fewer than 2 HD, save vs. breath weapon for each round of contact or be swept off its feet and killed. Hardier beings, as well as aerial or airborne creatures, take 2d6 points of damage per round of contact.\nA djinni can ride its whirlwind and even take along passengers, who (like the djinni) suffer no damage from the buffeting winds. The whirlwind can carry the genie and up to six man-sized or three genie-sized companions.}}{{Once per day=*create nutritious food* and *create wine or water* for 2d6 persons, *create soft goods* (up to 16cu.ft.), *create wooden items* (up to 9cu.ft.), *create metal* (up to 100lbs), *create illusion* as a 20th level wizard without concentarion, use *invisibility, gaseaous form* or *wind walk*}}{{Section4=**Special Advantages**}}{{Resistance=Airbourne creatures or attacks suffer a -1 penalty to attack \\amp damage rolls}}{{Saves=Djinn get a +4 bonus to saving throws vs. gas attacks and air-based spells}}{{Strong=Djinn are able to carry up to 600 pounds, on foot or flying, without tiring. They can carry double that for a short time: three turns if on foot, or one turn if flying. For each 100 pounds below the maximum, add one turn to the time a djinni may walk or fly before tiring. A fatigued djinni must rest for an hour before performing any additional strenuous activity.}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=The djinn (singular: djinni) are genies from the elemental plane of Air. Djinn are nearly impossible to capture by physical means; a djinni who is overmatched in combat usually takes to flight and uses its whirlwind to buffet those who follow. Genies are openly contemptuous of those life forms that need wings or artificial means to fly and use illusion and invisibility against such enemies. Thus, the capture and enslavement of djinn is better resolved by the DM on a case-by-case basis. It is worth noting, however, that a good master will typically encourage a djinni to additional effort and higher performance, while a demanding and cruel master encourages the opposite.}}'},
+ {name:'Djinni',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Djinni}}RaceData=[w:Djinni, align:CG, weaps:any, ac:none, cattr:int=8:14|wis=16:20|chr=3d6|mov=9|fly=24A|ac=4|hd=7+3r4|thac0=13|size=L|attk1=2d8:Punch:1:SPB,spdef:Airbourne creatures or attacks receive -1 penalty to attack and damage. Djinn get +4 bonus to saves vs gas attack and air-based spells,ns:10],[cl:PW,w:Djinni-Whirlwind,sp:100,pd:1],[cl:PW,w:Djinni-Create-Nutritious-Food,sp:10,pd:1],[cl:PW,w:Djinni-Create-Wine-or-Water,sp:10,pd:1],[cl:PW,w:Djinni-Create-Soft-Goods,sp:10,pd:1],[cl:PW,w:Djinni-Create-Wooden-Items,sp:10,pd:1],[cl:PW,w:Djinni-Create-Metal,sp:10,pd:1],[cl:PW,w:Djinni-Create-Illusion,sp:2,pd:1],[cl:PW,w:MU-Invisibility,sp:2,pd:1],[cl:PW,w:Gaseous-Form,sp:1,pd:1],[cl:PW,w:PR-Wind-Walk,sp:10,pd:1],[cl:MI,%:80,items:random:1d4],[cl:MI,%:20,items:random:4d2]{{subtitle=Genie}}Specs=[Djinni,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Average to Highly (8-14))}}{{AC=4}}{{Alignment=Chaotic Good}}{{Move=9 FL 24(A)}}{{Hit Dice=7+3 HD}}{{THAC0=13}}{{Attacks=1 x Punch for 2d8}}{{Size=L, 10.5ft tall}}{{Section2=**Powers**}}{{Whirlwind=Once per day, the genie can create a whirlwind, which the it can ride or even direct at will from a distance. A cone-shaped spiral, measuring up to 10 feet across at its base, 40 feet across at the top, and up to 70 feet in height (the djinni chooses the dimensions). Its maximum speed is 18, with maneuverability class A. It\'s base must touch water or a solid surface, or it will dissolve. It takes a full turn for it to form or dissolve. During that time, it has no effect. It lasts as long as the djinni concentrates on it.\nIf it strikes a non-aerial creature with fewer than 2 HD, save vs. breath weapon for each round of contact or be swept off its feet and killed. Hardier beings, as well as aerial or airborne creatures, take 2d6 points of damage per round of contact.\nA djinni can ride its whirlwind and even take along passengers, who (like the djinni) suffer no damage from the buffeting winds. The whirlwind can carry the genie and up to six man-sized or three genie-sized companions.}}{{Once per day=*create nutritious food* and *create wine or water* for 2d6 persons, *create soft goods* (up to 16cu.ft.), *create wooden items* (up to 9cu.ft.), *create metal* (up to 100lbs), *create illusion* as a 20th level wizard without concentarion, use *invisibility, gaseaous form* or *wind walk*}}{{Section4=**Special Advantages**}}{{Resistance=Airbourne creatures or attacks suffer a -1 penalty to attack \\amp damage rolls}}{{Saves=Djinn get a +4 bonus to saving throws vs. gas attacks and air-based spells}}{{Strong=Djinn are able to carry up to 600 pounds, on foot or flying, without tiring. They can carry double that for a short time: three turns if on foot, or one turn if flying. For each 100 pounds below the maximum, add one turn to the time a djinni may walk or fly before tiring. A fatigued djinni must rest for an hour before performing any additional strenuous activity.}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=The djinn (singular: djinni) are genies from the elemental plane of Air. Djinn are nearly impossible to capture by physical means; a djinni who is overmatched in combat usually takes to flight and uses its whirlwind to buffet those who follow. Genies are openly contemptuous of those life forms that need wings or artificial means to fly and use illusion and invisibility against such enemies. Thus, the capture and enslavement of djinn is better resolved by the DM on a case-by-case basis. It is worth noting, however, that a good master will typically encourage a djinni to additional effort and higher performance, while a demanding and cruel master encourages the opposite.}}'},
{name:'Dog-Blink',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Blink-Dog}{{}}RaceData=[w:Blink Dog]{{}}Specs=[Blink Dog,CreatureRace,0H,Blink Dog]{{}}'},
{name:'Dog-Death',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Death-Dog}{{}}RaceData=[w:Death Dog]{{}}Specs=[Death Dog,CreatureRace,0H,Death Dog]{{}}'},
{name:'Dog-Onyx',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Onyx-Dog}{{}}RaceData=[w:Onyx Dog]{{}}Specs=[Onyx Dog,CreatureRace,0H,Onyx Dog]{{}}'},
{name:'Dog-War',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|War-Dog}{{}}RaceData=[w:War Dog]{{}}Specs=[War Dog,CreatureRace,0H,War Dog]{{}}'},
{name:'Dog-Wild',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Wild-Dog}{{}}RaceData=[w:Wild-Dog]{{}}Specs=[Wild Dog,CreatureRace,0H,Wild Dog]{{}}'},
+ {name:'Doppleganger',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Doppleganger}}RaceData=[w:Doppleganger, align:N, ac:none, cattr:cl=F:Creature|lv=10|int=11:12|mov=9|ac=5|hd=4r3|thac0=17|size=M|attk1=1d12:Slam:0:B, spattk:Assume shape of any humanoid between 4ft and 8ft 90% accurately, spdef:Immune to *sleep* and *charm* spells, and rolls saving throws as a 10th level fighter]{{subtitle=Creature}}Specs=[Doppleganger,CreatureRace,2H,Creature]{{Section=**Attributes**}}{{Intelligence=Very intelligent (11-12)}}{{AC=5 is natural AC. Do not wear armour unless in likeness}}{{Alignment=Neutral}}{{Move=9}}{{Hit Dice=4HD}}{{THAC0=17}}{{Section1=**Attacks:** Has a *slam* attack with its limbs doing 1d12, or can use weapons that its victim can use (copy the victim\'s character sheet \\amp token and play it as the duplicate)}}{{Languages=Uses its limited ESP to access and speak whatever languages its victim speaks}}{{Size=M (can immitate creatures from 4ft to 8ft tall)}}{{Life Expectancy=Unknown, perhaps immortal constructs}}{{Section2=**Powers**}}{{Section3=Able to immitate other humanoid creatures, but this does not include the ability to wield the powers of the immitated creature}}{{Section4=**Special Advantages**}}{{Immunity=Immune to *sleep* and *charm* spells}}{{Saves=Saves as a 10th level fighter, even when immitating another creature}}{{Section6=**Special Disadvantages**}}{{Section7=Immitation is only 90% accurate, and cannot immitate powers or spell casting}}{{Section9=**Description**}}{{desc=The doppleganger is a master of mimicry that survives by taking the shapes of men, demihumans, and humanoids. Dopplegangers are bipedal and generally humanoid in appearance. Their bodies are covered with a thick, hairless gray hide, which gives them a natural AC of 5. They are, however, rarely seen in their true forms.}}{{hide7=Although this is rare, groups of dopplegangers can be found anywhere at any time, and in unexpected locations. Working as a unit, they select a group of victims, such as a family or a group of travelers. Basically lazy, dopplegangers find it easier to survive and live comfortably by taking humanoid, and especially human, shape. They prefer to take the form of someone comfortably provided for, and shun assuming the form of hardworking peasants.\nDopplegangers are found most often in their true forms in a dungeon or in the wilderness. Groups often set up a lair in an area well-suited to ambush and surprise, patrolling a regular territory. These bands make a good living by attacking weak humanoid monsters or travelers and stealing their food and treasure. If food and treasure are scarce, they hire out to a powerful wizard or thieves\' guild.\nA doppleganger who has been hired to replace a specific person will plan its attack with special care, learning as much about the victim and his environment as it can.\nThe dopplegangers\' weaknesses are greed and cowardice. They spend their lives in avid pursuit of gold and other wealth. If attacking a group of adventurers, for example, they often choose the richest-looking one to attack first. If they target a party of adventurers, the dopplegangers wait until the party is on the way out of the dungeon and heading back to town. Since they are cowardly, however, they prefer to take the easiest route toward riches. A doppleganger who chooses a rich adventurer avoids risks once the treasure is safely in hand, and retreats at the earliest opportunity, making some plausible excuse for separating from the human members of the group. They sometimes hire out as spies and assassins for money as well.}}{{desc9=**Combat:** This monster is able to assume the shape of any humanoid creature between four and eight feet high. The doppleganger chooses a victim, duplicates his form, and then attempts to kill the original and assume his place. The doppleganger is able to use ESP and can imitate its victim with 90% accuracy, even duplicating the victim\'s clothing and equipment. If unsuccessful in taking its victim\'s place, the doppleganger attacks, relying on the ensuing confusion to make it indistinguishable from its victim.}}{{hide8=Dopplegangers work in groups and act together to ensure that their attacks and infiltrations are successful. They are very intelligent and usually take the time to plan their attacks with care. If a group of the monsters spots some potential victims, the dopplegangers often trail their targets, waiting for a good chance to strike, choosing their time and opportunity with care. They may wait until nightfall, or until their victims are alone, or even follow them to an inn.}}'},
{name:'Dracolisk',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Dracolisk}}{{subtitle=Creature}}Specs=[Dracolisk,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low to Average (5 to 10)}}{{AC=3}}{{Alignment=Chaotic Evil}}{{Move=9, Fl 15(E)}}{{Hit Dice=7+3}}{{THAC0=13}}{{Attack=2 x Claw 1d6, 1 x Bite 3d4}}{{Languages=None known}}{{Size=H, 15-20ft long}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=**Gaze:** Its gaze turns those who meet eyes to stone. Attacking or surprised opponents automatically meet its gaze and must save vs. petrification each round they attack, unless from the rear. Can look "in general direction" to hit at -2 \\amp get 20% chance of meeting gaze. Or avert \\amp attack blindfolded for -4 to-hit}}{{Section 4=**Acid Breath Weapon:** Can spit a stream of acid 5 feet wide and up to 30 feet away. The acid causes 4d6 points of damage, half-damage if a successful saving throw vs. breath weapon is rolled. The dracolisk can spit up to three times per day.}}{{Section6=**Special Advantages**}}{{Section7=None}}{{Section8=**Special Disadvantages}}{{Reflections=If lit, and can see its own reflection, can petrify itself}}RaceData=[w:Dracolisk, align:N, cattr:int=1|mov=6|ac=4|size=M|hd=6+1r3|thac0=15|attk1=1d6:Claw:0:S|attk2=1d6:Claw:0:S|attk3=3d4:Bite:1:P|attkmsg=Gaze \\lbrak;Petrifies\\rbrak;\\lpar;!rounds ~~aoe `{selected¦token_id}¦cone¦feet¦0¦20¦20¦green¦true ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the unfortunate soul?¦token_id}¦Petrified¦99¦0¦Petrified by a Gaze Attack¦padlock\\rpar;. Those attacking without counter-measures must save every round. \\lbrak;Acid breath\\rbrak;\\lpar;!magic ~~cast-spell power¦`{selected¦token_id}\\rpar; 30ft range for 4d6HP damage 3/day,spattk:Petrification gaze attack \\amp acid breath weapon,ns:2],[cl:PW,w:Petrification-Gaze-Attack,sp:0,pd:-1],[cl:PW,w:Dracolisk-Breath,sp:0,pd:3]{{Section9=**Description**}}{{desc=The sages say that the dracolisk is the offspring of a rogue black dragon and a basilisk of the largest size. The result is a deep brown, dragon-like monster that moves with relative quickness on six legs. It can fly, but only for short periods - a turn or two at most.}}{{desc1=**Combat:** This horror can attack with its taloned forelegs and deliver vicious bites. In addition, it can spit a stream of acid 5 feet wide and up to 30 feet away. The acid causes 4d6 points of damage, half-damage if a successful saving throw vs. breath weapon is rolled. The dracolisk can spit up to three times per day.\nThe eyes of a dracolisk can petrify any opponent within 20 feet if the monster\'s gaze is met. Because its hooded eyes have nictating membranes, the monster is only 10% likely to be affected by its own gaze. Opponents in melee with a dracolisk and seeking to avoid its gaze fight with a -4 penalty to their to attack rolls.}}'},
{name:'Draft-Horse',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Draft Horse, cattr:mov=12|attk1=1d3:Bite:0:P]{{}}Specs=[Draft Horse,CreatureRace,0H,Horse]{{}}%{Race-DB-Creatures|Horse}{{name=(Draft)}}{{Move=12}}{{Attacks=Bite for 1d3}}{{desc8=**Draft Horse:** Draft horses are large animals bred to haul very heavy loads, and are usually trained to be part of a dray team. Muscular but slow, these ponderous animals haul freight over long distances without complaint, and are frequently used by traders.}}{{desc9=**Combat:** Draft horses fight only if cornered. They can only bite once per round. Unless specially trained, horses can be panicked by loud noises, strange smells, fire, or sudden movements 90% of the time. Horses trained and accustomed to such things (usually warhorses) panic only 10% of the time.}}'},
{name:'Dragon-Black',type:'dragonrace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Black-Dragon}{{}}Specs=[Black-Dragon,DragonRace,2H,Black-Dragon]{{}}RaceData=[w:Black Dragon]{{}}'},
@@ -1288,11 +1298,12 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Dragon-Red',type:'dragonrace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Red-Dragon}{{}}Specs=[Red-Dragon,DragonRace,2H,Red-Dragon]{{}}RaceData=[w:Red Dragon]{{}}'},
{name:'Dragon-Silver',type:'dragonrace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Silver-Dragon}{{}}Specs=[Silver-Dragon,DragonRace,2H,Silver-Dragon]{{}}RaceData=[w:Silver Dragon]{{}}'},
{name:'Dragon-White',type:'dragonrace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|White-Dragon}{{}}Specs=[White-Dragon,DragonRace,2H,White-Dragon]{{}}RaceData=[w:White Dragon]{{}}'},
- {name:'Dryad',type:'creaturerace',ct:'1',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Dryad}}RaceData=[w:Dryad, align:N, cattr:int=13:14|dex=16:20|con=10:16|dex=14:18|wis=3d6|chr=18:20|mov=12|ac=9|size=M|hd=2r3|thac0=19|attk1=1d4:Dagger vs SM:2:P|attk2=1d3:Dagger vs. L:2:P|attkmsg=Remember *Charm Person, Dimension Door* and *Speak with Plants* powers,spattk:*Charm Person* power,spdef:*Dimension Door* back to home oak tree,ns:3],[cl:PW,w:Dryad-Charm-Person,sp:1,pd:3],[cl:PW,w:Dimension-Door,sp:1,pd:-1],[cl:PW,w:Speak-with-Plants,sp:0,pd:-1],[cl:MI,%:70,items:random:1],[cl:MI,%:30,items:random:1d4]{{subtitle=Creature}}{{Section=**Attributes**}}{{Intelligence=High (13 to 14)}}{{AC=9}}{{Alignment=Neutral}}{{Move=12}}{{Hit Dice=2}}{{THAC0=19}}{{Attack=Generally does not engage in melee, but has a dagger as a tool}}{{Languages=*Dryad, elvish, pixie,* and *sprite*. Dryads can also speak with plants.}}{{Size=M, 5ft tall}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=*Charm Person* 3 times per day, *Dimension Door* at will (to home oak only), and *Speak with Plants,* at will.}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=**Attached to home oak:**Dryads are attached to a single, very large oak tree in their lifetimes and cannot, for any reason, go more than 360 yards from that tree. If a dryad does wander farther away, she becomes weak and dies within 6d6 hours unless returned to her home. The oak trees of dryads do not radiate magic, but someone finding a dryad\'s home has great power over her. A dryad suffers damage for any damage inflicted upon her home tree. Any attack on a dryad\'s tree will, of course, bring on a frenzied defense by the dryad.}}Specs=[Dryad,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc8=Dryads are beautiful, intelligent tree sprites. They are as elusive as they are alluring, however, and dryads are rarely seen unless taken by surprise - or they wish to be spotted.\nThe dryad\'s exquisite features, delicate and finely chiseled, are much like an elf maiden\'s. Dryads have high cheek bones and amber, violet, or dark green eyes. A dryad\'s complexion and hair color changes with the seasons, presenting the sprite with natural camouflage. During the fall, a dryad\'s hair turns golden or red, and her skin subtly darkens from its usual light tan to more closely match her hair color.\nThis enables her to blend with the falling leaves of autumn. In winter, both the dryad\'s hair and skin are white, like the snows that cover the oak groves. When encountered in a forest during fall or winter, a dryad is often mistaken for an attractive maid, probably of elvish descent. No one would mistake a dryad for an elf maid during the spring and summer, however. At these times of year, a dryad\'s skin is lightly tanned and her hair is green like the oak leaves around her.\nDryads often appear clothed in a loose, simple garment. The clothing they wear is the color of the oak grove in the season they appear.}}{{desc9=**Combat:** Dryads are shy, nonviolent creatures. They rarely carry weapons, but they sometimes carry knives as tools. Though a dryad can use this as a weapon in a fight, she will not resort to using a knife unless seriously threatened.\nDryads have the ability to throw a powerful charm person spell three times a day (but only once per round). This spell is so powerful that targets of the spell suffer a -3 penalty to their saving throws. A Dryad always uses this spell if seriously threatened, attempting to gain control of the attacker who could help her most against his comrades. Dryads will only attempt to charm elves as a last resort because of their natural resistance to this type of spell.\nThe dryad\'s use of her ability to charm is not limited to combat situations, however. Whenever a dryad encounters a male with a Charisma of 16 or more, she usually tries to charm him. Charismatic victims of a dryad\'s attentions are taken to the tree sprite\'s home, where the men serve as amorous slaves to their beautiful captors. There is a 50% chance that a person charmed and taken away by a dryad will never\nreturn. If he does escape from the dryad\'s charms, it will be after 1d4 years of captivity.\nThis tree sprite also has two other powers that are very useful in defense. Unless surprised, a dryad has the ability to literally step through a tree and then dimension door to the oak tree she is part of. She can also speak with plants (as the 4th-level priest spell). This enables the dryad to gather information about parties traveling near her tree, and even to use vegetation to hinder potential attackers.}}'},
+ {name:'Dryad',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Dryad}}RaceData=[w:Dryad, align:N, cattr:int=13:14|dex=16:20|con=10:16|dex=14:18|wis=3d6|chr=18:20|mov=12|ac=9|size=M|hd=2r3|thac0=19|attk1=1d4:Dagger vs SM:2:P|attk2=1d3:Dagger vs. L:2:P|attkmsg=Remember *Charm Person, Dimension Door* and *Speak with Plants* powers,spattk:*Charm Person* power,spdef:*Dimension Door* back to home oak tree,ns:3],[cl:PW,w:Dryad-Charm-Person,sp:1,pd:3],[cl:PW,w:Dimension-Door,sp:1,pd:-1],[cl:PW,w:Speak-with-Plants,sp:0,pd:-1],[cl:MI,%:70,items:random:1],[cl:MI,%:30,items:random:1d4]{{subtitle=Creature}}{{Section=**Attributes**}}{{Intelligence=High (13 to 14)}}{{AC=9}}{{Alignment=Neutral}}{{Move=12}}{{Hit Dice=2}}{{THAC0=19}}{{Attack=Generally does not engage in melee, but has a dagger as a tool}}{{Languages=*Dryad, elvish, pixie,* and *sprite*. Dryads can also speak with plants.}}{{Size=M, 5ft tall}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=*Charm Person* 3 times per day, *Dimension Door* at will (to home oak only), and *Speak with Plants,* at will.}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=**Attached to home oak:**Dryads are attached to a single, very large oak tree in their lifetimes and cannot, for any reason, go more than 360 yards from that tree. If a dryad does wander farther away, she becomes weak and dies within 6d6 hours unless returned to her home. The oak trees of dryads do not radiate magic, but someone finding a dryad\'s home has great power over her. A dryad suffers damage for any damage inflicted upon her home tree. Any attack on a dryad\'s tree will, of course, bring on a frenzied defense by the dryad.}}Specs=[Dryad,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc8=Dryads are beautiful, intelligent tree sprites. They are as elusive as they are alluring, however, and dryads are rarely seen unless taken by surprise - or they wish to be spotted.\nThe dryad\'s exquisite features, delicate and finely chiseled, are much like an elf maiden\'s. Dryads have high cheek bones and amber, violet, or dark green eyes. A dryad\'s complexion and hair color changes with the seasons, presenting the sprite with natural camouflage. During the fall, a dryad\'s hair turns golden or red, and her skin subtly darkens from its usual light tan to more closely match her hair color.\nThis enables her to blend with the falling leaves of autumn. In winter, both the dryad\'s hair and skin are white, like the snows that cover the oak groves. When encountered in a forest during fall or winter, a dryad is often mistaken for an attractive maid, probably of elvish descent. No one would mistake a dryad for an elf maid during the spring and summer, however. At these times of year, a dryad\'s skin is lightly tanned and her hair is green like the oak leaves around her.\nDryads often appear clothed in a loose, simple garment. The clothing they wear is the color of the oak grove in the season they appear.}}{{desc9=**Combat:** Dryads are shy, nonviolent creatures. They rarely carry weapons, but they sometimes carry knives as tools. Though a dryad can use this as a weapon in a fight, she will not resort to using a knife unless seriously threatened.\nDryads have the ability to throw a powerful charm person spell three times a day (but only once per round). This spell is so powerful that targets of the spell suffer a -3 penalty to their saving throws. A Dryad always uses this spell if seriously threatened, attempting to gain control of the attacker who could help her most against his comrades. Dryads will only attempt to charm elves as a last resort because of their natural resistance to this type of spell.\nThe dryad\'s use of her ability to charm is not limited to combat situations, however. Whenever a dryad encounters a male with a Charisma of 16 or more, she usually tries to charm him. Charismatic victims of a dryad\'s attentions are taken to the tree sprite\'s home, where the men serve as amorous slaves to their beautiful captors. There is a 50% chance that a person charmed and taken away by a dryad will never\nreturn. If he does escape from the dryad\'s charms, it will be after 1d4 years of captivity.\nThis tree sprite also has two other powers that are very useful in defense. Unless surprised, a dryad has the ability to literally step through a tree and then dimension door to the oak tree she is part of. She can also speak with plants (as the 4th-level priest spell). This enables the dryad to gather information about parties traveling near her tree, and even to use vegetation to hinder potential attackers.}}'},
+ {name:'Dun-Pudding',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Dun Pudding, cattr:mov=12|ac=7|hd=8+1|thac0=13|attk1=4d6:Bites:0:P|dmgmsg=Disolves leather in 1 round, regardless of magical pluses. Metals rate half that of black puddings; chain takes 2 rounds; plate 4 rounds; additional 2 rounds per magical plus, spattk:Disolves leather in 1 round, regardless of magical pluses. Metals rate half that of black puddings; chain takes 2 rounds; plate 4 rounds; additional 2 rounds per magical plus]{{}}Specs=[Dun Pudding,CreatureRace,0H,Black Pudding]{{}}%{Race-DB-Creatures|Black-Pudding}{{prefix=Dun}}{{AC=7}}{{Move=12}}{{Hit Dice=8+1 HD}}{{Attack=Multiple bites (one roll) with acid juices doing a total of 4d6 damage}}{{Section6=**Acid:** Disolves leather in 1 round, regardless of magical pluses. Metals rate half that of black puddings; chain takes 2 rounds; plate 4 rounds; additional 2 rounds per magical plus}}{{desc8=Adapted to dwell in arid regions, these monsters scavenge barrens and deserts and feed on silicates (sand) if animal and vegetable matter is unavailable.}}{{desc9=**Combat:** Dun Puddings dissolve leather in a single round, regardless of magical pluses. Metals are eaten at a rate half that of black puddings; chain takes two rounds to dissolve, plate four rounds, with an additional two rounds per magical plus.}}'},
{name:'Eagle-Wild',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Wild-Eagle}{{}}RaceData=[w:Wild-Eagle]{{}}Specs=[Wild Eagle,CreatureRace,0H,Wild Eagle]{{}}'},
{name:'Earth-Elemental',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Earth Elemental}}{{subtitle=Creature}}Specs=[Elemental,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low (5-7)}}{{AC=2}}{{Alignment=Neutral}}{{Move=6 (not through water}}{{Hit Dice=8, 12, or 16}}{{THAC0=13, 9, or 5}}{{Attack=1 x 4d8}}{{Languages=They rarely speak, but their voices can be heard in the silence of deep tunnels, the rumblings of earthquakes, and the grinding of stone on stone}}{{Size=L to H, [7+1d8](!\\amp#13;\\amp#47;r 7+1d8 feet height)feet,}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Special Defense=Only hit by +2 or better weapons}}RaceData=[w:Earth Elemental, cattr:int=5:7|ac=2|mov=6|size=L|hd=8|thac0=13|attk1=4d8:Earth Ram:0:B|attk2=\\lbrak;\\lbrak;{1d8-2\\amp#44;1d8-2\\amp#44;1d8-2\\amp#44;1d8-2\\amp#44;{1}\\amp#44;{1}\\amp#44;{1}\\amp#44;{1}\\rbrc;kh4\\rbrak;\\rbrak;:vs. Air \\amp Water borne:0:B,spdef:+2 weapon or better to hit]{{Section9=**Description**}}{{desc=Earth elementals can be conjured in any area of earth or stone. This type of common elemental appears on the Prime Material plane as a very large humanoid made of whatever types of dirt, stones, precious metals, and gems it was conjured from. It has a cold, expressionless face, and its two eyes sparkle like brilliant, multifaceted gems.\nThough earth elementals travel very slowly, they are relentless in the fulfillment of their appointed tasks. An earth elemental can travel through solid ground or stone with no penalty to movement or dexterity. However, these elementals cannot travel through water: they must either go around the body of water in their path or go under it, traveling in the ground. Earth elementals prefer the latter as it keeps them moving, more or less, in a straight line toward their goal.}}{{desc1=Earth elementals will always try to fight on the ground and will only rarely be tricked into giving up that advantage. Because of their close alliance to the rock and earth, these elementals do 4-32 points of damage (4d8) whenever they strike a creature that rests on the ground.\nAgainst constructions with foundations in earth or stone, earth elementals do great damage, making them extremely useful for armies sieging a fortification. For example, a reinforced door, which might require a few rounds to shatter using conventional methods, can be smashed with ease by an earth elemental. They can even level a small cottage in a few rounds.\nAn earth elemental\'s effectiveness against creatures in the air or water is limited; the damage done by the elemental\'s fists on airborne or waterborne targets is lessened by 2 points per die (to a minimum of 1 point of damage per die).}}'},
{name:'Ebony-Fly',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Figurine of Wonderous Power\nEbony Fly}}RaceData=[w:Ebony Fly, align:N, weaps:none, ac:none, cattr:int=0|mov=0|fly=48C|ac=4|hd=4+4r5|thac0=20|size=L]{{subtitle=Figurine}}Specs=[Ebony Fly,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Not (0)}}{{AC=4}}{{Alignment=Neutral}}{{Move=0, FL48(C) unencumbered, 36(C) carrying up to 210lbs, 24(C) carrying up to 350lbs}}{{Hit Dice=4+4 HD}}{{THAC0=N/A (no attacks)}}{{Attacks=None}}{{Size=L}}{{Section2=**Powers**}}{{Section3=Can carry loads and riders of up to 350lbs}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=At a word, this small, carved fly comes to life and grows to the size of a pony. The ebony fly is Armor Class 4, has 4+4 Hit Dice, and maneuverability class C. It flies at a movement rate of 48 without a rider, 36 carrying up to 210 pounds weight, and 24 carrying from 211 to 350 pounds weight. The item can be used a maximum of three times per week, 12 hours per day. When 12 hours have passed or when the command word is spoken, the ebony fly once again becomes a tiny statuette.}}'},
- {name:'Efreeti',type:'creaturerace',ct:'10',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Efreeti}}RaceData=[w:Efreeti, align:N, weaps:any, ac:none, cattr:int=11:12|mov=9|fly=24B|ac=2|hd=10r4|thac0=11|size=L|attk1=3d8:Flame Attack:SPB,spdef:Immune to normal fire. Magical fire attacks get -1 penalty on attk \\amp dmg rolls,ns:9],[cl:PW,w:MU-Wish,sp:10,pd:3],[cl:PW,w:MU-Invisibility,sp:2,pd:1],[cl:PW,w:Gaseous Form,sp:1,pd:1],[cl:PW,w:MU-Detect-Magic,sp:1,pd:1],[cl:PW,w:MU-Enlarge,sp:1,pd:1],[cl:PW,w:MU-Polymorph-Self,sp:4,pd:1],[cl:PW,w:MU-Wall-of-Fire,sp:4,pd:1],[cl:PW,w:Improved-Phantasmal-Force,sp:2,pd:1],[cl:PW,w:MU-Pyrotechnics,sp:2,pd:-1],[cl:MI,%:60,items:random:1d4],[cl:MI,%:40,items:random:4d2]{{subtitle=Creature}}Specs=[Efreeti,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Very (11-12)}}{{AC=2}}{{Alignment=Neutral tending to Evil}}{{Move=9 FL 24(B)}}{{Hit Dice=10 HD}}{{THAC0=11}}{{Attacks=1 x Produce Flame for 3d8HP}}{{Size=L, 12ft tall}}{{Section2=**Powers**}}{{Section3=Once per day: grant up to three *wishes*; use *invisibility, gaseous form, detect magic, enlarge, polymorph self,* and *wall of fire*; create an *illusion* with both visual and audio components which will last without concentration until magically dispelled or touched. An efreeti can also produce flame or use *pyrotechnics* at will.}}{{Section4=**Special Advantages**}}{{Immunity=Immune to normal fire-based attacks, and even an\nattack with magical fire suffers a -1 penalty on all attack and damage rolls.}}{{Strong=Efreet can carry up to 750 pounds on foot or flying, without tiring. They can also carry double weight for a limited time: three turns on foot or one turn aloft. For each 150 pounds of weight under 1500, add one turn to either walking or flying time permitted. After tiring, the efreeti must rest for one hour.}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=The efreet (singular: efreeti) are genies from the elemental plane of Fire. They are enemies of the djinn and attack them whenever they are encountered. A properly summoned or captured efreeti can be forced to serve for a maximum of 1,001 days, or it can be made to fulfill three wishes. Efreet are not willing servants and seek to pervert the intent of their masters by adhering to the letter of their commands.\nThe efreet are said to be made of basalt, bronze, and solid flames. They are massive, solid creatures.}}'},
+ {name:'Efreeti',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Efreeti}}RaceData=[w:Efreeti, align:N, weaps:any, ac:none, cattr:int=11:12|mov=9|fly=24B|ac=2|hd=10r4|thac0=11|size=L|attk1=3d8:Flame Attack:SPB,spdef:Immune to normal fire. Magical fire attacks get -1 penalty on attk \\amp dmg rolls,ns:9],[cl:PW,w:MU-Wish,sp:10,pd:3],[cl:PW,w:MU-Invisibility,sp:2,pd:1],[cl:PW,w:Gaseous Form,sp:1,pd:1],[cl:PW,w:MU-Detect-Magic,sp:1,pd:1],[cl:PW,w:MU-Enlarge,sp:1,pd:1],[cl:PW,w:MU-Polymorph-Self,sp:4,pd:1],[cl:PW,w:MU-Wall-of-Fire,sp:4,pd:1],[cl:PW,w:Improved-Phantasmal-Force,sp:2,pd:1],[cl:PW,w:MU-Pyrotechnics,sp:2,pd:-1],[cl:MI,%:60,items:random:1d4],[cl:MI,%:40,items:random:4d2]{{subtitle=Creature}}Specs=[Efreeti,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Very (11-12)}}{{AC=2}}{{Alignment=Neutral tending to Evil}}{{Move=9 FL 24(B)}}{{Hit Dice=10 HD}}{{THAC0=11}}{{Attacks=1 x Produce Flame for 3d8HP}}{{Size=L, 12ft tall}}{{Section2=**Powers**}}{{Section3=Once per day: grant up to three *wishes*; use *invisibility, gaseous form, detect magic, enlarge, polymorph self,* and *wall of fire*; create an *illusion* with both visual and audio components which will last without concentration until magically dispelled or touched. An efreeti can also produce flame or use *pyrotechnics* at will.}}{{Section4=**Special Advantages**}}{{Immunity=Immune to normal fire-based attacks, and even an\nattack with magical fire suffers a -1 penalty on all attack and damage rolls.}}{{Strong=Efreet can carry up to 750 pounds on foot or flying, without tiring. They can also carry double weight for a limited time: three turns on foot or one turn aloft. For each 150 pounds of weight under 1500, add one turn to either walking or flying time permitted. After tiring, the efreeti must rest for one hour.}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=The efreet (singular: efreeti) are genies from the elemental plane of Fire. They are enemies of the djinn and attack them whenever they are encountered. A properly summoned or captured efreeti can be forced to serve for a maximum of 1,001 days, or it can be made to fulfill three wishes. Efreet are not willing servants and seek to pervert the intent of their masters by adhering to the letter of their commands.\nThe efreet are said to be made of basalt, bronze, and solid flames. They are massive, solid creatures.}}'},
{name:'Elemental-Air',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Air-Elemental}{{}}Specs=[Air-Elemental,CreatureRace,0H,Air-Elemental]{{}}RaceData=[w:Air Elemental]{{}}'},
{name:'Elemental-Earth',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Earth-Elemental}{{}}Specs=[Earth Elemental,CreatureRace,0H,Earth-Elemental]{{}}RaceData=[w:Earth Elemental]{{}}'},
{name:'Elemental-Fire',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Fire-Elemental}{{}}Specs=[Fire Elemental,CreatureRace,0H,Fire-Elemental]{{}}RaceData=[w:Fire Elemental]{{}}'},
@@ -1303,186 +1314,198 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Empyrean-Wizard',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:RPGMdeault}{{}}Specs=[Empyrean,CreatureRace,2H,Titan-Wizard]{{}}RaceData=[w:Empyrean Wizard]{{}}%{Race-DB-Creatures|Titan-Wizard}{{Title=Empyrean}}{{name=Wizard}}'},
{name:'Ettin',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Ettin}}RaceData=[w:Ettin, align:CE, ac:none, cattr:int=5:7|str=15:18|dex=3:8|con=12:15|wis=3:5|chr=3|mov=12|ac=3|hd=10r2|thac0=11|size=H|attk1=1d10:Left Fist:0:B|attk2=2d6:Right Fist:0:B, spattk:Infravision to 90ft, spdef:Only surprised on a 1 on d10, ns:1],[cl:WP,prime:Ettin-Club-Right,offhand:Ettin-Club-Left],[cl:MI,%:70,items:random:1],[cl:MI,%:30,items:random:1d4]{{subtitle=Creature}}Specs=[Ettin,CreatureRace,2H,Creature]{{Section=**Attributes**}}{{Intelligence=Low (5-7)}}{{AC=3 is natural AC. Do not wear armour or magical devices}}{{Alignment=Chaotic Evil}}{{Move=12}}{{Hit Dice=10HD}}{{THAC0=11}}{{Section1=**Attacks:** In combat, an ettin has two attacks. Because each of its two heads controls an arm, an ettin does not suffer an attack roll penalty for attacking with both arms. An ettin always attacks with two large clubs, often covered with spikes. Using these weapons, the ettin causes 2d8 points of damage with its left arm, and 3d6 points of damage with its right. If the ettin is disarmed or unable to use a weapon, it attacks empty-handed, inflicting 1d10 points of damage with its left fist and 2d6 points with its right.}}{{Languages=Ettins do not have a true language of their own. Instead, they speak a mish-mash of *orc, goblin, giant dialects*, and the alignment tongue of chaotic evil creatures. Any adventurer who speaks *orcish* can understand 50% of what an ettin says.}}{{Size=H, 24ft tall}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Surprise=Having two heads is definitely an advantage for the ettins, as one is always alert, watching for danger and potential food. This means that an ettin is surprised only on the roll of a 1 on 1d10.}}{{Infravision=Up to 90 feet, which enables it to hunt and fight effectively in the dark}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=Ettins, or two-headed giants, as they are often called, are vicious and unpredictable hunters that stalk by night and eat any meat they can catch.\nAn ettin at first appears to be a stone or hill giant with two heads. On closer inspection, however, the creature\'s vast differences from the relatively civilized giant races become readily apparent. An ettin has pink to brownish skin, though it appears to be covered in a dark brown hide. This is because an ettin never bathes if it can help it, and is therefore usually encrusted with a thick layer of dirt and grime. Its skin is thick, giving the ettin its low Armor Class. An ettin\'s hair is long, stringy, and unkempt; its teeth are large, yellowing, and often rotten. The ettin\'s facial features strongly resemble those of an orc -- large watery eyes, turned-up piggish snout, and large mouth.\nAn ettin\'s right head is always the dominant one, and the right arm and leg will likely appear slightly more muscular and well-developed than the left. An ettin wears only rough, untreated skins, which are dirty and unwashed. Obviously, ettins smell very bad, due to their complete lack of grooming habits -- good or bad.\n**Habitat:** Ettins like to establish their lairs in remote, rocky areas. They dwell in dark, underground caves that stink of decaying food and offal. Ettins are generally solitary, and mated pairs only stay together for a few months after a young ettin is born to them. Young ettins mature very quickly, and within eight to ten months after they are born, they are self-sufficient enough to go off on their own.\nOn rare occasions, however, a particularly strong ettin may gather a small group of 1d4 ettins together. This small band of ettins stays together only as long as the leader remains alive and undefeated in battle. Any major defeat shatters the leader\'s hold over the band, and they each go their separate ways. \nEttins collect treasure only because it can buy them the services of goblins or orcs. These creatures sometimes serve ettins by building traps around their lairs, or helping to fight off a powerful opponent. Ettins have also been known to occasionally keep 1-2 cave bears in the area of their lairs.\nThe sloppy caves of ettins are a haven for parasites and vermin, and it isn\'t unusual for the ettins themselves to be infected with various parasitic diseases. Adventurers rummaging through ettin lairs for valuables will find the task disgusting, if not dangerous.}}{{desc9=**Combat:** Though ettins have a low intelligence, they are cunning fighters. They prefer to ambush their victims rather than charge into a straight fight, but once the battle has started, ettins usually fight furiously until all enemies are dead, or the battle turns against them. Ettins do not retreat easily, only doing so if victory is impossible.}}'},
]},
- Race_DB_Creatures_F_J:{bio:'Creatures Database v2.05 26/01/2025
This sheet holds definitions of pre-defined creatures from The Monsterous Compendium that can be used by the RPGMaster API system (creatures can also be added directly to a character sheet by editing the Monster tab on the sheet). The definitions include automatically setable attributes, valid alignments, the weapons & armour each creature can use, bonuses and penalties to saves, attacks, surprise etc, and the powers that the creature gets. Depending on API configuration, the APIs can restrict creatures to these specifications, or not as desired.',
- gmnotes:'Change Log: v2.05 26/01/2025 Added chance of random items to be added to humanoid Drag & Drop creatures v2.04 20/12/2024 Added basic Imp v2.03 24/10/2023 Creatures in support of the Horn of the Tritons v2.02 14/10/2023 Fixed issue with War Dog & added Leopard & Snow Leopard v2.01 29/09/2023 Added several families of Giants, and all Chromatic & Metalic Dragons, Titans, & others with substantial functional upgrades v1.34 24/09/2023 Fixed issues with Goblin definition v1.33 13/08/2023 Added a basic chest to act as the basis for the *Drag & Drop* container system v1.32 11/07/2023 Added creatures that can be contained in an Iron Flask v1.31 07/06/2023 Corrected some spattk & spdef entries with wrong syntax v1.30 30/04/2023 Added creatures to support Figurines of Wonderous Power and other MIs v1.28 03/03/2023 Added Elephant, Rhino and Mouse to support Wand of Wonder v1.27 12/02/2023 Added Adder as a creature to support Staff of the Serpent (Adder) v1.26 16/01/2023 Added both attkmsg & dmgmsg to display with attack & damage respectively. v1.25 14/01/2023 Switched round creature attack names and dice rolls so will work with character sheet buttons as well as APIs v1.15-24 16/12/2022 Added more creatures and changed format for inherrited template fields v1.14 25/11/2022 Added more creatures, especially undead at DM request v1.10 14/11/2022 Initial live release of a sample creatures database v1.02 10/11/2022 Fixes and additional creatures v1.01 01/11/2022 First version of Race-DB-Creatures',
+ Race_DB_Creatures_F_J:{bio:'Creatures Database v2.06 05/04/2025
This sheet holds definitions of pre-defined creatures from The Monsterous Compendium that can be used by the RPGMaster API system (creatures can also be added directly to a character sheet by editing the Monster tab on the sheet). The definitions include automatically setable attributes, valid alignments, the weapons & armour each creature can use, bonuses and penalties to saves, attacks, surprise etc, and the powers that the creature gets. Depending on API configuration, the APIs can restrict creatures to these specifications, or not as desired.',
+ gmnotes:'Change Log: v2.06 05/04/2025 Added all Grells, Gricks (a 3e monster) and Gelatinous Cube v2.05 26/01/2025 Added chance of random items to be added to humanoid Drag & Drop creatures v2.04 20/12/2024 Added basic Imp v2.03 24/10/2023 Creatures in support of the Horn of the Tritons v2.02 14/10/2023 Fixed issue with War Dog & added Leopard & Snow Leopard v2.01 29/09/2023 Added several families of Giants, and all Chromatic & Metalic Dragons, Titans, & others with substantial functional upgrades v1.34 24/09/2023 Fixed issues with Goblin definition v1.33 13/08/2023 Added a basic chest to act as the basis for the *Drag & Drop* container system v1.32 11/07/2023 Added creatures that can be contained in an Iron Flask v1.31 07/06/2023 Corrected some spattk & spdef entries with wrong syntax v1.30 30/04/2023 Added creatures to support Figurines of Wonderous Power and other MIs v1.28 03/03/2023 Added Elephant, Rhino and Mouse to support Wand of Wonder v1.27 12/02/2023 Added Adder as a creature to support Staff of the Serpent (Adder) v1.26 16/01/2023 Added both attkmsg & dmgmsg to display with attack & damage respectively. v1.25 14/01/2023 Switched round creature attack names and dice rolls so will work with character sheet buttons as well as APIs v1.15-24 16/12/2022 Added more creatures and changed format for inherrited template fields v1.14 25/11/2022 Added more creatures, especially undead at DM request v1.10 14/11/2022 Initial live release of a sample creatures database v1.02 10/11/2022 Fixes and additional creatures v1.01 01/11/2022 First version of Race-DB-Creatures',
root:'Race-DB',
api:'cmd',
type:'class,race',
controlledby:'all',
- avatar:'https://s3.amazonaws.com/files.d20.io/images/241737383/GL25pkAS2z5JJ4S9cMKkjw/max.png?1629918721',
- version:2.05,
- db:[{name:'Fire-Elemental',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Fire Elemental}}{{subtitle=Creature}}Specs=[Elemental,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low (5-7)}}{{AC=2}}{{Alignment=Neutral}}{{Move=12}}{{Hit Dice=8, 12, or 16}}{{THAC0=13, 9, or 5}}{{Attack=1 x 3d8 (touched objects save vs. magic fire at -2 penalty. Fire using creatures take 1 less damage per dice)}}{{Languages=They rarely speak, but their voices can be heard in the crackle and hiss of a large fire}}{{Size=L to H, [7+1d8](!\\amp#13;\\amp#47;r 7+1d8 feet height)feet,}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Special Defense=Only hit by +2 or better weapons}}RaceData=[w:Fire Elemental, cattr:int=5:7|ac=2|mov=12|size=L|hd=8|thac0=13|attk1=3d8:Flame Lash:0:B|attk2=\\lbrak;\\lbrak;{1d8-1\\amp#44;1d8-1\\amp#44;1d8-1\\amp#44;{1}\\amp#44;{1}\\amp#44;{1}\\rbrc;kh3\\rbrak;\\rbrak;:vs. Fire-using:0:B,spdef:+2 weapon or better to hit]{{Section9=**Description**}}{{desc=Fire elementals can be conjured in any area containing a large open flame. To provide a fire elemental with an adequate shell of Prime Material flame, a fire built to house an elemental should have a diameter of at least six feet and reach a minimum of four feet into the air. On the Prime Material Plane, a fire elemental appears as a tall sheet of flame.\nThe fire elemental will always appear to have two armlike appendages, one on each side of its body. These arms seem to flicker back into the creature\'s flaming body, only to spring out from its sides seconds later. The only facial features of a fire elemental are two large glowing patches of brilliant blue fire, which seem to function as eyes for the elemental}}{{desc1=Because they resent being conjured to this plane, fire elementals are fierce opponents who will attack their enemies directly and savagely, taking what joy they can in burning the weak creatures and objects of the Prime Material to ashes. In combat, a fire elemental lashes out with one of its ever-moving limbs, doing 3-24 points of damage. Any flammable object struck by the fire elemental must save versus magical fire at a -2 or immediately begin to burn.\nFire elementals do have some limitations on their actions in the Prime Material plane. They are unable to cross water or non-flammable liquids. Often, a quick dive into a nearby lake or stream is the only thing that can save a powerful party from certain death from a fire elemental. Also, because their natural abilities give them some built-in resistance to flame-based attacks, creatures with innate fire-using abilities, like red dragons, take less damage from a fire elemental\'s attack. The elemental subtracts 1 point from each die of damage it does to these creature (to a minimum of 1 point of damage per die)}}'},
- {name:'Fire-Giant-AC-1',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{prefix=Fire }}{{title=Giant}}{{name= AC-1}}RaceData=[w:Fire Giant AC-1, align:LE, ac:none, cattr:int=5:10|mov=12|ac=-1|hd=15+1d4+1r1|thac0=5|tohit=+4|dmg=+10|size=H|attk1=1d8:Fist:0:B|attkmsg=Remember immune to non-magical fire \\amp red dragon breath. Resistant to magical fire which does -1HP per die damage, spdef:Immune to non-magical fire and red dragon breath. Resistant to magical fire which does -1HP per die damage. Can catch rocks hurled at them 50% of the time, ns:1],[cl:WP,both:Fire-Giant-Sword,items:FG-Rock:1d4+1],[cl:MI,%:65,items:random:1],[cl:MI,%:35,items:random:1d2]{{subtitle=Creature}}Specs=[Fire-Giant-AC-1,CreatureRace,2H,Creature]{{Section=**Attributes**}}{{Intelligence=Low to Average (5-10)}}{{AC=-1 from banded mail and round metal helmets. Natural AC is 5}}{{Alignment=Lawful Evil, often living in well organised military groups}}{{Move=12}}{{Hit Dice=15HD +1d4+1}}{{THAC0=5}}{{Section1=**Attacks:** +4 on ToHit rolls from strength. 1 x Fist for 1d8 HP damage, or using a Fire Giant Two-Handed Sword for 2d10 plus strength bonus of +10. Throw rocks 3 to 200 yards doing 2d10 damage}}{{Languages=*Fire Giant* and *Giant Common*}}{{Size=H, 18ft tall, but stocky like a huge dwarf}}{{Life Expectancy=About 350 years}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Fire Immunity=Immune to nonmagical fire and heat, as well as red dragon breath}}{{Magical Fire Resistance=Resistant to all types of magical fire; such attacks inflict -1 hit point per die of damage}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc7=**Fire giants:** are brutal, ruthless, and militaristic.\nThey are tall, but squat, resembling huge dwarves. An adult male is 18 feet tall, has a 12 foot chest, and weighs about 7,500 pounds. Fire giants have coal black skin, flaming red or bright orange hair, and prognathous jaws that reveal dirty ivory or yellow teeth.\nThey carry their belongings in huge sacks. A typical fire giant\'s sack contains 2-5 (1d4+1) throwing rocks, the giant\'s wealth, a tinderbox, and 3-12 (3d4) common items. Everything they own is battered, filthy, and smelly, making it difficult to identify valuable items.}}{{desc8=A fire giant\'s natural Armor Class is 5. Warriors usually wear banded mail and round metal helmets (AC -1).}}{{desc9=**Combat:** They usually fight in disciplined groups, throwing rocks until they run out of ammunition or the opponent closes. Fire giants often wait in ambush at lava pools or hot springs, hurling heated rocks at victims for an extra 1-6 points of damage.\nWarriors favor huge two-handed swords. A fire giant\'s oversized weapons do double normal (man-sized) damage to all opponents, plus the giant\'s strength bonus. Thus, a fire giant two-handed sword does 2-20 (2d10) +10 points of damage.\nAdult fire giants can hurl rocks for 2-20 (2d10) points of damage. Their minimum range is 3 yards while their maximum is 200 yards. They can catch similar large missiles 50% of the time.}}'},
- {name:'Fire-Giant-AC5',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Fire Giant AC5,cattr:ac=5|mov=15]{{}}Specs=[Fire-Giant-AC5,CreatureRace,2H,Fire-Giant-AC-1]{{}}%{Race-DB-Creatures|Fire-Giant-AC-1}{{name= AC5}}{{AC=Not wearing any armour, so natural AC of 5}}{{desc8=Fire giants\' natural Armor Class is 5, when not wearing any armour. This is rare, as most wear banded mail and round metal helmets (AC -1)}}'},
- {name:'Fire-Giant-Juvenile-3',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Fire Giant Juvenile 1,cattr:ac=5|hd:14+1d4+1|tohit=+3|dmg=+9,ns:=1],[cl:WP,both:Fire-Giant-Sword]{{}}Specs=[Fire-Giant-Juvenile-1,CreatureRace,2H,Fire-Giant-AC-1]{{}}%{Race-DB-Creatures|Fire-Giant-AC-1}{{name= Juvenile-1}}{{AC=Not wearing any armour, so natural AC of 5}}{{desc8=Fire giants\' natural Armor Class is 5, when not wearing any armour. As a juvenile, they are still growing so can\'t have armour fitted.)}}'},
- {name:'Fire-Giant-Juvenile-2',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Fire Giant Juvenile 2,cattr:hd:13+1d4+1|tohit=+2|dmg=+8]{{}}Specs=[Fire-Giant-Juvenile-2,CreatureRace,2H,Fire-Giant-Juvenile-3]{{}}%{Race-DB-Creatures|Fire-Giant-Juvenile-1}{{name= Juvenile-2}}'},
- {name:'Fire-Giant-Juvenile-1',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Fire Giant Juvenile 3,cattr:hd:12+1d4+1|tohit=+1|dmg=+7]{{}}Specs=[Fire-Giant-Juvenile-3,CreatureRace,2H,Fire-Giant-Juvenile-3]{{}}%{Race-DB-Creatures|Fire-Giant-Juvenile-1}{{name= Juvenile-3}}'},
- {name:'Fire-Giant-Shaman-L7',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Fire Giant Shaman L7,cattr:cl=pr:fire-giant-shaman|lv=7]{{}}Specs=[Fire-Giant-Shaman-L7,CreatureRace,2H,Fire-Giant-AC-1]{{}}%{Race-DB-Creatures|Fire-Giant-AC-1}{{name= Shaman}}{{Section3=**Shaman:** This Fire Giant is a Shaman that can cast spells of a number of priest spheres of magic: *Elemental, Healing, Charm, Protection, Divination,* or *Combat*}}{{desc6=**Fire Giant Shaman:** There is a 20% chance that any band of fire giants will have a shaman (80%). If the group is lead by a king, there is an 80% chance of a spell caster. Fire giant shamans are priests of up to 7th level. A shaman can cast normal or reversed spells from the Elemental, Healing, Charm, Protection, Divination, or Combat spheres.}}'},
- {name:'Fire-Giant-Witch-Doctor',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Fire Giant Witch Doctor,sps:any,cattr:cl=pr:fire-giant-shaman/mu:fire-giant-witch-doctor|lv=7/3,ns:1],[cl:MU,lv:1,w:random|random|random|Alarm|Charm-Person|Dancing-Lights|Grease|Hold-Portal|Magic Missile|Phantasmal-Force|Sleep|Spook],[cl:MU,lv:2,w:random|random|random|Flaming-Sphere|Glitterdust|Invisibility|Melfs-Acid-Arrow|Mirror-Image|Misdirection|Pyrotechnics|Ray-of-Enfeablement|Stinking-Cloud|Web],[cl:MI,%:90],[cl:MI,%:10,items:random:2d4]{{}}Specs=[Fire-Giant-Witch-Doctor,CreatureRace,2H,Fire-Giant-AC-1]{{}}%{Race-DB-Creatures|Fire-Giant-AC-1}{{name= Witch Doctor}}{{Section3=**Witch Doctor:** This Fire Giant is a Witch Doctor that can cast spells of a number of wizard spells, and priest spheres of magic: *Elemental, Healing, Charm, Protection, Divination,* or *Combat*}}{{desc6=**Fire Giant Witch Doctor:** There is a 20% chance that any band of fire giants will have a shaman (80%) or witch doctor (20%). If the group is lead by a king, there is an 80% chance of a spell caster. Fire giant witch doctors are priest/wizards of up to 7th/3rd level; they prefer spells that can detect or thwart intruders.}}'},
- {name:'Fire-Mephit',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Imp - Fire Mephit}}{{subtitle=Creature}}RaceData=[w:Fire Mephit, align:LE|NE|CE, ac:none, weaps:none, cattr:int=8:10|mov=12|fly=24(B)|ac=5|size=M|hd=3+1|thac0=17|attk1=1d3:Claw1:0:S|attk2=1d3:Claw2:0:S|dmgmsg=A successful claw hit also does an additional \\lbrak;\\lbrak;1\\rbrak;\\rbrak;HP of heat damage, spattk:Claws do additional 1HP heat damage. 2 breath weapons: Flame Jet \\amp Flame Fan. Can cast as Power *Heat Metal* and *Magic Missile x 2* once a day, spdef:*Gate* in as Power another mephit 1/hour,ns:4],[cl:PW,w:Fire Mephit Flame Breath,sp:0,pd:3],[cl:PW,w:heat-metal,sp:5,pd:1],[cl:PW,w:magic-missile,sp:1,pd:1],[cl:PW,w:gate-mephit,sp:0,pd:24]{{Section=**Attributes**}}{{Intelligence=Average (8:10)}}{{AC=5}}{{Alignment=Any Evil}}{{Move=12, FL24(B)}}{{Hit Dice=3+2}}{{THAC0=17}}{{Attacks=2 x Claw for 1d3 and 1HP additional heat damage}}{{Languages=*Mephit*}}{{Size=M, 5ft tall}}{{Life Expectancy=Short!}}{{Section1=**Powers**}}{{Section2=Breath weapons: *Flame Jet* \\amp *Fan of Flame*. Spells as Powers: *Heat Metal*, *Magic Missile x 2* each 1/day. *Gate Mephit* 1/hour}}{{Section3=**Special Advantages**}}{{Section4=**Touching Skin:** Touching a Fire Mephit causes 1HP heat damage (no save)}}{{Section7=**Special Disadvantages**}}{{Section8=None}}Specs=[Imp-Fire-Mephit,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc=**Fire Mephit:** The most mischievous of all mephits, these fiends play terrible pranks on other mephits (such as pushing lava mephits into water and watching them harden) and on their victims.\nFire Mephit breath weapons have two forms. The first is a flame jet 15 feet long and 1-foot wide. This jet automatically hits one target, of the mephit\'s choosing, for ld8+1 points of damage (half if saving throw is successful). The second form is a fan of flame covering a 120 arc directly in front of the mephit to a distance of 5 feet. Any creature in the arc suffers 4 points of damage, no saving throw allowed.}}{{desc8=Mephits are nasty little messengers created by powerful lower planes creatures. They are evil and malicious by nature and appear on the Prime Material Plane only to perform evil deeds. Six types of mephits are known: fire, ice, lava, mist, smoke, and steam. Each is created from the substance for which it is named.\nMephits appear as thin, 5-foot humanoids with wings. Their faces have exaggerated features, including hooked noses, pointed ears, wide eyes, and protruding chins. Their skin continually oozes the stuff from which they were made. Mephits speak a common mephit tongue.}}{{desc9=**Combat:** In battle, mephits attack with either clawed hands or breath weapons. Damage is variable depending on the type of mephit encountered. All mephits have the ability to gate in other mephits; the type gated in and percentage chance for success varies with the mephit initiating the gating.}}'},
- {name:'Flind',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Flind}}RaceData=[w:Flind, align:LE, weaps:club|flindbar, ac:leather|padded|studded|ring-mail|brigandine|scale-mail|hide|chain-mail, cattr:int=8:10|mov=12|ac=10|size=M|hd=2+3r3|thac0=17|tohit=+1|attk1=1d6:Club:4:B, spattk:Favour the *Flindbar*: equip this as a weapon from the weapons database. A Flindbar can disarm an opponent if they fail a *save vs. wand*,ns:1],[cl:WP,prime:Flindbar,offhand:Dagger],[cl:MI,%:90],[cl:MI,%:10,items:random:1]{{subtitle=Creature}}{{Section=**Attributes**}}{{Intelligence=Average (8 to 10)}}{{AC=10, up to AC5 with armour}}{{Alignment=Lawful Evil}}{{Move=12}}{{Hit Dice=2+3}}{{THAC0=17}}{{Attack=Club for 1d6 (75%), or *Flindbar* for 2 attacks/round for 1d4 (25%) - both can be equipped from the weapons database}}{{Languages=*Flind, Gnoll,* and many also speak *flind, troll, orc,* or *hobgoblin*}}{{Size=M, 6-7ft tall}}{{Life Expectancy=On average 35 years}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Strength=Due to their great strength, Flinds gain +1 on their attack rolls}}{{Section6=**Special Disadvantages**}}{{Section7=None}}Specs=[Flind,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc8=The flind is similar to a gnoll in body style, though it is a little shorter, and broader. They are more muscular than their cousins. Short, dirty, brown and red fur covers their body. Their foreheads do not slope back as far, and their ears are rounded, but still animal like. }}{{desc9=**Combat:** Flinds use clubs (75%) which inflict 1-6 points of damage and flindbars (25%) which do 1-4 points of damage. A flindbar is a pair of chain-linked iron bars which are spun at great speed. A flind with a flindbar can strike twice per round. Each successful hit requires the victim to save vs. wands or have his weapon entangled in the chain and torn from his grasp by the flindbar. Due to their great strength, flinds get a +1 on their attack rolls.\nFlinds are regarded with reverence and awe by gnolls. Flind leaders are 3+3 Hit Dice, at least 13 intelligence and 18 charisma to gnolls (15 to flinds), and always use flindbars.}}'},
- {name:'Flind-Leader',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Flind}}RaceData=[w:Flind Leader, cattr:int=13:14|ac=5|hd=3+3r3|thac0=17|attk1=1d4:Flindbar:3:B]{{subtitle=Creature}}Specs=[Flind Leader,CreatureRace,0H,Flind]{{}}%{Race-DB-Creatures|Flind}{{Intelligence=High (at least 13)}}{{AC=5 (preset - can be improved with magical armour if equipped)}}{{Hit Dice=3+3}}{{THAC0=17}}{{Attack=Always use *Flindbar* for 2 attacks/round for 1d4 - equip from the weapons database}}Specs=[Flind Leader,CreatureRace,0H,Flind]{{desc=**Flind Leaders:** Flind leaders are 3+3 Hit Dice, at least 13 intelligence and 18 charisma to gnolls (15 to flinds), and always use flindbars.}}'},
- {name:'Flind-ac5',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Flind}}RaceData=[w:Flind ac5, cattr:ac=5]{{subtitle=Creature}}Specs=[Flind ac5,CreatureRace,0H,Flind]{{}}%{Race-DB-Creatures|Flind}{{AC=5 (preset - can be improved with magical armour if equipped)}}'},
- {name:'Fremlin',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{subtitle=Creature}}RaceData=[w:Fremlin, align:CN, cattr:int=8:10|fly=12 (B)|ac=6|size=T|hd=3+6r3|mr=0|mw=+1|attkmsg=Only hit by magical weapons. No magic resistance, spdef:Only hit by magical weapons. No magic resistance],[cl:MI,items:random:1]{{}}Specs=[Fremlin,CreatureRace,0H,Gremlin]{{}}%{Race-DB-Creatures|Gremlin}{{title=Fremlin}}{{Intelligence=Average (8 to 10)}}{{AC=6}}{{Alignment=Chaotic Neutral}}{{Move=6, Fl 12(B)}}{{Size=T, 1ft tall}}{{Hit Dice=3+6}}{{Magic Resistance=No magic resistance}}{{desc8=Often mistaken for imps, fremlins are a type of gremlin, small winged goblinoids. There are many varieties of gremlins, and most are chaotic and mischievous. These friendly gremlins are quite harmless. They tend to be plump, whiny, and lazy, but otherwise look like small, slate colored gremlins. Their ears are very large and pointed, giving them a 65% chance to hear noise. A pair of bat-like wings enables them to fly or glide. Fremlins never wear clothing or ornamentation.}}{{desc9=**Combat:** Occasionally, fremlins become tolerable companions, if they take a liking to someone and are well fed and entertained. Even in this case, they never assist in combat and may in fact hinder it by giving away the location of hiding characters or making other such blunders.}}'},
- {name:'Freshwater-Troll',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Freshwater Troll (Scrag)}}{{subtitle=Creature}}Specs=[Freshwater Troll,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low (5-7)}}{{AC=3}}{{Alignment=Chaotic Evil}}{{Move=3, Sw12}}{{Hit Dice=5+5}}{{THAC0=15}}{{Attacks=2 x Claw 1d4+1, 1 x Bite 3d4}}{{Languages=Trolls have no language of their own, using "trollspeak", a guttural mishmash of common, giant, goblin, orc, and hobgoblin. Trollspeak is highly transient and trolls from one area are only 25% likely to be able to communicate with trolls from another.}}{{Size=L 8ft tall}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Regeneration=Only in fresh water, 3 rounds after 1st blood, regenerates at 3HP per round}}{{Section4=**Special Advantages**}}{{Infravision=90 foot}}{{Priest Spells=}}RaceData=[w:Freshwater Troll, align:CE, cattr:int=5:7|ac=3|mov=3|swim=12|hd=5+5r3|regen=3|thac0=15|size=L|dmg=+8|attk1=1+1d4:Claw:0:S|attk2=1+1d4:Claw:0:S|attk3=3d4:Bite:1:P|attkmsg=Remember to start \\lbrak;Regenerating\\rbrak;\\lpar;!rounds ~~target caster¦`{selected¦token_id}¦regeneration¦99¦0¦Regenerating at `{selected¦conregen} per round¦strong\\rpar; 3 rounds after take damage ***and*** in fresh water, spdef:Regenerate at 3HP per round *if* in fresh water,ns:1],[cl:PW,w:regenerate,sp:0,pd:-1],[cl:MI,%:80],[cl:MI,%:20,items:random:1d2]{{Section9=**Description**}}{{desc8=These gilled trolls, also called scrags or river trolls, are the most loathsome of all the trolls. River trolls, as their name implies, travel the waterways in search of victims. Their arms are thin and frail but their mouths are wide and lined with dozens of needle-sharp fangs. Their color ranges from blue-green to olive. Scrags have all of the abilities of normal trolls, but they only regenerate when immersed in fresh water. Scrags can survive out of water for one hour and often come ashore in search of prey. River trolls devour anything they catch, but prefer humanoids and have a fondness for dwarves.\nScrags are devious hunters and often carry a few baubles with them. They lay gems near the water\'s edge and wait for someone to spot them and reach down. Other traps include burying themselves in the sand, in shallow water, and waiting to be stepped on or tangling the rudders of small boats. River trolls occasionally nest beneath bridges or near ferry boats, demanding a toll in exchange for passage. The toll varies, but averages the equivalent of one cow per week, per troll. Livestock and children frequently disappear when river trolls are near.}}'},
- {name:'Freshwater-Troll-Shaman',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{subtitle=Creature}}RaceData=[w:Freshwater Troll Shaman, cattr:int=7|cl=pr:scrag-shaman|lv=7,ns:1],[cl:MI,%:5,items:random:2d2]{{Intelligence=Low (7)}}%{Race-DB-Creatures|Freshwater-Troll}{{AC=3}}Specs=[Freshwater-Troll Shaman,CreatureRace,0H,Freshwater-Troll]{{name=Scrag Shaman Chieftain}}{{Priest Spells=Cast at 7th level: Charm, Divination, Elemental (Water), Sun (Darkness only), and Weather.}}{{desc=Trolls live in small packs of 3 to 12 trolls led by a dominant female who acts as shaman/chieftain. She casts priest spells at 7th level; spheres typically include Charm, Divination, Sun (Darkness only), and Weather, and Scrag Shamen also get Elemental (water) spells. Leadership is only retained by combat, so fights for pack control are frequent. Often trolls rend each other limb from limb, but these battles are never fatal. Still, it is the custom of trolls to toss the loser\'s head a great distance from the fight scene, and frequently losers must sit and stew for a week until their new head grows in.\nThe pack chieftain\'s duties are few. She leads the trolls on nightly forages, loping along, sniffing the air for prey. If a scent is found, the trolls charge, racing to get there first, and letting out a great cry once prey is spotted. In return for being the hunt leader, the shaman gets her choice of mates in the pack. Females give birth to a single troll about once every five years.}}'},
- {name:'Frost-Giant-AC0',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{prefix=Frost }}{{title=Giant}}{{name= AC0}}RaceData=[w:Frost Giant AC0, align:CE, ac:none, cattr:int=5:10|mov=12|ac=0|hd=14+1d4r1|thac0=5|tohit=+4|dmg=+9|size=H|attk1=1d8:Fist:0:B|attkmsg=Remember immune to Cold, spdef:Immune to cold. Can catch rocks hurled at them 40% of the time, ns:1],[cl:WP,prime:Frost-Giant-Battle-Axe,items:FG-Rock:1d4+1],[cl:MI,%:80,items:random:1],[cl:MI,%:20,items:random:1d2]{{subtitle=Creature}}Specs=[Frost-Giant-AC0,CreatureRace,2H,Creature]{{Section=**Attributes**}}{{Intelligence=Low to Average (5-10)}}{{AC=0 - Warriors usually wear chain mail and metal helmets decorated with horns or feathers. Natural AC is 5}}{{Alignment=Chaotic Evil, often living in small groups}}{{Move=12 (15 without armour)}}{{Hit Dice=14HD +1d4}}{{THAC0=5}}{{Section1=**Attacks:** +4 on ToHit rolls from strength. 1 x Fist for 1d8 HP damage, or using a Frost Giant Battle Axe for 2d8 plus strength bonus of +9. Throw rocks 3 to 200 yards doing 2d10 damage}}{{Languages=*Frost Giant* and *Giant Common*}}{{Size=H, 21ft tall}}{{Life Expectancy=About 250 years}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Cold Immunity=Immune to all forms of cold}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc7=**Frost giants:** have a reputation for crudeness and stupidity. This reputation is deserved, but frost giants are crafty fighters.\nFrost giants have muscular, roughly human builds. The typical adult male is 21\' tall and weighs about 8,000 pounds. Females are slightly shorter and lighter, but otherwise identical to males. Frost giants have snow-white or ivory skin. Their hair is light blue or dirty yellow, with matching eyes.\nFrost giants carry their belongings in huge sacks. A typical frost giant\'s sack contains 2-5 (1d4+1) throwing rocks, the giant\'s wealth, and 3-12 (3d4) mundane items. Everything in a giant\'s bag is old, worn, dirty, and smelly, making the identification of any valuable items difficult.}}{{desc8=A frost giant\'s natural Armor Class is 5. Warriors usually wear chain mail and metal helmets decorated with horns or feathers (AC 0). They also wear skins and pelts, along with any jewelry they own.}}{{desc9=**Combat:** Frost giants will start combat at a distance, throwing rocks until they run out of ammunition, or the opponent closes. One of their favorite strategies is to ambush victims by hiding buried in the snow at the top of an icy or snowy slope where opponents will have difficulty reaching them.\nWarriors favor huge battle axes. A frost giant\'s oversized weapons do double normal (man-sized) damage to all opponents, plus the giant\'s strength bonus. Thus, a frost giant battle axe does 2-16 (2d8) +9 points of damage.\nAdult frost giants can hurl rocks for 2-20 (2d10) points of damage. Their minimum range is 3 yards while their maximum is 200 yards. They can catch similar large missiles 40% of the time.}}'},
- {name:'Frost-Giant-AC5',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant AC5,cattr:ac=5|mov=15]{{}}Specs=[Frost-Giant-AC5,CreatureRace,2H,Frost-Giant-AC0]{{}}%{Race-DB-Creatures|Frost-Giant-AC0}{{name= AC5}}{{AC=Not wearing any armour, so natural AC of 5}}{{desc8=Frost giants\' natural Armor Class is 5, when not wearing any armour. This is rare, as most wear chain mail and metal helmets decorated with horns or feathers (AC 0).}}'},
- {name:'Frost-Giant-Jarl',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Jarl,cattr:ac=-2|hd=14+1d4r5, ns:=1],[cl:WP,prime:Frost-Giant-Battle-Axe+2,items:FG-Rock:1d4+1],[cl:MI,%:70,items:random:1],[cl:MI,%:20,items:random:1d2],[cl:MI,%:10,items:random:1d4]{{}}Specs=[Frost-Giant-Jarl,CreatureRace,2H,Frost-Giant-AC0]{{}}%{Race-DB-Creatures|Frost-Giant-AC0}{{name= Jarl}}{{desc6=**Frost Giant Jarl:** A chieftain who commands 20 or more giants is called a jarl. Jarls always will have better than normal armor and a weapon of +1 to +3 enchantment.}}'},
- {name:'Frost-Giant-Juvenile-1',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Juvenile 1,cattr:ac=5|hd:13+1d4|thac0=7|tohit=+3|dmg=+8,ns:=1],[cl:WP,both:Frost-Giant-Battle-Axe]{{}}Specs=[Frost-Giant-Juvenile-1,CreatureRace,2H,Frost-Giant-AC0]{{}}%{Race-DB-Creatures|Frost-Giant-AC0}{{name= Juvenile-1}}{{AC=Not wearing any armour, so natural AC of 5}}{{desc8=Frost giants\' natural Armor Class is 5, when not wearing any armour. This is rare, as most wear chain mail and metal helmets decorated with horns or feathers (AC 0).}}'},
- {name:'Frost-Giant-Juvenile-2',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Juvenile 2,cattr:hd:12+1d4|tohit=+3|dmg=+7]{{}}Specs=[Frost-Giant-Juvenile-2,CreatureRace,2H,Frost-Giant-Juvenile-1]{{}}%{Race-DB-Creatures|Frost-Giant-Juvenile-1}{{name= Juvenile-2}}'},
- {name:'Frost-Giant-Juvenile-3',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Juvenile 3,cattr:hd:11+1d4|thac0=9|tohit=+3|dmg=+6]{{}}Specs=[Frost-Giant-Juvenile-3,CreatureRace,2H,Frost-Giant-Juvenile-1]{{}}%{Race-DB-Creatures|Frost-Giant-Juvenile-1}{{name= Juvenile-3}}'},
- {name:'Frost-Giant-Shaman-L3',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Shaman L3,cattr:cl=pr:frost-giant-shaman|lv=3,ns:1],[cl:MI,%:10,items:random:1d4]{{}}Specs=[Fire-Giant-Shaman-L3,CreatureRace,2H,Frost-Giant-AC0]{{}}%{Race-DB-Creatures|Frost-Giant-Shaman-L7}'},
- {name:'Frost-Giant-Shaman-L5',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Shaman L5,cattr:cl=pr:frost-giant-shaman|lv=5],[cl:MI,%:10,items:random:1d4]{{}}Specs=[Fire-Giant-Shaman-L5,CreatureRace,2H,Frost-Giant-AC0]{{}}%{Race-DB-Creatures|Frost-Giant-Shaman-L7}'},
- {name:'Frost-Giant-Shaman-L7',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Shaman L7,cattr:cl=pr:frost-giant-shaman|lv=7],[cl:MI,%:10,items:random:2d3]{{}}Specs=[Fire-Giant-Shaman-L7,CreatureRace,2H,Frost-Giant-AC0]{{}}%{Race-DB-Creatures|Frost-Giant-AC0}{{name= Shaman}}{{Section3=**Shaman:** This Frost Giant is a Shaman that can cast spells of a number of priest spheres of magic: *healing, charm, protection, divination*, or *weather*}}{{desc6=**Frost Giant Shaman:** There is a 20% chance that any band of frost giants will have a shaman (80%) or witch doctor (20%). If the group is led by a jarl, there is an 80% chance for a spell caster. Frost giant shamans are priests of up to 7th level. A shaman can cast normal or reversed spells from the *healing, charm, protection, divination*, or *weather* spheres. Frost giant witch doctors are priest/wizards of up to 7th/3rd level; they prefer spells that can bewilder and confound other giants. Favorite spells include: *unseen servant, shocking grasp, detect magic, ventriloquism, deeppockets, ESP, mirror image,* and *invisibility*.}}'},
- {name:'Frost-Giant-Witch-Doctor-L3-7',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Witch Doctor,sps:any,cattr:cl=pr:frost-giant-shaman/mu:frost-giant-witch-doctor|lv=7/3,ns:1],[cl:MU,lv:1,w:random|random|random|Detect-Magic],[cl:MU,lv:2,w:random|ESP|Mirror-Image|random|random],[cl:MI,%:20,items:random:2d4]{{}}Specs=[Frost-Giant-Witch-Doctor,CreatureRace,2H,Frost-Giant-AC0]{{}}%{Race-DB-Creatures|Frost-Giant-AC0}{{name= Witch Doctor}}{{Section3=**Witch Doctor:** This Frost Giant is a Witch Doctor that can cast spells of a number of wizard spells, and priest spheres of magic:*healing, charm, protection, divination*, or *weather*}}{{desc6=**Frost Giant Witch Doctor:** There is a 20% chance that any band of frost giants will have a shaman (80%) or witch doctor (20%). If the group is led by a jarl, there is an 80% chance for a spell caster. Frost giant shamans are priests of up to 7th level. A shaman can cast normal or reversed spells from the *healing, charm, protection, divination*, or *weather* spheres. Frost giant witch doctors are priest/wizards of up to 7th/3rd level; they prefer spells that can bewilder and confound other giants. Favorite spells include: *unseen servant, shocking grasp, detect magic, ventriloquism, deeppockets, ESP, mirror image,* and *invisibility*.}}'},
- {name:'Galtrit',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{subtitle=Creature}}RaceData=[w:Galtrit, cattr:int=8:10|ac=2|size=T|hd=1-6|hp=2|thac0=20|mr=0|mw=0|dmgmsg=Anesthetic in saliva prevents victims feeling the bite. Automatically sucks \\lbrak;1HP of blood/round\\rbrak;\\lpar;!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the victim?¦token_id}¦Galtrit blood drain_Feeling drained¦100¦-10¦Seem to be getting weaker... not sure why...¦arrowed\\rpar; for a full turn, if undisturbed. For each 4HP blood loss victim loses 1 Constitution. 3 Con lost victim faints. See Specials. Hit by any weapon. No magic resistance, spattk:Only detected on 1 in 8 (Elves 1 in 6). If not detected gain +3 on To Hit. Once locked on galltrits suck 1HP of blood per round for a full turn if undisturbed. If challenged in any way the galltrits flee. This loss of blood reduces the victim\'s Constitution by 1 point for every 4 hit points of blood lost. If the victim loses 3 or more points of Constitution usually due to multiple galltrits they faint from the sudden blood loss. It takes two full turns to awaken and two weeks to regain the lost Constitution points, spdef:Nil]{{}}%{Race-DB-Creatures|Gremlin}{{title=Galtrit}}{{Intelligence=Average (8 to 10)}}{{AC=2}}{{Size=T, 6ins tall}}{{Alignment=Chaotic Evil}}{{Hit Dice=1-6 (2HP)}}{{Magic Resistance=No magic resistance}}{{Surprise=Detected only on 1 in 8 roll (Elves 1 in 6). If win surprise, gain +3 on attack roll}}Specs=[Galtrit,CreatureRace,0H,Gremlin]{{desc8=**Galtrit:** These nasty little stone-gray creatures live in areas of dung, carrion, or offal. Because of their small size and coloration, they are detected only on a 1 in 8 chance (1 in 6 for elves).}}{{desc9=**Combat:** They attack anything that disturbs them. Galltrit attempt to gain surprise and bite (with a +3 bonus to the attack roll if they have surprise) somewhere unobtrusive. An anesthetic in their saliva prevents their victims from feeling the bite, rather like a vampire bat.\nOnce locked on, galltrits suck 1 hit point of blood per round for a full turn, if undisturbed. If challenged in any way, the galltrits flee. This loss of blood reduces the victim\'s Constitution by 1 point for every 4 hit points of blood lost. If the victim loses 3 or more points of Constitution, usually due to multiple galltrits, he faints from the sudden blood loss. It takes two full turns to awaken and two weeks to regain the lost Constitution points.}}'},
- {name:'Genie-Djinni',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Djinni}{{}}Specs=[Djinni,CreatureRace,0H,Djinni]{{}}RaceData=[w:Djinni]{{}}'},
- {name:'Genie-Efreeti',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Efreeti}{{}}Specs=[Efreeti,CreatureRace,0H,Efreeti]{{}}RaceData=[w:Efreeti]{{}}'},
- {name:'Ghast',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Ghast}}{{subtitle=Creature}}Specs=[Ghast,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Very (11-12)}}{{AC=4}}{{Alignment=Chaotic Evil}}{{Move=15}}{{Hit Dice=4}}{{THAC0=17}}{{Attack=2 x Claw 1d4, 1 x Bite 1d8}}{{Languages=Ghasts cannot talk, but have been known to utter a low moan when unable to complete an assigned task}}{{Size=M 5-6ft tall}}{{Life Expectancy=Already dead!}}{{Section2=**Powers**}}{{Stench=They exude a carrion stench in a 10\' radius which causes retching and nausea unless a saving throw versus poison is made, causing them to attack at a penalty of -2.}}{{Paralysis=Their touch causes opponents to become rigid unless a saving throw versus paralyzation is successful (even Elves). This paralysis lasts for 5-10 (4+1d6) rounds or until negated by a priest.}}{{Section4=**Special Advantages**}}{{Spell Immunity=Subject to all attack forms except *sleep* and *charm* spells}}{{Infravision=No need for light (dead eyes) so can see normally in absolute darkness}}{{Section6=**Special Disadvantages**}}{{Cold Iron=A susccessful attack with a cold iron weapon does double damage to a Ghast}}RaceData=[w:Ghast, align:CE, cattr:int=11:12|mov=15|ac=4|size=M|hd=4r3|thac0=17|attk1=1d4:Claw 1:0:S|attk2=1d4:Claw 2:0:S|attk3=1d8:Bite:1:P|dmgmsg=On successful hit opponents (including elves) save vs. Paralysis or \\lbrak;Paralysed\\rbrak;(!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Select Target¦token_id}¦Paralysis¦\\amp#91;\\lbrak;40+\\lpar;10\\amp#42;1d6\\amp#41;\\rbrak;\\amp#93;¦-10¦Paralysed by a Ghoul attack¦back-pain). Remember immune to Sleep \\amp Charm; effect of Ghast stink \\amp cold iron does double damage to a Ghast, ns:1],[cl:PW,w:Ghast Stench,sp:0,pd:-1]{{Section9=**Description**}}{{desc=These creatures are so like ghouls as to be completely indistinguishable from them, and they are usually found only with a pack of ghouls. When a pack of ghouls and ghasts attacks it will quickly become evident that ghasts are present, for they exude a carrion stench in a 10\' radius which causes retching and nausea unless a saving throw versus poison is made. Those failing to make this save will attack at a\npenalty of -2.\nWorse, the ghast shares the ghoulish ability to paralyzation, and their attack is so potent that it will even affect elves. Paralysis caused by a ghast lasts for 5-10 (4+1d6) rounds or until negated by a priest\'s remove paralysis spell.\nGhasts, like ghouls, are undead class and thus sleep and charm spells do not affect them. Though they can be struck by any sort of weapon, cold iron inflicts double normal damage. Clerics can turn them beginning at 2nd level. The circle of protection from evil does not keep them at bay unless it is used in conjunction with cold iron (such as a circle of powdered iron or an iron ring).}}'},
- {name:'Ghost-ethereal-plane',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Ghost}}{{name on Etherial Plane}}{{subtitle=Creature}}Specs=[Ghost,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=High (13-14)}}{{AC=8}}{{Alignment=Lawful Evil}}{{Move=9}}{{Hit Dice=10}}{{THAC0=11}}{{Attack=Touch ages a character by 1d4 x 10 years}}{{Languages=Those known at death, and can communicate with both the dead and living}}{{Size=M, 5 to 6ft tall}}{{Life Expectancy=Already dead!}}{{Section2=**Powers**}}{{Section3=**Dreadful Appearance:** The mere sight of a Ghost causes any humanoid being to age 10 years and flee in panic for 2-12 (2d6) turns unless a saving throw versus spell is made. Priests above 6th level are immune to this effect, and all other humanoids above 8th level may add +2 to their saving throws.}}{{Section4=**Magic Jar:** Any creatures within 60 yards of a ghost is subject to attack by magic jar. If the ghost fails to magic jar its chosen victim, it will then semi-materialize in order to attack by touch (in which case use a *Ghost-Material-Plane*).}}{{Section6=**Special Advantages**}}{{Aging attack=A successful touch from a Ghost ages the victim by 1d4 x 10 years}}{{Attack Immunity=Only hit by silver weapons (half-damage) and magically enchanted weapons of +1 or better (full-damage)}}{{Spell Immunity=Immune to *all spells* cast on the Material Plane. Only affected by spells cast on the Etherial plane}}{{Other Immunities=Immune to paralysation and poison}}{{Infravision=No need for light (dead eyes) so can "sense" normally in absolute darkness}}RaceData=[w:Ghost Ethereal Plane, align:LE, cattr:int=13:14|mov=9|ac=8|size=M|hd=10r2|thac0=11|attk1=0:Touch:0:B|dmgmsg=On successful hit opponents \\lbrak;age by 1d4 x 10 years\\rbrak;\\lpar;!modattr ~~charid \\amp#64;{target¦Who\'s the Victim?¦character_id} ~~age\\vbar\\amp#91;\\lbrak;10\\amp#42;1d4\\rbrak;\\amp#93; ~~fb-header Ghost Aging Attack ~~fb-content _CHARNAME_ has aged by _TCUR0_ and is now _CUR0_ years old\\rpar;. Remember immune to Sleep Charm Hold \\amp Cold. Silver \\lpar;half-damage\\rpar; or +1 or better weapons to hit and those in 60yds suffer the *Ghost Fear* power, spattk:Drain 10 x 1d4 years of age if hit, spdef:Silver \\lpar;half-damage\\rpar; or +1 or better weapons to hit. Immune to spells cast on the material plane. Ghost Fear power ages and scares those within 60yds seeing Ghost, ns:2],[cl:PW,w:Ghost Fear,sp:0,pd:-1],[cl:PW,w:Magic Jar,sp:10,-1]{{Section9=**Description**}}{{desc=Ghosts are the spirits of humans who were either so greatly evil in life or whose deaths were so unusually emotional they have been cursed with the gift of undead status. Thus, they roam about at night or in places of darkness. These spirits hate goodness and life, hungering to draw the living essences from the living.}}{{desc1=**Combat:** As ghosts are non-corporeal (ethereal), they are usually encountered only by creatures in a like state, although they can be seen by non-ethereal creatures. The mere sight of one causes any humanoid being to age 10 years and flee in panic for 2-12 (2d6) turns unless a saving throw versus spell is made. Priests above 6th level are immune to this effect, and all other humanoids above 8th level may add +2 to their saving throws. Any creatures within 60 yards of a ghost is subject to attack by *magic jar*. If the ghost fails to *magic jar* its chosen victim, it will then semi-materialize in order to attack by touch (in which case the ghost is Armor Class 0). Any human or demi-human killed by a ghost is drained of its life essence and is forever dead.\nIf the ghost fails to become semi-material it can only be combatted by another in the Ethereal plane (in which case the ghost has an Armor Class of 8 - use *Ghost-etherial-plane* creature definition).\nGhosts can be turned by clerics after reaching 7th level and can be damaged by holy water while in their semi-material form.}}'},
- {name:'Ghost-material-plane',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= on Material Plane}}{{subtitle=Creature}}Specs=[Ghost,CreatureRace,0H,Ghost-ethereal-plane]{{AC=0}}RaceData=[w:Ghost Material Plane, cattr:ac=0]{{desc=}}%{Race-DB-Creatures|Ghost-etherial-plane}'},
- {name:'Ghoul',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Ghoul}}{{subtitle=Creature}}Specs=[Ghoul,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low (5-7)}}{{AC=6}}{{Alignment=Chaotic Evil}}{{Move=9}}{{Hit Dice=2}}{{THAC0=19}}{{Attack=2 x Claw 1d3, 1 x Bite 1d6}}{{Languages=Ghouls cannot talk, being mindless, but have been known to utter a low moan when unable to complete an assigned task}}{{Size=M 5-6ft tall}}{{Life Expectancy=Already dead!}}{{Section2=**Powers**}}{{Paralysis=Their touch causes humans (including dwarves, gnomes, half-elves, and halflings, **but excluding elves**) to become rigid unless a saving throw versus paralyzation is successful. This paralysis lasts for 3-8 (2+1d6) rounds or until negated by a priest.}}{{Section4=**Special Advantages**}}{{Spell Immunity=Subject to all attack forms except *sleep* and *charm* spells}}{{Infravision=No need for light (dead eyes) so can see normally in absolute darkness}}RaceData=[w:Ghoul, align:N, cattr:int=5:7|mov=9|ac=6|size=M|hd=2r4|thac0=19|attk1=1d3:Claw 1:0:S|attk2=1d3:Claw 2:0:S|attk3=1d6:Bite:1:P|dmgmsg=On successful hit humans (including dwarves; gnomes; half-elves; and halflings **but excluding elves**) save vs. Paralysis or \\lbrak;Paralysed\\rbrak;(!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Select Target¦token_id}¦Paralysis¦\\amp#91;\\lbrak;20+\\lpar;10\\amp#42;1d6\\amp#41;\\rbrak;\\amp#93;¦-10¦Paralysed by a Ghoul attack¦back-pain). Remember immune to Sleep \\amp Charm]{{Section9=**Description**}}{{desc=Ghouls are undead creatures, once human, who now feed on the flesh of corpses. Although the change from human to ghoul has deranged and destroyed their minds, ghouls have a terrible cunning which enables them to hunt their prey most effectively.\nGhouls are vaguely recognizable as once having been human, but have become horribly disfigured by their change to ghouls. The tongue becomes long and tough for licking marrow from cracked bones, the teeth become sharp and elongated, and the nails grow strong and sharp like claws.}}{{desc1=**Combat:** Ghouls attack by clawing with their filthy nails and biting with their fangs. Any human or demi-human (except elves) killed by a ghoulish attack will become a ghoul unless blessed (or blessed and then resurrected). Obviously, this is also avoided if the victim is devoured by the ghouls. Ghoul packs always attack without fear. These creatures are subject to all attack forms except sleep and charm spells. They can be turned by priests of any level. The magic circle of protection from evil actually keeps ghouls completely at bay.}}'},
- {name:'Giant-Cloud',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Cloud-Giant}{{}}Specs=[Giant-Cloud,CreatureRace,2H,Cloud-Giant]{{}}RaceData=[w:Cloud Giant]{{}}'},
- {name:'Giant-Cloud-Castle',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Cloud-Castle-Giant}{{}}Specs=[Giant-Cloud-Castle,CreatureRace,2H,Cloud-Castle-Giant]{{}}RaceData=[w:Cloud Castle Giant]{{}}'},
- {name:'Giant-Cloud-Juvenile-1',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Cloud-Giant-Juvenile-1}{{}}Specs=[Giant-Cloud,CreatureRace,2H,Cloud-Giant-Juvenile-1]{{}}RaceData=[w:Cloud Giant Juvenile-1]{{}}'},
- {name:'Giant-Cloud-Juvenile-2',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Cloud-Giant-Juvenile-2}{{}}Specs=[Giant-Cloud,CreatureRace,2H,Cloud-Giant-Juvenile-2]{{}}RaceData=[w:Cloud Giant Juvenile-2]{{}}'},
- {name:'Giant-Cloud-Juvenile-3',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Cloud-Giant-Juvenile-3}{{}}Specs=[Giant-Cloud,CreatureRace,2H,Cloud-Giant-Juvenile-3]{{}}RaceData=[w:Cloud Giant Juvenile-3]{{}}'},
- {name:'Giant-Cloud-Priest',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Cloud-Giant-Priest}{{}}Specs=[Giant-Cloud,CreatureRace,2H,Cloud-Giant-Priest]{{}}RaceData=[w:Cloud Giant Priest]{{}}'},
- {name:'Giant-Cloud-Wizard',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Cloud-Giant-Wizard}{{}}Specs=[Giant-Cloud,CreatureRace,2H,Cloud-Giant-Wizard]{{}}RaceData=[w:Cloud Giant Wizard]{{}}'},
- {name:'Giant-Cobra',type:'CreatureRace',ct:'10',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Giant Cobra, cattr: attk1=1d3:Bite:0:P|dmgmsg=If successfully hit as well as damage \\lbrak;inject poison\\rbrak;\\lpar;!rounds --target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the Unfortunate Victim?¦token_id}¦Cobra Venom_Not quite right¦\\amp#91;\\lbrak;2d4\\rbrak;\\amp#93;¦-1¦That bite was quite painful. Should I see a Cleric?¦stopwatch\\rpar;. **Don\'t save now!** Save when the effect message pops up in a few rounds - that way the surprise is maintained! This poison **kills the victim** in 2 to 8 rounds. Save at -2 penalty when asked to do so to only take 10HP, spattk:Cobra venom **kills the victim** in 2d4 rounds. Save at -2 penalty to only take 10HP, ns:1],[cl:PW,w:Birdcharmer Charm,sp:10,pd:-1]{{}}Specs=[Giant Cobra,CreatureRace,0H,Giant Poisonous Snake]{{}}%{Race-DB-Creatures|Giant-Poisonous-Snake}{{title=Giant Cobra}}{{Section3=**Mesmerize:** Cobras can mesmerize their prey by swaying slowly and steadily while staring down their victims. Creatures of animal intelligence or less must make a saving throw against paralyzation or be effectively paralyzed for as long as the snake continues to sway, and for 2d6 rounds thereafter.}}{{Section5=**Poison:** Giant Cobra venom gets a -2 penalty to saving throws to only take 10HP plus bite damage, or **kills the victim** in 2 to 8 rounds if don\'t save}}{{desc=**Giant Cobra:** The giant cobra is an example of a variant, giant poisonous snake. Its venom results in death 2-8 rounds after a successful strike; if the victim makes a saving throw at -2 he suffers only 10 points of damage.\nGiant cobras mesmerize prey as birdcharmer snakes do. They can kill and eat an entire goat or a demihuman up to halfling or gnome size. Some varieties of giant weasel can hunt them successfully, and jungle giants consider giant cobras a delicacy, as do some elven tribesmen.}}'},
- {name:'Giant-Constrictor-Snake',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Giant Constrictor Snake, cattr:ac=5|hd=6+1r2|thac0=15|size=L| attk1=1d4:Bite:0:P|attk2=2d8:Constrict:0:B|dmgmsg=$$If successfully hit as well as damage this round \\lbrak;all future rounds\\rbrak;\\lpar;!rounds --target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the Unfortunate Victim?¦token_id}¦Giant Constrict¦\\amp#91;\\lbrak;99\\rbrak;\\amp#93;¦0¦Argh... The squeeze is on...¦back-pain\\rpar; automatically hit and do crushing damage, spattk:Once coiled victim takes crushing damage each round]{{}}Specs=[Constrictor Snake,CreatureRace,0H,Poison Snake 1-4]{{}}%{Race-DB-Creatures|Poison-Snake-1-4}{{title=Giant Constrictor Snake}}{{AC=5}}{{Hit Dice=6+1}}{{THAC0=15}}{{Size=L, 30+ft long}}{{Section5=**Constriction:** Suffering damage every round. It requires the combined efforts of 60 total points of Strength (the coiled victim plus outside help) to extricate someone from a giant constrictor\'s steel grasp}}{{desc=**Giant Constrictor:** Giant constrictor snakes are larger and much stronger than their smaller cousins. It requires the combined efforts of 60 total points of Strength (the coiled victim plus outside help) to extricate someone from a giant constrictor\'s steel grasp.\nThe skin of a giant constrictor snake is too thick and stiff to be workable, and is valuable only as armor, not for decoration. An uncured hide can fetch 20 gp}}'},
- {name:'Giant-Fire-AC-1',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Fire-Giant-AC-1}{{}}Specs=[Fire-Giant-AC-1,CreatureRace,2H,Fire-Giant-AC-1]{{}}RaceData=[w:Fire Giant AC-1]{{}}'},
- {name:'Giant-Fire-AC5',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Fire-Giant-AC5}{{}}Specs=[Fire-Giant-AC5,CreatureRace,2H,Fire-Giant-AC5]{{}}RaceData=[w:Fire Giant AC5]{{}}'},
- {name:'Giant-Fire-Juvenile-1',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Fire-Giant-Juvenile-1}{{}}Specs=[Fire-Giant-Juvenile-1,CreatureRace,2H,Fire-Giant-Juvenile-1]{{}}RaceData=[w:Fire Giant Juvenile-1]{{}}'},
- {name:'Giant-Fire-Juvenile-2',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Fire-Giant-Juvenile-2}{{}}Specs=[Fire-Giant-Juvenile-2,CreatureRace,2H,Fire-Giant-Juvenile-2]{{}}RaceData=[w:Fire Giant Juvenile-2]{{}}'},
- {name:'Giant-Fire-Juvenile-3',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Fire-Giant-Juvenile-3}{{}}Specs=[Fire-Giant-Juvenile-3,CreatureRace,2H,Fire-Giant-Juvenile-3]{{}}RaceData=[w:Fire Giant Juvenile-3]{{}}'},
- {name:'Giant-Fire-Shaman-L7',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Fire-Giant-Shaman-L7}{{}}Specs=[Fire-Giant-Shaman-L7,CreatureRace,2H,Fire-Giant-Shaman-L7]{{}}RaceData=[w:Fire Giant Shaman-L7]{{}}'},
- {name:'Giant-Fire-Witch-Doctor',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Fire-Giant-Witch-Doctor}{{}}Specs=[Fire-Giant-Witch-Doctor,CreatureRace,2H,Fire-Giant-Witch-Doctor]{{}}RaceData=[w:Fire Giant Witch Doctor]{{}}'},
- {name:'Giant-Frost-AC0',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Frost-Giant-AC0}{{}}Specs=[Frost-Giant-AC0,CreatureRace,2H,Frost-Giant-AC0]{{}}RaceData=[w:Frost Giant AC0]{{}}'},
- {name:'Giant-Frost-AC5',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Frost-Giant-AC5}{{}}Specs=[Frost-Giant-AC5,CreatureRace,2H,Frost-Giant-AC5]{{}}RaceData=[w:Frost Giant AC5]{{}}'},
- {name:'Giant-Frost-Jarl',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Frost-Giant-Jarl}{{}}Specs=[Frost-Giant-Jarl,CreatureRace,2H,Frost-Giant-Jarl]{{}}RaceData=[w:Frost Giant Jarl]{{}}'},
- {name:'Giant-Frost-Juvenile-1',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Frost-Giant-Juvenile-1}{{}}Specs=[Frost-Giant-Juvenile-1,CreatureRace,2H,Frost-Giant-Juvenile-1]{{}}RaceData=[w:Frost Giant Juvenile-1]{{}}'},
- {name:'Giant-Frost-Juvenile-2',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Frost-Giant-Juvenile-2}{{}}Specs=[Frost-Giant-Juvenile-2,CreatureRace,2H,Frost-Giant-Juvenile-2]{{}}RaceData=[w:Frost Giant Juvenile-2]{{}}'},
- {name:'Giant-Frost-Juvenile-3',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Frost-Giant-Juvenile-3}{{}}Specs=[Frost-Giant-Juvenile-3,CreatureRace,2H,Frost-Giant-Juvenile-3]{{}}RaceData=[w:Frost Giant Juvenile-3]{{}}'},
- {name:'Giant-Frost-Shaman-L3',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Shaman L3,cattr:cl=pr:frost-giant-shaman|lv=3]{{}}Specs=[Fire-Giant-Shaman-L3,CreatureRace,2H,Frost-Giant-AC0]{{}}%{Race-DB-Creatures|Frost-Giant-Shaman-L7}'},
- {name:'Giant-Frost-Shaman-L5',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Shaman L5,cattr:cl=pr:frost-giant-shaman|lv=5]{{}}Specs=[Fire-Giant-Shaman-L5,CreatureRace,2H,Frost-Giant-AC0]{{}}%{Race-DB-Creatures|Frost-Giant-Shaman-L7}'},
- {name:'Giant-Frost-Shaman-L7',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Frost-Giant-Shaman-L7}{{}}Specs=[Frost-Giant-Shaman-L7,CreatureRace,2H,Frost-Giant-Shaman-L7]{{}}RaceData=[w:Frost Giant Shaman L7]{{}}'},
- {name:'Giant-Frost-Witch-Doctor-L3-7',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Frost-Giant-Witch-Doctor-L3-7}{{}}Specs=[Frost-Giant-Witch-Doctor-L3-7,CreatureRace,2H,Frost-Giant-Witch-Doctor-L3-7]{{}}RaceData=[w:Frost Giant Witch Doctor L3-7]{{}}'},
- {name:'Giant-Hill-AC0',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Hill-Giant-AC0}{{}}Specs=[Hill-Giant-AC0,CreatureRace,2H,Hill-Giant-AC3]{{}}RaceData=[w:Hill Giant AC0]{{}}'},
- {name:'Giant-Hill-AC3',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Hill-Giant-AC3}{{}}Specs=[Hill-Giant-AC3,CreatureRace,2H,Hill-Giant-AC3]{{}}RaceData=[w:Hill Giant AC3]{{}}'},
- {name:'Giant-Hill-AC5',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Hill-Giant-AC5}{{}}Specs=[Hill-Giant-AC5,CreatureRace,2H,Hill-Giant-AC3]{{}}RaceData=[w:Hill Giant AC5]{{}}'},
- {name:'Giant-Hill-Juvenile',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Hill-Giant-Juvenile}{{}}Specs=[Hill-Giant-Juvenile,CreatureRace,2H,Hill-Giant-AC3]{{}}RaceData=[w:Hill Giant Juvenile]{{}}'},
- {name:'Giant-Leech-1HD',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{subtitle=Creature}}RaceData=[w:Giant Leech 1HD,cattr:hd=1|regen=1]{{}}%{Race-DB-Creatures|Giant-Leech-2HD}{{name= 1HD}}{{Hit Dice=1}}Specs=[Giant Leech,CreatureRace,0H,Giant-Leech-2HD]{{Size=S, 4ft long}}'},
- {name:'Giant-Leech-2HD',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Giant Leech}}{{name= 2HD}}{{subtitle=Creature}}RaceData=[w:Giant Leech 2HD, align:N, ac:none, weaps:none, cattr:int=0|mov=3|swim=3|ac=9|size=S|hd=2|regen=2|thac0=19|attk1=1d4:Bite:0:P|dmgmsg=A successful bite injects anesthetizing saliva then \\lbrak;sucks blood\\rbrak;\\lpar;!setattr --silent --charid \\amp#64;{target¦Who\'s the victim?¦character_id} ~~blood-drain¦`{selected¦conregen}\\amp#13;!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who\'s the victim?¦token_id}¦Blood-Drain_Somethings wrong?_`{selected¦token_id}¦99¦0¦Definitely not feeling your best¦broken-heart\\rpar; for `{selected¦conregen}HP per round. Only \\lbrak;1% chance\\rbrak;\\lpar;!\\amp#13;\\amp#47;gr 1d100\\lt1 detect blood drain\\rpar; victim aware of attack if in the water. Not usually felt until weakness \\lpar;the loss of 50% of hit points\\rpar; makes victim aware something is amiss There is a \\lbrak;50% chance\\rbrak;\\lpar;!\\amp#13;\\amp#47;gr 1d100\\lt50 causes disease\\rpar; that the bite of one of these creatures \\lbrak;causes a disease\\rbrak;\\lpar;!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who\'s the victim?¦token_id}¦Leech disease¦99¦0¦Getting weaker and feel could die in \\amp#91;\\lbrak;1d4+1\\rbrak;\\amp#93; weeks...¦radioactive\\rpar; that is fatal in 1d4+1 weeks unless cured, spattk:Bite drains blood for 1HP per HD of leech with 50% chance of causing fatal disease]{{Section=**Attributes**}}{{Intelligence=Non (0)}}{{AC=9}}{{Alignment=Neutral}}{{Move=3, Sw 3}}{{Hit Dice=2}}{{HP=}}{{THAC0=19}}{{Attacks=Bite for 1d4 and automatic blood drain of 1HP per HD of Leech each round thereafter}}{{Languages=None}}{{Size=S, 3ft long}}{{Life Expectancy=Unknown}}{{Section1=**Powers**}}{{Section2=None}}{{Section3=**Special Advantages**}}{{Blood Drain Bite=Anesthetic saliva means victim only has 1% chance per round to notice until feel weak (50% HP drained)}}{{Section7=**Special Disadvantages**}}{{Section8=None}}Specs=[Giant Leech,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc8=Giant leeches are horrid, slug-like creatures that dwell in wet, slimy areas and suck the blood of warm-blooded creatures. These disgusting parasites range from 2 to 5 feet long. Their slimy skin is mottled brown and tan with an occasional shade of gray. Two antennae protrude from atop the head.}}{{desc9=**Combat:** Leeches wait in the mud and slime for prey. The initial attack attaches the sucker mouth of the giant leech. On the next round, and on each round thereafter, it drains blood for 1 point of damage per Hit Die of the leech. There is only a 1% chance that the victim is aware of the attack if it occurs in the water. The leech has anesthetizing saliva, and its bite and blood drain are not usually felt until weakness (the loss of 50% of hit points) sets in and makes the victim aware that something is amiss.\nThey can be killed by attack or by salt sprinkled on their bodies. There is a 50% chance that the bite of one of these creatures causes a disease that is fatal in 1d4+1 weeks unless cured.}}'},
- {name:'Giant-Leech-3HD',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{subtitle=Creature}}RaceData=[w:Giant Leech 3HD,cattr:hd=3|regen=3|thac0=17]{{}}%{Race-DB-Creatures|Giant-Leech-2HD}{{name= 3HD}}{{Hit Dice=3}}{{THAC0=17}}Specs=[Giant Leech,CreatureRace,0H,Giant-Leech-2HD]{{Size=M, 5ft long}}'},
- {name:'Giant-Leech-4HD',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{subtitle=Creature}}RaceData=[w:Giant Leech 4HD,cattr:hd=4|regen=4|thac0=17]{{}}%{Race-DB-Creatures|Giant-Leech-2HD}{{name= 4HD}}{{Hit Dice=4}}{{THAC0=17}}Specs=[Giant Leech,CreatureRace,0H,Giant-Leech-2HD]{{Size=M, 6ft long}}'},
- {name:'Giant-Lynx',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Giant Lynx}}RaceData=[w:Giant Lynx, align:N, weaps:none, ac:none, cattr:int=11:12|mov=12|ac=6|hd=2+2r4|thac0=19|size=M|attk1=1d2:2 x Claw:0:S|attk2=1d2:Bite:1:P|attk3=1d3:Rear claw rake x 2:1:S|attkmsg=Only perform a *Rear claw rake* if both front claws successfully hit|dmgmsg=$$ $$Only valid if both front claws successfully hit]{{subtitle=Creature}}Specs=[Giant Lynx,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Very (11 to 12)}}{{AC=6}}{{Alignment=Neutral}}{{Move=12}}{{Hit Dice=2+2 HD}}{{THAC0=19}}{{Attacks=ront claws x 2 for 1d2 each, bite for 1d2. If both front claws hit, can attempt a rear claw rake for 2d3 (1d3 per claw)}}{{Size=M}}{{Language=Can communicate well with others of its kind, which greatly increases its chances of survival}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Rear claw rake=If both front claws hit, can attempt rear claw rakes for 1d3 per rear claw}}{{Hide=When hiding, a giant lynx will avoid detection 90% of the time.}}{{Surprise=The lynx can leap up to 15 feet and imposes a -6 on the surprise rolls of its prey.}}{{Detect Traps=It has a 75% chance of detecting traps.}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=The giant lynx is distinguished by its tufted ears and cheeks, short bobbed tail, and dappled coloring. It has a compact muscular body, with heavy legs and unusually large paws. The giant lynx prefers cold coniferous and scrub forests. The cubs remain with\ntheir mother for 6 months.\nThe giant lynx has all the advantages of the great cats plus the added bonus of a high intelligence which makes it even more adaptable.}}{{desc9=**Combat:** The giant lynx is the most intelligent of the great cats and uses its wits in combat. The giant lynx almost never attacks men. The nocturnal lynx stalks or ambushes its prey, catching rodents, young deer, grouse, and other small game.}}'},
- {name:'Giant-Owl',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Giant Owl, spattk:Infravision 120ft. Surprise bonus of 6. Cannot be surprised at night. Surprise 3 penalty during day, cattr:int=8:10|mov=3|fly=18E|ac=6|hd=4r4|thac0=17|size=M|attk1=2d4:Talon1:0:S|attk2=2d4:Talon2:0:S|attk3=1+1d4:Beak:0:P]{{}}Specs=[Giant Owl,CreatureRace,0H,Owl]{{}}%{Race-DB-Creatures|Owl}{{title=Giant }}{{Intelligence=Average (8 to 10)}}{{AC=6}}{{Move=3, FL 18(E)}}{{Hit Dice=4 HD}}{{THAC0=17}}{{Attacks=2 x Talons for 2d4 each, Beak for 1+1d4}}{{Size=M}}{{desc7=These nocturnal creatures inhabit very wild areas, preying on rodents, large game birds, and rabbits. They are too large to gain swoop bonuses but can fly in nearly perfect silence; opponents suffer a -6 on their surprise roll. Giant owls may be friendly toward humans, though they are naturally suspicious.\nParents will fight anything that threatens their young. Eggs sell for 1,000 sp and hatchlings sell for 2,000 sp.}}'},
- {name:'Giant-Poisonous-Snake',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Giant Poisonous Snake, cattr:ac=5|hd=4+2r3|thac0=17|size=M| attk1=1d3:Bite:0:P|dmgmsg=If successfully hit as well as damage \\lbrak;inject poison\\rbrak;\\lpar;!rounds --target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the Unfortunate Victim?¦token_id}¦Giant Snake Poison_Not quite right¦\\amp#91;\\lbrak;8+3d10\\rbrak;\\amp#93;¦-1¦That bite was quite painful. Should I see a Cleric?¦stopwatch\\rpar;. **Don\'t save now!** Save when the effect message pops up in a few rounds - that way the surprise is maintained! This poison **kills the victim** in one round. Save to negate when asked to do so, spattk:Giant Snake Poison **kills the victim** in 1 round. Save to negate]{{}}Specs=[Giant Poison Snake,CreatureRace,0H,Poison Snake 1-4]{{}}%{Race-DB-Creatures|Poison-Snake-1-4}{{title=Giant Poisonous Snake}}{{AC=5}}{{Hit Dice=4+2}}{{THAC0=17}}{{Attacks=Bite with giant snake poison}}{{Size=M, 12ft long}}{{Section5=**Poison:** Giant Snake poison gains neither benefit or penalty to saving throws, and **kills the victim** in 1 round if don\'t save}}{{desc=**Giant poisonous snakes** cause death in one round if their victims fail a saving throw vs. poison. Some varieties inflict 3-18 points of damage even if the saving throw is made.}}'},
- {name:'Giant-Rat',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Giant Rat, align:LE|NE|CE, cattr:int=2:4|mov=12|swim=6|hd=1-4r4|hp=1:4|thac0=20|size=T|attk1=1d3:Bite:0:P]{{}}Specs=[Giant Rat,CreatureRace,0H,Black Rat]{{}}%{Race-DB-Creatures|Black-Rat}{{title=Giant }}{{Intelligence=Semi- (2 to 4)}}{{Alignment=Any Evil}}{{Move=12, Swim 6}}{{Hit Dice=½ HD}}{{Attacks=Bite for 1d3HP damage \\amp 5% chance of save vs. poison or disease}}{{Size=T, 2ft long}}{{desc8=These vile beasts plague underground areas such as crypts and dungeons. Their burrows honeycomb many graveyards, where they cheat ghouls of their prizes by tunneling to newly interred corpses. Giant rats are brown/black in color with white underbellies, and are related to the brown rat, with fatter bodies and shorter tails.}}'},
- {name:'Giant-Scorpion',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Scorpion}}RaceData=[w:Giant Scorpion, align:N, ac:none, weaps:none, cattr:int=0|mov=15|ac=3|hd=5+5r2|thac0=15|size=M|attk1=1d10:Claw1:0:S|attk2=1d10:Claw2:0:S|attk3=1d4:Sting:1:P|dmgmsg=If claw hits victim is held and future stinger and claw hits are automaticly successful. Only one *Bend bar* check to escape$$If claw hits victim is held and future stinger and claw hits are automaticly successful. Only one *Bend bar* check to escape$$On a successful hit with the stinger do damage and victim must save vs. poison or be poisoned with a Type F poison and **die** immediately. If save take **20HP** damage, spattk:Stinger does poison type F. If a claw hits victim is held. Stinger \\amp claw hits are then automatic]{{subtitle=Creature}}Specs=[Scorpion,CreatureRace,0H,Creature]{{title=Giant }}{{Section=**Attributes**}}{{Intelligence=Non (0)}}{{Alignment=Neutral}}{{AC=3 from chitinous carapace}}{{Move=15}}{{Hit Dice=5+5 HD}}{{THAC0=15}}{{Section1=**Attacks:** 2 x claws for 1d10HP each. If either hit victim is held and subsequent attacks automatically hit. Sting for 1d4HP and poison type F}}{{Size=M, 5-6ft long}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=**Poison Sting:** Poison type F, save vs. poison or immediately **die**}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=Giant scorpions are vicious predators that live almost anywhere, including relatively cold places such as dungeons, though they favor deserts and warm lands. These creatures are giant versions of the normal 4-inch-long scorpion found in desert climes.\nThe giant scorpion has a green carapace and yellowish green legs and pincers. The segmented tail is black, with a vicious stinger on the end. There is a bitter smell associated with the scorpion, which probably comes from the venom. They make an unnerving scrabbling sound as they travel across dungeon floors.}}{{desc9=**Combat:** The giant scorpion is 95% likely to attack any creature that approaches. It can fight three opponents at once. If it manages to grab a victim in a pincer, it will automatically inflict 1-10 points of damage each round until it releases the victim. The victim has but one chance to escape. If makes a *bend bars/lift gates* roll, escapes the claw, this being the character\'s only action that round only once per combat. Sting requires successful attack against an untrapped victim, but autmatically hits a trapped character.\nNote that scorpions are not immune to their own poison. If a scorpion is reduced to 1 or 2 hit points, it will go into a stinging frenzy, stinging everything in sight, gaining two attempts to hit per round with only the tail.}}'},
- {name:'Giant-Sea-Horse',type:'SeaHorseRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Giant Sea Horse\n}}RaceData=[w:Giant Sea Horse, query:How many hit dice?|2HD%%2%%19%%1d4|3HD%%3%%17%%1+1d4|4HD%%4%%17%%2d4, align:N|NN, weaps:none, ac:none, cattr:int=1|swim=21|ac=7|hd=(??1r5|thac0=??2|size=L|attk1=??3:Head Butt:0:B|attk2=0:Tail Grab:0:B|attkmsg=Can do *both* head butt *and* tail grab as an attack in one round and on two different targets in range or the same target|dmgmsg=$$A hit indicates a successful \\lbrak;tail grab\\rbrak;\\lpar;!rounds ~~target single¦@{selected¦token_id}¦\\amp#64;{target¦Who got grabbed?¦token_id}¦Restrained¦99¦-1¦Grabbed by the tail grip of a Giant Sea Horse. Roll against *Open Doors* at -1 penalty to escape¦grab\\rpar;. Opponent must successfully roll an *Open Doors* check at a penalty of -1 to free themselves.]{{subtitle=Marine Creature}}Specs=[Giant Sea Horse,SeaHorseRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Animal (1)}}{{AC=naturally 7 and cannot wear standard barding}}{{Alignment=Neutral}}{{Move=Swim 21}}{{Hit Dice=2 to 4HD}}{{THAC0=Varies by HD, 19 to 17}}{{Attacks=Head butt 2HD:1d4, 3HD:1+1d4, 4HD:2d4 bludgeoning damage. Can also grab the same or a different opponent with their tail to restrain them (requiring an *Open Doors* roll at -1 to escape from)}}{{Size=Large}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc7=A sea horse attacks with a head butt, but a sea horse trained as a steed can use its long tail to constrict and restrain enemies. A captured opponent can free itself with a open doors roll made with a -1 penalty. The tail of a giant sea horse is so long it can attack the same opponent its head butts, or the one its rider is attacking. The constriction causes no damage, but the sea horse can still butt the helpless victim.}}'},
- {name:'Giant-Sea-Snake',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Giant Sea Snake, cattr:mov=12|swim=12|ac=5|hd=10r2|thac0=11| size=G| attk1=1d6:Bite:0:P|attk2=3d6:Constrict:0:B|dmgmsg=If successfully hit as well as damage \\lbrak;inject poison\\rbrak;\\lpar;!rounds --target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the Unfortunate Victim?¦token_id}¦Giant Snake Poison_Not quite right¦\\amp#91;\\lbrak;1d4\\rbrak;\\amp#93;¦-1¦That bite was quite painful. Should I see a Cleric?¦stopwatch\\rpar;. **Don\'t save now!** Save when the effect message pops up in a few rounds - that way the surprise is maintained! This poison **kills the victim** in 1d4 rounds. Save to negate when asked to do so$$If successfully hit as well as damage this round \\lbrak;all future rounds\\rbrak;\\lpar;!rounds --target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the Unfortunate Victim?¦token_id}¦Giant Sea Constrict¦\\amp#91;\\lbrak;99\\rbrak;\\amp#93;¦0¦Argh... The squeeze is on...¦back-pain\\rpar; automatically hit and do crushing damage, spattk:Bite poisons and kills within 1d4 rounds. Constriction does 3d6 damage per round, spdef:-]{{}}Specs=[Giant Sea Snake,CreatureRace,0H,Poison Snake 1-4]{{}}%{Race-DB-Creatures|Poison-Snake-1-4}{{title=Giant Sea Snake}}{{Intelligence=Animal (1)}}{{AC=5}}{{Move=12}}{{Hit Dice=10}}{{THAC0=11}}{{Attacks=Bite for 1d6HP damage injecting fatal poison, and/or crush in constriction}}{{Size=G, 50+ft long}}{{Section5=**Poison:** is fatal in 1d4 rounds unless save vs. poison\n**Constrict:** for automatic damage each round}}{{desc9=**Combat:** Found only in tropical waters, the giant sea snake is the only type of snake that is both constricting and poisonous. Its constricting grasp on small ships can crush them in 10 rounds. Sea snakes attack ships only when they are hungry (20% chance). Their poisonous bite is deadly in 1-4 rounds. Sea snakes are fully capable of diving to great depths, and their nostrils (on the top of their snouts) have membranes that automatically seal them underwater.\nFrom time to time giant sea snakes gather in huge floating masses of hundreds or thousands of snakes, often 100 yards wide and 30 miles long. These may be mating rituals or they may be seasonal migrations; the actual reason is unknown.}}'},
- {name:'Giant-Skeleton',type:'CreatureRace',ct:'3',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Giant-Skeleton, cattr:ac=4|hd=4+4r3|thac0=15|attk1=1d12:Bone bladed scimitar:5:S|attk2=1d12:Bone bladed spear:6:P|attkmsg=**Remember** *fireball** power one/hour. Immune to *sleep charm hold* and all mind-affecting spells. Immune to fire. Cold does half damage. Lightning full damage. Half damage from edged and piercing weapons. 1HP from all arrows quarrels \\amp missiles. Blunt weapons do full damage. Turned as *mummies*, spattk:fireball from tummy fire 1 per hour, spdef: immune to *sleep charm hold* and other mind-affecting spells. Immune to fire. Cold does half damage. Lightning full damage. Half damage from edged and piercing weapons. 1HP from all arrows quarrels \\amp missiles. Blunt weapons do full damage. Turned as *mummies*,ns:1],[cl:PW,w:Fireball,sp:3,clv:8,pd:24]{{}}Specs=[Giant Skeleton,CreatureRace,0H,Skeleton]{{}}%{Race-DB-Creatures|Skeleton}{{AC=4}}{{Hit Dice=4+4 HD}}{{THAC0=15}}{{Attack=1d12 and by weapon}}{{Size=L, 12ft tall}}{{Section3=**Fireball:** Once per hour (6 turns), a skeleton may reach into its chest and draw forth a sphere of fire from the flames that burn within its rib cage. This flaming sphere can be hurled as if it were a fireball that delivers 8d6 points of damage. Because these creatures are immune to harm from both magical and normal fires, they will freely use this attack in close quarters.}}{{Turning=Turned as *mummies*}}{{Spell Immunity=Immune to all *sleep, charm, hold* and other mind-affecting spells}}{{Other Immunities=Immune to fire. Cold does half damage. Lightning full damage}}{{Damage from S\\ampP=Half damage from edged and piercing weapons. 1HP from all arrows quarrels \\amp missiles. Blunt weapons do normal damage.}}{{Infravision=No need for light (no eyes) so can see normally in absolute darkness}}{{desc8=Giant skeletons are similar to the more common undead skeleton, but they have been created with a combination of spells and are, thus, far more deadly than their lesser counterparts.\nGiant skeletons stand roughly 12 feet tall and look to be made from the bones of giants. In actuality, they are simply human skeletons that have been magically enlarged. A small, magical fire burns in the chest of each giant skeleton, a by-product of the magics that are used to make them. These flames begin just above the pelvis and reach upward to lick at the collar bones. Mysteriously, no burning or scorching occurs where the flames touch the bone.}}{{desc9=**Combat:** They are normally armed with long spears or scythes that end in keen bone blades. Rare individuals will be found carrying shields (and thus have an Armor Class of 3), but these are far from common. Each blow that lands inflicts 1d12 points of damage.}}'},
- {name:'Giant-Stag',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Giant Stag}}RaceData=[w:Giant Stag, align:N, weaps:none, ac:none, cattr:int=1|mov=24|ac=7|hd=5r4|thac0=16|size=L|attk1=1d4:2 x Hoof:0:B|attk2=4d4:Gore with Antlers:1:P|attkmsg=Attack either with hoofs or with antlers not both]{{subtitle=Creature}}Specs=[Giant Stag,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Animal (1)}}{{AC=7}}{{Alignment=Neutral}}{{Move=24}}{{Hit Dice=5 HD}}{{THAC0=16}}{{Attacks=Either kick with front hoofs for 2 x 1d4, or charge and gore with antlers for 4d4}}{{Size=L}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=Wild stags are the aggressive males of the deer herds. Normally docile and passive, they defend their herds against all but the most fearsome opponents.}}'},
- {name:'Giant-Stone',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Stone-Giant}{{}}Specs=[Giant-Stone,CreatureRace,2H,Stone-Giant]{{}}RaceData=[w:Stone Giant]{{}}'},
- {name:'Giant-Stone-Elder',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Stone-Giant-Elder}{{}}Specs=[Giant-Stone-Elder,CreatureRace,2H,Stone-Giant-Elder]{{}}RaceData=[w:Stone Giant Elder]{{}}'},
- {name:'Giant-Stone-Juvenile-1',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Stone-Giant-Juvenile-1}{{}}Specs=[Giant-Stone,CreatureRace,2H,Stone-Giant-Juvenile-1]{{}}RaceData=[w:Stone Giant Juvenile-1]{{}}'},
- {name:'Giant-Stone-Juvenile-2',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Stone-Giant-Juvenile-2}{{}}Specs=[Giant-Stone,CreatureRace,2H,Stone-Giant-Juvenile-2]{{}}RaceData=[w:Stone Giant Juvenile-2]{{}}'},
- {name:'Giant-Stone-Juvenile-3',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Stone-Giant-Juvenile-3}{{}}Specs=[Giant-Stone,CreatureRace,2H,Stone-Giant-Juvenile-3]{{}}RaceData=[w:Stone Giant Juvenile-3]{{}}'},
- {name:'Giant-Stone-Mage',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Stone-Giant-Mage}{{}}Specs=[Giant-Stone-Mage,CreatureRace,2H,Stone-Giant-Mage]{{}}RaceData=[w:Stone Giant Mage]{{}}'},
- {name:'Giant-Two-Headed',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Ettin}{{}}Specs=[Two-Headed-Giant,CreatureRace,2H,Ettin]{{}}RaceData=[w:Two-Headed Giant]{{}}'},
- {name:'Giant-Two-Headed-Troll',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Giant Two Headed }}RaceData=[w:Giant Two Headed Troll, cattr:int=8:10|hd=10r2|regen=1|thac0=11|size=L|dmg=+6|attk1=4+1d4:Claw:0:S|attk2=4+1d4:Claw:0:S|attk3=1d12:2 x Bite:1:P, spdef:Regenerate at 1HP per round, ns:5],[cl:WP,%:3,prime:Broadsword],[cl:WP,%:3,prime:Spear],[cl:WP,%:2,both:Two Handed Sword],[cl:WP,%:1,both:Great Axe],[cl:WP,%:91]{{subtitle=Creature}}%{Race-DB-Creatures|Troll}{{Intelligence=Average (8-10)}}{{Hit Dice=10}}Specs=[Giant Two Headed Troll,CreatureRace,0H,Troll]{{THAC0=11}}{{Attacks=2 x Claw 1d4+4, 2 x Bite 1d12}}{{Size=L 10ft tall}}{{Regeneration=3 rounds after 1st blood, regenerates at 1HP per round}}{{desc=These ferocious troll/ettin crossbreeds posses a mottled greenish brown skin tone, and their dress is usually moth-eaten rags or animal skins. Two-headed trolls use trollspeak as their language. Though part ettin, these monsters retain many of the abilities of trolls. They regenerate like trolls, but only 1 hit point a round, and severed limbs cannot reattach (their thicker limbs are not cleaved on a roll of 20). Two-headed trolls attack with two claws and two bites. Both bite attacks are against one opponent, but the claws may be directed against different foes. The troll can, though rarely, wield a weapon with a +6 damage bonus. Like ettins, two-headed trolls are surprised only on a 1. These creatures live in damp, underground caverns and can be found leading groups of their smaller troll cousins.}}{{desc9=}}'},
- {name:'Gnoll',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Gnoll}}RaceData=[w:Gnoll, align:CE, weaps:short-blade|long-blade|pole-arm|battle-axe|bow|morningstar, ac:leather|padded|studded|ring-mail|brigandine|scale-mail|hide|chain-mail, cattr:int=5:7|mov=9|ac=10|size=L|hd=2r3|thac0=19|attk1=2d4:Weapon:3:P,ns:5],[cl:WP,%:5,prime:Shortsword],[cl:WP,%:5,prime:Longsword],[cl:WP,%:5,prime:Broadsword],[cl:WP,%:5,both:Awl Pike],[cl:WP,%:5,both:Bec de Corbin],[cl:WP,%5:,both:Fauchard],[cl:WP,%:5,both:Glaive],[cl:WP,%:5,both:Glaive-Guisarme],[cl:WP,%:5,both:Guisarme-Voulge],[cl:WP,%:5,both:Military Fork],[cl:WP,%:20,prime:Battleaxe],[cl:WP,%:5,both:Shortbow,items:Flight Arrows:20],[cl:WP,%:5,both:Longbow,items:Flight Arrows:20],[cl:WP,%:5,both:Longbow,items:Sheaf Arrows:10|Flight Arrows:10],[cl:WP,%:15,prime:Morningstar],[cl:MI,%:90,items:random:1d4],[cl:MI,%:10,items:random:1d2]{{subtitle=Creature}}{{Section=**Attributes**}}{{Intelligence=Low (5 to 7)}}{{AC=10, up to AC5 with armour}}{{Alignment=Chaotic Evil}}{{Move=9}}{{Hit Dice=2}}{{THAC0=19}}{{Attack=Default weapon for 2d4, or by weapon (equip via menus)}}{{Languages=*Gnoll,* and many also speak *flind, troll, orc,* or *hobgoblin*}}{{Size=L, 7-8ft tall}}{{Life Expectancy=On average 35 years}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Strength=}}{{Section5=**Tactics:** Gnolls seek to overwhelm their opponents by sheer numbers, using horde tactics. When under the direction of flinds or a strong leader, they can be made to hold rank and fight as a unit. While they do not often lay traps, they will ambush or attempt to attack from a flank or rear position.}}{{Section6=**Special Disadvantages**}}{{Section7=None}}Specs=[Gnoll,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc8=Gnolls are large, evil, hyena-like humanoids that roam about in loosely organized bands. While the body of a gnoll is shaped like that of a large human, the details are those of a hyena. They stand erect on two legs and have hands that can manipulate as well as those of any human. They have greenish gray skin, darker near the muzzle, with a short reddish gray to dull yellow mane.}}{{desc9=**Combat:** Gnolls seek to overwhelm their opponents by sheer numbers, using horde tactics. When under the direction of flinds or a strong leader, they can be made to hold rank and fight as a unit. While they do not often lay traps, they will ambush or attempt to attack from a flank or rear position. Gnolls favor swords (15%), pole arms (35%) and battle axes (20%) in combat, but also use bows (15%), morningstars (15%).}}'},
- {name:'Gnoll-Chieftain',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Chieftain}}RaceData=[w:Gnoll Chieftain, ac:splint-mail|banded-mail|bronze-plate-mail|plate-mail, cattr:hd=4r3|ac=3|thac0=17|dmg=+3,ns:1],[cl:MI,%:10,items:random:1d6]{{subtitle=Creature}}%{Race-DB-Creatures|Gnoll}{{Hit Dice=4}}{{THAC0=17}}{{AC=3 (preset - can be improved with magical armour if equipped))}}{{Strength=Due to their great strength, Gnoll Chieftains gain +3 on damage that they do}}Specs=[Gnoll Chieftain,CreatureRace,0H,Gnoll]{{desc=**Gnoll Chieftain:** If 100 or more are encountered there will also be a chieftain who has 4 Hit Dice, an Armor Class of 3, and who receives a +3 on his damage rolls due to his great strength. Further, each chieftain will be protected by 2-12 (2d6) elite warrior guards of 3 Hit Dice (AC 4, +2 damage).}}'},
- {name:'Gnoll-Leader',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Leader}}RaceData=[w:Gnoll Leader, cattr:hd=3r3|thac0=17,ns:1],[cl:MI,%:10,items:random:1d4]{{subtitle=Creature}}Specs=[Gnoll Leader,CreatureRace,0H,Gnoll]{{}}%{Race-DB-Creatures|Gnoll}{{Hit Dice=3}}{{THAC0=17}}{{desc=**Gnoll Leader:** A gnoll lair will contain between 20 and 200 adult males. For every 20 gnolls, there will be a 3 Hit Die leader.}}'},
- {name:'Gnoll-Warrior-Guard',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Warrior Guard}}RaceData=[w:Gnoll Warrior Guard, cattr:hd=3r3|thac0=17|dmg=+2]{{subtitle=Creature}}%{Race-DB-Creatures|Gnoll}{{Hit Dice=3}}{{THAC0=17}}{{AC=4 (preset)}}{{Strength=Due to their great strength, Gnoll Warrior Guards gain +2 on damage that they do}}Specs=[Gnoll Leader,CreatureRace,0H,Gnoll]{{desc=**Gnoll Leader:** A gnoll lair will contain between 20 and 200 adult males. For every 20 gnolls, there will be a 3 Hit Die leader.}}'},
- {name:'Gnoll-ac5',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= AC5}}RaceData=[w:Gnoll ac5, cattr:hd=2r3|thac0=19|ac=5]{{subtitle=Creature}}%{Race-DB-Creatures|Gnoll}{{Hit Dice=2}}{{THAC0=19}}Specs=[Gnoll,CreatureRace,0H,Gnoll]{{AC=5 (preset)}}'},
- {name:'Goat',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Goat}}RaceData=[w:Goat, align:N, weaps:none, ac:none, cattr:int=1|mov=15|ac=7|hd=1+2r6|thac0=19|size=M|attk1=1d3:Butt with Horns:0:B|attk2=1d3+1d2:Charge attk:2:B|attkmsg=$$Charge attack is at +2 to hit - add this in manually]{{subtitle=Creature}}Specs=[Goat,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Animal (1)}}{{AC=7}}{{Alignment=Neutral}}{{Move=15}}{{Hit Dice=1+2 HD}}{{THAC0=19}}{{Attacks=Butt with horns for 1d3, charge at +2 to hit and an additional 1d2 damage}}{{Size=M}}{{Life Expectancy=15 to 18 years}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc9=**Combat:** When a goat charges, it gains a +2 attack bonus and does an additional 1-2 points damage.}}'},
- {name:'Goat-of-Terror',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Figurine of Wonderous Power\nGoat of Terror}}RaceData=[w:Goat of Terror, align:N, weaps:none, ac:none, cattr:int=0|mov=36|ac=2|hd=6|hp=48|thac0=20|size=M,ns:1],[cl:PW,w:Goat Terror,sp:0,pd:-1]{{subtitle=Figurine}}Specs=[Goat of Terror,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Not (0)}}{{AC=2}}{{Alignment=Neutral}}{{Move=36}}{{Hit Dice=6HD, starts as 48HP}}{{THAC0=N/A - no attacks as a creature}}{{Size=M}}{{Section2=**Powers**}}{{Section3=Radiates *Terror* in a 30ft radius when ridden vs an opponent}}{{Section4=**Special Advantages**}}{{Section5=Rider can employ the goat\'s horns as weapons}}{{Section6=**Special Disadvantages**}}{{Attacks=No attacks}}{{Uses=Can normally only be used 3 times before the figurine loses its power}}{{Section9=**Description**}}{{desc8=When called upon with the proper command word, this statuette becomes a destrier-like mount, movement rate 36, Armor Class 2, 48 hit points, and no attacks. However, its rider can employ the goat\'s horns as weapons (one horn as a spear +3 (lance), the other as a sword +6). When ridden versus an opponent, the goat of terror radiates terror in a 30-foot radius, and any opponent in this radius must roll a successful saving throw vs. spell or lose 50% of strength and suffer at least a -3 penalty to attack rolls, all due to weakness caused by terror. When all opponents are slain, or upon the proper command, the goat returns to its statuette form. It can be used once every two weeks.}}'},
- {name:'Goat-of-Travail',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Figurine of Wonderous Power\nGoat of Travail}}RaceData=[w:Goat of Travail, align:N, weaps:none, ac:none, cattr:int=0|mov=24|ac=0|hd=16|hp=96|thac0=5|size=L|attk1=2+2d4:Hooves x 2:0:B|attk2=2d4:Bite:1:P|attk3=2d6:Horns x 2:2:P,attkmsg:Cannot use hooves if charging$$Cannot use bite if charging$$If charging horns do additional damage - see damage message,dmgmsg:Cannot use hooves if charging$$Cannot use bite if charging$$If charging horns do additional +6 hp damage each]{{subtitle=Figurine}}Specs=[Goat of Travail,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Not (0)}}{{AC=0}}{{Alignment=Neutral}}{{Move=24}}{{Hit Dice=16HD, starts as 96HP}}{{THAC0=5}}{{Attacks=2 x Hooves for 2d4+2 Bludgeoning damage each, 1 x Bite for 2d4 Piercing damage, 2 x Horns for 2d6 each of Piercing damage - can *Charge* for +6 extra Horn damage, but can\'t then do Hoof or Bite attack}}{{Size=L larger than a bull!}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=Can normally only be used 3 times before the figurine loses its power}}{{Section9=**Description**}}{{desc8=When commanded, this statuette becomes an enormous creature, larger than a bull, with sharp hooves (2d4+2/2d4+2), a vicious bite (2d4), and a pair of wicked horns of exceptional size (2d6/2d6). If it is charging to attack, it may only use its horns, but +6 damage is added to each hit on that round (i.e., 8-18 hit points per damage per horn). It is Armor Class 0, has 96 hit points, and attacks as a 16 Hit Dice monster. It can be called to life just once per month up to 12 hours at a time. Its movement rate is 24.}}'},
- {name:'Goat-of-Travelling',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Figurine of Wonderous Power\nGoat of Travelling}}RaceData=[w:Goat of Travelling, align:N, weaps:none, ac:none, cattr:int=0|mov=48|ac=6|hd=4|hp=24|thac0=17|size=M|attk1=1d8:Horn1:0:PB|attk2=1d8:Horn2:0:PB]{{subtitle=Figurine}}Specs=[Goat of Travelling,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Not (0)}}{{AC=6}}{{Alignment=Neutral}}{{Move=48 bearing 280lbs or less reduced by 1 for every additional 14lbs of weight carried}}{{Hit Dice=4HD, starts as 24HP}}{{THAC0=17}}{{Attacks=2 x Horns for 1d8 each of Piercing or Bludgeoning damage (depending on type of horn)}}{{Size=M}}{{Section2=**Powers**}}{{Section3=Can carry loads and riders of 280lbs or more}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=Can normally only be used 3 times before the figurine loses its power}}{{Section9=**Description**}}{{desc8=This statuette provides a speedy and enduring mount of Armor Class 6, with 24 Hit Points and 2 attacks (horns) for 1d8 each (consider as 4 Hit\nDice monster). Its movement rate is 48 bearing 280 pounds or less. Its movement is reduced by 1 for every additional 14 pounds of weight carried. The goat can travel a maximum of one day each week—continuously or in any combination of periods totalling 24 hours. At this point, or when the command word is uttered, it returns to its small form for not less than one day before it can again be used.}}'},
- {name:'Goblin',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Goblin}}{{subtitle=Creature}}Specs=[Goblin,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low to Average (5-10)}}{{AC=10 (can wear simple armour up to AC6)}}{{Alignment=Lawful Evil}}{{Move=6}}{{Hit Dice=1-1}}{{THAC0=20}}{{Attack=1d6 and by weapon}}{{Languages=Harsh, and pitched higher than that of humans. In addition to their own language, some goblins can speak in the kobold, orc, and hobgoblin tongues.}}{{Size=S 4ft tall}}{{Life Expectancy=50 years or so}}{{Section2=**Powers**}}{{Section3=None}}{{Priest Spells=}}{{Section4=**Special Advantages**}}{{Infravision=60 foot, but suffer -1 to attacks in bright sunlight}}RaceData=[w:Goblin, align:LE, cattr:int=5:10|mov=6|size=S|hd=1-1r4|thac0=20|attk1=1d6:Simple weapon:3:S|attkmsg=Remember -1 to-hit penalty in \\lbrak;Bright Sunlight\\rbrak;\\lpar;!rounds ~~target caster¦`{selected¦token_id}¦Sunlight 1 tohit penalty¦99¦0¦Suffering -1 to hit due to being in bright sunlight¦bleeding-eye\\rpar; but back to normal in \\lbrak;Shade\\rbrak;\\lpar;!rounds ~~removetargetstatus `{selected¦token_id}¦Sunlight 1 tohit penalty\\rpar;,ns:1],[cl:MI,%:95],[cl:MI,%:5,items:random:1d3]{{Section9=**Description**}}{{desc8=These small, evil humanoids would be merely pests, if not for their great numbers. Goblins have flat faces, broad noses, pointed ears, wide mouths and small, sharp fangs. Their foreheads slope back, and their eyes are usually dull and glazed. They always walk upright, but their arms hang down almost to their knees. Their skin colors range from yellow through any shade of orange to a deep red. Usually a single tribe has members all of about the same color skin. Their eyes vary from bright red to a gleaming lemon yellow. They wear clothing of dark leather, tending toward dull soiled-looking colors.}}{{desc9=**Combat:** Goblins hate bright sunlight, and fight with a -1 on their attack rolls when in it. This unusual sensitivity to light, however, serves the goblins well underground, giving them infravision out to 60 feet. They can use any sort of weapon, preferring those that take little training, like spears and maces. They are known to carry short swords as a second weapon. They are usually armored in leather, although the leaders may have chain or even plate mail.\nGoblin strategies and tactics are simple and crude. They are cowardly and will usually avoid a face-to-face fight. More often than not, they will attempt to arrange an ambush of their foes.}}'},
- {name:'Goblin-Assistant',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Leader\'s Assistant}}RaceData=[w:Goblin Assistant, cattr:hd=1r4|ac=6]{{subtitle=Creature}}%{Race-DB-Creatures|Goblin}{{AC=6 (preset)}}Specs=[Goblin Assistant,CreatureRace,0H,Goblin]{{Hit Dice=1}}{{desc=**Leader\'s Assistant:** For every 40 goblins there will be a leader and his 4 assistants, each having 1 Hit Die (7 hit points).}}'},
- {name:'Goblin-Bodyguard',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Bodyguard}}RaceData=[w:Goblin Bodyguard, cattr:hd=2r4|thac0=19|ac=4|attk1=1d8:Battle Axe:7:S|attk2=1d6:Shortsword:3:S]{{subtitle=Creature}}%{Race-DB-Creatures|Goblin}{{AC=6 (preset)}}Specs=[Goblin Bodyguard,CreatureRace,0H,Goblin]{{Hit Dice=2}}{{THAC0=19}}{{Attack=1d6/1d8 and by weapon}}{{desc=**Chief\'s Bodyguard:** The tribe has a single goblin chief and 2-8 (2d4) bodyguards each of 2 Hit Dice, Armor Class 4, and armed with two weapons.}}'},
- {name:'Goblin-Chief',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Chief}}RaceData=[w:Goblin Chief, cattr:hd=2r4|thac0=19|ac=4|attk1=1d8:Battle Axe:7:S|attk2=1d6:Shortsword:3:S,ns:1],[cl:MI,%:10,items:random:1d4],[cl:MI,%:10,items:random:1d6]{{subtitle=Creature}}%{Race-DB-Creatures|Goblin}{{AC=6 (preset)}}{{Hit Dice=2}}Specs=[Goblin Chief,CreatureRace,0H,Goblin]{{THAC0=19}}{{Attack=1d6/1d8 and by weapon}}{{desc=**Chief:** The tribe has a single goblin chief and 2-8 (2d4) bodyguards each of 2 Hit Dice, Armor Class 4, and armed with two weapons.}}'},
- {name:'Goblin-Leader',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Leader}}RaceData=[w:Goblin Leader, cattr:hd=1r4|ac=6,ns:1],[cl:MI,%:10,items:random:1d3]{{subtitle=Creature}}%{Race-DB-Creatures|Goblin}{{AC=6 (preset)}}Specs=[Goblin Leader,CreatureRace,0H,Goblin]{{Hit Dice=1}}{{desc=**Leader:** For every 40 goblins there will be a leader and his 4 assistants, each having 1 Hit Die (7 hit points).}}'},
- {name:'Goblin-Shaman-L5',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Shaman}}RaceData=[w:Goblin Shaman L5, cattr:cl=pr:goblin-shaman|lv=5|ac=6,ns:1],[cl:MI,%:10,items:random:1d4]{{subtitle=Creature}}%{Race-DB-Creatures|Goblin}{{AC=6 (preset)}}Specs=[Goblin Shaman,CreatureRace,0H,Goblin]{{Hit Dice=1}}{{Section3=}}{{Priest Spells=Spheres include: Divination, Healing (reversed), Protection, and Sun (reversed).}}{{desc=Goblin shamans are rare, but have been known to reach 7th level. Their spheres include: Divination, Healing (reversed), Protection, and Sun (reversed).}}'},
- {name:'Goblin-Sub-Chief',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Sub-Chief}}RaceData=[w:Goblin Sub-Chief, cattr:hd=1+1r4|thac0=19|ac=5|attk1=1d8:Battle Axe:7:S,ns:1],[cl:MI,%:5,items:random:1d4]{{subtitle=Creature}}%{Race-DB-Creatures|Goblin}{{AC=6 (preset)}}Specs=[Goblin Sub-Chief,CreatureRace,0H,Goblin]{{Hit Dice=1+1}}{{THAC0=19}}{{Attack=1d8 and by weapon}}{{desc=**Sub-Chief:** For every 200 goblins there will be a sub-chief and 2-8 (2d4) bodyguards, each of which has 1+1 Hit Dice (8 hit points), is Armor Class 5, and armed with a battle axe.}}'},
- {name:'Goblin-ac6',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= AC6}}RaceData=[w:Goblin ac6, cattr:ac=6]{{subtitle=Creature}}%{Race-DB-Creatures|Goblin}{{AC=6 (preset)}}Specs=[Goblin,CreatureRace,0H,Goblin]{{}}'},
- {name:'Gold-Dragon',type:'DragonRace',ct:'1',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}Specs=[Gold-Dragon,DragonRace,2H,Red-Dragon]{{}}RaceData=[w:Gold Dragon, cattr:int=17:18|mov=12|fly=40C|Jump=3|swim=12|ac=0-??1|hd=(16+??2)d8r1|mr=(v(^((??1-4);0);1)*(??1+2)*5)|cl=mu:gold-dragon/pr:gold-dragon|lv=8+??1/8+??1|thac0=5-??2|dmg=??1|size=G|attk1=1d10:Claw x 2 or Claw+Kick:0:S|attk2=6d6:Bite:0:P|attk3=2d10:Tail Swipe:0:B|attkmsg=Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$\\lbrak;Show the radius\\rbrak;\\lpar;!rounds ~~aoe `{selected¦token_id}¦arc180¦feet¦0¦\\lbrak;\\lbrak;`{selected¦age¦max}*12\\rbrak;\\rbrak;¦\\lbrak;\\lbrak;`{selected¦age¦max}*24\\rbrak;\\rbrak;¦black\\rpar; then up to \\lbrak;\\lbrak;`{selected¦age¦max}\\rbrak;\\rbrak; opponents in the area take damage and Save vs. Petrification with the penalty shown below or be \\lbrak;Stunned\\rbrak;\\lpar;!rounds ~~target area¦`{selected¦token_id}¦\\amp#64;{target¦Select the stunned creature¦token_id}¦Stunned¦\\lbrak;\\amp#91;1+1d4\\amp#93;\\rbrak;¦-1¦Stunned by a dragon tail slap¦back-pain\\rpar; for 1d4+1 rounds., spattk:*Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*, spdef:Magic resistance @{selected|monstermagicresist}% and immune to fire \\amp gas from birth, ns:=11],[cl:PW,w:Gold-Dragon-Breath,pd:-1,sp:1],[cl:PW,age:1,w:MU-Water-Breathing,pd:-1,sp:1],[cl:PW,age:1,w:MU-Polymorph-Self,pd:3,sp:1],[cl:PW,age:3,w:PR-Bless,pd:3,sp:1],[cl:PW,w:PR-Detect-Lie,age:4,pd:3,sp:1],[cl:PW,w:PR-Animal-Summoning-1,age:6,pd:1,sp:1],[cl:PW,w:PR-Animal-Summoning-II,age:7,pd:1,sp:1],[cl:PW,w:PW-Luck-Bonus,age:7,pd:1,sp:1],[cl:PW,w:PR-Quest,age:8,pd:1,sp:1],[cl:PW,w:PW-Detect-Gems-Kind+Number,age:8,pd:3,sp:1],[cl:PR,lv:1,w:],[cl:PR,lv:2,w:],[cl:PR,lv:3,w:],[cl:PR,lv:4,w:]{{}}%{Race-DB-Creatures|Red-Dragon}{{title=Gold}}{{Intelligence=Genius (17-18)}}{{AC=Varies with age, adult gold dragon is AC -6}}{{Move=12, FL 40(C) (winged form) FL 6(E) (wingless form), Swim 12 (winged) 15 (wingless), Jump 3}}{{Hit Dice=Varies with age, adult gold dragon is 18 HD}}{{THAC0=Varies with age, adult gold dragon is 3}}{{Section1=**Attacks:** Damage bonus varies with age, adult gold dragon is +6. 2 x Claws for 1d10 HP each, possibly with 1 or 2 kicks for 1d10 each, bite for 6d6, and tail slap for 2d10 and possible *stun* within an area varying with age. Several other attacks possible - see *Powers*}}{{Languages=*Gold Dragon* and *Good Dragon Common*, and can *speak with animals* freely from birth. 18% of hatchlings (+5% per age level) can perform universal communication with any intelligent creature}}{{Breath Weapon=A gold dragon has two breath weapons: a cone of fire 90\' long, 5\' wide at the dragon\'s mouth, and 30\' wide at the end or a cloud of potent chlorine gas 50\' long, 40\' wide and 30\' high. Creatures caught in either effect are entitled to a save versus breath weapon for half damage. Damage from the acid breath weapon varies by age from 2d12+1 to 24d12+12. }}{{Spell Casting=Knows a number of random wizard and priest spells cast at a level from 12 to 20 varying with age. All spells are cast at a speed of 1 segment regardless of the spell}}{{Spell-like Powers=All gold dragons can use *water breathing* at will, and can *polymorph self* 3 times a day. *Young* dragons can *bless* x 3 per day, *Juveniles* can *detect lie* x3 per day, *Adult* dragons gain *animal summoning I* x1 a day, *Mature Adults* can do *animal summoning II* x1 per day, and *luck bonus* once a day. *Old* dragons can cast *quest* x 1 per day, and *detect gems* once per day within 30ft radius.\nThe *luck bonus* power is used to aid *good* adventurers: see the description of the power by *viewing* it}}{{desc8=**Gold Dragons:** Gold dragons are wise, judicious, and benevolent. They often embark on self-appointed quests to promote goodness, and are not easily distracted from them. They hate injustice and foul play. A gold dragon frequently assumes human or animal guise and usually will be encountered disguised.\nAt birth, a gold dragon\'s scales are dark yellow with golden metallic flecks. The flecks get larger as the dragon matures until, at the adult stage, the scales grow completely golden.\nGold dragons can live anywhere. Their lairs are secluded and always made of solid stone, either caves or castles. These usually have loyal guards: either animals appropriate to the terrain, or storm or good cloud giants. The giants usually serve as guards through a mutual defensive agreement.}}{{desc9=**Combat:** Gold dragons usually parley before combat. When conversing with intelligent creatures they use *detect lie* and *detect gems* spells to gain the upper hand. In combat, they quickly use *bless* and *luck bonus*. Older dragons use *luck bonus* at the start of each day if the duration is a day or more. They make heavy use of spells in combat.}}'},
- {name:'Gorgon',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Gorgon}}{{subtitle=Creature}}Specs=[Gorgon,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Animal (1)}}{{AC=2}}{{Alignment=Neutral}}{{Move=12}}{{Hit Dice=8}}{{THAC0=13}}{{Attack=2d6 gore with horns, and breath weapon}}{{Languages=None}}{{Size=L, 8ft tall}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Breath Weapon=4 times per day, cone 20ft at end, up to 60ft long, save vs. petrification}}{{Section4=**Special Advantages**}}{{Keen senses=Sense of smell is acute and are 75% likely to track their victim successfully.}}RaceData=[w:Gorgon, align:N, cattr:int=1|mov=12|size=L|hd=8|thac0=13|attk1=2d6:Gore with horns:0:P, ns:1],[cl:PW,w:Gorgon Breath,sp:0,pd:4]{{Section9=**Description**}}{{desc=Gorgons are fierce, bull-like beasts who make their lairs in dreary caverns or the fastness of a wilderness. They are aggressive by nature and usually attack any creature or person they encounter.\nMonstrous black bulls, gorgons have hides of thick metal scales. Their breath is a noxious vapor that billows forth in great puffs from their wide, bull nostrils. Gorgons walk on two hooves, when necessary, but usually assume a four-hoofed stance. Despite their great size, they can move through even heavy forests with incredible speed, for they simply trample bushes and splinter smaller trees. Gorgons speak no languages but let out a roar of anger whenever they encounter other beings.}}{{desc1=**Combat:** Four times per day gorgons can make a breath weapon attack (their preferred means of attack). Their breath shoots forth in a truncated cone, five feet wide at the base and 20 feet wide at its end, with a maximum range of 60 feet. Any creature caught in this cone must roll a saving throw vs. petrification. Those who fail are turned to stone immediately! The awareness of gorgons extends into the Astral and Ethereal planes, as do the effects of their breath weapon.\nIf necessary (i.e., their breath weapon fails) gorgons will engage in melee, charging forward to deliver a vicious head butt or horn gore. Gorgons fight with unrestricted ferocity, slashing and trampling all who challenge them until they themselves are slain.\nTheir sense of smell is acute and once they get on the trail gorgons are 75% likely to track their victim successfully. Once their victim is in sight, gorgons let out a scream of rage and then charge. Unless somehow evaded, a gorgon will pursue tirelessly, for days if necessary, until the prey either drops from exhaustion or is caught in the gorgon\'s deadly breath.}}'},
- {name:'Greater-Basilisk',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Basilisk}}{{subtitle=Creature}}Specs=[Basilisk-Greater,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low (5:7)}}{{AC=2}}{{Alignment=Neutral}}{{Move=6}}{{Hit Dice=10}}{{THAC0=11}}{{Attack=2 x Claw 1d6, 1 x Bite 2d8}}{{Languages=None known}}{{Size=L, 12ft long}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=**Gaze:** Its gaze turns those who meet eyes to stone. Attacking or surprised opponents automatically meet its gaze and must save vs. petrification each round they attack, unless from the rear. Can look "in general direction" to hit at -2 \\amp get 20% chance of meeting gaze. Or avert \\amp attack blindfolded for -4 to-hit}}{{Section4=**Special Advantages**}}{{Poison Claws=Claws have poison tyle K with save at +4 or take 5HP damage in 2d4 rounds}}{{Poison Breath=If within 5ft of mouth, save vs. poison at +2 or die}}{{Surprise=Only surprised on a 1}}{{Section6=**Special Disadvantages**}}{{Reflections=If lit, and can see its own reflection, can petrify itself}}RaceData=[w:Greater Basilisk, align:N, cattr:int=5:7|mov=6|ac=2|size=L|hd=10r2|thac0=11|attk1=1d6:Claw:0:S|attk2=1d6:Claw:0:S|attk3=2d8:Bite:1:P|dmgmsg=Claws have Type K poison - **save at +4 bonus** or \\lbrak;take 5HP in 2d4 rounds\\rbrak;\\lpar;!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who has been struck?¦token_id}¦Poison K_Feeling Wrong_¦\\amp#91;\\lbrak;2d4\\rbrak;\\amp#93;¦-1¦Somethings wrong... not quite sure what...¦skull\\rpar;. If within 5ft of mouth **save vs. Poison at +2 or die from breath**. Gaze \\lbrak;Petrifies\\rbrak;\\lpar;!rounds ~~aoe `{selected¦token_id}¦cone¦feet¦0¦50¦50¦green¦true ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the unfortunate soul?¦token_id}¦Petrified¦99¦0¦Petrified by a Gaze Attack¦padlock\\rpar;. Those attacking without counter-measures must save every round,spattk:Petrification gaze attack,ns:1],[cl:PW,w:Petrification-Gaze-Attack,sp:0,pd:-1]{{Section9=**Description**}}{{desc=These reptilian monsters all posses a gaze that enables them to turn any fleshy creature to stone; their gaze extends into the Astral and Ethereal planes.\nThe greater basilisk is a larger cousin of the more common reptilian horror, the ordinary basilisk. These monsters are typically used to guard treasure.}}{{desc1=**Combat:** The monster attacks by raising its upper body, striking with sharp claws, and biting with its toothy maw. The claws carry Type K poison (saving throws vs. poison are made with a+4 bonus). Its foul breath is also poisonous, and all creatures, coming within 5 feet of its mouth, even if just for a moment, must roll successful saving throws vs. poison (with a+2 bonus) or die (check each round of exposure).\nEven if a polished reflector is used under good lighting conditions, the chance for a greater basilisk to see its own gaze and become petrified is only 10%, unless the reflector is within 10 feet of the creature. (While its gaze weapon is effective to 50 feet, the creature\'s oddly-shaped eyes are nearsighted and it cannot see its own gaze unless it is within 10 feet.)}}'},
- {name:'Green-Dragon',type:'DragonRace',ct:'1',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}Specs=[Green-Dragon,DragonRace,2H,Red-Dragon]{{}}RaceData=[w:Green Dragon, cattr:int=11:12|mov=9|fly=30C|swim=9|ac=4-??1|hd=(13+??2)d8r1|mr=(v(^((??1-4);0);1)*(??1-2)*5)|cl=mu:green-dragon|lv=5+??1|thac0=7-??2|dmg=??1|size=G|attk1=1d8:Claw x 2 or Claw+Kick:0:S|attk2=2d10:Bite:0:P|attk3=2d8:Tail Swipe:0:B|attkmsg=Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$\\lbrak;Show the radius\\rbrak;\\lpar;!rounds ~~aoe `{selected¦token_id}¦arc180¦feet¦0¦\\lbrak;\\lbrak;`{selected¦age¦max}*8\\rbrak;\\rbrak;¦\\lbrak;\\lbrak;`{selected¦age¦max}*16\\rbrak;\\rbrak;¦black\\rpar; then up to \\lbrak;\\lbrak;`{selected¦age¦max}\\rbrak;\\rbrak; opponents in the area take damage and Save vs. Petrification with the penalty shown below or be \\lbrak;Stunned\\rbrak;\\lpar;!rounds ~~target area¦`{selected¦token_id}¦\\amp#64;{target¦Select the stunned creature¦token_id}¦Stunned¦\\lbrak;\\amp#91;1+1d4\\amp#93;\\rbrak;¦-1¦Stunned by a dragon tail slap¦back-pain\\rpar; for 1d4+1 rounds., spattk:*Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*, spdef:Magic resistance @{selected|monstermagicresist}% and immune to gasses from birth, ns:=11],[cl:PW,w:Green-Dragon-Breath,pd:-1,sp:1],[cl:PW,age:4,w:MU-Water-Breathing,pd:-1,sp:1],[cl:PW,age:6,w:MU-Suggestion,pd:1,sp:1],[cl:PW,w:PR-Warp-Wood,age:7,pd:3,sp:1],[cl:PW,w:MU-Plant-Growth,age:8,pd:1,sp:1],[cl:PW,w:PR-Entangle,age:9,pd:1,sp:1],[cl:PW,w:PR-Pass-Without-Trace,age:11,pd:3,sp:1]{{}}%{Race-DB-Creatures|Red-Dragon}{{title=Green}}{{Intelligence=Very intelligent (11-12)}}{{AC=Varies with age, adult green dragon is AC -2}}{{Move=9, FL 30(C), Sw 9}}{{Hit Dice=Varies with age, adult green dragon is 15 HD}}{{THAC0=Varies with age, adult green dragon is 5}}{{Section1=**Attacks:** Damage bonus varies with age, adult green dragon is +6. 2 x Claws for 1d8 HP each, possibly with 1 or 2 kicks for 1d8 each, bite for 2d10, and tail slap for 2d8 and possible *stun* within an area varying with age. Several other attacks possible - see *Powers*}}{{Languages=*Green Dragon* and *Evil Dragon Common*, and 12% of hatchlings (+5% per age level) can perform universal communication with any intelligent creature}}{{Breath Weapon=A cloud of poisonous chlorine gas, extending 50ft from the dragon, 40ft wide and 30ft high. Damage varies by age from 2d6+1 to 24d6+12. Save vs. Breath Weapon to take half damage}}{{Spell Casting=Knows a number of random wizard spells cast at a level from 9 to 17 varying with age. All spells are cast at a speed of 1 segment regardless of the spell}}{{Spell-like Powers=*Juvenile* dragons learn *water breathing* at will, *Adults* can do *Suggestion* once a day, a *Mature Adult* dragon gains *Warp Wood* 3 x a day, *Old* dragons gain *Plant Growth* x 1 per day, and *Wyrms* gain *Pass without Trace* x 3 per day}}{{desc8=**Green Dragons:** Green dragons are bad tempered, mean, cruel, and rude. They hate goodness and good-aligned creatures. They love intrigue and seek to enslave other woodland creatures, killing those who cannot be controlled or intimidated.\nA hatchling green dragon\'s scales are thin, very small, and a deep shade of green that appears nearly black. As the dragon ages, the scales grow larger and become lighter, turning shades of forest, emerald, and olive green, which helps it blend in with its wooded surroundings. A green dragon\'s scales never become as thick as other dragons\', remaining smooth and flexible.\nGreen dragons are found in sub-tropical and temperate forests, the older the forest and bigger the trees, the better. The sights and smells of the woods are pleasing to the dragon, and it considers the entire forest or woods its territory. Sometimes the dragon will enter into a relationship with other evil forest-dwelling creatures, which keep the dragon informed about what is going on in the forest and surrounding area in exchange for their lives. If a green dragon lives in a forest on a hillside, it will seek to enslave hill giants, which the dragon considers its greatest enemy. A green dragon makes its lair in underground chambers far beneath its forest.\nThe majority of green dragons encountered will be alone. However, when a mated pair of dragons and their young are encountered, the female will leap to the attack. The male will take the young to a place of safety before joining the fight. The parents are extremely protective of their young, despite their evil nature, and will sacrifice their own lives to save their offspring.}}{{desc9=**Combat:** Green dragons initiate fights with little or no provocation, picking on creatures of any size. If the target creature intrigues the dragon or appears to be difficult to deal with, the dragon will stalk the creature, using its environment for cover, until it determines the best time to strike and the most appropriate tactics to use. If the target appears formidable, the dragon will first attack with its breath weapon, magical abilities, and spells. However, if the target appears weak, the dragon will make its presence known quickly for it enjoys evoking terror in its targets. When the dragon has tired of this game, it will bring down the creature using its physical attacks so the fight lasts longer and the creature\'s agony is prolonged.\nSometimes, the dragon elects to control a creature, such as a human or demi-human, through intimidation and suggestion. Green dragons like to question men, especially adventurers, to learn more about their society, abilities, what is going on in the countryside, and if there is treasure nearby.}}'},
- {name:'Gremlin',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Gremlin}}RaceData=[w:Gremlin, align:CE, cattr:int=11:12|mov=6|fly=18 (B)|ac=4|size=T|hd=4r3|thac0=17|attk1=1d4:Bite:0:P|mr=25|mw=+1|attkmsg=Only hit by magical weapons. 25% magic resistance, spdef:Only hit by magical weapons. 25% magic resistance]{{subtitle=Creature}}{{Section=**Attributes**}}{{Intelligence=Very (11 or 12)}}{{AC=4}}{{Alignment=Chaotic Evil}}{{Move=6, Fl 18(B)}}{{Hit Dice=4}}{{THAC0=17}}{{Attack=Bite for 1d4}}{{Languages=*Gremlin*. May also understand other languages, but never known to speak them}}{{Size=T, 18ins tall}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Surprise=}}{{Magic Resistance=25% magic resistance}}{{Magical Weapons To Hit=Magically enchanted weapons are required to hit Gremlins}}{{Section6=**Special Disadvantages**}}{{Section7=**Avoid Melee:** Gremlins are worthless in real combat; at every opportunity they flee rather than fight face-to-face. In melee, gremlins have only their weak bite for attacks (1d4 points of damage). They can fly quite well (MC B), but they usually stay close to the ground or well over their opponents\' heads, where they are difficult to reach.}}Specs=[Gremlin,CreatureRace,0H,Creature]{{Section8=**Description**}}{{desc8=Often mistaken for imps, gremlins are small, winged goblinoids. There are many varieties of gremlins, and most are chaotic and mischievous. Their skin color ranges from brown to black to gray, frequently in a mottled blend. Their ears are very large and pointed, giving them a 65% chance to hear noise. A pair of bat-like wings enables them to fly or glide. Gremlins never wear clothing or ornamentation.}}{{desc9=**Combat:** What gremlins like to do best is cause trouble. The angrier their victims are, the happier the gremlins. Their favorite tactic is to set up a trap to humiliate opponents and maybe even cause them to damage a valued possession or hurt a loved one. If the opponent gets hurt as well, that\'s just fine. For example, the gremlin may set a trip wire across a doorway that pulls down a fragile vase onto the victim\'s head. A building infested by a gremlin pack can be reduced to shambles in a single night.}}'},
- {name:'Gremlin-Fremlin',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Fremlin}{{subtitle=Creature}}RaceData=[w:Fremlin]{{}}Specs=[Fremlin,CreatureRace,0H,Fremlin]{{}}'},
- {name:'Gremlin-Galtrit',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Galtrit}{{}}RaceData=[w:Galtrit]{{}}Specs=[Galtrit,CreatureRace,0H,Galtrit]{{}}'},
- {name:'Gremlin-Mite',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Mite}{{}}Specs=[Mite,CreatureRace,0H,Mite]{{}}RaceData=[w:Mite]{{}}'},
- {name:'Gremlin-Mite-Female',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Mite-Female}{{}}RaceData=[w:Mite Female]{{}}Specs=[Mite Female,CreatureRace,0H,Mite-Female]{{}}'},
- {name:'Gremlin-Mite-King',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Mite-King}{{}}RaceData=[w:Mite King]{{}}%{Race-DB-Creatures|Mite-King}{{}}Specs=[Mite King,CreatureRace,0H,Mite-King]{{}}'},
- {name:'Gremlin-Snyad',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB_Creatures|Snyad}{{}}RaceData=[w:Snyad]{{}}Specs=[Snyad,CreatureRace,0H,Snyad]{{}}'},
- {name:'Half-Ogre',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Half-Ogre}}{{subtitle=Creature}}Specs=[Half-Ogre,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Semi- to High (3-14)}}{{AC=5 (preset)}}{{Alignment=Chaotic Evil}}{{Move=12}}{{Hit Dice=2+6}}{{HP=}}{{THAC0=17}}{{Attacks=By weapon, usually equipped with either a half-ogre sword or war spear}}{{Languages=Half-ogres speak *common* (more clearly and unimpeded than ogres), *ogrish, orcish, troll,* and one other, usually human, language.}}{{Size=L 9-10ft tall}}{{Life Expectancy=About 110 years}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Great Mass=grants +2 damage}}{{Priest Spells=}}{{Infravision=60 feet}}{{Section5=**Leaders:** Half-ogres in combat are often found with full-blooded ogres. If so, the half-ogre will most likely be leading the ogre party. The ogres fight more wisely when led by a half-ogre that concentrates assaults on characters it recognizes as spellcasters, and teaming up against skilled fighters. Ambushes are better-planned and more carefully baited.}}RaceData=[w:Half Ogre, align:CE, cattr:int=3:14|mov=12|ac=5|hd=2+6r2|thac0=17|size=L|dmg=+2|attk1=2+1d10:Sword:10:S|attk2=2+2d4:Spear:8:P|attkmsg=Better to use equipped half-ogre weapons, spattk:Strength gives bonuses to damage. Equipped half-ogre weapons better than innate attacks,ns:1],[cl:MI,%:90,items:random:1],[cl:MI,%:10,items:random:1d2]{{Section9=**Description**}}{{desc8=When adventuring companies journey into the wilderness they often run into ogres; big, ugly humanoids. Occasionally, an ogre party will include one or two individuals that are a little shorter, but significantly smarter, wielding a weapon with more skill than might have been expected. They have a better understanding of their opponents, and they grunt commands that anticipate the adventurers\' moves. In\nthis way half-breeds, the issue of ogres and humans, earn the respect of their kind.\nHalf-ogres range from 7 to 8 feet in height and weigh from 315 to 425 pounds. Skin and hair color are variable, but tend toward brown, gray, black, dull yellow (skin only), or any of the above with a slight gray-green tint. Teeth and nails are always orange. Most half-ogres have human-like eyes, though about one in five have the white pupils common to ogres. Their odor is noticeable, but it is not as overpowering as that of a full-blooded ogre. The half-ogre traditionally wears heavy skins and furs, bringing his Armor Class up to that of his ogre brethren, but rare individuals have the ability to make a shirt of chain-mail, for an AC of 3.}}{{desc9=**Combat:** Half-ogres of any sort suffer -2 penalties to their attack rolls against dwarves and -4 against gnomes, since those smaller races are so skilled at battling bigger folk.\nTo earn command privileges, particularly when ogre leaders are present, a half-ogre must show himself quick to battle and fierce in combat. Half-ogres\' usual weapon of choice is a huge sword and shield, or a war spear capable of causing 2d4 points of damage. A half-ogre inflicts an additional 2 points of damage, due to his mass.}}'},
- {name:'Half-Ogre-Kader',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Kader}}RaceData=[w:Half-Ogre Kader, cattr:hd=6r2|thac0=15,ns:1],[cl:MI,%:10,items:random:1d4]{{}}%{Race-DB-Creatures|Half-Ogre}{{}}Specs=[Half-Ogre Kader,CreatureRace,0H,Half-Ogre]{{Hit Dice=6}}{{THAC0=15}}{{desc=**Half-Ogre Kader:** For every 10 half-ogres in an encounter, there is a kader with 6 Hit Dice.}}'},
- {name:'Half-Ogre-Shaman',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Shaman}}RaceData=[w:Half-Ogre Shaman, cattr:hd=5+3r2|thac0=15|cl=pr:priest|lv=4,ns:1],[cl:MI,%:10,items:random:1d4{{}}Specs=[Half-Ogre Shaman,CreatureRace,0H,Half-Ogre]{{}}%{Race-DB-Creatures|Half-Ogre}{{Hit Dice=5+3}}{{THAC0=15}}{{Priest Spells=Has spell casting capability as a 4th level priest}}{{desc=**Half-Ogre Shaman:** If more than 15 half-ogres are encountered, they will have a shaman, a fighter/priest with 5 + 3 Hit Dice and the spells of a 4th-level priest, and two acolyte shamans, with 4+6 Hit Dice and the spells of a 2nd-level priest.}}'},
- {name:'Half-Ogre-Veteran',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Veteran}}RaceData=[w:Half-Ogre Veteran, cattr:hd=5+3r2|thac0=15,ns:1],[cl:MI,%:10,items:random:1d6]{{}}%{Race-DB-Creatures|Half-Ogre}{{}}Specs=[Half-Ogre Veteran,CreatureRace,0H,Half-Ogre]{{Hit Dice=5+3}}{{THAC0=15}}{{desc=**Half-Ogre Veteran:** For every five half-ogres in an encounter, there is an additional veteran with 5+3 Hit Dice.}}'},
- {name:'Half-Ogre-no-armour',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Half-Ogre no armour, cattr:ac=9]{{}}%{Race-DB-Creatures|Half-Ogre}{{}}Specs=[Half-Ogre no armour,CreatureRace,0H,Half-Ogre]{{AC=9, can equip with armour to improve AC}}'},
- {name:'Heavy-War-Horse',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Heavy War Horse, cattr:mov=15|hd=3+3r5|attk1=1d3:Bite:0:P|attk2=1d8:Left Hoof:0:B|attk3=1d8:Right Hoof:0:B]{{}}Specs=[Heavy War Horse,CreatureRace,0H,Horse]{{}}%{Race-DB-Creatures|Horse}{{name=(Heavy War)}}{{Move=15}}{{Attacks=Bite for 1d3, 2 x Hooves for 1d8 each}}{{desc8=**Heavy War Horse:** Warhorses are bred and trained to the lance, the spear, and the sword. They have higher morale than other horses, and are not as skittish about sudden movements and loud noises. The choice of knights and cavalry, these are the pinnacle of military horses. There are three varieties; heavy, medium and light.\n*Heavy war horses* are similar to draft animals. Large and muscular, they are relatively slow. Their size and powerful legs allow them to be armored in plate, and to carry a warrior in plate, as easily as a pony carries saddle bags. A good heavy war horse, fully trained, costs 400 or more gold pieces.}}{{desc9=**Combat:** War horses will fight independently of the rider on the second and succeeding rounds of a melee. They attack three-times per round by kicking with their front hooves and biting.\n*War Horses* are specially trained, and are accustomed to loud noises, strange smells, fire, or sudden movements, panicing only 10% of the time.}}'},
- {name:'Hell-Hound-4HD',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Hell Hound}}{{name=4HD}}RaceData=[w:Hell Hound 4HD, align:LE, ac:none, weaps:none, cattr:int=5:7|mov=12|ac=4|hd=4r3|thac0=17|size=M|attk1=1d10:Bite:0:B|attkmsg=Remember immune to fire; keen hearing so only surprised on 1 or 2; can see hidden or invisible creatures 50% of the time|dmgmsg=If rolled a natural 20 then do Fire Breath damage of \\lbrak;\\lbrak;@{selected¦hitdice}\\rbrak;\\rbrak; HP as well \\lpar;save vs. breath to halve\\rpar;, spattk:Fire Breath as power. Stealth means opponents get -5 penalty on surprise, spdef:Immune to fire. Only surprised on 1 or 2. See invisible or hidden creatures 50% of the time, ns:1],[cl:PW,w:Hell-Hound-Breath,pd:-1,sp:0]{{subtitle=Creature}}Specs=[Hell-Hound,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low (5-7)}}{{AC=4 is natural AC. Do not wear armour}}{{Alignment=Lawful Evil}}{{Move=12}}{{Hit Dice=4HD}}{{THAC0=17}}{{Section1=**Attacks:**}}{{Bite=for 1d10 HP damage}}{{Fire Breath=Fiery breath out to 10yds for damage equal to number of Hit Dice. On a natural 20, does both bite \\amp breath damage}}{{Languages=The baying sounds it makes have an eerie, hollow tone that send a shiver through any who hear them. While normally stealthy, when pursuing fleeing prey the hounds might bay}}{{Size=M}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Fire Breath=A 10 yard long bolt of fire which does damage equal to the number of Hit Dice of the Hell Hound}}{{Section4=**Special Advantages**}}{{Immunity=Immunity to fire of all types}}{{Stealthy=Opponents get -5 penalty on surprise when hell hounds stalk them.}}{{Exceptional Hearing=Hell hounds are only surprised on a 1 or 2 on a d10}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=Hell hounds are fire-breathing canines from another plane of existence brought here in the service of evil beings.\nA hell hound resembles a large hound with rust-red or red-brown fur and red, glowing eyes. The markings, teeth, and tongue are soot black. It stands two to three feet high at the shoulder, and has a distinct odor of smoke and sulfur.\nHell hounds are native to those extradimensional planes notable for their hot, fiery landscapes. There they roam in packs of 2d20 beasts. The hell hounds on the Prime Material plane are summoned there to serve the needs of evil creatures. Most of them later escape to the wild.\nHell hounds cause more forest fires than any other creature except for humanoids. Hell hounds have their uses, though. Because of their ability to easily detect hidden or invisible creatures, hell hounds make excellent watch dogs, especially for intelligent monsters such as fire giants.}}{{desc9=**Combat:** Hell hounds are clever hunters that operate in packs of 2d20 beasts. Each pack is led by a 7-Hit Die hell hound. The leader drives off other 7 HD rivals, who form their own packs. They move with great stealth, imposing a -5 penalty to opponents\' surprise rolls. One or two of the pack sneak up on a quarry while the others form a ring around it. The first hell hound then springs from ambush, attacks the nearest victim, and attempts to drive the others toward the rest of the pack. If the prey does not run away, the rest of the pack closes in within 1d4+2 rounds. \nHell hounds attack first by breathing fire at an opponent up to 10 yards away. The hell hound then attacks with its teeth. If the hell hound rolls a natural 20 on its attack roll, it grabs a victim in its jaws and breathes fire on the victim.}}'},
- {name:'Hell-Hound-5HD',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Hell Hound 5HD, cattr:hd=5r3|thac0=15]{{}}Specs=[Hell-Hound-5HD,CreatureRace,0H,Hell-Hound-4HD]%{Race-DB-Creatures|Hell-Hound-4HD}{{}}{{name=5HD}}{{Hit Dice=5HD}}{{THAC0=15}}'},
- {name:'Hell-Hound-6HD',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Hell Hound 6HD, cattr:hd=6r3|thac0=15]{{}}Specs=[Hell-Hound-6HD,CreatureRace,0H,Hell-Hound-4HD]%{Race-DB-Creatures|Hell-Hound-4HD}{{}}{{name=6HD}}{{Hit Dice=6HD}}{{THAC0=15}}'},
- {name:'Hell-Hound-7HD',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Hell Hound 7HD, cattr:hd=7r3|thac0=13]{{}}Specs=[Hell-Hound-7HD,CreatureRace,0H,Hell-Hound-4HD]%{Race-DB-Creatures|Hell-Hound-4HD}{{}}{{name=7HD}}{{Hit Dice=7HD}}{{THAC0=13}}'},
- {name:'Heway-Snake',type:'CreatureRace',ct:'1',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Heway Snake, cattr:int=5:7|mov=12|swim=6|ac=7|hd=1+3r4|thac0=19| size=M| attk1=1d3:Bite:0:P|attkmsg=Leave poison in near-by water. Creatures drinking water are \\lbrak;poisoned\\rbrak;\\lpar;!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the Unfortunate Victim?¦token_id}¦Heway Poison_Not quite right¦\\amp#91;\\lbrak;3d6\\rbrak;\\amp#93;¦-1¦That bite was quite painful. Should I see a Cleric?¦stopwatch\\rpar;. **Don\'t save now!** Save when the effect message pops up in a few rounds - that way the surprise is maintained! This poison inflicts damage and paralyses in 3d6 minutes. Successful save just does less damage. **Remember** hypnotic stare power., spattk:Heway poisons near-by water which poisons creatures that drink it, spdef:Hypnotic stare power, ns:1],[cl:PW,w:Hypnosis,sp:1,pd:-1]{{}}Specs=[Poison Snake,CreatureRace,0H,Poison Snake 1-4]{{}}%{Race-DB-Creatures|Poison-Snake-1-4}{{title=Heway Snake}}{{Intelligence=Low (5-7)}}{{AC=7}}{{Move=12, Sw 6}}{{Hit Dice=1+3}}{{THAC0=19}}{{Attacks=Bite for 1d3HP damage. Poisoned water near-by}}{{Size=M 12ft long}}{{Section5=**Poison:** Heways poison a near-by water source with a poison which does damage and paralyses\n**Hypnosis:** Powerful hypnosis can charm creatures which are then taken back to the Heway\'s lair and are willingly consumed}}{{desc9=**Combat:** These intelligent snakes have slimy, poisonous skins that they use to foul wells and oases. After swimming in a body of water for several hours and releasing its poison, it slinks off to wait for its prey to arrive. A creature drinking water poisoned by a heway must make a successful saving throw vs. poison at +2 or suffer 30 points damage within 3d6 minutes and be paralyzed for 1d6 hours. Creatures that make their saving throws suffer 15 points of damage. Even animals that survive the initial effects are often\ndoomed to die of dehydration.\nMany humans and animals attack heways on sight, but it can defend itself with its hypnotic stare, which has a powerful effect; any creature failing a saving throw vs. paralyzation will follow the heway to its lair and allow itself to be devoured. The heway sometimes uses this stare simply to immobilize a menacing creature. It then leaves the area while the hypnotized creature remains stationary for 1d6 turns.\nHeway are innate cowards and avoid contact with other animals. It is a weak fighter, its bite is not venomous, and its jaws are weak. Its preferred food is small animal carrion. Simply touching heway skin has no effect; the poison must be ingested.}}'},
- {name:'Hill-Giant-AC0',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Hill Giant AC0,cattr:ac=0]{{}}Specs=[Hill-Giant-AC0,CreatureRace,2H,Hill-Giant-AC3]{{}}%{Race-DB-Creatures|Hill-Giant-AC3}{{name= AC0}}{{AC=Wearing very rare Hill Giant metal armour, so AC0}}{{desc8=Hill giants\' natural Armor Class is 5. Most wear crudely-sewn animal hides, which are the equivalent of leather armor, giving them AC3. Only a few (5%) of the giants fashion metal armor from the armor of men they have defeated. These giants have an Armor Class of 0.}}'},
- {name:'Hill-Giant-AC3',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{prefix=Hill }}{{title=Giant}}RaceData=[w:Hill Giant AC3, align:CE, ac:none, cattr:int=5:7|mov=12|ac=3|hd=12+1d2|thac0=9|tohit=+3|dmg=+7|size=H|attk1=1d6:Fist:0:B, spdef:Can catch rocks hurled at them 30% of the time, ns:1],[cl:WP,prime:Hill-Giant-Club,items:HG-Rock:2d4],[cl:MI,%:90,items:random:1],[cl:MI,%:10,items:random:1d6]{{subtitle=Creature}}Specs=[Hill-Giant-AC3,CreatureRace,2H,Creature]{{Section=**Attributes**}}{{Intelligence=Low (5-7)}}{{AC=3 from crude leather armour. Natural AC is 5}}{{Alignment=Chaotic Evil}}{{Move=12}}{{Hit Dice=12+2 HD}}{{THAC0=9}}{{Section1=**Attacks:** +3 on ToHit rolls from strength. 1 x Fist for 1d6 HP damage, or using a Hill Giant Club for 2d6 plus strength bonus of +7. Throw rocks 3 to 200 yards doing 2d8 damage}}{{Languages=*Hill Giant* and *Giant Common*}}{{Size=H, 16ft tall}}{{Life Expectancy=About 200 years}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc7=**Hill giants:** are selfish, cunning brutes who survive through hunting and by terrorizing and raiding nearby communities. Despite their low intelligence, they are capable fighters. \nHill giants are oddly simian and barbaric in appearance, with overly long arms, stooped shoulders, and low foreheads. Even though they are the smallest of the giants, their limbs are more muscular and massive than those of the other giant races. Females have the same builds as males. Their skin color ranges from a light tan to a deep ruddy brown. Their hair is brown or black, and their eyes are black.\nLike other races of giants, hill giants carry their belongings with them in huge hide sacks. A typical hill giant\'s bag will contain 2-8 (2d4) throwing rocks, the giant\'s wealth, and 1-8 additional common items.}}{{desc8=Hill giants\' Armor Class is 3 when they wear crudely-sewn animal hides, which are the equivalent of leather armor. Nearly all hill giants wear these hides, which are a symbol of esteem in some hill giant communities -- the more hides a giant has, the more large kills to his credit.}}{{desc9=**Combat:** Hill giants prefer to fight their opponents from high rocky outcroppings where they can pelt their targets with rocks and boulders while limiting the risks posed to themselves.\nHill giants\' favorite weapons are oversized clubs which do 2-12 +7 points of damage (double the damage of a man-sized club plus their strength bonus). They hurl rocks for 2-16 (2d8) points of damage. Their targets for such attacks must be between 3 and 200 yards away from the giant. They can catch rocks or other similar missiles 30% of the time.}}'},
- {name:'Hill-Giant-AC5',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Hill Giant AC5,cattr:ac=5|mov=15]{{}}Specs=[Hill-Giant-AC5,CreatureRace,2H,Hill-Giant-AC3]{{}}%{Race-DB-Creatures|Hill-Giant-AC3}{{name= AC5}}{{AC=Not wearing any armour, so natural AC of 5}}{{desc8=Hill giants\' natural Armor Class is 5, when not wearing any armour. This is rare, as most wear crudely-sewn animal hides, which are the equivalent of leather armor.}}'},
- {name:'Hill-Giant-Juvenile',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Hill Giant Juvenile,cattr:ac=5|hd=4+1r5|tohit=+2|dmg=+2|attk1=1d10,Fist,0,B,ns:=1],[cl:WP,prime:Ogre-Club+0]{{}}Specs=[Hill-Giant-Juvenile,CreatureRace,2H,Hill-Giant-AC3]{{}}%{Race-DB-Creatures|Hill-Giant-AC3}{{name= Juvenile}}{{AC=Not wearing any armour, so natural AC of 5}}{{desc8=Hill giants\' natural Armor Class is 5, when not wearing any armour. Juveniles have not yet made their kills to source the leather for armour}}{{desc9=**Combat:** Hill giants prefer to fight their opponents from high rocky outcroppings where they can pelt their targets with rocks and boulders while limiting the risks posed to themselves.\nJuvenile hill giants have hit dice, damage, and attack rolls equal to that of an ogre. Their primary weapon is an Ogre Club (doing 2d8+2 damage) and they do not hurl rocks yet.}}'},
- {name:'Hippocampus',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Hippocampus\n}}RaceData=[w:Hippocampus, align:CG, weaps:none, ac:barding, cattr:int=8:10|swim=24|ac=5|hd=4r4|thac0=17|size=H|attk1=1d4:Bite:0:P|attk2=1d2:Head butt:0:B|attkmsg=Can only do *either* bite *or* head-butt as an attack in one round|dmgmsg=$$Head butt can do the damage above and possibly *stun* the opponent. At the GMs discretion save vs. paralysation or \\lbrak;be stunned\\rbrak;\\lpar;!rounds ~~target single¦@{selected¦token_id}¦\\amp#64;{target¦Who got head-butted?¦token_id}¦Stunned¦\\lbrak;\\amp#91;1d3\\amp#93;\\rbrak;¦-1¦Stunned by a head-butt from a hippocampus¦back-pain\\rpar; for 1d3 rounds]{{subtitle=Marine Creature}}Specs=[Hippocampus,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Average (8 to 10)}}{{AC=naturally 5. Can wear certain types of barding (GM decision)}}{{Alignment=Chaotic Good}}{{Move=Swim 24}}{{Hit Dice=4HD}}{{THAC0=17}}{{Attacks=Bite for 1d4 piercing damage *or* Head-butt for 1d2 bludgeoning damage and possibly stun the opponent (interpretation of Monsterous Manual...)}}{{Size=H - 18ft long}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc7=The hippocampus is the most prized of the marine steeds, a creature that combines features of a horse and a fish.\nThe hippocampus has the head, forelegs, and torso of a horse. The equine section is covered with short hair. The mane is made of long, flexible fins. The front hooves are replaced by webbed fins that fold up as the leg moves forward, then fan out as the leg strokes back. Past the rib cage the body becomes fish-like. The tail tapers 14 feet into a wide horizontal fin. A dorsal fin is located on the rump. Coloration is that of seawater. Typical colors include ivory, pale green, pale blue, aqua, deep blue, and deep green.\nHippocampi are the prized steeds of the sea. They can be found in deep waters anywhere, in freshwater lakes and oceans. They are able to breathe fresh and salt water with equal ease. They can also breathe air but require frequent gulps of water to keep from drying out. They are unable to\nmove out of water.\nDespite their radically different environments, horses and hippocampi are very similar. They have approximately the same sizes, life spans, and personalities, although hippocampi are blessed with much higher intelligence.\nHippocampi may be "domesticated" by water-breathing humanoids, especially tritons. In truth, the intelligent hippocampi cooperate with the humanoids. The hippocampi provide their services as steeds and allies while the humanoids provide protection. The benevolent hippocampi may assist surface dwellers who are visiting the aquatic world, whether voluntarily or by accident. Many a shipwrecked sailor has been saved from drowning by a passing hippocampus. Hippocampi are good judges of character; they will not assist an evil being or anyone who acts in a hostile manner toward them. Sometimes a hippocampus\'s offer of a ride can be more trouble than it is worth. Young hippocampi often forget that most surface dwellers breathe air, not water.\nHippocampi do not accumulate treasure. Most spurn even ornamental gifts such as collars or leg bands. They simply have no use for these gewgaws. They do appreciate delicacies, however, in the forms of tasty foods not available in the water.}}{{desc9=**Combat:** Hippocampi are usually peaceful creatures. They do not attack unless cornered or if another hippocampus or an ally is threatened. They are fast enough to out-swim most anything that would want to attack them.\nThe hippocampus attacks with a strong bite. It suddenly extends its head, chomps down with a crushing bite, and then releases. Hippocampi do not hold onto their opponents. Hippocampi also butt their heads against targets. Such attacks may stun an opponent or break his bones.\nTheir firm, powerfully muscled bodies provide a strong protection against attack. The blood coagulates quickly on exposure to water, thus minimizing blood loss that could both debilitate the hippocampus and attract sharks (sharks have only a 20% chance of going into a feeding frenzy if the only bleeding creature is a hippocampus).}}'},
- {name:'Hippogriff',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Hippogriff}}{{subtitle=Creature}}RaceData=[w:Hippogriff, align:N, cattr:int=2:4|mov=18|fly=36(C/D)|ac=5|size=L|hd=3+3|thac0=17|attk1=1d6:Claw1:0:S|attk2=1d6:Claw2:0:S|attk3=1d10:Beak:1:P]{{Section=**Attributes**}}{{Intelligence=Semi- (2 to 4)}}{{AC=5}}{{Alignment=Neutral}}{{Move=18, FL36 (C,D)}}{{Hit Dice=3+3}}{{THAC0=17}}{{Attacks=2 x Claws for 1d6 each, Beak for 1d10}}{{Languages=None}}{{Size=L, 10ft long}}{{Life Expectancy=Unknown}}{{Section1=**Powers**}}{{Section2=None}}{{Section3=**Special Advantages**}}{{Section4=**Flying Mount:** If a hippogriff is captured while still very young (under four months), it can be domesticated and trained to serve as a steed. It will probably have to be taught to fly.}}{{Section7=**Special Disadvantages**}}{{Section8=None}}Specs=[Hippogriff,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc8=Hippogriffs are flying monsters that have an equal likelihood to be predator, prey, or steed. The hippogriff is a monstrous hybrid of eagle and equine features. It has the ears, neck, mane, torso, and hind legs of a horse. The wings, forelegs, and face are those of an eagle. It is about the size of a light riding horse. A hippogriff may be colored russet, golden tan, or a variety of browns. The feathers are usually a different shade than the hide. The beak is ivory or golden yellow.}}{{desc9=**Combat:** The hippogriff attacks with its eagle-like claws and beak. Each claw can tear for 1d6 points of damage, while the scissor-like beak inflicts 1d10 points of damage.\nThey feed on whatever is available, whether greenery, fruits, or wildlife. Hippogriffs are able to attack fairly large prey, such as bison, but they do not prey on carnivores. The exception is humanoids. Hippogriffs may, in the absence of other meat, attack small groups of people. Bodies are then carried back to the nest to feed the others; this is where the victim\'s possessions usually spill out. Hippogriffs are clean monsters; they dispose of carcasses and other debris by carrying them downhill. They like clear, sparkly things like glass, crystals, and precious gems. Males may amass a small trove kept covered by brush. As a mating ritual, he arranges these in a display to entice mares.}}'},
- {name:'Hippogriff-Baby-Foal',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Baby Foal}}RaceData=[w:Hippogriff Baby Foal, cattr:fly= |tohit=-4]{{subtitle=Creature}}%{Race-DB-Creatures|Hippogriff}{{Move=18}}{{Section8=**Immature Attacking:** Due to inexperience and lack of musculature, foals younger than 6 months old have a -4 penalty on their attack rolls}}Specs=[Hippogriff Baby Foal,CreatureRace,0H,Hippogriff]{{Section9=**Description**}}{{desc=**Baby Foal:** The foal is able to walk upon hatching. Its beak remains soft for the first two weeks; this enables the foal to nurse. Then its beak hardens and the hippogriff switches to regurgitated food from its mother. The colts learn to eat solid meat at four months, although they are clumsy killers (-4 penalty to attack rolls and damage)}}'},
- {name:'Hippogriff-Young-Foal',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Baby Foal}}RaceData=[w:Hippogriff Young Foal, cattr:fly=18(D)|tohit=-2]{{subtitle=Creature}}%{Race-DB-Creatures|Hippogriff}{{Move=18, FL18 (D)}}{{Section4=**Flying Mount:** While foals captured early enough and trained can become flying mounts, this foal is already too old}}{{Section8=**Immature Attacking:** Due to inexperience and lack of musculature, young foals have a -2 penalty on their attack rolls}}Specs=[Hippogriff Young Foal,CreatureRace,0H,Hippogriff]{{Section9=**Description**}}{{desc=**Young Foal:** At six months they can fly (18, class D) and fight with a -2 penalty to attack rolls and damage. Yearlings are identical to adults, although they are unable to breed until they are three years old.}}'},
- {name:'Hobgoblin',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Hobgoblin}}{{subtitle=Creature}}RaceData=[w:Hobgoblin, align:LE, ac:leather|padded|studded|ring-mail|brigandine|scale-mail|hide|shield, weaps:polearm|morningstar|long-blade|short-blade|bow|spears|whip, cattr:int=8:10|mov=9|ac=10|size=M|hd=1+1|thac0=19|attkmsg=Hate elves and always attack them first, spattk:Hate Elves and always attack them first, ns:19],[cl:PW,w:Detect New Construction,sp:0,pd:-1],[cl:PW,w:Detect Shifting Walls,sp:0,pd:-1],[cl:PW,w:Detect Slope,sp:0,pd:-1],[cl:WP,%:5,both:Awl Pike],[cl:WP,%:5,both:Bec de Corbin],[cl:WP,%5:,both:Fauchard],[cl:WP,%:5,both:Glaive],[cl:WP,%:5,both:Glaive-Guisarme],[cl:WP,%:5,both:Military Fork],[cl:WP,%:20,prime:Morningstar],[cl:WP,%:5,prime:Shortsword,items:Shortbow:1|Sheaf Arrows:20],[cl:WP,%:5,both:Shortbow,items:Shortsword:1|Sheaf Arrows:20],[cl:WP,%:5,prime:Longsword,items:Longbow:1|Flight Arrows:20],[cl:WP,%:5,both:Longbow,items:Longsword:1|Flight Arrows:20],[cl:WP,%:10,prime:Spear],[cl:WP,%:5,prime:Shortsword,offhand:Spear],[cl:WP,%:5,prime:Spear,offhand:Shortsword],[cl:WP,%:5,prime:Shortsword,offhand:Morningstar],[cl:WP,%:5,prime:Shortsword,offhand:Whip],[cl:MI,%:90],[cl:MI,%:10,items:random:1d4]{{Section=**Attributes**}}{{Intelligence=Average (8 to 10)}}{{AC=10 - can equip with armour up to AC5}}{{Alignment=Lawful Evil}}{{Move=9}}{{Hit Dice=1+1}}{{Hit Points=}}{{THAC0=19}}{{Attacks=By weapon - must be equipped via menus}}{{Languages=*Hobgoblin, orcs, goblins,* and *carnivorous apes*. Roughly 20% of them can speak *common*}}{{Size=M, 6½ft tall}}{{Life Expectancy=Unknown}}{{Section1=**Powers**}}{{Section2=**Mining Experts:** They are highly adept at mining and can *detect new construction, sloping passages,* and *shifting walls* 40% of the time.}}{{Section3=**Special Advantages**}}{{Strength=}}{{Infravision=60 feet, with no disadvantages in light}}{{Section7=**Special Disadvantages**}}{{Section8=None}}Specs=[Hobgoblin,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc8=Hobgoblins are a fierce humanoid race that wage a perpetual war with the other humanoid races. They are intelligent, organized, and aggressive.\nThe typical hobgoblin is a burly humanoid standing 6½\' tall. Their hairy hides range from dark reddish-brown to dark gray. Their faces show dark red or red-orange skin. Large males have blue or red noses. Hobgoblin eyes are either yellowish or dark brown while their teeth are yellow. Their garments tend to be brightly colored, often bold, blood red. Any leather is always tinted black. Hobgoblin weaponry is kept polished and repaired.}}{{desc9=**Combat:** Hobgoblins in a typical force will be equipped with polearms (30%), morningstars (20%), swords and bows (20%), spears (10%), swords and spears (10%), swords and morning stars (5%), or swords and whips (5%). Equip using standard menus.\nHobgoblins fight equally well in bright light or virtual darkness, having infravision with a range of 60 feet.\nHobgoblins hate elves and always attack them first.}}'},
- {name:'Hobgoblin-Assistant',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Assisstant}}RaceData=[w:Hobgoblin Assistant, cattr:hp:9|ac=5]{{subtitle=Creature}}%{Race-DB-Creatures|Hobgoblin}{{AC= (preset) - can equip with armour up to AC5}}Specs=[Hobgoblin Assistant,CreatureRace,0H,Hobgoblin]{{desc=**Hobgoblin Assistant:** For every 20 male hobgoblins there will be a leader (known as a sergeant) and two assistants. These have 9 hit points each but still fight as 1+1 Hit Die monsters.}}'},
- {name:'Hobgoblin-Chief',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Chief}}RaceData=[w:Hobgoblin Chief, cattr:hd=4r3|hp:22|ac=2|dmg=+3,ns:1],[cl:MI,%:10,items:random:2d3]{{subtitle=Creature}}%{Race-DB-Creatures|Hobgoblin}{{AC=2 (preset) - can equip with armour up to AC2}}{{Hit Dice=4HD for saves and magical attacks}}{{Hit Points=22HP as standard}}{{Strength=Gains +3 bonus to damage due to their great strength}}Specs=[Hobgoblin Chief,CreatureRace,0H,Hobgoblin]{{desc=**Hobgoblin Chief:** If the hobgoblins are encountered in their lair, they will be led by a chief with AC 2, 22 hit points, and +3 points of damage per attack, who fights as a 4 Hit Die monster. The chief has 5-20 (5d4) sub-chiefs acting as bodyguards. Leaders and chiefs always carry two weapons.}}'},
- {name:'Hobgoblin-Sergeant',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Sergeant}}RaceData=[w:Hobgoblin Sergeant, cattr:hp:9|ac=5,ns:1],[cl:MI,%:10,items:random:2d2]{{subtitle=Creature}}%{Race-DB-Creatures|Hobgoblin}{{AC=5 (preset) - can equip with armour up to AC5}}Specs=[Hobgoblin Sergeant,CreatureRace,0H,Hobgoblin]{{desc=**Hobgoblin Sergeant:** For every 20 male hobgoblins there will be a leader (known as a sergeant) and two assistants. These have 9 hit points each but still fight as 1+1 Hit Die monsters.}}'},
- {name:'Hobgoblin-Sub-Chief',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Sub-Chief}}RaceData=[w:Hobgoblin Sub-Chief, cattr:hd=3r3|hp:16|ac=3|dmg=+2,ns:1],[cl:MI,%:10,items:random:1d6]{{subtitle=Creature}}%{Race-DB-Creatures|Hobgoblin}{{AC=3 (preset) - can equip with armour up to AC3}}{{Hit Dice=3HD for saves and magical attacks}}{{Hit Points=16HP as standard}}{{Strength=Gains +2 bonus to damage due to their great strength}}Specs=[Hobgoblin Sub-Chief,CreatureRace,0H,Hobgoblin]{{desc=**Hobgoblin Sub-Chief:** Groups numbering over 100 are led by a sub-chief who has 16 hit points and an Armor Class of 3. The great strength of a sub-chief gives it a +2 on its damage rolls and allows it to fight as a 3 Hit Die monster.}}'},
- {name:'Homonculus',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Homonculus}}{{subtitle=Creature}}RaceData=[w:Homonculus, align:any, ac:none, weaps:none, cattr:int=8:10|mov=6|fly=18(B)|ac=6|size=T|hd=2|thac0=19|attk1=1d3:Bite:0:P|dmgmsg=A successful bite injects the opponent with sleep venom: save vs. poison or \\lbrak;become comatose\\rbrak;\\lpar;!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Select the victim¦token_id}¦Homonculus Venom¦\\lbrak;\\amp#91;5d6\\amp#93;\\rbrak;¦-1¦That homonculus venom was powerful! Still asleep¦sleepy\\rpar; for 5d6 minutes. If homonculus dies creator takes \\lbrak;2d10HP\\rbrak;\\lpar;!\\amp#13;\\amp#47;gr 2d10 HP damage to creator of the homonculus\\rpar; damage. If creator dies homonculus dies, spattk:Bite injects venom that makes victim comatose for 5d6 minutes., spdef:Saves same as creator i.e. use creators saveing table when necessary]{{Section=**Attributes**}}{{Intelligence=Has creators intelligence}}{{AC=6}}{{Alignment=Same as creator}}{{Move=6, FL18(B)}}{{Hit Dice=2}}{{THAC0=19}}{{Attacks=Bite for 1d3 and injection of sleep venom}}{{Languages=Communicates telepathically with creator}}{{Size=T, 1½ft tall}}{{Life Expectancy=As long as creator}}{{Section1=**Powers**}}{{Section2=None}}{{Section3=**Special Advantages**}}{{Poison Bite=Sve vs. poison or victim is comatose for 5d6 minutes (rounds)}}{{Saves=Same as those of creator}}{{Infravision=60 feet, with no disadvantages in light}}{{Section7=**Special Disadvantages**}}{{Cost=Expensive in money \\amp time to create}}{{Damage on Death=If homonculus dies, creator takes 2d10 damage}}Specs=[Homonculus,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc8=Homonculi are small mystical beings created by magicians for spying and other special tasks. The average homonculous is vaguely humanoid in form. It is 18 inches tall and its greenish, reptilian skin may have spots or warts. They have leathery, bat-like wings with a span of 24 inches and a mouth filled with long, pointed teeth that can inject a potent sleeping venom.}}{{desc9=**Combat:** The homonculous is a quick and agile flyer which uses this ability to great advantage in combat. It can dart to and fro so quickly that any attempt to capture it short of a net or web spell is almost impossible.\nIn combat, the homonculous will land on its chosen victim and bite with its needle-like fangs. In addition to doing 1-3 points of damage, the creature injects a powerful venom. Anyone bitten by the homonculous must save vs. poison or fall into a comatose sleep for 5-30 (5d6) minutes.\nThe creature\'s saving throws are the same as those of its creator. While most attacks against either the homonculous or creator do not affect the other, there is one exception. Any attack which destroys the homonculous causes its creator to suffer 2-20 (2d10) points of damage. Conversely, if the creator is slain, the homonculous also dies and its body swiftly melts away into a pool of ichor.}}'},
- {name:'Horned-Owl',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Horned Owl, cattr:mov=1|fly=24D|ac=7|hd=1-4r5|thac0=20]{{}}Specs=[Horned Owl,CreatureRace,0H,Owl]{{}}%{Race-DB-Creatures|Owl}{{title=Horned }}{{AC=7}}{{Move=1, FL 24(D)}}{{Hit Dice=1-4 HD, 2d2 HP}}{{THAC0=20}}{{Infravision=90ft infravision at night, but poor eyesight during daylight}}{{Silent Flight=95% silent when in flight}}{{desc8=**Horned Owl:** Same as a normal *Owl* except for as noted above}}'},
- {name:'Horse',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Horse\n}}RaceData=[w:Horse, align:N, weaps:none, ac:barding, cattr:int=1|mov=24|ac=7|hd=3r5|thac0=17|size=L|attk1=1d2:Hoof left:0:B|attk2=1d2:Hoof right:0:B]{{subtitle=Mammal}}Specs=[Horse,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Animal (1)}}{{AC=7}}{{Alignment=Neutral}}{{Move=24}}{{Hit Dice=3HD}}{{THAC0=17}}{{Attacks=2 x Hooves for 1d2 each}}{{Size=L}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc7=Horses are large quadrupeds often used for transportation, or as pack and draft animals, by human and demihuman races. They are frequently bred for their speed and for their beauty.\nA horse can be solid white, gray, chestnut, brown, black, or various reddish tones; its hide can instead show a variation or combination of these colors. In addition to the coat\'s color, the horse may have markings of various sorts.\nHorses are measured in "hands." One hand equals 4 inches.}}{{desc9=**Combat:** War horses will fight independently of the rider on the second and succeeding rounds of a melee. Other breeds fight only if cornered. Most attack twice per round by kicking with their front hooves.\nUnless specially trained, horses can be panicked by loud noises, strange smells, fire, or sudden movements 90% of the time. Horses trained and accustomed to such things (usually warhorses) panic only 10% of the time.}}'},
- {name:'Horse-Draft',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Draft Horse]{{}}Specs=[Draft Horse,CreatureRace,0H,Draft Horse]{{}}%{Race-DB-Creatures|Draft-Horse}'},
- {name:'Horse-Heavy-War',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Heavy War Horse]{{}}Specs=[Heavy War Horse,CreatureRace,0H,Heavy War Horse]{{}}%{Race-DB-Creatures|Heavy-War-Horse}'},
- {name:'Horse-Light-War',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Light War Horse]{{}}Specs=[Light War Horse,CreatureRace,0H,Light War Horse]{{}}%{Race-DB-Creatures|Light-War-Horse}'},
- {name:'Horse-Medium-War',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Medium War Horse]{{}}Specs=[Medium War Horse,CreatureRace,0H,Medium War Horse]{{}}%{Race-DB-Creatures|Medium-War-Horse}'},
- {name:'Horse-Mule',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Mule]{{}}Specs=[Mule,CreatureRace,0H,Mule]{{}}%{Race-DB-Creatures|Mule}'},
- {name:'Horse-Pony',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Pony]{{}}Specs=[Pony,CreatureRace,0H,Pony]{{}}%{Race-DB-Creatures|Pony}'},
- {name:'Horse-Riding',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Riding Horse]{{}}Specs=[Riding Horse,CreatureRace,0H,Riding Horse]{{}}%{Race-DB-Creatures|Riding-Horse}'},
- {name:'Horse-Steppe-Pony',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Steppe Pony]{{}}Specs=[Steppe Pony,CreatureRace,0H,Steppe Pony]{{}}%{Race-DB-Creatures|Steppe-Pony}'},
- {name:'Horse-Wild',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Wild Horse]{{}}Specs=[Wild Horse,CreatureRace,0H,Wild Horse]{{}}%{Race-DB-Creatures|Wild-Horse}'},
- {name:'Huge-Scorpion',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Huge Scorpion, cattr:mov=12|ac=4|hd=4+4r2|attk1=1d8:Claw1:0:S|attk2=1d8:Claw2:0:S|attk3=1d3:Sting:1:P|dmgmsg=If both claws hit victim is held and future stinger and claw hits are automaticly successful. Only one *Bend bar* check to escape$$If both claws hit victim is held and future stinger and claw hits are automaticly successful. Only one *Bend bar* check to escape$$On a successful hit with the stinger do damage and victim must save vs. poison or be poisoned with a Type F poison and **die** immediately. If save take **20HP** damage, spattk:Stinger does poison type F. If both claws hit victim is held. Stinger \\amp claw hits are then automatic]{{subtitle=Creature}}Specs=[Scorpion,CreatureRace,0H,Giant Scorpion]{{}}%{Race-DB-Creatures|Giant-Scorpion}{{title=Huge }}{{AC=4 from chitinous carapace}}{{Move=12}}{{Hit Dice=4+4 HD}}{{Section1=**Attacks:** 2 x claws for 1d8HP each. If both hit victim is held and subsequent attacks automatically hit. Sting for 1d3HP and poison type F}}{{Size=M, 4ft long}}{{desc8=Often found in dungeons and wildernesses, these creatures are merely smaller versions of the giant scorpion. Colors range from tan to brown to black, and rumors persist of rare white scorpions deep underground. }}{{desc9=**Combat:** All attack with pincers and tail stinger. If struck by the stinger, the victim must save versus poison or die the next round. Huge scorpions have deadly (type F) poison and can pin a victim in a way similar to the giant scorpion, but with the huge scorpion, the victim can still fight back. It is not unusual to see scorpions of various sizes fighting with each other.}}'},
- {name:'Ice-Mephit',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{subtitle=Creature}}RaceData=[w:Imp Ice-Mephit, cattr:hd=3|attk1=1d2:Claw1:0:S|attk2=1d2:Claw2:0:S|dmgmsg=A successful claw hit also does an additional \\lbrak;\\lbrak;1\\rbrak;\\rbrak;HP of cold damage, spattk:Claws do additional 1HP cold damage. Breath weapon: Ice Volley \\lpar;Power\\rpar;, spdef:*Gate* in \\lpar;Power\\rpar; another mephit 1/hour,ns:=2],[cl:PW,w:Ice Mephit Volley,sp:0,pd:3],[cl:PW,w:Gate Mephit,sp:0,pd:24]{{}}%{Race-DB-Creatures|Imp-Mephit-Fire}{{title=Imp - Ice Mephit}}{{Hit Dice=3}}{{Attacks=2 x Claw for 1d2 and 1HP additional cold damage}}{{Section2=Breath weapon (Power): *Ice Shard Volley* x 3/day. *Gate Mephit* 1/hour}}{{Section4=**Touching Skin:** Touching an Ice Mephit causes 1HP freezing damage (no save)}}Specs=[Mephit,CreatureRace,0H,Imp-Mephit-Fire]{{desc=**Ice Mephit:** Angular in form, with translucent ice-blue skin. They live on the colder lower planes and never mix with fire, lava, smoke, or steam mephits. Ice mephits are aloof and cruel, surpassing all other mephits in the fine arts of torture and wanton destruction.\nFreezing effects from claws are cumulative and last three to four turns, or until the victim is healed to full hit points (whichever comes first).\nIce mephits may breathe a volley of ice shards three times per day. This volley automatically hits a single victim within 15 feet of the mephit. Damage is 1d6, halved if the victim rolls a successful saving throw. Once per hour an ice mephit may attempt to gate in one other mephit. The chance of success is 25% and the summoned mephit is either mist or ice (equal probability of each).}}'},
- {name:'Imp',type:'creatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Imp}}{{subtitle=Creature}}RaceData=[w:Imp, align:LE, ac:none, weaps:none, svspe:+3, cattr:int=8:10|mov=6|fly=18(A)|ac=2|size=T|hd=2+2|regen:1|thac0=19|attk1=1d4:Tail Stinger:0:P|dmgmsg=A successful stinger hit also injects venom which can slay. Save vs. poison or die. Remember 25% magic resistance\\comma damaged only by silver \\amp magic weapons\\comma Cold fire \\amp electricity have no effect, spattk:Can *polymorph* into two possible animal forms. Can use *suggestion* once per day, spdef:*detect good detect magic* and become *invisable* at will regardless of polymorphed form. Immune to cold fire and electricity. 25% magic resistance. Save vs. spell as a 7HD creature. Only harmed by silver \\amp magic weapons. Regenerate at 1HP per round,ns:1],[cl:PW,w:PR-Detect-Good,sp:10,pd:-1],[cl:PW,w:PR-Detect-Magic,sp:10,pd:-1],[cl:PW,w:MU-Invisibility,sp:2,pd:-1],[cl:PW,w:MU-Polymorph-Self,sp:4,pd:-1],[cl:PW,w:MU-Suggestion,sp:3,pd:1],[cl:MI,items:random:1]{{Section=**Attributes**}}{{Intelligence=Average (8:10)}}{{AC=2}}{{Alignment=Lawful Evil}}{{Move=6, FL18(A)}}{{Hit Dice=2+2}}{{THAC0=19}}{{Attacks=1 x tail stinger with deadly poison, or as per polymorphed animal}}{{Languages=*Imp*}}{{Size=T, 2ft tall}}{{Life Expectancy=Eternal}}{{Section1=**Powers**}}{{Polymorph=at will into one of two predefined creatures (determined by DM). The most commonly encountered alternate forms are those of a large spider, raven, giant rat, or goat. In such forms the imp is physically identical to a normal animal.}}{{Spells as Powers=*Detect Good, Detect Magic* and become *Invisible* at will even if polymorphed. *Suggestion* 1/day}}{{Section4=**Special Advantages**}}{{Magic Resistance=25% resistant to all spells, and save vs. spell as a 7HD creature}}{{Immunities=Immune to Cold, Fire and Electricity}}{{Invulnerabilities=Require silver or magical weapons to hit}}{{Section7=**Special Disadvantages**}}{{Section8=None}}Specs=[Imp,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc=**Imp:** diminutive creatures of an evil nature who roam the world and act as familiars for lawful evil wizards and priests.\nThe average imp is a 2\' humanoid with leathery, bat-like wings, a barbed tail, and sharp, twisted horns. Its skin is a dark red and its horns and jagged teeth are a gleaming white.\nImps are beings of a very evil nature who originate on the darkest of evil planes. Their main purpose on the Prime Material plane is to spread evil by assisting lawful evil wizards and priests. When such a person is judged worthy of an imp\'s service, the imp comes in answer to a *find familiar* spell.}}{{hide7=Once they have contacted their new "master", they begin at once to take control of his actions. Although imps maintain the illusion that the summoner is in charge, the actual relationship is closer to that of a workman (the imp) and his tools (the master).\nWhile they are technically in the service of their master, imps retain a basic independence and ambition to become more powerful someday. They may acquire treasure from those they slay, and will often pilfer valuables encountered during their travels.\nThe imp confers some of its powers upon its master. A telepathic link connects the two whenever they are within one mile of each other. This enables the master to receive all of the imp\'s sensory impressions, including its infravision. The master also gains the imp\'s inherent 25% magical resistance and is able to regenerate just as the imp does. If the imp is within telepathic range, the master acts as if he were one level higher than he actually is. Conversely, if the imp is more than a mile away, the master acts as if he were one level of ability below his actual rank. If the imp is killed, the master instantly drops by four levels, though these can be regained in the usual manner.}}{{hide8=**Combat:** In its natural form, the imp attacks with the wicked stinger on its tail. In addition to inflicting 1-4 points of damage, this stinger injects a powerful poison which is so deadly that those who fail their save versus poison are instantly slain by it. When it is polymorphed, the imp attacks with the natural weaponry of its adopted form, though the goat and raven forms lack damaging attacks}}{{hide9=Although an imp\'s body can be destroyed on the Prime Material plane, it is not so easily slain. When its physical form is lost, its corrupt spirit instantly returns to its home plane where it is reformed and, after a time, returned to our world to resume its work.}}'},
- {name:'Imp-Mephit-Fire',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Fire-Mephit}{{}}Specs=[Fire Mephit,CreatureRace,0H,Fire-Mephit]{{}}RaceData=[w:Fire Mephit]{{}}\n'},
- {name:'Imp-Mephit-Ice',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Ice-Mephit}{{}}RaceData=[w:Ice Mephit]]{{}}Specs=[Ice Mephit,CreatureRace,0H,Ice-Mephit]{{}}'},
- {name:'Imp-Mephit-Lava',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Lava-Mephit}{{}}RaceData=[w:Lava Mephit]{{}}Specs=[Lava Mephit,CreatureRace,0H,Lava-Mephit]{{}}'},
- {name:'Imp-Mephit-Mist',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Mist-Mephit}{{}}RaceData=[w:Mist Mephit]{{}}Specs=[Mist Mephit,CreatureRace,0H,Mist-Mephit]{{}}'},
- {name:'Imp-Mephit-Smoke',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Smoke-Mephit}{{}}RaceData=[w:Smoke Mephit]{{}}Specs=[Smoke Mephit,CreatureRace,0H,Smoke-Mephit]{{}}'},
- {name:'Imp-Mephit-Steam',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Steam-Mephit}{{}}RaceData=[w:Steam Mephit]{{}}Specs=[Steam Mephit,CreatureRace,0H,Steam-Mephit]{{}}'},
- {name:'Invisible-Stalker',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Invisible Stalker}}RaceData=[w:Invisible Stalker, align:N, weaps:none, ac:none, cattr:int=13:14|mov=12|fly=12A|ac=3|hd=8r3|thac0=13|size=L|attk1=4d4:Vortex:1:SPB,spdef:Opponents get -6 on surprise rolls. -2 on attack for opponents who can\'t see or detect invisible]{{subtitle=Creature}}Specs=[Invisible Stalker,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=High (13-14))}}{{AC=3}}{{Alignment=Neutral}}{{Move=12 FL 12(A)}}{{Hit Dice=8 HD}}{{THAC0=13}}{{Attacks=1 x Air Vortex for 4d4}}{{Size=L, 8ft tall}}{{Language=Invisible stalkers understand the common speech of men, but can not speak it. They can converse only in their own language, which sounds much like the roaring and whooshing of a great wind storm.}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Invisibility=All opponents who are unable to see or detect invisible foes are at a -2 on their attack rolls. Although they are fully invisible on the Prime Material plane, their outlines can be dimly perceived on the Astral or Ethereal planes.}}{{Surprise=Due to their invisibility, these creatures impose a -6 penalty on the surprise rolls of those they choose to attack.}}{{Section6=**Special Disadvantages**}}{{Unwilling Servant=The invisible stalker is, at best, an unwilling servant. It resents any task assigned to it, although brief, uncomplicated labors may be seen as something of a diversion and thus undertaken with little resentment. Tasks that require a week or more of its time will drive the invisible stalker to pervert the stated intent of the command. Such commands must be carefully worded and come from a powerful wizard. An invisible stalker may look for a loop hole in the command as a means of striking back at its master. For example, a simple command such as "keep me safe from all harm" may result in the stalker carrying the conjurer back to the elemental plane of air and leaving him there in a well hidden location.\nEach day of the invisible stalker\'s indenturedness there is a 1% cumulative chance that the creature will seek a means to pervert its commands and free itself of servitude. If no option is open, the creature must continue to serve.}}{{Section9=**Description**}}{{desc8=The invisible stalker is a creature from the elemental plane of Air. Those present on the material plane are there as the result of a conjuration by some wizard. This magic causes the creature to serve its summoner for a time. The conjurer retains full command of the stalker until it either fulfills its duties or is defeated and driven back to its home plane. Once given a task, an invisible stalker is relentless. They are faultless trackers who can detect any trail less than a day old. If ordered to attack, they will do so with great fury and will cease their efforts only upon their own destruction or the direct orders of their master. Once their mission is accomplished, the creature is free to return to its home plane.\nThe true form of the invisible stalker is unknown. On the Material, Astral, or Ethereal planes, the invisible stalker can only be perceived as a shimmering air mass which looks much like the refraction effect caused by hot air passing in front of cold.}}{{desc9=**Combat:** Invisible stalkers attack by using the air itself as a weapon. It is capable of creating a sudden, intense vortex that batters a victim for 4-16 (4d4) points of damage. Such attacks affect a single victim on the same plane as the invisible stalker.\nInvisible stalkers can only be killed on the elemental plane of Air. If attacked on another plane, they automatically return to their home plane when their total hit points are exceeded by the damage they suffered.}}'},
- {name:'Jackal',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Jackal}}RaceData=[w:Jackal, align:N, weaps:none, ac:none, cattr:int=1|mov=12|ac=7|hd=1-4r6|hp=1:4|thac0=20|size=S|attk1=1d2:Bite:0:P]{{subtitle=Creature}}Specs=[Jackal,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Animal (1)}}{{AC=7}}{{Alignment=Neutral}}{{Move=12}}{{Hit Dice=1/2 HD}}{{THAC0=20}}{{Attacks=Bite for 1d2}}{{Size=S}}{{Life Expectancy=8 to 9 years in the wild}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=Jackals are timid scavengers that run from the threat of other predators. When attacking, the jackal darts in to bite its victim and quickly retreats to a safe distance. If more than one jackal is trying to down an animal, they attack in a haphazard fashion with little or no coordination of effort.}}'},
- {name:'Jaguar',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Jaguar}}RaceData=[w:Jaguar, align:N, weaps:none, ac:none, spattk:Can leap up to 30ft, spdef:Only surprised on a 1, cattr:int=2:4|mov=15|ac=6|hd=4+1r4|thac0=17|size=L|attk1=1d3:2 x Front Claws:0:S|attk2=1d8:Bite:0:P|attk3=1+1d4:2 x Rear Claw Rake:1:S|attkmsg=If both front claws successfully hit then both back claws can do rake attacks$$ $$Only valid if both front claws successfully hit. One attempted rake attack for each rear claw|dmgmsg=$$ $$Only valid if both front claws successfully hit]{{subtitle=Creature}}Specs=[Jaguar,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Semi (2 to 4)}}{{AC=6}}{{Alignment=Neutral}}{{Move=15}}{{Hit Dice=4+1 HD}}{{THAC0=17}}{{Attacks=2 x 1d3 front claws, bite for 1d8. If both front claws hit, rake with 2 x rear claws is attempted for 1+1d4 each}}{{Size=L (5ft to 6ft long)}}{{Life Expectancy=12 to 16 years in the wild}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Surprise=Only surprised on a 1}}{{Leap=Can leap up to 30ft after a run-up, e.g. when chasing prey}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=The jaguar is a powerful cat with a deep chest and muscular limbs. Its color ranges from light yellow to brownish red, and it is covered with dark spots.\nThe jaguar inhabits jungles, spending a great deal of time in tree tops. It climbs, swims, and stalks superbly. Jaguars are solitary and territorial, meeting only to mate. If found in a lair, there is a 75% chance there will be 1-3 cubs. Cubs do not fight effectively.}}{{desc9=**Combat:** The jaguar will attack anything that it perceives as a threat. It relies on stealth to close with its prey, often pouncing from above. Their strength and ferocity make jaguars one of the most feared predators of the jungle.}}'},
- {name:'Jermlaine',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Jermlaine}}{{subtitle=Creature}}RaceData=[w:Jermlaine, align:NE, cattr:int=8:10|mov=15|ac=7|size=T|hd=4|hp=1:4|thac0=20|attk1=1d2:Dart:1:P|attk2=1d4:Small pike:3:P|attk3=1d4:Blackjack:3:B|dmgmsg=2% cumulative chance per club hit on trapped opponent of \\lbrak;stunning the victim\\rbrak;\\lpar;!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the victim?¦token_id}¦Stunned¦99¦0¦Stunned by Jermlaine Clubs. What next?¦pummeled\\rpar;but only if the victim is in armor worse than splint mail. **Remember:** detect invisible creatures 50%. Move silently 75% undetectable. Opponent surprise penalty -5, spattk:Try to trap victims or otherwise make them prone. Once trapped or prone 2% cumulative chance per club hit of stunning the victim but only if the victim is in armor worse than splint mail. Detect invisible creatures 50% of the time, spdef:Treated as 4HD monster for saves \\amp magic attacks. Move silently \\amp 75% undetectable. Opponents get -5 penalty on surprise,ns:1],[cl:MI,%:90],[cl:MI,%:7,items:random:1d4],[cl:MI,%:3,items:random:2d3]{{Section=**Attributes**}}{{Intelligence=Average (Genius cunning) (8 to 10)}}{{AC=7}}{{Alignment=Neutral Evil (Lawful tendancies)}}{{Move=15}}{{Hit Dice=4HD for the purposes of saves and magical attacks}}{{Hit Points=1 to 4}}{{THAC0=20}}{{Section1=**Attacks:** Dart for 1d2, Small 1.5ft pike for 1d4, Blackjack to pummel for 1d4 (2% cumulative chance to knock unconsious). Also use acid flasks \\amp flaming oil, so DM can equip with these.}}{{Section2=**Languages:** They speak in high-pitched squeaks and twitters. This speech may be mistaken for the sounds of a bat or rat. They can also converse with all sorts of rats, both normal and monstrous. Each jermlaine has a 10% chance to understand *common, dwarvish, gnomish, goblin,* or *orc* (roll separately for each language).}}{{Size=T, 1ft tall}}{{Life Expectancy=Approx. 35 years}}{{Section3=**Powers**}}{{Section4=None}}{{Section5=**Special Advantages**}}{{Drain Magic=}}{{Infravision=30 yards, and use accute hearing \\amp smell to detect even invisible creatures 50%}}{{Silent \\amp Quick=Making them 75% undetectable, even if listened and watched for}}{{Improved Saves=Jermlaine are treated as 4-Hit Die monsters for purposes of saving throws and magical attacks}}{{Section6=**Special Disadvantages**}}{{Section7=None}}Specs=[Jermlaine,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc8=**Jermlaine:** Jermlaine are a diminutive humanoid race that dwells in tunnels and ambushes hapless adventurers. They are known by a variety of names such as jinxkin or bane-midges.\nJermlaine appear to be tiny humans dressed in baggy clothing and leather helmets. In fact the "clothing" is their own saggy skin and pointed heads. The limbs are knottily muscled. The fingernails and toenails are thick and filthy, although the fingers and toes are very nimble. Their gray-brown, warty hide blends in with natural earth and stone. When they wear rags or scraps as clothing, such items are also camouflage colored.}}{{desc9=**Combat:** Jermlaine are cowards who have made an art of the ambush. They only attack when they feel there is no serious opposition. They prefer to attack injured, ill, or sleeping victims. They avoid directly confronting strong, alert parties, although they may try to injure them out of sheer maliciousness.\nThe jermlaines\' favorite tactic is capturing victims with nets or pits. In little-used passages the creatures prepare pits covered by camouflaged doors or string nets overhead. In more-traveled passages, the jermlaine stretch trip cords. When a victim falls afoul of a trap, the jermlaine swarm over him. Some pummel him with blackjacks while others tie him with ropes and cords. Such beatings have a cumulative 2% chance per blow of causing the victim to lapse into unconsciousness. If a victim is wearing splint, banded, or plate mail, these pummeling attacks are ineffective. Knowing this, the jermlaine attack well-armored victims with acid or flaming oil missiles.}}'},
- {name:'Jermlaine-Elder',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Elder}}RaceData=[w:Jermlaine Elder, align:NE, cattr:int=10, spattk:If can handle a magical item for \\lbrak;1d4\\rbrak;\\lpar;!\\amp#13;\\amp#47;gr 1d4 rounds to drain item\\rpar; rounds can drain the magic unless is an artefact. Detect invisible creatures 50% of the time,ns:1],[cl:MI,%:30,items:random:2d3]{{subtitle=Creature}}%{Race-DB-Creatures|Jermlaine}{{Drain Magic=Has the magical ability to drain the magic from most magical items if he can handle such an object for 1d4 rounds}}{{Section6=**Special Disadvantages**}}{{Section7=None}}Specs=[Jermlaine,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc=**Jermlaine Elder:** Groups of 35 or more jermlaine are accompanied by an elder -- a very old jermlaine with the magical ability to drain the magic from most magical items if he can handle such an object for 1d4 rounds. Artifacts and relics are immune to such attacks.}}'},
- {name:'Ju-Ju-Zombie',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Ju-Ju}}RaceData=[w:Ju-Ju Zombie, align:N, cattr:int=5:7|mov=9|ac=6|size=M|hd=3+12r4|thac0=15|attk1=3d4:Claw:0:S|attkmsg=Remember +1 weapons to hit; Bludgeon \\amp Piercing does half damage. Immune to *Sleep / Charm / hold / mind affecting / magic missile* and *death* spells and all cold / psionics / illusions / and electricity attacks. Fire causes only half damage, spdef:+1 weapons to hit; Bludgeon \\amp Piercing does half damage. Immune to *Sleep / Charm / hold / mind affecting / magic missile* and *death* spells and all cold / psionics / illusions / and electricity attacks. Fire bludgeoning \\amp piercing weapons cause only half damage]{{subtitle=Creature}}%{Race-DB-Creatures|Zombie}{{Intelligence=Low (5-7)}}Specs=[Ju-Ju Zombie,CreatureRace,0H,Zombie]{{AC=6}}{{Alignment=Neutral Evil}}{{Move=9}}{{Hit Dice=3d8+12}}{{THAC0=15}}{{Attack=1 x Claw 3d4, or by any type of weapon}}{{Languages=While having some vestidge of intelligence, Ju-Ju Zombies cannot talk, but understand full-sentence instructions with conditions, and use simple tactics and strategies}}{{Spell Immunity=Immune to all *sleep, charm,* and *hold* spells, *death* magic and poisons, and all forms of cold-based attacks, as well as mind affecting spells and psionics, illusions, and to electricity and magic missiles}}{{Fire Resistance=Fire causes only half damage}}{{Half Damage from B\\ampP=Bludgeoning or piercing weapons inflict only half damage. Edged, slashing weapons cause normal damage}}{{desc8=These creatures are made when a wizard drains the life force from a man-sized humanoid creature with an energy drain spell. Their skin is hard, gray, and leathery. Ju-ju zombies have a spark of intelligence. A hateful light burns in their eyes, as they realize their condition and wish to destroy living things. They understand full-sentence instructions with conditions, and use simple tactics and strategies. Since they became zombies at the moment of death, their bodies tend to be in better condition. Ju-ju zombies use normal initiative rules to determine when they strike. They are dexterous enough to use normal weapons, although they must be specifically commanded to do so. These zombies can hurl weapons like javelins or spears, and can fire bows and crossbows. Their Dexterity allows them to climb walls as a thief (92%) and they strike as a 6 Hit Die monster. Ju-ju zombies are turned as specters.\nThe animating force of a ju-ju zombie is more strongly tied to the Negative Material plane. The result is that only +1 or better magical weapons can harm them. Regardless of the magic on the weapon, edged and cleaving weapons inflict normal damage, while blunt and piercing weapons cause half damage. In addition to normal zombie spell immunities, ju-ju zombies are immune to mind affecting spells and psionics, illusions, and to electricity and magic missiles. Fire causes only half damage.}}{{desc9=}}'},
- {name:'Sea-Horse-Giant',type:'SeaHorseRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Giant-Sea-Horse}{{}}Specs=[Giant Sea Horse,SeaHorseRace,0H,Giant-Sea-Horse]{{}}RaceData=[w:Giant-Sea-Horse]{{}}'},
+ avatar:'https://files.d20.io/images/241737383/GL25pkAS2z5JJ4S9cMKkjw/max.png?1629918721',
+ version:2.06,
+ db:[{name:'Fire-Elemental',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Fire Elemental}}{{subtitle=Creature}}Specs=[Elemental,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low (5-7)}}{{AC=2}}{{Alignment=Neutral}}{{Move=12}}{{Hit Dice=8, 12, or 16}}{{THAC0=13, 9, or 5}}{{Attack=1 x 3d8 (touched objects save vs. magic fire at -2 penalty. Fire using creatures take 1 less damage per dice)}}{{Languages=They rarely speak, but their voices can be heard in the crackle and hiss of a large fire}}{{Size=L to H, [7+1d8](!\\amp#13;\\amp#47;r 7+1d8 feet height)feet,}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Special Defense=Only hit by +2 or better weapons}}RaceData=[w:Fire Elemental, cattr:int=5:7|ac=2|mov=12|size=L|hd=8|thac0=13|attk1=3d8:Flame Lash:0:B|attk2=\\lbrak;\\lbrak;{1d8-1\\amp#44;1d8-1\\amp#44;1d8-1\\amp#44;{1}\\amp#44;{1}\\amp#44;{1}\\rbrc;kh3\\rbrak;\\rbrak;:vs. Fire-using:0:B,spdef:+2 weapon or better to hit]{{Section9=**Description**}}{{desc=Fire elementals can be conjured in any area containing a large open flame. To provide a fire elemental with an adequate shell of Prime Material flame, a fire built to house an elemental should have a diameter of at least six feet and reach a minimum of four feet into the air. On the Prime Material Plane, a fire elemental appears as a tall sheet of flame.\nThe fire elemental will always appear to have two armlike appendages, one on each side of its body. These arms seem to flicker back into the creature\'s flaming body, only to spring out from its sides seconds later. The only facial features of a fire elemental are two large glowing patches of brilliant blue fire, which seem to function as eyes for the elemental}}{{desc1=Because they resent being conjured to this plane, fire elementals are fierce opponents who will attack their enemies directly and savagely, taking what joy they can in burning the weak creatures and objects of the Prime Material to ashes. In combat, a fire elemental lashes out with one of its ever-moving limbs, doing 3-24 points of damage. Any flammable object struck by the fire elemental must save versus magical fire at a -2 or immediately begin to burn.\nFire elementals do have some limitations on their actions in the Prime Material plane. They are unable to cross water or non-flammable liquids. Often, a quick dive into a nearby lake or stream is the only thing that can save a powerful party from certain death from a fire elemental. Also, because their natural abilities give them some built-in resistance to flame-based attacks, creatures with innate fire-using abilities, like red dragons, take less damage from a fire elemental\'s attack. The elemental subtracts 1 point from each die of damage it does to these creature (to a minimum of 1 point of damage per die)}}'},
+ {name:'Fire-Giant-AC-1',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{prefix=Fire }}{{title=Giant}}{{name= AC-1}}RaceData=[w:Fire Giant AC-1, align:LE, ac:none, cattr:int=5:10|mov=12|ac=-1|hd=15+1d4+1r1|thac0=5|tohit=+4|dmg=+10|size=H|attk1=1d8:Fist:0:B|attkmsg=Remember immune to non-magical fire \\amp red dragon breath. Resistant to magical fire which does -1HP per die damage, spdef:Immune to non-magical fire and red dragon breath. Resistant to magical fire which does -1HP per die damage. Can catch rocks hurled at them 50% of the time, ns:1],[cl:WP,both:Fire-Giant-Sword,items:FG-Rock:1d4+1],[cl:MI,%:65,items:random:1],[cl:MI,%:35,items:random:1d2]{{subtitle=Creature}}Specs=[Fire-Giant-AC-1,CreatureRace,2H,Creature]{{Section=**Attributes**}}{{Intelligence=Low to Average (5-10)}}{{AC=-1 from banded mail and round metal helmets. Natural AC is 5}}{{Alignment=Lawful Evil, often living in well organised military groups}}{{Move=12}}{{Hit Dice=15HD +1d4+1}}{{THAC0=5}}{{Section1=**Attacks:** +4 on ToHit rolls from strength. 1 x Fist for 1d8 HP damage, or using a Fire Giant Two-Handed Sword for 2d10 plus strength bonus of +10. Throw rocks 3 to 200 yards doing 2d10 damage}}{{Languages=*Fire Giant* and *Giant Common*}}{{Size=H, 18ft tall, but stocky like a huge dwarf}}{{Life Expectancy=About 350 years}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Fire Immunity=Immune to nonmagical fire and heat, as well as red dragon breath}}{{Magical Fire Resistance=Resistant to all types of magical fire; such attacks inflict -1 hit point per die of damage}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc7=**Fire giants:** are brutal, ruthless, and militaristic.\nThey are tall, but squat, resembling huge dwarves. An adult male is 18 feet tall, has a 12 foot chest, and weighs about 7,500 pounds. Fire giants have coal black skin, flaming red or bright orange hair, and prognathous jaws that reveal dirty ivory or yellow teeth.\nThey carry their belongings in huge sacks. A typical fire giant\'s sack contains 2-5 (1d4+1) throwing rocks, the giant\'s wealth, a tinderbox, and 3-12 (3d4) common items. Everything they own is battered, filthy, and smelly, making it difficult to identify valuable items.}}{{desc8=A fire giant\'s natural Armor Class is 5. Warriors usually wear banded mail and round metal helmets (AC -1).}}{{desc9=**Combat:** They usually fight in disciplined groups, throwing rocks until they run out of ammunition or the opponent closes. Fire giants often wait in ambush at lava pools or hot springs, hurling heated rocks at victims for an extra 1-6 points of damage.\nWarriors favor huge two-handed swords. A fire giant\'s oversized weapons do double normal (man-sized) damage to all opponents, plus the giant\'s strength bonus. Thus, a fire giant two-handed sword does 2-20 (2d10) +10 points of damage.\nAdult fire giants can hurl rocks for 2-20 (2d10) points of damage. Their minimum range is 3 yards while their maximum is 200 yards. They can catch similar large missiles 50% of the time.}}'},
+ {name:'Fire-Giant-AC5',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Fire Giant AC5,cattr:ac=5|mov=15]{{}}Specs=[Fire-Giant-AC5,CreatureRace,2H,Fire-Giant-AC-1]{{}}%{Race-DB-Creatures|Fire-Giant-AC-1}{{name= AC5}}{{AC=Not wearing any armour, so natural AC of 5}}{{desc8=Fire giants\' natural Armor Class is 5, when not wearing any armour. This is rare, as most wear banded mail and round metal helmets (AC -1)}}'},
+ {name:'Fire-Giant-Juvenile-1',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Fire Giant Juvenile 3,cattr:hd:12+1d4+1|tohit=+1|dmg=+7]{{}}Specs=[Fire-Giant-Juvenile-3,CreatureRace,2H,Fire-Giant-Juvenile-3]{{}}%{Race-DB-Creatures|Fire-Giant-Juvenile-1}{{name= Juvenile-3}}'},
+ {name:'Fire-Giant-Juvenile-2',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Fire Giant Juvenile 2,cattr:hd:13+1d4+1|tohit=+2|dmg=+8]{{}}Specs=[Fire-Giant-Juvenile-2,CreatureRace,2H,Fire-Giant-Juvenile-3]{{}}%{Race-DB-Creatures|Fire-Giant-Juvenile-1}{{name= Juvenile-2}}'},
+ {name:'Fire-Giant-Juvenile-3',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Fire Giant Juvenile 1,cattr:ac=5|hd:14+1d4+1|tohit=+3|dmg=+9,ns:=1],[cl:WP,both:Fire-Giant-Sword]{{}}Specs=[Fire-Giant-Juvenile-1,CreatureRace,2H,Fire-Giant-AC-1]{{}}%{Race-DB-Creatures|Fire-Giant-AC-1}{{name= Juvenile-1}}{{AC=Not wearing any armour, so natural AC of 5}}{{desc8=Fire giants\' natural Armor Class is 5, when not wearing any armour. As a juvenile, they are still growing so can\'t have armour fitted.)}}'},
+ {name:'Fire-Giant-Shaman-L7',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Fire Giant Shaman L7,cattr:cl=pr:fire-giant-shaman|lv=7]{{}}Specs=[Fire-Giant-Shaman-L7,CreatureRace,2H,Fire-Giant-AC-1]{{}}%{Race-DB-Creatures|Fire-Giant-AC-1}{{name= Shaman}}{{Section3=**Shaman:** This Fire Giant is a Shaman that can cast spells of a number of priest spheres of magic: *Elemental, Healing, Charm, Protection, Divination,* or *Combat*}}{{desc6=**Fire Giant Shaman:** There is a 20% chance that any band of fire giants will have a shaman (80%). If the group is lead by a king, there is an 80% chance of a spell caster. Fire giant shamans are priests of up to 7th level. A shaman can cast normal or reversed spells from the Elemental, Healing, Charm, Protection, Divination, or Combat spheres.}}'},
+ {name:'Fire-Giant-Witch-Doctor',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Fire Giant Witch Doctor,sps:any,cattr:cl=pr:fire-giant-shaman/mu:fire-giant-witch-doctor|lv=7/3,ns:1],[cl:MU,lv:1,w:random|random|random|Alarm|Charm-Person|Dancing-Lights|Grease|Hold-Portal|Magic Missile|Phantasmal-Force|Sleep|Spook],[cl:MU,lv:2,w:random|random|random|Flaming-Sphere|Glitterdust|Invisibility|Melfs-Acid-Arrow|Mirror-Image|Misdirection|Pyrotechnics|Ray-of-Enfeablement|Stinking-Cloud|Web],[cl:MI,%:90],[cl:MI,%:10,items:random:2d4]{{}}Specs=[Fire-Giant-Witch-Doctor,CreatureRace,2H,Fire-Giant-AC-1]{{}}%{Race-DB-Creatures|Fire-Giant-AC-1}{{name= Witch Doctor}}{{Section3=**Witch Doctor:** This Fire Giant is a Witch Doctor that can cast spells of a number of wizard spells, and priest spheres of magic: *Elemental, Healing, Charm, Protection, Divination,* or *Combat*}}{{desc6=**Fire Giant Witch Doctor:** There is a 20% chance that any band of fire giants will have a shaman (80%) or witch doctor (20%). If the group is lead by a king, there is an 80% chance of a spell caster. Fire giant witch doctors are priest/wizards of up to 7th/3rd level; they prefer spells that can detect or thwart intruders.}}'},
+ {name:'Fire-Mephit',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Imp - Fire Mephit}}{{subtitle=Creature}}RaceData=[w:Fire Mephit, align:LE|NE|CE, ac:none, weaps:none, cattr:int=8:10|mov=12|fly=24(B)|ac=5|size=M|hd=3+1|thac0=17|attk1=1d3:Claw1:0:S|attk2=1d3:Claw2:0:S|dmgmsg=A successful claw hit also does an additional \\lbrak;\\lbrak;1\\rbrak;\\rbrak;HP of heat damage, spattk:Claws do additional 1HP heat damage. 2 breath weapons: Flame Jet \\amp Flame Fan. Can cast as Power *Heat Metal* and *Magic Missile x 2* once a day, spdef:*Gate* in as Power another mephit 1/hour,ns:4],[cl:PW,w:Fire Mephit Flame Breath,sp:0,pd:3],[cl:PW,w:heat-metal,sp:5,pd:1],[cl:PW,w:magic-missile,sp:1,pd:1],[cl:PW,w:gate-mephit,sp:0,pd:24]{{Section=**Attributes**}}{{Intelligence=Average (8:10)}}{{AC=5}}{{Alignment=Any Evil}}{{Move=12, FL24(B)}}{{Hit Dice=3+2}}{{THAC0=17}}{{Attacks=2 x Claw for 1d3 and 1HP additional heat damage}}{{Languages=*Mephit*}}{{Size=M, 5ft tall}}{{Life Expectancy=Short!}}{{Section1=**Powers**}}{{Section2=Breath weapons: *Flame Jet* \\amp *Fan of Flame*. Spells as Powers: *Heat Metal*, *Magic Missile x 2* each 1/day. *Gate Mephit* 1/hour}}{{Section3=**Special Advantages**}}{{Section4=**Touching Skin:** Touching a Fire Mephit causes 1HP heat damage (no save)}}{{Section7=**Special Disadvantages**}}{{Section8=None}}Specs=[Imp-Fire-Mephit,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc=**Fire Mephit:** The most mischievous of all mephits, these fiends play terrible pranks on other mephits (such as pushing lava mephits into water and watching them harden) and on their victims.\nFire Mephit breath weapons have two forms. The first is a flame jet 15 feet long and 1-foot wide. This jet automatically hits one target, of the mephit\'s choosing, for ld8+1 points of damage (half if saving throw is successful). The second form is a fan of flame covering a 120 arc directly in front of the mephit to a distance of 5 feet. Any creature in the arc suffers 4 points of damage, no saving throw allowed.}}{{desc8=Mephits are nasty little messengers created by powerful lower planes creatures. They are evil and malicious by nature and appear on the Prime Material Plane only to perform evil deeds. Six types of mephits are known: fire, ice, lava, mist, smoke, and steam. Each is created from the substance for which it is named.\nMephits appear as thin, 5-foot humanoids with wings. Their faces have exaggerated features, including hooked noses, pointed ears, wide eyes, and protruding chins. Their skin continually oozes the stuff from which they were made. Mephits speak a common mephit tongue.}}{{desc9=**Combat:** In battle, mephits attack with either clawed hands or breath weapons. Damage is variable depending on the type of mephit encountered. All mephits have the ability to gate in other mephits; the type gated in and percentage chance for success varies with the mephit initiating the gating.}}'},
+ {name:'Flesh-Golem',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Golem}}{{prefix=Flesh}}RaceData=[w:Flesh Golem, align:N, cattr:int=2:4|mov=8|ac=9|size=L|hd=9|thac0=11|attk1=2d8:Right Claw:0:B|attk2=2d8:Left Claw:0:B, spattk:Strength 19 for lifting / throwing / breaking down doors only, spdef:Only hit by magic weaps. Fire \\amp cold only \\lbrak;slow for 2d6 rounds\\rbrak;\\lpar;!rounds ~~target-nosave caster¦@{selected¦token_id}¦slow¦2d6¦-1¦Slowed by fire or cold¦snail\\rpar;. Electical attacks restore HP rather than damage. All other spells are ignored and have no effect],{{subtitle=Creature}}{{Section=**Attributes**}}{{Intelligence=Semi- (2 to 4)}}{{AC=9, natural skin}}{{Alignment=Neutral}}{{Move=8}}{{Hit Dice=9}}{{THAC0=11}}{{Attack=Fists for 2d8 each. Does not use weapons of any type even if commanded to.}}{{Languages=None. Can make a hoarse roar}}{{Size=L, 7.5ft tall}}{{Life Expectancy=Until destroyed}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Strength=Flesh golems have a strength of 19 for purposes of lifting, throwing or breaking down doors.}}{{Resistance=Fire and cold based spells merely slow them for 2-12 (2d6) rounds. Any electrical attack restores 1 hit point for each die of damage it would normally have done. All other spells are ignored by the creature.}}{{Invulnerability=Only hit by magical weapons}}{{Section6=**Special Disadvantages**}}{{Section7=Spirit is not bound strongly, resulting in a 1% cumulative chance per round of combat, calculated independently for each fight, that it will break free of its master.Master has a 10% chance per round of regaining control. Must be within 60 feet and the creature must be able to see and hear its master. Its creator just has to talk to it forcefully and persuasively, to convince it to obey.}}Specs=[Flesh Golem,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc8=The flesh golem stands a head and a half taller than most humans and weighs almost 350 pounds. It is made from a ghoulish collection of stolen human body parts, stitched together to form a single composite human body. Its skin is the sickly green or yellow of partially decayed flesh. A flesh golem smells faintly of freshly dug earth and dead flesh. No natural animal, such as a dog, will willingly track a flesh golem. It wears whatever clothing its creator desires, usually just a ragged pair of trousers. It has no possessions, and no weapons. The golem can not speak, although it can emit a hoarse roar of sorts. It walks and moves with a stiff jointed gait, as if it is not in complete control over its body parts.}}{{desc9=**Combat:** The lesser golems are mindless in combat. They follow the orders of their master explicitly, and are incapable of any strategy or tactics. They are emotionless in combat, and cannot be easily provoked (unless they have broken control and gone berserk).}}'},
+ {name:'Flind',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Flind}}RaceData=[w:Flind, align:LE, weaps:club|flindbar, ac:leather|padded|studded|ring-mail|brigandine|scale-mail|hide|chain-mail, cattr:int=8:10|mov=12|ac=10|size=M|hd=2+3r3|thac0=17|tohit=+1|attk1=1d6:Club:4:B, spattk:Favour the *Flindbar*: equip this as a weapon from the weapons database. A Flindbar can disarm an opponent if they fail a *save vs. wand*,ns:1],[cl:WP,prime:Flindbar,offhand:Dagger],[cl:MI,%:90],[cl:MI,%:10,items:random:1]{{subtitle=Creature}}{{Section=**Attributes**}}{{Intelligence=Average (8 to 10)}}{{AC=10, up to AC5 with armour}}{{Alignment=Lawful Evil}}{{Move=12}}{{Hit Dice=2+3}}{{THAC0=17}}{{Attack=Club for 1d6 (75%), or *Flindbar* for 2 attacks/round for 1d4 (25%) - both can be equipped from the weapons database}}{{Languages=*Flind, Gnoll,* and many also speak *flind, troll, orc,* or *hobgoblin*}}{{Size=M, 6-7ft tall}}{{Life Expectancy=On average 35 years}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Strength=Due to their great strength, Flinds gain +1 on their attack rolls}}{{Section6=**Special Disadvantages**}}{{Section7=None}}Specs=[Flind,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc8=The flind is similar to a gnoll in body style, though it is a little shorter, and broader. They are more muscular than their cousins. Short, dirty, brown and red fur covers their body. Their foreheads do not slope back as far, and their ears are rounded, but still animal like. }}{{desc9=**Combat:** Flinds use clubs (75%) which inflict 1-6 points of damage and flindbars (25%) which do 1-4 points of damage. A flindbar is a pair of chain-linked iron bars which are spun at great speed. A flind with a flindbar can strike twice per round. Each successful hit requires the victim to save vs. wands or have his weapon entangled in the chain and torn from his grasp by the flindbar. Due to their great strength, flinds get a +1 on their attack rolls.\nFlinds are regarded with reverence and awe by gnolls. Flind leaders are 3+3 Hit Dice, at least 13 intelligence and 18 charisma to gnolls (15 to flinds), and always use flindbars.}}'},
+ {name:'Flind-Leader',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Flind}}RaceData=[w:Flind Leader, cattr:int=13:14|ac=5|hd=3+3r3|thac0=17|attk1=1d4:Flindbar:3:B]{{subtitle=Creature}}Specs=[Flind Leader,CreatureRace,0H,Flind]{{}}%{Race-DB-Creatures|Flind}{{Intelligence=High (at least 13)}}{{AC=5 (preset - can be improved with magical armour if equipped)}}{{Hit Dice=3+3}}{{THAC0=17}}{{Attack=Always use *Flindbar* for 2 attacks/round for 1d4 - equip from the weapons database}}Specs=[Flind Leader,CreatureRace,0H,Flind]{{desc=**Flind Leaders:** Flind leaders are 3+3 Hit Dice, at least 13 intelligence and 18 charisma to gnolls (15 to flinds), and always use flindbars.}}'},
+ {name:'Flind-ac5',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Flind}}RaceData=[w:Flind ac5, cattr:ac=5]{{subtitle=Creature}}Specs=[Flind ac5,CreatureRace,0H,Flind]{{}}%{Race-DB-Creatures|Flind}{{AC=5 (preset - can be improved with magical armour if equipped)}}'},
+ {name:'Fremlin',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{subtitle=Creature}}RaceData=[w:Fremlin, align:CN, cattr:int=8:10|fly=12 (B)|ac=6|size=T|hd=3+6r3|mr=0|mw=+1|attkmsg=Only hit by magical weapons. No magic resistance, spdef:Only hit by magical weapons. No magic resistance],[cl:MI,items:random:1]{{}}Specs=[Fremlin,CreatureRace,0H,Gremlin]{{}}%{Race-DB-Creatures|Gremlin}{{title=Fremlin}}{{Intelligence=Average (8 to 10)}}{{AC=6}}{{Alignment=Chaotic Neutral}}{{Move=6, Fl 12(B)}}{{Size=T, 1ft tall}}{{Hit Dice=3+6}}{{Magic Resistance=No magic resistance}}{{desc8=Often mistaken for imps, fremlins are a type of gremlin, small winged goblinoids. There are many varieties of gremlins, and most are chaotic and mischievous. These friendly gremlins are quite harmless. They tend to be plump, whiny, and lazy, but otherwise look like small, slate colored gremlins. Their ears are very large and pointed, giving them a 65% chance to hear noise. A pair of bat-like wings enables them to fly or glide. Fremlins never wear clothing or ornamentation.}}{{desc9=**Combat:** Occasionally, fremlins become tolerable companions, if they take a liking to someone and are well fed and entertained. Even in this case, they never assist in combat and may in fact hinder it by giving away the location of hiding characters or making other such blunders.}}'},
+ {name:'Freshwater-Troll',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Freshwater Troll (Scrag)}}{{subtitle=Creature}}Specs=[Freshwater Troll,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low (5-7)}}{{AC=3}}{{Alignment=Chaotic Evil}}{{Move=3, Sw12}}{{Hit Dice=5+5}}{{THAC0=15}}{{Attacks=2 x Claw 1d4+1, 1 x Bite 3d4}}{{Languages=Trolls have no language of their own, using "trollspeak", a guttural mishmash of common, giant, goblin, orc, and hobgoblin. Trollspeak is highly transient and trolls from one area are only 25% likely to be able to communicate with trolls from another.}}{{Size=L 8ft tall}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Regeneration=Only in fresh water, 3 rounds after 1st blood, regenerates at 3HP per round}}{{Section4=**Special Advantages**}}{{Infravision=90 foot}}{{Priest Spells=}}RaceData=[w:Freshwater Troll, align:CE, cattr:int=5:7|ac=3|mov=3|swim=12|hd=5+5r3|regen=3|thac0=15|size=L|dmg=+8|attk1=1+1d4:Claw:0:S|attk2=1+1d4:Claw:0:S|attk3=3d4:Bite:1:P|attkmsg=Remember to start \\lbrak;Regenerating\\rbrak;\\lpar;!rounds ~~target caster¦`{selected¦token_id}¦regeneration¦99¦0¦Regenerating at `{selected¦conregen} per round¦strong\\rpar; 3 rounds after take damage ***and*** in fresh water, spdef:Regenerate at 3HP per round *if* in fresh water,ns:1],[cl:PW,w:regenerate,sp:0,pd:-1],[cl:MI,%:80],[cl:MI,%:20,items:random:1d2]{{Section9=**Description**}}{{desc8=These gilled trolls, also called scrags or river trolls, are the most loathsome of all the trolls. River trolls, as their name implies, travel the waterways in search of victims. Their arms are thin and frail but their mouths are wide and lined with dozens of needle-sharp fangs. Their color ranges from blue-green to olive. Scrags have all of the abilities of normal trolls, but they only regenerate when immersed in fresh water. Scrags can survive out of water for one hour and often come ashore in search of prey. River trolls devour anything they catch, but prefer humanoids and have a fondness for dwarves.\nScrags are devious hunters and often carry a few baubles with them. They lay gems near the water\'s edge and wait for someone to spot them and reach down. Other traps include burying themselves in the sand, in shallow water, and waiting to be stepped on or tangling the rudders of small boats. River trolls occasionally nest beneath bridges or near ferry boats, demanding a toll in exchange for passage. The toll varies, but averages the equivalent of one cow per week, per troll. Livestock and children frequently disappear when river trolls are near.}}'},
+ {name:'Freshwater-Troll-Shaman',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{subtitle=Creature}}RaceData=[w:Freshwater Troll Shaman, cattr:int=7|cl=pr:scrag-shaman|lv=7,ns:1],[cl:MI,%:5,items:random:2d2]{{Intelligence=Low (7)}}%{Race-DB-Creatures|Freshwater-Troll}{{AC=3}}Specs=[Freshwater-Troll Shaman,CreatureRace,0H,Freshwater-Troll]{{name=Scrag Shaman Chieftain}}{{Priest Spells=Cast at 7th level: Charm, Divination, Elemental (Water), Sun (Darkness only), and Weather.}}{{desc=Trolls live in small packs of 3 to 12 trolls led by a dominant female who acts as shaman/chieftain. She casts priest spells at 7th level; spheres typically include Charm, Divination, Sun (Darkness only), and Weather, and Scrag Shamen also get Elemental (water) spells. Leadership is only retained by combat, so fights for pack control are frequent. Often trolls rend each other limb from limb, but these battles are never fatal. Still, it is the custom of trolls to toss the loser\'s head a great distance from the fight scene, and frequently losers must sit and stew for a week until their new head grows in.\nThe pack chieftain\'s duties are few. She leads the trolls on nightly forages, loping along, sniffing the air for prey. If a scent is found, the trolls charge, racing to get there first, and letting out a great cry once prey is spotted. In return for being the hunt leader, the shaman gets her choice of mates in the pack. Females give birth to a single troll about once every five years.}}'},
+ {name:'Frost-Giant-AC0',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{prefix=Frost }}{{title=Giant}}{{name= AC0}}RaceData=[w:Frost Giant AC0, align:CE, ac:none, cattr:int=5:10|mov=12|ac=0|hd=14+1d4r1|thac0=5|tohit=+4|dmg=+9|size=H|attk1=1d8:Fist:0:B|attkmsg=Remember immune to Cold, spdef:Immune to cold. Can catch rocks hurled at them 40% of the time, ns:1],[cl:WP,prime:Frost-Giant-Battle-Axe,items:FG-Rock:1d4+1],[cl:MI,%:80,items:random:1],[cl:MI,%:20,items:random:1d2]{{subtitle=Creature}}Specs=[Frost-Giant-AC0,CreatureRace,2H,Creature]{{Section=**Attributes**}}{{Intelligence=Low to Average (5-10)}}{{AC=0 - Warriors usually wear chain mail and metal helmets decorated with horns or feathers. Natural AC is 5}}{{Alignment=Chaotic Evil, often living in small groups}}{{Move=12 (15 without armour)}}{{Hit Dice=14HD +1d4}}{{THAC0=5}}{{Section1=**Attacks:** +4 on ToHit rolls from strength. 1 x Fist for 1d8 HP damage, or using a Frost Giant Battle Axe for 2d8 plus strength bonus of +9. Throw rocks 3 to 200 yards doing 2d10 damage}}{{Languages=*Frost Giant* and *Giant Common*}}{{Size=H, 21ft tall}}{{Life Expectancy=About 250 years}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Cold Immunity=Immune to all forms of cold}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc7=**Frost giants:** have a reputation for crudeness and stupidity. This reputation is deserved, but frost giants are crafty fighters.\nFrost giants have muscular, roughly human builds. The typical adult male is 21\' tall and weighs about 8,000 pounds. Females are slightly shorter and lighter, but otherwise identical to males. Frost giants have snow-white or ivory skin. Their hair is light blue or dirty yellow, with matching eyes.\nFrost giants carry their belongings in huge sacks. A typical frost giant\'s sack contains 2-5 (1d4+1) throwing rocks, the giant\'s wealth, and 3-12 (3d4) mundane items. Everything in a giant\'s bag is old, worn, dirty, and smelly, making the identification of any valuable items difficult.}}{{desc8=A frost giant\'s natural Armor Class is 5. Warriors usually wear chain mail and metal helmets decorated with horns or feathers (AC 0). They also wear skins and pelts, along with any jewelry they own.}}{{desc9=**Combat:** Frost giants will start combat at a distance, throwing rocks until they run out of ammunition, or the opponent closes. One of their favorite strategies is to ambush victims by hiding buried in the snow at the top of an icy or snowy slope where opponents will have difficulty reaching them.\nWarriors favor huge battle axes. A frost giant\'s oversized weapons do double normal (man-sized) damage to all opponents, plus the giant\'s strength bonus. Thus, a frost giant battle axe does 2-16 (2d8) +9 points of damage.\nAdult frost giants can hurl rocks for 2-20 (2d10) points of damage. Their minimum range is 3 yards while their maximum is 200 yards. They can catch similar large missiles 40% of the time.}}'},
+ {name:'Frost-Giant-AC5',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant AC5,cattr:ac=5|mov=15]{{}}Specs=[Frost-Giant-AC5,CreatureRace,2H,Frost-Giant-AC0]{{}}%{Race-DB-Creatures|Frost-Giant-AC0}{{name= AC5}}{{AC=Not wearing any armour, so natural AC of 5}}{{desc8=Frost giants\' natural Armor Class is 5, when not wearing any armour. This is rare, as most wear chain mail and metal helmets decorated with horns or feathers (AC 0).}}'},
+ {name:'Frost-Giant-Jarl',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Jarl,cattr:ac=-2|hd=14+1d4r5, ns:=1],[cl:WP,prime:Frost-Giant-Battle-Axe+2,items:FG-Rock:1d4+1],[cl:MI,%:70,items:random:1],[cl:MI,%:20,items:random:1d2],[cl:MI,%:10,items:random:1d4]{{}}Specs=[Frost-Giant-Jarl,CreatureRace,2H,Frost-Giant-AC0]{{}}%{Race-DB-Creatures|Frost-Giant-AC0}{{name= Jarl}}{{desc6=**Frost Giant Jarl:** A chieftain who commands 20 or more giants is called a jarl. Jarls always will have better than normal armor and a weapon of +1 to +3 enchantment.}}'},
+ {name:'Frost-Giant-Juvenile-1',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Juvenile 1,cattr:ac=5|hd:13+1d4|thac0=7|tohit=+3|dmg=+8,ns:=1],[cl:WP,both:Frost-Giant-Battle-Axe]{{}}Specs=[Frost-Giant-Juvenile-1,CreatureRace,2H,Frost-Giant-AC0]{{}}%{Race-DB-Creatures|Frost-Giant-AC0}{{name= Juvenile-1}}{{AC=Not wearing any armour, so natural AC of 5}}{{desc8=Frost giants\' natural Armor Class is 5, when not wearing any armour. This is rare, as most wear chain mail and metal helmets decorated with horns or feathers (AC 0).}}'},
+ {name:'Frost-Giant-Juvenile-2',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Juvenile 2,cattr:hd:12+1d4|tohit=+3|dmg=+7]{{}}Specs=[Frost-Giant-Juvenile-2,CreatureRace,2H,Frost-Giant-Juvenile-1]{{}}%{Race-DB-Creatures|Frost-Giant-Juvenile-1}{{name= Juvenile-2}}'},
+ {name:'Frost-Giant-Juvenile-3',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Juvenile 3,cattr:hd:11+1d4|thac0=9|tohit=+3|dmg=+6]{{}}Specs=[Frost-Giant-Juvenile-3,CreatureRace,2H,Frost-Giant-Juvenile-1]{{}}%{Race-DB-Creatures|Frost-Giant-Juvenile-1}{{name= Juvenile-3}}'},
+ {name:'Frost-Giant-Shaman-L3',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Shaman L3,cattr:cl=pr:frost-giant-shaman|lv=3,ns:1],[cl:MI,%:10,items:random:1d4]{{}}Specs=[Fire-Giant-Shaman-L3,CreatureRace,2H,Frost-Giant-AC0]{{}}%{Race-DB-Creatures|Frost-Giant-Shaman-L7}'},
+ {name:'Frost-Giant-Shaman-L5',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Shaman L5,cattr:cl=pr:frost-giant-shaman|lv=5],[cl:MI,%:10,items:random:1d4]{{}}Specs=[Fire-Giant-Shaman-L5,CreatureRace,2H,Frost-Giant-AC0]{{}}%{Race-DB-Creatures|Frost-Giant-Shaman-L7}'},
+ {name:'Frost-Giant-Shaman-L7',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Shaman L7,cattr:cl=pr:frost-giant-shaman|lv=7],[cl:MI,%:10,items:random:2d3]{{}}Specs=[Fire-Giant-Shaman-L7,CreatureRace,2H,Frost-Giant-AC0]{{}}%{Race-DB-Creatures|Frost-Giant-AC0}{{name= Shaman}}{{Section3=**Shaman:** This Frost Giant is a Shaman that can cast spells of a number of priest spheres of magic: *healing, charm, protection, divination*, or *weather*}}{{desc6=**Frost Giant Shaman:** There is a 20% chance that any band of frost giants will have a shaman (80%) or witch doctor (20%). If the group is led by a jarl, there is an 80% chance for a spell caster. Frost giant shamans are priests of up to 7th level. A shaman can cast normal or reversed spells from the *healing, charm, protection, divination*, or *weather* spheres. Frost giant witch doctors are priest/wizards of up to 7th/3rd level; they prefer spells that can bewilder and confound other giants. Favorite spells include: *unseen servant, shocking grasp, detect magic, ventriloquism, deeppockets, ESP, mirror image,* and *invisibility*.}}'},
+ {name:'Frost-Giant-Witch-Doctor-L3-7',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Witch Doctor,sps:any,cattr:cl=pr:frost-giant-shaman/mu:frost-giant-witch-doctor|lv=7/3,ns:1],[cl:MU,lv:1,w:random|random|random|Detect-Magic],[cl:MU,lv:2,w:random|ESP|Mirror-Image|random|random],[cl:MI,%:20,items:random:2d4]{{}}Specs=[Frost-Giant-Witch-Doctor,CreatureRace,2H,Frost-Giant-AC0]{{}}%{Race-DB-Creatures|Frost-Giant-AC0}{{name= Witch Doctor}}{{Section3=**Witch Doctor:** This Frost Giant is a Witch Doctor that can cast spells of a number of wizard spells, and priest spheres of magic:*healing, charm, protection, divination*, or *weather*}}{{desc6=**Frost Giant Witch Doctor:** There is a 20% chance that any band of frost giants will have a shaman (80%) or witch doctor (20%). If the group is led by a jarl, there is an 80% chance for a spell caster. Frost giant shamans are priests of up to 7th level. A shaman can cast normal or reversed spells from the *healing, charm, protection, divination*, or *weather* spheres. Frost giant witch doctors are priest/wizards of up to 7th/3rd level; they prefer spells that can bewilder and confound other giants. Favorite spells include: *unseen servant, shocking grasp, detect magic, ventriloquism, deeppockets, ESP, mirror image,* and *invisibility*.}}'},
+ {name:'Galtrit',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{subtitle=Creature}}RaceData=[w:Galtrit, cattr:int=8:10|ac=2|size=T|hd=1-6|hp=2|thac0=20|mr=0|mw=0|dmgmsg=Anesthetic in saliva prevents victims feeling the bite. Automatically sucks \\lbrak;1HP of blood/round\\rbrak;\\lpar;!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the victim?¦token_id}¦Galtrit blood drain_Feeling drained¦100¦-10¦Seem to be getting weaker... not sure why...¦arrowed\\rpar; for a full turn, if undisturbed. For each 4HP blood loss victim loses 1 Constitution. 3 Con lost victim faints. See Specials. Hit by any weapon. No magic resistance, spattk:Only detected on 1 in 8 (Elves 1 in 6). If not detected gain +3 on To Hit. Once locked on galltrits suck 1HP of blood per round for a full turn if undisturbed. If challenged in any way the galltrits flee. This loss of blood reduces the victim\'s Constitution by 1 point for every 4 hit points of blood lost. If the victim loses 3 or more points of Constitution usually due to multiple galltrits they faint from the sudden blood loss. It takes two full turns to awaken and two weeks to regain the lost Constitution points, spdef:Nil]{{}}%{Race-DB-Creatures|Gremlin}{{title=Galtrit}}{{Intelligence=Average (8 to 10)}}{{AC=2}}{{Size=T, 6ins tall}}{{Alignment=Chaotic Evil}}{{Hit Dice=1-6 (2HP)}}{{Magic Resistance=No magic resistance}}{{Surprise=Detected only on 1 in 8 roll (Elves 1 in 6). If win surprise, gain +3 on attack roll}}Specs=[Galtrit,CreatureRace,0H,Gremlin]{{desc8=**Galtrit:** These nasty little stone-gray creatures live in areas of dung, carrion, or offal. Because of their small size and coloration, they are detected only on a 1 in 8 chance (1 in 6 for elves).}}{{desc9=**Combat:** They attack anything that disturbs them. Galltrit attempt to gain surprise and bite (with a +3 bonus to the attack roll if they have surprise) somewhere unobtrusive. An anesthetic in their saliva prevents their victims from feeling the bite, rather like a vampire bat.\nOnce locked on, galltrits suck 1 hit point of blood per round for a full turn, if undisturbed. If challenged in any way, the galltrits flee. This loss of blood reduces the victim\'s Constitution by 1 point for every 4 hit points of blood lost. If the victim loses 3 or more points of Constitution, usually due to multiple galltrits, he faints from the sudden blood loss. It takes two full turns to awaken and two weeks to regain the lost Constitution points.}}'},
+ {name:'Gelatinous-Cube',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Gelatinous Cube}}RaceData=[w:Gelatinous Cube, align:N, cattr:int=0|mov=6|ac=8|size=L|hd=4|thac0=17|attk1=2d8:Paralysing Strike:0:SPB|dmgmsg=On a successful hit press \\lbrak;save vs paralysis\\rbrak;\\lpar;!rounds --target-save single¦@{selected¦token_id}¦\\at;{target¦Select Target¦token_id}¦paralysis¦5d4¦-1¦Paralysed by a Gelatinous Cube¦padlock¦svpar\\clon;+0\\rpar;, spattk:Victim must save vs paralysation or be paralysed for 5d4 rounds. Damage is then automatic from digestive acid. Cube is difficult to see so others get -3 on surprise roll, spdef:Immune to electrical / fear / holds / paralysation / polymorph and sleep-based attacks. Cold based attacks \\lbrak;slow \\rbrak;\\lpar;!rounds ~~target-nosave caster¦@{selected¦token_id}¦slow¦99¦0¦Slowed by cold¦snail\\rpar; to 50% until thaw and only inflict 1d4 points of damage,ns:1],[cl:MI,items:random:1d8]{{subtitle=Creature}}{{Section=**Attributes**}}{{Intelligence=None (0)}}{{AC=8, natural skin}}{{Alignment=Neutral}}{{Move=6}}{{Hit Dice=4r2}}{{THAC0=17}}{{Section1=**Attack**\nAn enveloping touch strike doing 2d8 acid damage and paralysing (anesthetized) unless a save is made}}{{Languages=Does not make sounds}}{{Size=L, 10ft cube}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=**Invulnerability:** Electricity, fear, holds, paralyzation, polymorph, and sleep-based attacks have no effect on this monster.\n**Resistance:** If a cube fails its saving throw against a cold-based attack, the cube will be slowed 50% and inflicts only 1-4 points of damage.\n**Digestive Acid:** The cube surrounds its anesthetised prey and secretes digestive fluids to absorb the food. All damage is caused by these digestive acids.\n**Surprise:** Because gelatinous cubes are difficult to see, others are -3 on their surprise roll.}}{{Section6=**Special Disadvantages**}}{{Section7=None}}Specs=[Gelatinous Cube,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc=So nearly transparent that they are difficult to see, these cubes travel down dungeon corridors, absorbing carrion and trash along the way. Their sides glisten, tending to leave a slimy trail, but gelatinous cubes cannot climb walls or cling to ceilings. Very large cubes grow tall to garner mosses and the like from ceilings.}}{{hide8=Possessing no intelligence, gelatinous cubes live only for eating. They prefer well- traveled dungeons where there is always food to scavenge. These creatures reproduce by budding, leaving clear, rubbery cubes in dark corners or on heaps of trash. Young are not protected and are sometimes reabsorbed by the parent. Treasure is sometimes swept up by a gelatinous cube as the creature travels along a cavern floor; any metals, gems, or jewelry are carried in the monster\'s body until they can be ejected as indigestible. Items found inside a cube include treasure types J, K, L, M, N, Q, as well as an occasional potion, dagger, or similar object.}}{{desc9=**Combat:** A gelatinous cube attacks by touching its victim with its anesthetizing slime. A victim who fails to save vs. paralyzation is paralyzed (anesthetized) for 5-20 (5d4) rounds. The cube then surrounds its prey and secretes digestive fluids to absorb the food.}}'},
+ {name:'Genie-Djinni',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Djinni}{{}}Specs=[Djinni,CreatureRace,0H,Djinni]{{}}RaceData=[w:Djinni]{{}}'},
+ {name:'Genie-Efreeti',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Efreeti}{{}}Specs=[Efreeti,CreatureRace,0H,Efreeti]{{}}RaceData=[w:Efreeti]{{}}'},
+ {name:'Ghast',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Ghast}}{{subtitle=Creature}}Specs=[Ghast,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Very (11-12)}}{{AC=4}}{{Alignment=Chaotic Evil}}{{Move=15}}{{Hit Dice=4}}{{THAC0=17}}{{Attack=2 x Claw 1d4, 1 x Bite 1d8}}{{Languages=Ghasts cannot talk, but have been known to utter a low moan when unable to complete an assigned task}}{{Size=M 5-6ft tall}}{{Life Expectancy=Already dead!}}{{Section2=**Powers**}}{{Stench=They exude a carrion stench in a 10\' radius which causes retching and nausea unless a saving throw versus poison is made, causing them to attack at a penalty of -2.}}{{Paralysis=Their touch causes opponents to become rigid unless a saving throw versus paralyzation is successful (even Elves). This paralysis lasts for 5-10 (4+1d6) rounds or until negated by a priest.}}{{Section4=**Special Advantages**}}{{Spell Immunity=Subject to all attack forms except *sleep* and *charm* spells}}{{Infravision=No need for light (dead eyes) so can see normally in absolute darkness}}{{Section6=**Special Disadvantages**}}{{Cold Iron=A susccessful attack with a cold iron weapon does double damage to a Ghast}}RaceData=[w:Ghast, align:CE, cattr:int=11:12|mov=15|ac=4|size=M|hd=4r3|thac0=17|attk1=1d4:Claw 1:0:S|attk2=1d4:Claw 2:0:S|attk3=1d8:Bite:1:P|dmgmsg=On successful hit opponents (including elves) save vs. Paralysis or \\lbrak;Paralysed\\rbrak;(!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Select Target¦token_id}¦Paralysis¦\\amp#91;\\lbrak;40+\\lpar;10\\amp#42;1d6\\amp#41;\\rbrak;\\amp#93;¦-10¦Paralysed by a Ghoul attack¦back-pain). Remember immune to Sleep \\amp Charm; effect of Ghast stink \\amp cold iron does double damage to a Ghast, ns:1],[cl:PW,w:Ghast Stench,sp:0,pd:-1]{{Section9=**Description**}}{{desc=These creatures are so like ghouls as to be completely indistinguishable from them, and they are usually found only with a pack of ghouls. When a pack of ghouls and ghasts attacks it will quickly become evident that ghasts are present, for they exude a carrion stench in a 10\' radius which causes retching and nausea unless a saving throw versus poison is made. Those failing to make this save will attack at a\npenalty of -2.\nWorse, the ghast shares the ghoulish ability to paralyzation, and their attack is so potent that it will even affect elves. Paralysis caused by a ghast lasts for 5-10 (4+1d6) rounds or until negated by a priest\'s remove paralysis spell.\nGhasts, like ghouls, are undead class and thus sleep and charm spells do not affect them. Though they can be struck by any sort of weapon, cold iron inflicts double normal damage. Clerics can turn them beginning at 2nd level. The circle of protection from evil does not keep them at bay unless it is used in conjunction with cold iron (such as a circle of powdered iron or an iron ring).}}'},
+ {name:'Ghost-ethereal-plane',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Ghost}}{{name on Etherial Plane}}{{subtitle=Creature}}Specs=[Ghost,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=High (13-14)}}{{AC=8}}{{Alignment=Lawful Evil}}{{Move=9}}{{Hit Dice=10}}{{THAC0=11}}{{Attack=Touch ages a character by 1d4 x 10 years}}{{Languages=Those known at death, and can communicate with both the dead and living}}{{Size=M, 5 to 6ft tall}}{{Life Expectancy=Already dead!}}{{Section2=**Powers**}}{{Section3=**Dreadful Appearance:** The mere sight of a Ghost causes any humanoid being to age 10 years and flee in panic for 2-12 (2d6) turns unless a saving throw versus spell is made. Priests above 6th level are immune to this effect, and all other humanoids above 8th level may add +2 to their saving throws.}}{{Section4=**Magic Jar:** Any creatures within 60 yards of a ghost is subject to attack by magic jar. If the ghost fails to magic jar its chosen victim, it will then semi-materialize in order to attack by touch (in which case use a *Ghost-Material-Plane*).}}{{Section6=**Special Advantages**}}{{Aging attack=A successful touch from a Ghost ages the victim by 1d4 x 10 years}}{{Attack Immunity=Only hit by silver weapons (half-damage) and magically enchanted weapons of +1 or better (full-damage)}}{{Spell Immunity=Immune to *all spells* cast on the Material Plane. Only affected by spells cast on the Etherial plane}}{{Other Immunities=Immune to paralysation and poison}}{{Infravision=No need for light (dead eyes) so can "sense" normally in absolute darkness}}RaceData=[w:Ghost Ethereal Plane, align:LE, cattr:int=13:14|mov=9|ac=8|size=M|hd=10r2|thac0=11|attk1=0:Touch:0:B|dmgmsg=On successful hit opponents \\lbrak;age by 1d4 x 10 years\\rbrak;\\lpar;!modattr ~~charid \\amp#64;{target¦Who\'s the Victim?¦character_id} ~~age\\vbar\\amp#91;\\lbrak;10\\amp#42;1d4\\rbrak;\\amp#93; ~~fb-header Ghost Aging Attack ~~fb-content _CHARNAME_ has aged by _TCUR0_ and is now _CUR0_ years old\\rpar;. Remember immune to Sleep Charm Hold \\amp Cold. Silver \\lpar;half-damage\\rpar; or +1 or better weapons to hit and those in 60yds suffer the *Ghost Fear* power, spattk:Drain 10 x 1d4 years of age if hit, spdef:Silver \\lpar;half-damage\\rpar; or +1 or better weapons to hit. Immune to spells cast on the material plane. Ghost Fear power ages and scares those within 60yds seeing Ghost, ns:2],[cl:PW,w:Ghost Fear,sp:0,pd:-1],[cl:PW,w:Magic Jar,sp:10,-1]{{Section9=**Description**}}{{desc=Ghosts are the spirits of humans who were either so greatly evil in life or whose deaths were so unusually emotional they have been cursed with the gift of undead status. Thus, they roam about at night or in places of darkness. These spirits hate goodness and life, hungering to draw the living essences from the living.}}{{desc1=**Combat:** As ghosts are non-corporeal (ethereal), they are usually encountered only by creatures in a like state, although they can be seen by non-ethereal creatures. The mere sight of one causes any humanoid being to age 10 years and flee in panic for 2-12 (2d6) turns unless a saving throw versus spell is made. Priests above 6th level are immune to this effect, and all other humanoids above 8th level may add +2 to their saving throws. Any creatures within 60 yards of a ghost is subject to attack by *magic jar*. If the ghost fails to *magic jar* its chosen victim, it will then semi-materialize in order to attack by touch (in which case the ghost is Armor Class 0). Any human or demi-human killed by a ghost is drained of its life essence and is forever dead.\nIf the ghost fails to become semi-material it can only be combatted by another in the Ethereal plane (in which case the ghost has an Armor Class of 8 - use *Ghost-etherial-plane* creature definition).\nGhosts can be turned by clerics after reaching 7th level and can be damaged by holy water while in their semi-material form.}}'},
+ {name:'Ghost-material-plane',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= on Material Plane}}{{subtitle=Creature}}Specs=[Ghost,CreatureRace,0H,Ghost-ethereal-plane]{{AC=0}}RaceData=[w:Ghost Material Plane, cattr:ac=0]{{desc=}}%{Race-DB-Creatures|Ghost-etherial-plane}'},
+ {name:'Ghoul',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Ghoul}}{{subtitle=Creature}}Specs=[Ghoul,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low (5-7)}}{{AC=6}}{{Alignment=Chaotic Evil}}{{Move=9}}{{Hit Dice=2}}{{THAC0=19}}{{Attack=2 x Claw 1d3, 1 x Bite 1d6}}{{Languages=Ghouls cannot talk, being mindless, but have been known to utter a low moan when unable to complete an assigned task}}{{Size=M 5-6ft tall}}{{Life Expectancy=Already dead!}}{{Section2=**Powers**}}{{Paralysis=Their touch causes humans (including dwarves, gnomes, half-elves, and halflings, **but excluding elves**) to become rigid unless a saving throw versus paralyzation is successful. This paralysis lasts for 3-8 (2+1d6) rounds or until negated by a priest.}}{{Section4=**Special Advantages**}}{{Spell Immunity=Subject to all attack forms except *sleep* and *charm* spells}}{{Infravision=No need for light (dead eyes) so can see normally in absolute darkness}}RaceData=[w:Ghoul, align:N, cattr:int=5:7|mov=9|ac=6|size=M|hd=2r4|thac0=19|attk1=1d3:Claw 1:0:S|attk2=1d3:Claw 2:0:S|attk3=1d6:Bite:1:P|dmgmsg=On successful hit humans (including dwarves; gnomes; half-elves; and halflings **but excluding elves**) save vs. Paralysis or \\lbrak;Paralysed\\rbrak;(!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Select Target¦token_id}¦Paralysis¦\\amp#91;\\lbrak;20+\\lpar;10\\amp#42;1d6\\amp#41;\\rbrak;\\amp#93;¦-10¦Paralysed by a Ghoul attack¦back-pain). Remember immune to Sleep \\amp Charm]{{Section9=**Description**}}{{desc=Ghouls are undead creatures, once human, who now feed on the flesh of corpses. Although the change from human to ghoul has deranged and destroyed their minds, ghouls have a terrible cunning which enables them to hunt their prey most effectively.\nGhouls are vaguely recognizable as once having been human, but have become horribly disfigured by their change to ghouls. The tongue becomes long and tough for licking marrow from cracked bones, the teeth become sharp and elongated, and the nails grow strong and sharp like claws.}}{{desc1=**Combat:** Ghouls attack by clawing with their filthy nails and biting with their fangs. Any human or demi-human (except elves) killed by a ghoulish attack will become a ghoul unless blessed (or blessed and then resurrected). Obviously, this is also avoided if the victim is devoured by the ghouls. Ghoul packs always attack without fear. These creatures are subject to all attack forms except sleep and charm spells. They can be turned by priests of any level. The magic circle of protection from evil actually keeps ghouls completely at bay.}}'},
+ {name:'Giant-Centipede',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Centipede}}{{prefix=Giant}}RaceData=[w:Giant Centipede, align:N, svall:-1, cattr:int=0|mov=15|size=T|hd=1|hp=2|thac0=20|attk1=0:Bite:0:P|dmgmsg=Click \\lbrak;Check for Paralysation\\rbrak;(!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Select Target¦token_id}¦Paralysation¦\\amp#91;\\lbrak;60\\amp#42;2d6\\rbrak;\\amp#93;¦-1¦Paralysed by a Giant Centipede bite¦padlock¦svpar;+4) and then ask victim to save vs paralysis or be paralysed for 2d6 hours]{{subtitle=Creature}}Specs=[Giant Centipede,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Non (0)}}{{AC=9}}{{Alignment=Neutral}}{{Move=15}}{{Hit Dice=Only 2 HP}}{{THAC0=20}}{{Attack=1 bite which does no damage but can paralyse with the victim at a bonus of +4}}{{Languages=None}}{{Size=T, 1ft long}}{{Life Expectancy=Short}}{{Section2=**Powers**}}{{Paralysation=On a successful bite, save to negate}}{{Section4=**Special Advantages**}}{{**Protective Colouration:** varies in color depending on the terrain it inhabits. Those that favor rocky areas are gray, those that live underground are black, while centipedes of the forest are brown or red.}}{{Section9=**Description**}}{{desc8=Giant centipedes are loathsome, crawling arthropods that arouse almost universal disgust from all intelligent creatures (even other monsters). They are endemic to most regions. The giant centipede is so named because it is over 1-foot long. The body is plated with a chitinous shell and it moves with a slight undulating motion.\nDue to its small size, the giant centipede is less likely to resist attacks and receives a -1 penalty to all its saving throws. Although a single giant centipede rarely constitutes a serious threat to a man, these creatures frequently travel in groups.}}{{desc9=**Combat:** When hunting, centipedes use their natural coloration to remain unseen until they can drop on their prey from above or crawl out of hiding in pursuit of food. They attack by biting their foes and injecting a paralytic poison. When more than one centipede is encountered, the monsters will fight independently, even to the point of fighting among themselves over fallen victims.}}'},
+ {name:'Giant-Cloud',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Cloud-Giant}{{}}Specs=[Giant-Cloud,CreatureRace,2H,Cloud-Giant]{{}}RaceData=[w:Cloud Giant]{{}}'},
+ {name:'Giant-Cloud-Castle',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Cloud-Castle-Giant}{{}}Specs=[Giant-Cloud-Castle,CreatureRace,2H,Cloud-Castle-Giant]{{}}RaceData=[w:Cloud Castle Giant]{{}}'},
+ {name:'Giant-Cloud-Juvenile-1',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Cloud-Giant-Juvenile-1}{{}}Specs=[Giant-Cloud,CreatureRace,2H,Cloud-Giant-Juvenile-1]{{}}RaceData=[w:Cloud Giant Juvenile-1]{{}}'},
+ {name:'Giant-Cloud-Juvenile-2',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Cloud-Giant-Juvenile-2}{{}}Specs=[Giant-Cloud,CreatureRace,2H,Cloud-Giant-Juvenile-2]{{}}RaceData=[w:Cloud Giant Juvenile-2]{{}}'},
+ {name:'Giant-Cloud-Juvenile-3',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Cloud-Giant-Juvenile-3}{{}}Specs=[Giant-Cloud,CreatureRace,2H,Cloud-Giant-Juvenile-3]{{}}RaceData=[w:Cloud Giant Juvenile-3]{{}}'},
+ {name:'Giant-Cloud-Priest',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Cloud-Giant-Priest}{{}}Specs=[Giant-Cloud,CreatureRace,2H,Cloud-Giant-Priest]{{}}RaceData=[w:Cloud Giant Priest]{{}}'},
+ {name:'Giant-Cloud-Wizard',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Cloud-Giant-Wizard}{{}}Specs=[Giant-Cloud,CreatureRace,2H,Cloud-Giant-Wizard]{{}}RaceData=[w:Cloud Giant Wizard]{{}}'},
+ {name:'Giant-Cobra',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Giant Cobra, cattr: attk1=1d3:Bite:0:P|dmgmsg=If successfully hit as well as damage \\lbrak;inject poison\\rbrak;\\lpar;!rounds --target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the Unfortunate Victim?¦token_id}¦Cobra Venom_Not quite right¦\\amp#91;\\lbrak;2d4\\rbrak;\\amp#93;¦-1¦That bite was quite painful. Should I see a Cleric?¦stopwatch\\rpar;. **Don\'t save now!** Save when the effect message pops up in a few rounds - that way the surprise is maintained! This poison **kills the victim** in 2 to 8 rounds. Save at -2 penalty when asked to do so to only take 10HP, spattk:Cobra venom **kills the victim** in 2d4 rounds. Save at -2 penalty to only take 10HP, ns:1],[cl:PW,w:Birdcharmer Charm,sp:10,pd:-1]{{}}Specs=[Giant Cobra,CreatureRace,0H,Giant Poisonous Snake]{{}}%{Race-DB-Creatures|Giant-Poisonous-Snake}{{title=Giant Cobra}}{{Section3=**Mesmerize:** Cobras can mesmerize their prey by swaying slowly and steadily while staring down their victims. Creatures of animal intelligence or less must make a saving throw against paralyzation or be effectively paralyzed for as long as the snake continues to sway, and for 2d6 rounds thereafter.}}{{Section5=**Poison:** Giant Cobra venom gets a -2 penalty to saving throws to only take 10HP plus bite damage, or **kills the victim** in 2 to 8 rounds if don\'t save}}{{desc=**Giant Cobra:** The giant cobra is an example of a variant, giant poisonous snake. Its venom results in death 2-8 rounds after a successful strike; if the victim makes a saving throw at -2 he suffers only 10 points of damage.\nGiant cobras mesmerize prey as birdcharmer snakes do. They can kill and eat an entire goat or a demihuman up to halfling or gnome size. Some varieties of giant weasel can hunt them successfully, and jungle giants consider giant cobras a delicacy, as do some elven tribesmen.}}'},
+ {name:'Giant-Constrictor-Snake',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Giant Constrictor Snake, cattr:ac=5|hd=6+1r2|thac0=15|size=L| attk1=1d4:Bite:0:P|attk2=2d8:Constrict:0:B|dmgmsg=$$If successfully hit as well as damage this round \\lbrak;all future rounds\\rbrak;\\lpar;!rounds --target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the Unfortunate Victim?¦token_id}¦Giant Constrict¦\\amp#91;\\lbrak;99\\rbrak;\\amp#93;¦0¦Argh... The squeeze is on...¦back-pain\\rpar; automatically hit and do crushing damage, spattk:Once coiled victim takes crushing damage each round]{{}}Specs=[Constrictor Snake,CreatureRace,0H,Poison Snake 1-4]{{}}%{Race-DB-Creatures|Poison-Snake-1-4}{{title=Giant Constrictor Snake}}{{AC=5}}{{Hit Dice=6+1}}{{THAC0=15}}{{Size=L, 30+ft long}}{{Section5=**Constriction:** Suffering damage every round. It requires the combined efforts of 60 total points of Strength (the coiled victim plus outside help) to extricate someone from a giant constrictor\'s steel grasp}}{{desc=**Giant Constrictor:** Giant constrictor snakes are larger and much stronger than their smaller cousins. It requires the combined efforts of 60 total points of Strength (the coiled victim plus outside help) to extricate someone from a giant constrictor\'s steel grasp.\nThe skin of a giant constrictor snake is too thick and stiff to be workable, and is valuable only as armor, not for decoration. An uncured hide can fetch 20 gp}}'},
+ {name:'Giant-Fire-AC-1',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Fire-Giant-AC-1}{{}}Specs=[Fire-Giant-AC-1,CreatureRace,2H,Fire-Giant-AC-1]{{}}RaceData=[w:Fire Giant AC-1]{{}}'},
+ {name:'Giant-Fire-AC5',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Fire-Giant-AC5}{{}}Specs=[Fire-Giant-AC5,CreatureRace,2H,Fire-Giant-AC5]{{}}RaceData=[w:Fire Giant AC5]{{}}'},
+ {name:'Giant-Fire-Juvenile-1',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Fire-Giant-Juvenile-1}{{}}Specs=[Fire-Giant-Juvenile-1,CreatureRace,2H,Fire-Giant-Juvenile-1]{{}}RaceData=[w:Fire Giant Juvenile-1]{{}}'},
+ {name:'Giant-Fire-Juvenile-2',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Fire-Giant-Juvenile-2}{{}}Specs=[Fire-Giant-Juvenile-2,CreatureRace,2H,Fire-Giant-Juvenile-2]{{}}RaceData=[w:Fire Giant Juvenile-2]{{}}'},
+ {name:'Giant-Fire-Juvenile-3',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Fire-Giant-Juvenile-3}{{}}Specs=[Fire-Giant-Juvenile-3,CreatureRace,2H,Fire-Giant-Juvenile-3]{{}}RaceData=[w:Fire Giant Juvenile-3]{{}}'},
+ {name:'Giant-Fire-Shaman-L7',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Fire-Giant-Shaman-L7}{{}}Specs=[Fire-Giant-Shaman-L7,CreatureRace,2H,Fire-Giant-Shaman-L7]{{}}RaceData=[w:Fire Giant Shaman-L7]{{}}'},
+ {name:'Giant-Fire-Witch-Doctor',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Fire-Giant-Witch-Doctor}{{}}Specs=[Fire-Giant-Witch-Doctor,CreatureRace,2H,Fire-Giant-Witch-Doctor]{{}}RaceData=[w:Fire Giant Witch Doctor]{{}}'},
+ {name:'Giant-Frost-AC0',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Frost-Giant-AC0}{{}}Specs=[Frost-Giant-AC0,CreatureRace,2H,Frost-Giant-AC0]{{}}RaceData=[w:Frost Giant AC0]{{}}'},
+ {name:'Giant-Frost-AC5',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Frost-Giant-AC5}{{}}Specs=[Frost-Giant-AC5,CreatureRace,2H,Frost-Giant-AC5]{{}}RaceData=[w:Frost Giant AC5]{{}}'},
+ {name:'Giant-Frost-Jarl',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Frost-Giant-Jarl}{{}}Specs=[Frost-Giant-Jarl,CreatureRace,2H,Frost-Giant-Jarl]{{}}RaceData=[w:Frost Giant Jarl]{{}}'},
+ {name:'Giant-Frost-Juvenile-1',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Frost-Giant-Juvenile-1}{{}}Specs=[Frost-Giant-Juvenile-1,CreatureRace,2H,Frost-Giant-Juvenile-1]{{}}RaceData=[w:Frost Giant Juvenile-1]{{}}'},
+ {name:'Giant-Frost-Juvenile-2',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Frost-Giant-Juvenile-2}{{}}Specs=[Frost-Giant-Juvenile-2,CreatureRace,2H,Frost-Giant-Juvenile-2]{{}}RaceData=[w:Frost Giant Juvenile-2]{{}}'},
+ {name:'Giant-Frost-Juvenile-3',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Frost-Giant-Juvenile-3}{{}}Specs=[Frost-Giant-Juvenile-3,CreatureRace,2H,Frost-Giant-Juvenile-3]{{}}RaceData=[w:Frost Giant Juvenile-3]{{}}'},
+ {name:'Giant-Frost-Shaman-L3',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Shaman L3,cattr:cl=pr:frost-giant-shaman|lv=3]{{}}Specs=[Fire-Giant-Shaman-L3,CreatureRace,2H,Frost-Giant-AC0]{{}}%{Race-DB-Creatures|Frost-Giant-Shaman-L7}'},
+ {name:'Giant-Frost-Shaman-L5',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Frost Giant Shaman L5,cattr:cl=pr:frost-giant-shaman|lv=5]{{}}Specs=[Fire-Giant-Shaman-L5,CreatureRace,2H,Frost-Giant-AC0]{{}}%{Race-DB-Creatures|Frost-Giant-Shaman-L7}'},
+ {name:'Giant-Frost-Shaman-L7',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Frost-Giant-Shaman-L7}{{}}Specs=[Frost-Giant-Shaman-L7,CreatureRace,2H,Frost-Giant-Shaman-L7]{{}}RaceData=[w:Frost Giant Shaman L7]{{}}'},
+ {name:'Giant-Frost-Witch-Doctor-L3-7',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Frost-Giant-Witch-Doctor-L3-7}{{}}Specs=[Frost-Giant-Witch-Doctor-L3-7,CreatureRace,2H,Frost-Giant-Witch-Doctor-L3-7]{{}}RaceData=[w:Frost Giant Witch Doctor L3-7]{{}}'},
+ {name:'Giant-Hill-AC0',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Hill-Giant-AC0}{{}}Specs=[Hill-Giant-AC0,CreatureRace,2H,Hill-Giant-AC3]{{}}RaceData=[w:Hill Giant AC0]{{}}'},
+ {name:'Giant-Hill-AC3',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Hill-Giant-AC3}{{}}Specs=[Hill-Giant-AC3,CreatureRace,2H,Hill-Giant-AC3]{{}}RaceData=[w:Hill Giant AC3]{{}}'},
+ {name:'Giant-Hill-AC5',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Hill-Giant-AC5}{{}}Specs=[Hill-Giant-AC5,CreatureRace,2H,Hill-Giant-AC3]{{}}RaceData=[w:Hill Giant AC5]{{}}'},
+ {name:'Giant-Hill-Juvenile',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB|Hill-Giant-Juvenile}{{}}Specs=[Hill-Giant-Juvenile,CreatureRace,2H,Hill-Giant-AC3]{{}}RaceData=[w:Hill Giant Juvenile]{{}}'},
+ {name:'Giant-Leech-1HD',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{subtitle=Creature}}RaceData=[w:Giant Leech 1HD,cattr:hd=1|regen=1]{{}}%{Race-DB-Creatures|Giant-Leech-2HD}{{name= 1HD}}{{Hit Dice=1}}Specs=[Giant Leech,CreatureRace,0H,Giant-Leech-2HD]{{Size=S, 4ft long}}'},
+ {name:'Giant-Leech-2HD',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Giant Leech}}{{name= 2HD}}{{subtitle=Creature}}RaceData=[w:Giant Leech 2HD, align:N, ac:none, weaps:none, cattr:int=0|mov=3|swim=3|ac=9|size=S|hd=2|regen=2|thac0=19|attk1=1d4:Bite:0:P|dmgmsg=A successful bite injects anesthetizing saliva then \\lbrak;sucks blood\\rbrak;\\lpar;!setattr --silent --charid \\amp#64;{target¦Who\'s the victim?¦character_id} ~~blood-drain¦`{selected¦conregen}\\amp#13;!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who\'s the victim?¦token_id}¦Blood-Drain_Somethings wrong?_`{selected¦token_id}¦99¦0¦Definitely not feeling your best¦broken-heart\\rpar; for `{selected¦conregen}HP per round. Only \\lbrak;1% chance\\rbrak;\\lpar;!\\amp#13;\\amp#47;gr 1d100\\lt1 detect blood drain\\rpar; victim aware of attack if in the water. Not usually felt until weakness \\lpar;the loss of 50% of hit points\\rpar; makes victim aware something is amiss There is a \\lbrak;50% chance\\rbrak;\\lpar;!\\amp#13;\\amp#47;gr 1d100\\lt50 causes disease\\rpar; that the bite of one of these creatures \\lbrak;causes a disease\\rbrak;\\lpar;!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who\'s the victim?¦token_id}¦Leech disease¦99¦0¦Getting weaker and feel could die in \\amp#91;\\lbrak;1d4+1\\rbrak;\\amp#93; weeks...¦radioactive\\rpar; that is fatal in 1d4+1 weeks unless cured, spattk:Bite drains blood for 1HP per HD of leech with 50% chance of causing fatal disease]{{Section=**Attributes**}}{{Intelligence=Non (0)}}{{AC=9}}{{Alignment=Neutral}}{{Move=3, Sw 3}}{{Hit Dice=2}}{{HP=}}{{THAC0=19}}{{Attacks=Bite for 1d4 and automatic blood drain of 1HP per HD of Leech each round thereafter}}{{Languages=None}}{{Size=S, 3ft long}}{{Life Expectancy=Unknown}}{{Section1=**Powers**}}{{Section2=None}}{{Section3=**Special Advantages**}}{{Blood Drain Bite=Anesthetic saliva means victim only has 1% chance per round to notice until feel weak (50% HP drained)}}{{Section7=**Special Disadvantages**}}{{Section8=None}}Specs=[Giant Leech,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc8=Giant leeches are horrid, slug-like creatures that dwell in wet, slimy areas and suck the blood of warm-blooded creatures. These disgusting parasites range from 2 to 5 feet long. Their slimy skin is mottled brown and tan with an occasional shade of gray. Two antennae protrude from atop the head.}}{{desc9=**Combat:** Leeches wait in the mud and slime for prey. The initial attack attaches the sucker mouth of the giant leech. On the next round, and on each round thereafter, it drains blood for 1 point of damage per Hit Die of the leech. There is only a 1% chance that the victim is aware of the attack if it occurs in the water. The leech has anesthetizing saliva, and its bite and blood drain are not usually felt until weakness (the loss of 50% of hit points) sets in and makes the victim aware that something is amiss.\nThey can be killed by attack or by salt sprinkled on their bodies. There is a 50% chance that the bite of one of these creatures causes a disease that is fatal in 1d4+1 weeks unless cured.}}'},
+ {name:'Giant-Leech-3HD',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{subtitle=Creature}}RaceData=[w:Giant Leech 3HD,cattr:hd=3|regen=3|thac0=17]{{}}%{Race-DB-Creatures|Giant-Leech-2HD}{{name= 3HD}}{{Hit Dice=3}}{{THAC0=17}}Specs=[Giant Leech,CreatureRace,0H,Giant-Leech-2HD]{{Size=M, 5ft long}}'},
+ {name:'Giant-Leech-4HD',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{subtitle=Creature}}RaceData=[w:Giant Leech 4HD,cattr:hd=4|regen=4|thac0=17]{{}}%{Race-DB-Creatures|Giant-Leech-2HD}{{name= 4HD}}{{Hit Dice=4}}{{THAC0=17}}Specs=[Giant Leech,CreatureRace,0H,Giant-Leech-2HD]{{Size=M, 6ft long}}'},
+ {name:'Giant-Lynx',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Giant Lynx}}RaceData=[w:Giant Lynx, align:N, weaps:none, ac:none, cattr:int=11:12|mov=12|ac=6|hd=2+2r4|thac0=19|size=M|attk1=1d2:2 x Claw:0:S|attk2=1d2:Bite:1:P|attk3=1d3:Rear claw rake x 2:1:S|attkmsg=Only perform a *Rear claw rake* if both front claws successfully hit|dmgmsg=$$ $$Only valid if both front claws successfully hit]{{subtitle=Creature}}Specs=[Giant Lynx,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Very (11 to 12)}}{{AC=6}}{{Alignment=Neutral}}{{Move=12}}{{Hit Dice=2+2 HD}}{{THAC0=19}}{{Attacks=ront claws x 2 for 1d2 each, bite for 1d2. If both front claws hit, can attempt a rear claw rake for 2d3 (1d3 per claw)}}{{Size=M}}{{Language=Can communicate well with others of its kind, which greatly increases its chances of survival}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Rear claw rake=If both front claws hit, can attempt rear claw rakes for 1d3 per rear claw}}{{Hide=When hiding, a giant lynx will avoid detection 90% of the time.}}{{Surprise=The lynx can leap up to 15 feet and imposes a -6 on the surprise rolls of its prey.}}{{Detect Traps=It has a 75% chance of detecting traps.}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=The giant lynx is distinguished by its tufted ears and cheeks, short bobbed tail, and dappled coloring. It has a compact muscular body, with heavy legs and unusually large paws. The giant lynx prefers cold coniferous and scrub forests. The cubs remain with\ntheir mother for 6 months.\nThe giant lynx has all the advantages of the great cats plus the added bonus of a high intelligence which makes it even more adaptable.}}{{desc9=**Combat:** The giant lynx is the most intelligent of the great cats and uses its wits in combat. The giant lynx almost never attacks men. The nocturnal lynx stalks or ambushes its prey, catching rodents, young deer, grouse, and other small game.}}'},
+ {name:'Giant-Owl',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Giant Owl, spattk:Infravision 120ft. Surprise bonus of 6. Cannot be surprised at night. Surprise 3 penalty during day, cattr:int=8:10|mov=3|fly=18E|ac=6|hd=4r4|thac0=17|size=M|attk1=2d4:Talon1:0:S|attk2=2d4:Talon2:0:S|attk3=1+1d4:Beak:0:P]{{}}Specs=[Giant Owl,CreatureRace,0H,Owl]{{}}%{Race-DB-Creatures|Owl}{{title=Giant }}{{Intelligence=Average (8 to 10)}}{{AC=6}}{{Move=3, FL 18(E)}}{{Hit Dice=4 HD}}{{THAC0=17}}{{Attacks=2 x Talons for 2d4 each, Beak for 1+1d4}}{{Size=M}}{{desc7=These nocturnal creatures inhabit very wild areas, preying on rodents, large game birds, and rabbits. They are too large to gain swoop bonuses but can fly in nearly perfect silence; opponents suffer a -6 on their surprise roll. Giant owls may be friendly toward humans, though they are naturally suspicious.\nParents will fight anything that threatens their young. Eggs sell for 1,000 sp and hatchlings sell for 2,000 sp.}}'},
+ {name:'Giant-Poisonous-Snake',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Giant Poisonous Snake, cattr:ac=5|hd=4+2r3|thac0=17|size=M| attk1=1d3:Bite:0:P|dmgmsg=If successfully hit as well as damage \\lbrak;inject poison\\rbrak;\\lpar;!rounds --target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the Unfortunate Victim?¦token_id}¦Giant Snake Poison_Not quite right¦\\amp#91;\\lbrak;8+3d10\\rbrak;\\amp#93;¦-1¦That bite was quite painful. Should I see a Cleric?¦stopwatch\\rpar;. **Don\'t save now!** Save when the effect message pops up in a few rounds - that way the surprise is maintained! This poison **kills the victim** in one round. Save to negate when asked to do so, spattk:Giant Snake Poison **kills the victim** in 1 round. Save to negate]{{}}Specs=[Giant Poison Snake,CreatureRace,0H,Poison Snake 1-4]{{}}%{Race-DB-Creatures|Poison-Snake-1-4}{{title=Giant Poisonous Snake}}{{AC=5}}{{Hit Dice=4+2}}{{THAC0=17}}{{Attacks=Bite with giant snake poison}}{{Size=M, 12ft long}}{{Section5=**Poison:** Giant Snake poison gains neither benefit or penalty to saving throws, and **kills the victim** in 1 round if don\'t save}}{{desc=**Giant poisonous snakes** cause death in one round if their victims fail a saving throw vs. poison. Some varieties inflict 3-18 points of damage even if the saving throw is made.}}'},
+ {name:'Giant-Rat',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Giant Rat, align:LE|NE|CE, cattr:int=2:4|mov=12|swim=6|hd=1-4r4|hp=1:4|thac0=20|size=T|attk1=1d3:Bite:0:P]{{}}Specs=[Giant Rat,CreatureRace,0H,Black Rat]{{}}%{Race-DB-Creatures|Black-Rat}{{title=Giant }}{{Intelligence=Semi- (2 to 4)}}{{Alignment=Any Evil}}{{Move=12, Swim 6}}{{Hit Dice=½ HD}}{{Attacks=Bite for 1d3HP damage \\amp 5% chance of save vs. poison or disease}}{{Size=T, 2ft long}}{{desc8=These vile beasts plague underground areas such as crypts and dungeons. Their burrows honeycomb many graveyards, where they cheat ghouls of their prizes by tunneling to newly interred corpses. Giant rats are brown/black in color with white underbellies, and are related to the brown rat, with fatter bodies and shorter tails.}}'},
+ {name:'Giant-Scorpion',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Scorpion}}RaceData=[w:Giant Scorpion, align:N, ac:none, weaps:none, cattr:int=0|mov=15|ac=3|hd=5+5r2|thac0=15|size=M|attk1=1d10:Claw1:0:S|attk2=1d10:Claw2:0:S|attk3=1d4:Sting:1:P|dmgmsg=If claw hits victim is held and future stinger and claw hits are automaticly successful. Only one *Bend bar* check to escape$$If claw hits victim is held and future stinger and claw hits are automaticly successful. Only one *Bend bar* check to escape$$On a successful hit with the stinger do damage and victim must save vs. poison or be poisoned with a Type F poison and **die** immediately. If save take **20HP** damage, spattk:Stinger does poison type F. If a claw hits victim is held. Stinger \\amp claw hits are then automatic]{{subtitle=Creature}}Specs=[Scorpion,CreatureRace,0H,Creature]{{title=Giant }}{{Section=**Attributes**}}{{Intelligence=Non (0)}}{{Alignment=Neutral}}{{AC=3 from chitinous carapace}}{{Move=15}}{{Hit Dice=5+5 HD}}{{THAC0=15}}{{Section1=**Attacks:** 2 x claws for 1d10HP each. If either hit victim is held and subsequent attacks automatically hit. Sting for 1d4HP and poison type F}}{{Size=M, 5-6ft long}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=**Poison Sting:** Poison type F, save vs. poison or immediately **die**}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=Giant scorpions are vicious predators that live almost anywhere, including relatively cold places such as dungeons, though they favor deserts and warm lands. These creatures are giant versions of the normal 4-inch-long scorpion found in desert climes.\nThe giant scorpion has a green carapace and yellowish green legs and pincers. The segmented tail is black, with a vicious stinger on the end. There is a bitter smell associated with the scorpion, which probably comes from the venom. They make an unnerving scrabbling sound as they travel across dungeon floors.}}{{desc9=**Combat:** The giant scorpion is 95% likely to attack any creature that approaches. It can fight three opponents at once. If it manages to grab a victim in a pincer, it will automatically inflict 1-10 points of damage each round until it releases the victim. The victim has but one chance to escape. If makes a *bend bars/lift gates* roll, escapes the claw, this being the character\'s only action that round only once per combat. Sting requires successful attack against an untrapped victim, but autmatically hits a trapped character.\nNote that scorpions are not immune to their own poison. If a scorpion is reduced to 1 or 2 hit points, it will go into a stinging frenzy, stinging everything in sight, gaining two attempts to hit per round with only the tail.}}'},
+ {name:'Giant-Sea-Horse',type:'seahorserace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Giant Sea Horse\n}}RaceData=[w:Giant Sea Horse, query:How many hit dice?|2HD%%2%%19%%1d4|3HD%%3%%17%%1+1d4|4HD%%4%%17%%2d4, align:N|NN, weaps:none, ac:none, cattr:int=1|swim=21|ac=7|hd=(??1r5|thac0=??2|size=L|attk1=??3:Head Butt:0:B|attk2=0:Tail Grab:0:B|attkmsg=Can do *both* head butt *and* tail grab as an attack in one round and on two different targets in range or the same target|dmgmsg=$$A hit indicates a successful \\lbrak;tail grab\\rbrak;\\lpar;!rounds ~~target single¦@{selected¦token_id}¦\\amp#64;{target¦Who got grabbed?¦token_id}¦Restrained¦99¦-1¦Grabbed by the tail grip of a Giant Sea Horse. Roll against *Open Doors* at -1 penalty to escape¦grab\\rpar;. Opponent must successfully roll an *Open Doors* check at a penalty of -1 to free themselves.]{{subtitle=Marine Creature}}Specs=[Giant Sea Horse,SeaHorseRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Animal (1)}}{{AC=naturally 7 and cannot wear standard barding}}{{Alignment=Neutral}}{{Move=Swim 21}}{{Hit Dice=2 to 4HD}}{{THAC0=Varies by HD, 19 to 17}}{{Attacks=Head butt 2HD:1d4, 3HD:1+1d4, 4HD:2d4 bludgeoning damage. Can also grab the same or a different opponent with their tail to restrain them (requiring an *Open Doors* roll at -1 to escape from)}}{{Size=Large}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc7=A sea horse attacks with a head butt, but a sea horse trained as a steed can use its long tail to constrict and restrain enemies. A captured opponent can free itself with a open doors roll made with a -1 penalty. The tail of a giant sea horse is so long it can attack the same opponent its head butts, or the one its rider is attacking. The constriction causes no damage, but the sea horse can still butt the helpless victim.}}'},
+ {name:'Giant-Sea-Snake',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Giant Sea Snake, cattr:mov=12|swim=12|ac=5|hd=10r2|thac0=11| size=G| attk1=1d6:Bite:0:P|attk2=3d6:Constrict:0:B|dmgmsg=If successfully hit as well as damage \\lbrak;inject poison\\rbrak;\\lpar;!rounds --target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the Unfortunate Victim?¦token_id}¦Giant Snake Poison_Not quite right¦\\amp#91;\\lbrak;1d4\\rbrak;\\amp#93;¦-1¦That bite was quite painful. Should I see a Cleric?¦stopwatch\\rpar;. **Don\'t save now!** Save when the effect message pops up in a few rounds - that way the surprise is maintained! This poison **kills the victim** in 1d4 rounds. Save to negate when asked to do so$$If successfully hit as well as damage this round \\lbrak;all future rounds\\rbrak;\\lpar;!rounds --target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the Unfortunate Victim?¦token_id}¦Giant Sea Constrict¦\\amp#91;\\lbrak;99\\rbrak;\\amp#93;¦0¦Argh... The squeeze is on...¦back-pain\\rpar; automatically hit and do crushing damage, spattk:Bite poisons and kills within 1d4 rounds. Constriction does 3d6 damage per round, spdef:-]{{}}Specs=[Giant Sea Snake,CreatureRace,0H,Poison Snake 1-4]{{}}%{Race-DB-Creatures|Poison-Snake-1-4}{{title=Giant Sea Snake}}{{Intelligence=Animal (1)}}{{AC=5}}{{Move=12}}{{Hit Dice=10}}{{THAC0=11}}{{Attacks=Bite for 1d6HP damage injecting fatal poison, and/or crush in constriction}}{{Size=G, 50+ft long}}{{Section5=**Poison:** is fatal in 1d4 rounds unless save vs. poison\n**Constrict:** for automatic damage each round}}{{desc9=**Combat:** Found only in tropical waters, the giant sea snake is the only type of snake that is both constricting and poisonous. Its constricting grasp on small ships can crush them in 10 rounds. Sea snakes attack ships only when they are hungry (20% chance). Their poisonous bite is deadly in 1-4 rounds. Sea snakes are fully capable of diving to great depths, and their nostrils (on the top of their snouts) have membranes that automatically seal them underwater.\nFrom time to time giant sea snakes gather in huge floating masses of hundreds or thousands of snakes, often 100 yards wide and 30 miles long. These may be mating rituals or they may be seasonal migrations; the actual reason is unknown.}}'},
+ {name:'Giant-Skeleton',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Giant-Skeleton, cattr:ac=4|hd=4+4r3|thac0=15|attk1=1d12:Bone bladed scimitar:5:S|attk2=1d12:Bone bladed spear:6:P|attkmsg=**Remember** *fireball** power one/hour. Immune to *sleep charm hold* and all mind-affecting spells. Immune to fire. Cold does half damage. Lightning full damage. Half damage from edged and piercing weapons. 1HP from all arrows quarrels \\amp missiles. Blunt weapons do full damage. Turned as *mummies*, spattk:fireball from tummy fire 1 per hour, spdef: immune to *sleep charm hold* and other mind-affecting spells. Immune to fire. Cold does half damage. Lightning full damage. Half damage from edged and piercing weapons. 1HP from all arrows quarrels \\amp missiles. Blunt weapons do full damage. Turned as *mummies*,ns:1],[cl:PW,w:Fireball,sp:3,clv:8,pd:24]{{}}Specs=[Giant Skeleton,CreatureRace,0H,Skeleton]{{}}%{Race-DB-Creatures|Skeleton}{{AC=4}}{{Hit Dice=4+4 HD}}{{THAC0=15}}{{Attack=1d12 and by weapon}}{{Size=L, 12ft tall}}{{Section3=**Fireball:** Once per hour (6 turns), a skeleton may reach into its chest and draw forth a sphere of fire from the flames that burn within its rib cage. This flaming sphere can be hurled as if it were a fireball that delivers 8d6 points of damage. Because these creatures are immune to harm from both magical and normal fires, they will freely use this attack in close quarters.}}{{Turning=Turned as *mummies*}}{{Spell Immunity=Immune to all *sleep, charm, hold* and other mind-affecting spells}}{{Other Immunities=Immune to fire. Cold does half damage. Lightning full damage}}{{Damage from S\\ampP=Half damage from edged and piercing weapons. 1HP from all arrows quarrels \\amp missiles. Blunt weapons do normal damage.}}{{Infravision=No need for light (no eyes) so can see normally in absolute darkness}}{{desc8=Giant skeletons are similar to the more common undead skeleton, but they have been created with a combination of spells and are, thus, far more deadly than their lesser counterparts.\nGiant skeletons stand roughly 12 feet tall and look to be made from the bones of giants. In actuality, they are simply human skeletons that have been magically enlarged. A small, magical fire burns in the chest of each giant skeleton, a by-product of the magics that are used to make them. These flames begin just above the pelvis and reach upward to lick at the collar bones. Mysteriously, no burning or scorching occurs where the flames touch the bone.}}{{desc9=**Combat:** They are normally armed with long spears or scythes that end in keen bone blades. Rare individuals will be found carrying shields (and thus have an Armor Class of 3), but these are far from common. Each blow that lands inflicts 1d12 points of damage.}}'},
+ {name:'Giant-Stag',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Giant Stag}}RaceData=[w:Giant Stag, align:N, weaps:none, ac:none, cattr:int=1|mov=24|ac=7|hd=5r4|thac0=16|size=L|attk1=1d4:2 x Hoof:0:B|attk2=4d4:Gore with Antlers:1:P|attkmsg=Attack either with hoofs or with antlers not both]{{subtitle=Creature}}Specs=[Giant Stag,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Animal (1)}}{{AC=7}}{{Alignment=Neutral}}{{Move=24}}{{Hit Dice=5 HD}}{{THAC0=16}}{{Attacks=Either kick with front hoofs for 2 x 1d4, or charge and gore with antlers for 4d4}}{{Size=L}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=Wild stags are the aggressive males of the deer herds. Normally docile and passive, they defend their herds against all but the most fearsome opponents.}}'},
+ {name:'Giant-Stone',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Stone-Giant}{{}}Specs=[Giant-Stone,CreatureRace,2H,Stone-Giant]{{}}RaceData=[w:Stone Giant]{{}}'},
+ {name:'Giant-Stone-Elder',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Stone-Giant-Elder}{{}}Specs=[Giant-Stone-Elder,CreatureRace,2H,Stone-Giant-Elder]{{}}RaceData=[w:Stone Giant Elder]{{}}'},
+ {name:'Giant-Stone-Juvenile-1',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Stone-Giant-Juvenile-1}{{}}Specs=[Giant-Stone,CreatureRace,2H,Stone-Giant-Juvenile-1]{{}}RaceData=[w:Stone Giant Juvenile-1]{{}}'},
+ {name:'Giant-Stone-Juvenile-2',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Stone-Giant-Juvenile-2}{{}}Specs=[Giant-Stone,CreatureRace,2H,Stone-Giant-Juvenile-2]{{}}RaceData=[w:Stone Giant Juvenile-2]{{}}'},
+ {name:'Giant-Stone-Juvenile-3',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Stone-Giant-Juvenile-3}{{}}Specs=[Giant-Stone,CreatureRace,2H,Stone-Giant-Juvenile-3]{{}}RaceData=[w:Stone Giant Juvenile-3]{{}}'},
+ {name:'Giant-Stone-Mage',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Stone-Giant-Mage}{{}}Specs=[Giant-Stone-Mage,CreatureRace,2H,Stone-Giant-Mage]{{}}RaceData=[w:Stone Giant Mage]{{}}'},
+ {name:'Giant-Two-Headed',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Ettin}{{}}Specs=[Two-Headed-Giant,CreatureRace,2H,Ettin]{{}}RaceData=[w:Two-Headed Giant]{{}}'},
+ {name:'Giant-Two-Headed-Troll',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Giant Two Headed }}RaceData=[w:Giant Two Headed Troll, cattr:int=8:10|hd=10r2|regen=1|thac0=11|size=L|dmg=+6|attk1=4+1d4:Claw:0:S|attk2=4+1d4:Claw:0:S|attk3=1d12:2 x Bite:1:P, spdef:Regenerate at 1HP per round, ns:5],[cl:WP,%:3,prime:Broadsword],[cl:WP,%:3,prime:Spear],[cl:WP,%:2,both:Two Handed Sword],[cl:WP,%:1,both:Great Axe],[cl:WP,%:91]{{subtitle=Creature}}%{Race-DB-Creatures|Troll}{{Intelligence=Average (8-10)}}{{Hit Dice=10}}Specs=[Giant Two Headed Troll,CreatureRace,0H,Troll]{{THAC0=11}}{{Attacks=2 x Claw 1d4+4, 2 x Bite 1d12}}{{Size=L 10ft tall}}{{Regeneration=3 rounds after 1st blood, regenerates at 1HP per round}}{{desc=These ferocious troll/ettin crossbreeds posses a mottled greenish brown skin tone, and their dress is usually moth-eaten rags or animal skins. Two-headed trolls use trollspeak as their language. Though part ettin, these monsters retain many of the abilities of trolls. They regenerate like trolls, but only 1 hit point a round, and severed limbs cannot reattach (their thicker limbs are not cleaved on a roll of 20). Two-headed trolls attack with two claws and two bites. Both bite attacks are against one opponent, but the claws may be directed against different foes. The troll can, though rarely, wield a weapon with a +6 damage bonus. Like ettins, two-headed trolls are surprised only on a 1. These creatures live in damp, underground caverns and can be found leading groups of their smaller troll cousins.}}{{desc9=}}'},
+ {name:'Gnoll',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Gnoll}}RaceData=[w:Gnoll, align:CE, weaps:short-blade|long-blade|pole-arm|battle-axe|bow|morningstar, ac:leather|padded|studded|ring-mail|brigandine|scale-mail|hide|chain-mail, cattr:int=5:7|mov=9|ac=10|size=L|hd=2r3|thac0=19|attk1=2d4:Weapon:3:P,ns:5],[cl:WP,%:5,prime:Shortsword],[cl:WP,%:5,prime:Longsword],[cl:WP,%:5,prime:Broadsword],[cl:WP,%:5,both:Awl Pike],[cl:WP,%:5,both:Bec de Corbin],[cl:WP,%5:,both:Fauchard],[cl:WP,%:5,both:Glaive],[cl:WP,%:5,both:Glaive-Guisarme],[cl:WP,%:5,both:Guisarme-Voulge],[cl:WP,%:5,both:Military Fork],[cl:WP,%:20,prime:Battleaxe],[cl:WP,%:5,both:Shortbow,items:Flight Arrows:20],[cl:WP,%:5,both:Longbow,items:Flight Arrows:20],[cl:WP,%:5,both:Longbow,items:Sheaf Arrows:10|Flight Arrows:10],[cl:WP,%:15,prime:Morningstar],[cl:MI,%:90,items:random:1d4],[cl:MI,%:10,items:random:1d2]{{subtitle=Creature}}{{Section=**Attributes**}}{{Intelligence=Low (5 to 7)}}{{AC=10, up to AC5 with armour}}{{Alignment=Chaotic Evil}}{{Move=9}}{{Hit Dice=2}}{{THAC0=19}}{{Attack=Default weapon for 2d4, or by weapon (equip via menus)}}{{Languages=*Gnoll,* and many also speak *flind, troll, orc,* or *hobgoblin*}}{{Size=L, 7-8ft tall}}{{Life Expectancy=On average 35 years}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Strength=}}{{Section5=**Tactics:** Gnolls seek to overwhelm their opponents by sheer numbers, using horde tactics. When under the direction of flinds or a strong leader, they can be made to hold rank and fight as a unit. While they do not often lay traps, they will ambush or attempt to attack from a flank or rear position.}}{{Section6=**Special Disadvantages**}}{{Section7=None}}Specs=[Gnoll,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc8=Gnolls are large, evil, hyena-like humanoids that roam about in loosely organized bands. While the body of a gnoll is shaped like that of a large human, the details are those of a hyena. They stand erect on two legs and have hands that can manipulate as well as those of any human. They have greenish gray skin, darker near the muzzle, with a short reddish gray to dull yellow mane.}}{{desc9=**Combat:** Gnolls seek to overwhelm their opponents by sheer numbers, using horde tactics. When under the direction of flinds or a strong leader, they can be made to hold rank and fight as a unit. While they do not often lay traps, they will ambush or attempt to attack from a flank or rear position. Gnolls favor swords (15%), pole arms (35%) and battle axes (20%) in combat, but also use bows (15%), morningstars (15%).}}'},
+ {name:'Gnoll-Chieftain',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Chieftain}}RaceData=[w:Gnoll Chieftain, ac:splint-mail|banded-mail|bronze-plate-mail|plate-mail, cattr:hd=4r3|ac=3|thac0=17|dmg=+3,ns:1],[cl:MI,%:10,items:random:1d6]{{subtitle=Creature}}%{Race-DB-Creatures|Gnoll}{{Hit Dice=4}}{{THAC0=17}}{{AC=3 (preset - can be improved with magical armour if equipped))}}{{Strength=Due to their great strength, Gnoll Chieftains gain +3 on damage that they do}}Specs=[Gnoll Chieftain,CreatureRace,0H,Gnoll]{{desc=**Gnoll Chieftain:** If 100 or more are encountered there will also be a chieftain who has 4 Hit Dice, an Armor Class of 3, and who receives a +3 on his damage rolls due to his great strength. Further, each chieftain will be protected by 2-12 (2d6) elite warrior guards of 3 Hit Dice (AC 4, +2 damage).}}'},
+ {name:'Gnoll-Leader',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Leader}}RaceData=[w:Gnoll Leader, cattr:hd=3r3|thac0=17,ns:1],[cl:MI,%:10,items:random:1d4]{{subtitle=Creature}}Specs=[Gnoll Leader,CreatureRace,0H,Gnoll]{{}}%{Race-DB-Creatures|Gnoll}{{Hit Dice=3}}{{THAC0=17}}{{desc=**Gnoll Leader:** A gnoll lair will contain between 20 and 200 adult males. For every 20 gnolls, there will be a 3 Hit Die leader.}}'},
+ {name:'Gnoll-Warrior-Guard',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Warrior Guard}}RaceData=[w:Gnoll Warrior Guard, cattr:hd=3r3|thac0=17|dmg=+2]{{subtitle=Creature}}%{Race-DB-Creatures|Gnoll}{{Hit Dice=3}}{{THAC0=17}}{{AC=4 (preset)}}{{Strength=Due to their great strength, Gnoll Warrior Guards gain +2 on damage that they do}}Specs=[Gnoll Leader,CreatureRace,0H,Gnoll]{{desc=**Gnoll Leader:** A gnoll lair will contain between 20 and 200 adult males. For every 20 gnolls, there will be a 3 Hit Die leader.}}'},
+ {name:'Gnoll-ac5',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= AC5}}RaceData=[w:Gnoll ac5, cattr:hd=2r3|thac0=19|ac=5]{{subtitle=Creature}}%{Race-DB-Creatures|Gnoll}{{Hit Dice=2}}{{THAC0=19}}Specs=[Gnoll,CreatureRace,0H,Gnoll]{{AC=5 (preset)}}'},
+ {name:'Goat',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Goat}}RaceData=[w:Goat, align:N, weaps:none, ac:none, cattr:int=1|mov=15|ac=7|hd=1+2r6|thac0=19|size=M|attk1=1d3:Butt with Horns:0:B|attk2=1d3+1d2:Charge attk:2:B|attkmsg=$$Charge attack is at +2 to hit - add this in manually]{{subtitle=Creature}}Specs=[Goat,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Animal (1)}}{{AC=7}}{{Alignment=Neutral}}{{Move=15}}{{Hit Dice=1+2 HD}}{{THAC0=19}}{{Attacks=Butt with horns for 1d3, charge at +2 to hit and an additional 1d2 damage}}{{Size=M}}{{Life Expectancy=15 to 18 years}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc9=**Combat:** When a goat charges, it gains a +2 attack bonus and does an additional 1-2 points damage.}}'},
+ {name:'Goat-of-Terror',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Figurine of Wonderous Power\nGoat of Terror}}RaceData=[w:Goat of Terror, align:N, weaps:none, ac:none, cattr:int=0|mov=36|ac=2|hd=6|hp=48|thac0=20|size=M,ns:1],[cl:PW,w:Goat Terror,sp:0,pd:-1]{{subtitle=Figurine}}Specs=[Goat of Terror,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Not (0)}}{{AC=2}}{{Alignment=Neutral}}{{Move=36}}{{Hit Dice=6HD, starts as 48HP}}{{THAC0=N/A - no attacks as a creature}}{{Size=M}}{{Section2=**Powers**}}{{Section3=Radiates *Terror* in a 30ft radius when ridden vs an opponent}}{{Section4=**Special Advantages**}}{{Section5=Rider can employ the goat\'s horns as weapons}}{{Section6=**Special Disadvantages**}}{{Attacks=No attacks}}{{Uses=Can normally only be used 3 times before the figurine loses its power}}{{Section9=**Description**}}{{desc8=When called upon with the proper command word, this statuette becomes a destrier-like mount, movement rate 36, Armor Class 2, 48 hit points, and no attacks. However, its rider can employ the goat\'s horns as weapons (one horn as a spear +3 (lance), the other as a sword +6). When ridden versus an opponent, the goat of terror radiates terror in a 30-foot radius, and any opponent in this radius must roll a successful saving throw vs. spell or lose 50% of strength and suffer at least a -3 penalty to attack rolls, all due to weakness caused by terror. When all opponents are slain, or upon the proper command, the goat returns to its statuette form. It can be used once every two weeks.}}'},
+ {name:'Goat-of-Travail',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Figurine of Wonderous Power\nGoat of Travail}}RaceData=[w:Goat of Travail, align:N, weaps:none, ac:none, cattr:int=0|mov=24|ac=0|hd=16|hp=96|thac0=5|size=L|attk1=2+2d4:Hooves x 2:0:B|attk2=2d4:Bite:1:P|attk3=2d6:Horns x 2:2:P,attkmsg:Cannot use hooves if charging$$Cannot use bite if charging$$If charging horns do additional damage - see damage message,dmgmsg:Cannot use hooves if charging$$Cannot use bite if charging$$If charging horns do additional +6 hp damage each]{{subtitle=Figurine}}Specs=[Goat of Travail,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Not (0)}}{{AC=0}}{{Alignment=Neutral}}{{Move=24}}{{Hit Dice=16HD, starts as 96HP}}{{THAC0=5}}{{Attacks=2 x Hooves for 2d4+2 Bludgeoning damage each, 1 x Bite for 2d4 Piercing damage, 2 x Horns for 2d6 each of Piercing damage - can *Charge* for +6 extra Horn damage, but can\'t then do Hoof or Bite attack}}{{Size=L larger than a bull!}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=Can normally only be used 3 times before the figurine loses its power}}{{Section9=**Description**}}{{desc8=When commanded, this statuette becomes an enormous creature, larger than a bull, with sharp hooves (2d4+2/2d4+2), a vicious bite (2d4), and a pair of wicked horns of exceptional size (2d6/2d6). If it is charging to attack, it may only use its horns, but +6 damage is added to each hit on that round (i.e., 8-18 hit points per damage per horn). It is Armor Class 0, has 96 hit points, and attacks as a 16 Hit Dice monster. It can be called to life just once per month up to 12 hours at a time. Its movement rate is 24.}}'},
+ {name:'Goat-of-Travelling',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Figurine of Wonderous Power\nGoat of Travelling}}RaceData=[w:Goat of Travelling, align:N, weaps:none, ac:none, cattr:int=0|mov=48|ac=6|hd=4|hp=24|thac0=17|size=M|attk1=1d8:Horn1:0:PB|attk2=1d8:Horn2:0:PB]{{subtitle=Figurine}}Specs=[Goat of Travelling,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Not (0)}}{{AC=6}}{{Alignment=Neutral}}{{Move=48 bearing 280lbs or less reduced by 1 for every additional 14lbs of weight carried}}{{Hit Dice=4HD, starts as 24HP}}{{THAC0=17}}{{Attacks=2 x Horns for 1d8 each of Piercing or Bludgeoning damage (depending on type of horn)}}{{Size=M}}{{Section2=**Powers**}}{{Section3=Can carry loads and riders of 280lbs or more}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=Can normally only be used 3 times before the figurine loses its power}}{{Section9=**Description**}}{{desc8=This statuette provides a speedy and enduring mount of Armor Class 6, with 24 Hit Points and 2 attacks (horns) for 1d8 each (consider as 4 Hit\nDice monster). Its movement rate is 48 bearing 280 pounds or less. Its movement is reduced by 1 for every additional 14 pounds of weight carried. The goat can travel a maximum of one day each week—continuously or in any combination of periods totalling 24 hours. At this point, or when the command word is uttered, it returns to its small form for not less than one day before it can again be used.}}'},
+ {name:'Goblin',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Goblin}}{{subtitle=Creature}}Specs=[Goblin,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low to Average (5-10)}}{{AC=10 (can wear simple armour up to AC6)}}{{Alignment=Lawful Evil}}{{Move=6}}{{Hit Dice=1-1}}{{THAC0=20}}{{Attack=1d6 and by weapon}}{{Languages=Harsh, and pitched higher than that of humans. In addition to their own language, some goblins can speak in the kobold, orc, and hobgoblin tongues.}}{{Size=S 4ft tall}}{{Life Expectancy=50 years or so}}{{Section2=**Powers**}}{{Section3=None}}{{Priest Spells=}}{{Section4=**Special Advantages**}}{{Infravision=60 foot, but suffer -1 to attacks in bright sunlight}}RaceData=[w:Goblin, align:LE, cattr:int=5:10|mov=6|size=S|hd=1-1r4|thac0=20|attk1=1d6:Simple weapon:3:S|attkmsg=Remember -1 to-hit penalty in \\lbrak;Bright Sunlight\\rbrak;\\lpar;!rounds ~~target caster¦`{selected¦token_id}¦Sunlight 1 tohit penalty¦99¦0¦Suffering -1 to hit due to being in bright sunlight¦bleeding-eye\\rpar; but back to normal in \\lbrak;Shade\\rbrak;\\lpar;!rounds ~~removetargetstatus `{selected¦token_id}¦Sunlight 1 tohit penalty\\rpar;,ns:1],[cl:MI,%:95],[cl:MI,%:5,items:random:1d3]{{Section9=**Description**}}{{desc8=These small, evil humanoids would be merely pests, if not for their great numbers. Goblins have flat faces, broad noses, pointed ears, wide mouths and small, sharp fangs. Their foreheads slope back, and their eyes are usually dull and glazed. They always walk upright, but their arms hang down almost to their knees. Their skin colors range from yellow through any shade of orange to a deep red. Usually a single tribe has members all of about the same color skin. Their eyes vary from bright red to a gleaming lemon yellow. They wear clothing of dark leather, tending toward dull soiled-looking colors.}}{{desc9=**Combat:** Goblins hate bright sunlight, and fight with a -1 on their attack rolls when in it. This unusual sensitivity to light, however, serves the goblins well underground, giving them infravision out to 60 feet. They can use any sort of weapon, preferring those that take little training, like spears and maces. They are known to carry short swords as a second weapon. They are usually armored in leather, although the leaders may have chain or even plate mail.\nGoblin strategies and tactics are simple and crude. They are cowardly and will usually avoid a face-to-face fight. More often than not, they will attempt to arrange an ambush of their foes.}}'},
+ {name:'Goblin-Assistant',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Leader\'s Assistant}}RaceData=[w:Goblin Assistant, cattr:hd=1r4|ac=6]{{subtitle=Creature}}%{Race-DB-Creatures|Goblin}{{AC=6 (preset)}}Specs=[Goblin Assistant,CreatureRace,0H,Goblin]{{Hit Dice=1}}{{desc=**Leader\'s Assistant:** For every 40 goblins there will be a leader and his 4 assistants, each having 1 Hit Die (7 hit points).}}'},
+ {name:'Goblin-Bodyguard',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Bodyguard}}RaceData=[w:Goblin Bodyguard, cattr:hd=2r4|thac0=19|ac=4|attk1=1d8:Battle Axe:7:S|attk2=1d6:Shortsword:3:S]{{subtitle=Creature}}%{Race-DB-Creatures|Goblin}{{AC=6 (preset)}}Specs=[Goblin Bodyguard,CreatureRace,0H,Goblin]{{Hit Dice=2}}{{THAC0=19}}{{Attack=1d6/1d8 and by weapon}}{{desc=**Chief\'s Bodyguard:** The tribe has a single goblin chief and 2-8 (2d4) bodyguards each of 2 Hit Dice, Armor Class 4, and armed with two weapons.}}'},
+ {name:'Goblin-Chief',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Chief}}RaceData=[w:Goblin Chief, cattr:hd=2r4|thac0=19|ac=4|attk1=1d8:Battle Axe:7:S|attk2=1d6:Shortsword:3:S,ns:1],[cl:MI,%:10,items:random:1d4],[cl:MI,%:10,items:random:1d6]{{subtitle=Creature}}%{Race-DB-Creatures|Goblin}{{AC=6 (preset)}}{{Hit Dice=2}}Specs=[Goblin Chief,CreatureRace,0H,Goblin]{{THAC0=19}}{{Attack=1d6/1d8 and by weapon}}{{desc=**Chief:** The tribe has a single goblin chief and 2-8 (2d4) bodyguards each of 2 Hit Dice, Armor Class 4, and armed with two weapons.}}'},
+ {name:'Goblin-Leader',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Leader}}RaceData=[w:Goblin Leader, cattr:hd=1r4|ac=6,ns:1],[cl:MI,%:10,items:random:1d3]{{subtitle=Creature}}%{Race-DB-Creatures|Goblin}{{AC=6 (preset)}}Specs=[Goblin Leader,CreatureRace,0H,Goblin]{{Hit Dice=1}}{{desc=**Leader:** For every 40 goblins there will be a leader and his 4 assistants, each having 1 Hit Die (7 hit points).}}'},
+ {name:'Goblin-Shaman-L5',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Shaman}}RaceData=[w:Goblin Shaman L5, cattr:cl=pr:goblin-shaman|lv=5|ac=6,ns:1],[cl:MI,%:10,items:random:1d4]{{subtitle=Creature}}%{Race-DB-Creatures|Goblin}{{AC=6 (preset)}}Specs=[Goblin Shaman,CreatureRace,0H,Goblin]{{Hit Dice=1}}{{Section3=}}{{Priest Spells=Spheres include: Divination, Healing (reversed), Protection, and Sun (reversed).}}{{desc=Goblin shamans are rare, but have been known to reach 7th level. Their spheres include: Divination, Healing (reversed), Protection, and Sun (reversed).}}'},
+ {name:'Goblin-Sub-Chief',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Sub-Chief}}RaceData=[w:Goblin Sub-Chief, cattr:hd=1+1r4|thac0=19|ac=5|attk1=1d8:Battle Axe:7:S,ns:1],[cl:MI,%:5,items:random:1d4]{{subtitle=Creature}}%{Race-DB-Creatures|Goblin}{{AC=6 (preset)}}Specs=[Goblin Sub-Chief,CreatureRace,0H,Goblin]{{Hit Dice=1+1}}{{THAC0=19}}{{Attack=1d8 and by weapon}}{{desc=**Sub-Chief:** For every 200 goblins there will be a sub-chief and 2-8 (2d4) bodyguards, each of which has 1+1 Hit Dice (8 hit points), is Armor Class 5, and armed with a battle axe.}}'},
+ {name:'Goblin-ac6',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= AC6}}RaceData=[w:Goblin ac6, cattr:ac=6]{{subtitle=Creature}}%{Race-DB-Creatures|Goblin}{{AC=6 (preset)}}Specs=[Goblin,CreatureRace,0H,Goblin]{{}}'},
+ {name:'Gold-Dragon',type:'dragonrace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}Specs=[Gold-Dragon,DragonRace,2H,Red-Dragon]{{}}RaceData=[w:Gold Dragon, cattr:int=17:18|mov=12|fly=40C|Jump=3|swim=12|ac=0-??1|hd=(16+??2)d8r1|mr=(v(^((??1-4);0);1)*(??1+2)*5)|cl=mu:gold-dragon/pr:gold-dragon|lv=8+??1/8+??1|thac0=5-??2|dmg=??1|size=G|attk1=1d10:Claw x 2 or Claw+Kick:0:S|attk2=6d6:Bite:0:P|attk3=2d10:Tail Swipe:0:B|attkmsg=Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$\\lbrak;Show the radius\\rbrak;\\lpar;!rounds ~~aoe `{selected¦token_id}¦arc180¦feet¦0¦\\lbrak;\\lbrak;`{selected¦age¦max}*12\\rbrak;\\rbrak;¦\\lbrak;\\lbrak;`{selected¦age¦max}*24\\rbrak;\\rbrak;¦black\\rpar; then up to \\lbrak;\\lbrak;`{selected¦age¦max}\\rbrak;\\rbrak; opponents in the area take damage and Save vs. Petrification with the penalty shown below or be \\lbrak;Stunned\\rbrak;\\lpar;!rounds ~~target area¦`{selected¦token_id}¦\\amp#64;{target¦Select the stunned creature¦token_id}¦Stunned¦\\lbrak;\\amp#91;1+1d4\\amp#93;\\rbrak;¦-1¦Stunned by a dragon tail slap¦back-pain\\rpar; for 1d4+1 rounds., spattk:*Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*, spdef:Magic resistance @{selected|monstermagicresist}% and immune to fire \\amp gas from birth, ns:=11],[cl:PW,w:Gold-Dragon-Breath,pd:-1,sp:1],[cl:PW,age:1,w:MU-Water-Breathing,pd:-1,sp:1],[cl:PW,age:1,w:MU-Polymorph-Self,pd:3,sp:1],[cl:PW,age:3,w:PR-Bless,pd:3,sp:1],[cl:PW,w:PR-Detect-Lie,age:4,pd:3,sp:1],[cl:PW,w:PR-Animal-Summoning-1,age:6,pd:1,sp:1],[cl:PW,w:PR-Animal-Summoning-II,age:7,pd:1,sp:1],[cl:PW,w:PW-Luck-Bonus,age:7,pd:1,sp:1],[cl:PW,w:PR-Quest,age:8,pd:1,sp:1],[cl:PW,w:PW-Detect-Gems-Kind+Number,age:8,pd:3,sp:1],[cl:PR,lv:1,w:],[cl:PR,lv:2,w:],[cl:PR,lv:3,w:],[cl:PR,lv:4,w:]{{}}%{Race-DB-Creatures|Red-Dragon}{{title=Gold}}{{Intelligence=Genius (17-18)}}{{AC=Varies with age, adult gold dragon is AC -6}}{{Move=12, FL 40(C) (winged form) FL 6(E) (wingless form), Swim 12 (winged) 15 (wingless), Jump 3}}{{Hit Dice=Varies with age, adult gold dragon is 18 HD}}{{THAC0=Varies with age, adult gold dragon is 3}}{{Section1=**Attacks:** Damage bonus varies with age, adult gold dragon is +6. 2 x Claws for 1d10 HP each, possibly with 1 or 2 kicks for 1d10 each, bite for 6d6, and tail slap for 2d10 and possible *stun* within an area varying with age. Several other attacks possible - see *Powers*}}{{Languages=*Gold Dragon* and *Good Dragon Common*, and can *speak with animals* freely from birth. 18% of hatchlings (+5% per age level) can perform universal communication with any intelligent creature}}{{Breath Weapon=A gold dragon has two breath weapons: a cone of fire 90\' long, 5\' wide at the dragon\'s mouth, and 30\' wide at the end or a cloud of potent chlorine gas 50\' long, 40\' wide and 30\' high. Creatures caught in either effect are entitled to a save versus breath weapon for half damage. Damage from the acid breath weapon varies by age from 2d12+1 to 24d12+12. }}{{Spell Casting=Knows a number of random wizard and priest spells cast at a level from 12 to 20 varying with age. All spells are cast at a speed of 1 segment regardless of the spell}}{{Spell-like Powers=All gold dragons can use *water breathing* at will, and can *polymorph self* 3 times a day. *Young* dragons can *bless* x 3 per day, *Juveniles* can *detect lie* x3 per day, *Adult* dragons gain *animal summoning I* x1 a day, *Mature Adults* can do *animal summoning II* x1 per day, and *luck bonus* once a day. *Old* dragons can cast *quest* x 1 per day, and *detect gems* once per day within 30ft radius.\nThe *luck bonus* power is used to aid *good* adventurers: see the description of the power by *viewing* it}}{{desc8=**Gold Dragons:** Gold dragons are wise, judicious, and benevolent. They often embark on self-appointed quests to promote goodness, and are not easily distracted from them. They hate injustice and foul play. A gold dragon frequently assumes human or animal guise and usually will be encountered disguised.\nAt birth, a gold dragon\'s scales are dark yellow with golden metallic flecks. The flecks get larger as the dragon matures until, at the adult stage, the scales grow completely golden.\nGold dragons can live anywhere. Their lairs are secluded and always made of solid stone, either caves or castles. These usually have loyal guards: either animals appropriate to the terrain, or storm or good cloud giants. The giants usually serve as guards through a mutual defensive agreement.}}{{desc9=**Combat:** Gold dragons usually parley before combat. When conversing with intelligent creatures they use *detect lie* and *detect gems* spells to gain the upper hand. In combat, they quickly use *bless* and *luck bonus*. Older dragons use *luck bonus* at the start of each day if the duration is a day or more. They make heavy use of spells in combat.}}'},
+ {name:'Gorgon',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Gorgon}}{{subtitle=Creature}}Specs=[Gorgon,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Animal (1)}}{{AC=2}}{{Alignment=Neutral}}{{Move=12}}{{Hit Dice=8}}{{THAC0=13}}{{Attack=2d6 gore with horns, and breath weapon}}{{Languages=None}}{{Size=L, 8ft tall}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Breath Weapon=4 times per day, cone 20ft at end, up to 60ft long, save vs. petrification}}{{Section4=**Special Advantages**}}{{Keen senses=Sense of smell is acute and are 75% likely to track their victim successfully.}}RaceData=[w:Gorgon, align:N, cattr:int=1|mov=12|size=L|hd=8|thac0=13|attk1=2d6:Gore with horns:0:P, ns:1],[cl:PW,w:Gorgon Breath,sp:0,pd:4]{{Section9=**Description**}}{{desc=Gorgons are fierce, bull-like beasts who make their lairs in dreary caverns or the fastness of a wilderness. They are aggressive by nature and usually attack any creature or person they encounter.\nMonstrous black bulls, gorgons have hides of thick metal scales. Their breath is a noxious vapor that billows forth in great puffs from their wide, bull nostrils. Gorgons walk on two hooves, when necessary, but usually assume a four-hoofed stance. Despite their great size, they can move through even heavy forests with incredible speed, for they simply trample bushes and splinter smaller trees. Gorgons speak no languages but let out a roar of anger whenever they encounter other beings.}}{{desc1=**Combat:** Four times per day gorgons can make a breath weapon attack (their preferred means of attack). Their breath shoots forth in a truncated cone, five feet wide at the base and 20 feet wide at its end, with a maximum range of 60 feet. Any creature caught in this cone must roll a saving throw vs. petrification. Those who fail are turned to stone immediately! The awareness of gorgons extends into the Astral and Ethereal planes, as do the effects of their breath weapon.\nIf necessary (i.e., their breath weapon fails) gorgons will engage in melee, charging forward to deliver a vicious head butt or horn gore. Gorgons fight with unrestricted ferocity, slashing and trampling all who challenge them until they themselves are slain.\nTheir sense of smell is acute and once they get on the trail gorgons are 75% likely to track their victim successfully. Once their victim is in sight, gorgons let out a scream of rage and then charge. Unless somehow evaded, a gorgon will pursue tirelessly, for days if necessary, until the prey either drops from exhaustion or is caught in the gorgon\'s deadly breath.}}'},
+ {name:'Gray-Ooze',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Ooze}}{{prefix=Grey}}RaceData=[w:Gray Ooze, align:N, cattr:int=1|mov=1|ac=8|size=M|hd=3+3r2|thac0=17|attk1=2d8:Corrosive Strike:0:B, spattk:Corrode metal at fast rate. Chain-mail 1 round. Plate-mail 2 rounds. Magic armour at 1 round per plus, spdef:Spells / fire / cold have no effect on gray ooze],{{subtitle=Creature}}{{Section=**Attributes**}}{{Intelligence=Animal (1)}}{{AC=8, natural skin}}{{Alignment=Neutral}}{{Move=1}}{{Hit Dice=3d8+3}}{{THAC0=17}}{{Section1=**Attack**\nA snake-like strike doing 2d8 damage and corrosive damage to metal: chain mail in one round, plate mail in two, and magical armor in one round per each plus to Armor Class}}{{Languages=Does not make sounds}}{{Size=M to L, 4 to 12 ft long, 6 to 8 ins thick}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=**Invulnerability:** Spells have no effect on this monster, nor do fire- or cold-based attacks.\n**Corrosion:** Gray ooze strikes like a snake, and can corrode metal at an alarming rate. Weapons striking a gray ooze may corrode and break}}{{Section6=**Special Disadvantages**}}{{Section7=None}}Specs=[Gray Ooze,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc=Gray ooze is a slimy horror that looks like wet stone or a sedimentary rock formation. It cannot climb walls or ceilings, so it slides, drips, and oozes along cavern floors.}}{{hide8=\nAfter a large meal, a gray ooze reproduces by "budding:" growing a small pod that is left behind in a corridor or cavern. This pod takes two to three days to mature and then the little gray ooze absorbs its leathery shell and begins slithering about, searching for a meal. Sometimes more than one of these monsters are found together, but this is just a random event because they are not intelligent.\nThe gray ooze is a dungeon scavenger. It is rumored that metalworkers of extraordinary skill keep very small oozes in stone jars to etch and score their metal work, but this is a delicate and dangerous practice.}}{{desc9=**Combat:** The gray ooze strikes like a snake, and can corrode metal at an alarming rate. Spells have no effect on this monster, nor do fire- or cold-based attacks. Lightning and blows from weapons cause full damage. Note that weapons striking a gray ooze may corrode and break.}}'},
+ {name:'Greater-Basilisk',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Basilisk}}{{subtitle=Creature}}Specs=[Basilisk-Greater,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low (5:7)}}{{AC=2}}{{Alignment=Neutral}}{{Move=6}}{{Hit Dice=10}}{{THAC0=11}}{{Attack=2 x Claw 1d6, 1 x Bite 2d8}}{{Languages=None known}}{{Size=L, 12ft long}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=**Gaze:** Its gaze turns those who meet eyes to stone. Attacking or surprised opponents automatically meet its gaze and must save vs. petrification each round they attack, unless from the rear. Can look "in general direction" to hit at -2 \\amp get 20% chance of meeting gaze. Or avert \\amp attack blindfolded for -4 to-hit}}{{Section4=**Special Advantages**}}{{Poison Claws=Claws have poison tyle K with save at +4 or take 5HP damage in 2d4 rounds}}{{Poison Breath=If within 5ft of mouth, save vs. poison at +2 or die}}{{Surprise=Only surprised on a 1}}{{Section6=**Special Disadvantages**}}{{Reflections=If lit, and can see its own reflection, can petrify itself}}RaceData=[w:Greater Basilisk, align:N, cattr:int=5:7|mov=6|ac=2|size=L|hd=10r2|thac0=11|attk1=1d6:Claw:0:S|attk2=1d6:Claw:0:S|attk3=2d8:Bite:1:P|dmgmsg=Claws have Type K poison - **save at +4 bonus** or \\lbrak;take 5HP in 2d4 rounds\\rbrak;\\lpar;!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who has been struck?¦token_id}¦Poison K_Feeling Wrong_¦\\amp#91;\\lbrak;2d4\\rbrak;\\amp#93;¦-1¦Somethings wrong... not quite sure what...¦skull\\rpar;. If within 5ft of mouth **save vs. Poison at +2 or die from breath**. Gaze \\lbrak;Petrifies\\rbrak;\\lpar;!rounds ~~aoe `{selected¦token_id}¦cone¦feet¦0¦50¦50¦green¦true ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the unfortunate soul?¦token_id}¦Petrified¦99¦0¦Petrified by a Gaze Attack¦padlock\\rpar;. Those attacking without counter-measures must save every round,spattk:Petrification gaze attack,ns:1],[cl:PW,w:Petrification-Gaze-Attack,sp:0,pd:-1]{{Section9=**Description**}}{{desc=These reptilian monsters all posses a gaze that enables them to turn any fleshy creature to stone; their gaze extends into the Astral and Ethereal planes.\nThe greater basilisk is a larger cousin of the more common reptilian horror, the ordinary basilisk. These monsters are typically used to guard treasure.}}{{desc1=**Combat:** The monster attacks by raising its upper body, striking with sharp claws, and biting with its toothy maw. The claws carry Type K poison (saving throws vs. poison are made with a+4 bonus). Its foul breath is also poisonous, and all creatures, coming within 5 feet of its mouth, even if just for a moment, must roll successful saving throws vs. poison (with a+2 bonus) or die (check each round of exposure).\nEven if a polished reflector is used under good lighting conditions, the chance for a greater basilisk to see its own gaze and become petrified is only 10%, unless the reflector is within 10 feet of the creature. (While its gaze weapon is effective to 50 feet, the creature\'s oddly-shaped eyes are nearsighted and it cannot see its own gaze unless it is within 10 feet.)}}'},
+ {name:'Green-Dragon',type:'dragonrace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}Specs=[Green-Dragon,DragonRace,2H,Red-Dragon]{{}}RaceData=[w:Green Dragon, cattr:int=11:12|mov=9|fly=30C|swim=9|ac=4-??1|hd=(13+??2)d8r1|mr=(v(^((??1-4);0);1)*(??1-2)*5)|cl=mu:green-dragon|lv=5+??1|thac0=7-??2|dmg=??1|size=G|attk1=1d8:Claw x 2 or Claw+Kick:0:S|attk2=2d10:Bite:0:P|attk3=2d8:Tail Swipe:0:B|attkmsg=Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$\\lbrak;Show the radius\\rbrak;\\lpar;!rounds ~~aoe `{selected¦token_id}¦arc180¦feet¦0¦\\lbrak;\\lbrak;`{selected¦age¦max}*8\\rbrak;\\rbrak;¦\\lbrak;\\lbrak;`{selected¦age¦max}*16\\rbrak;\\rbrak;¦black\\rpar; then up to \\lbrak;\\lbrak;`{selected¦age¦max}\\rbrak;\\rbrak; opponents in the area take damage and Save vs. Petrification with the penalty shown below or be \\lbrak;Stunned\\rbrak;\\lpar;!rounds ~~target area¦`{selected¦token_id}¦\\amp#64;{target¦Select the stunned creature¦token_id}¦Stunned¦\\lbrak;\\amp#91;1+1d4\\amp#93;\\rbrak;¦-1¦Stunned by a dragon tail slap¦back-pain\\rpar; for 1d4+1 rounds., spattk:*Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*, spdef:Magic resistance @{selected|monstermagicresist}% and immune to gasses from birth, ns:=11],[cl:PW,w:Green-Dragon-Breath,pd:-1,sp:1],[cl:PW,age:4,w:MU-Water-Breathing,pd:-1,sp:1],[cl:PW,age:6,w:MU-Suggestion,pd:1,sp:1],[cl:PW,w:PR-Warp-Wood,age:7,pd:3,sp:1],[cl:PW,w:MU-Plant-Growth,age:8,pd:1,sp:1],[cl:PW,w:PR-Entangle,age:9,pd:1,sp:1],[cl:PW,w:PR-Pass-Without-Trace,age:11,pd:3,sp:1]{{}}%{Race-DB-Creatures|Red-Dragon}{{title=Green}}{{Intelligence=Very intelligent (11-12)}}{{AC=Varies with age, adult green dragon is AC -2}}{{Move=9, FL 30(C), Sw 9}}{{Hit Dice=Varies with age, adult green dragon is 15 HD}}{{THAC0=Varies with age, adult green dragon is 5}}{{Section1=**Attacks:** Damage bonus varies with age, adult green dragon is +6. 2 x Claws for 1d8 HP each, possibly with 1 or 2 kicks for 1d8 each, bite for 2d10, and tail slap for 2d8 and possible *stun* within an area varying with age. Several other attacks possible - see *Powers*}}{{Languages=*Green Dragon* and *Evil Dragon Common*, and 12% of hatchlings (+5% per age level) can perform universal communication with any intelligent creature}}{{Breath Weapon=A cloud of poisonous chlorine gas, extending 50ft from the dragon, 40ft wide and 30ft high. Damage varies by age from 2d6+1 to 24d6+12. Save vs. Breath Weapon to take half damage}}{{Spell Casting=Knows a number of random wizard spells cast at a level from 9 to 17 varying with age. All spells are cast at a speed of 1 segment regardless of the spell}}{{Spell-like Powers=*Juvenile* dragons learn *water breathing* at will, *Adults* can do *Suggestion* once a day, a *Mature Adult* dragon gains *Warp Wood* 3 x a day, *Old* dragons gain *Plant Growth* x 1 per day, and *Wyrms* gain *Pass without Trace* x 3 per day}}{{desc8=**Green Dragons:** Green dragons are bad tempered, mean, cruel, and rude. They hate goodness and good-aligned creatures. They love intrigue and seek to enslave other woodland creatures, killing those who cannot be controlled or intimidated.\nA hatchling green dragon\'s scales are thin, very small, and a deep shade of green that appears nearly black. As the dragon ages, the scales grow larger and become lighter, turning shades of forest, emerald, and olive green, which helps it blend in with its wooded surroundings. A green dragon\'s scales never become as thick as other dragons\', remaining smooth and flexible.\nGreen dragons are found in sub-tropical and temperate forests, the older the forest and bigger the trees, the better. The sights and smells of the woods are pleasing to the dragon, and it considers the entire forest or woods its territory. Sometimes the dragon will enter into a relationship with other evil forest-dwelling creatures, which keep the dragon informed about what is going on in the forest and surrounding area in exchange for their lives. If a green dragon lives in a forest on a hillside, it will seek to enslave hill giants, which the dragon considers its greatest enemy. A green dragon makes its lair in underground chambers far beneath its forest.\nThe majority of green dragons encountered will be alone. However, when a mated pair of dragons and their young are encountered, the female will leap to the attack. The male will take the young to a place of safety before joining the fight. The parents are extremely protective of their young, despite their evil nature, and will sacrifice their own lives to save their offspring.}}{{desc9=**Combat:** Green dragons initiate fights with little or no provocation, picking on creatures of any size. If the target creature intrigues the dragon or appears to be difficult to deal with, the dragon will stalk the creature, using its environment for cover, until it determines the best time to strike and the most appropriate tactics to use. If the target appears formidable, the dragon will first attack with its breath weapon, magical abilities, and spells. However, if the target appears weak, the dragon will make its presence known quickly for it enjoys evoking terror in its targets. When the dragon has tired of this game, it will bring down the creature using its physical attacks so the fight lasts longer and the creature\'s agony is prolonged.\nSometimes, the dragon elects to control a creature, such as a human or demi-human, through intimidation and suggestion. Green dragons like to question men, especially adventurers, to learn more about their society, abilities, what is going on in the countryside, and if there is treasure nearby.}}'},
+ {name:'Grell-Patriarch',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Grell Patriarch,cattr:int=19|hd=9|thac0=11|ac=10|size=G|mov=0|attk1=|attk2=,ns:1],[cl:MI,%:60],[cl:MI,%:20,items:random:1d3],[cl:MI,%:20,items:random:2+1d4]{{}}Specs=[Grell Patriarch,CreatureRace,2H,Grell Worker]{{}}%{Race-DB-Creatures|Grell-Worker}{{prefix=Patriarch}}{{Intelligence=Supra-genius (19)}}{{Hit Dice=9}}{{THAC0=11}}{{desc8=Each hive has a patriarch, a huge, sedentary mass of flesh that directs the lesser grell. If the patriarch is taken to a ship, it can dig its many tentacles into the ship and animate it, even make it fly to other worlds.}}{{desc9=}}'},
+ {name:'Grell-Philosopher',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Grell Philosopher,cattr:int=15:16|hd=7|thac0=13,ns:1],[cl:MI,%:60],[cl:MI,%:20,items:random:1d3],[cl:MI,%:20,items:ring of protection ac+4 save+2]{{}}Specs=[Grell Philosopher,CreatureRace,2H,Grell Worker]{{}}%{Race-DB-Creatures|Grell-Worker}{{prefix=Philosopher}}{{Intelligence=Exceptional (15 or 16)}}{{Hit Dice=7}}{{THAC0=13}}{{desc8=Philosopher grell serve as intermediaries between patriarchs and workers/soldiers. Some lead lesser grell in combat, and there is one philosopher for every 10 lesser grell encountered. Some philosophers (20%) wear powerful rings of protection, giving them AC 0. About 10% of philosophers can cast spells as 2nd-level wizards.}}'},
+ {name:'Grell-Philosopher-Wizard',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Grell Philosopher Wizard,cattr:cl=MU|lv=2,ns:1]{{}}Specs=[Grell Philosopher Wizard,CreatureRace,2H,Grell Philosopher]{{}}%{Race-DB-Creatures|Grell-Philosopher}{{prefix=}}{{name=Philosopher Wizard}}'},
+ {name:'Grell-Soldier',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Grell Soldier,cattr:attk1=1d6:Tip Spear Slash:0:S|attk2=2d6:TipSpear Impale:0:P|attk3=1d6:Beak vs paralysed:0:P,ns:1],[cl:WP,prime:Lightning Lance:(26+1d10)]{{}}Specs=[Grell Soldier,CreatureRace,2H,Grell Worker]{{}}%{Race-DB-Creatures|Grell-Worker}{{prefix=Soldier}}{{Section1=**Attack**\n10 tip-spear tentacles at either 1d6 slash or 2d6 impale (pierce) attack. Beak for 1d6 (only if victim paralysed and captured).\nOr *lightning lance* with up to 36 charges, doing 3d6 (save vs spell halves damage).\n\n**Languages**\nA weird language composed of bird-like squawks and chirps, combined with tentacular motion and a limited telepathy with other grell. Other creatures cannot learn the grell language}}'},
+ {name:'Grell-Worker',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Grell}}{{prefix=Worker}}RaceData=[w:Grell Worker, align:NE, cattr:int=8:10|fly=12D|ac=5|size=M|hd=5|thac0=15|attk1=1d4:Tenticle x 10:0:SPB|attk2=1d6:Beak:0:P|dmgmsg=On a successful hit press \\lbrak;save vs paralysis\\rbrak;\\lpar;!rounds --target-save single¦@{selected¦token_id}¦\\at;{target¦Select Target¦token_id}¦paralysis¦5d4¦-1¦Paralysed by a Grell tentacle¦padlock¦svpar\\clon;+4\\rpar;, spattk:Tentacles cause paralysis when successfully hit (save at +4 bonus). Automatic hit paralysed victim. With 2 gripping tentacles can lift victim to beak]{{subtitle=Creature}}{{Section=**Attributes**}}{{Intelligence=Average (8 to 10)}}{{AC=5, natural skin}}{{Alignment=Neutral Evil}}{{Move=Flying (Levitation) 12(D)}}{{Hit Dice=5}}{{THAC0=15}}{{Section1=**Attack**\n10 tentacles at 1d4 each. Beak for 1d6 (only if victim paralysed and captured)\n\n**Languages**\nA weird language composed of bird-like squawks and chirps, combined with tentacular motion and a limited telepathy with other grell. Other creatures cannot learn the grell language}}{{Size=M, 4ft diameter}}{{Life Expectancy=30 to 40 years}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=**Immunity:** Immune to electrical attacks.\n**Paralysation:** For each hit, the victim must save vs. paralysis, with a +4 bonus, or be paralyzed for 5d4 rounds.\n**Gripping:** With two tentacles gripping the prey, the grell can lift it up toward the ceiling and devour the prey when desired}}{{Section6=**Special Disadvantages**}}{{Section7=Any hit against a tentacle (AC 4) renders it unusable, but subtracts no hit points from the grell\'s total. Tentacles regenerate in 1-2 days}}Specs=[Grell Worker,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc7=The grell is a fearsome carnivore that looks like a giant brain with a vicious beak and 10 dangling tentacles, each 6 feet long. Some grell are rogues, while others live in family units. The "civilized" grell is a hive or colony creature, much like an ant or a bee, but far more intelligent, arrogant, and dangerous.}}{{desc8=Workers and soldiers are the common grell that form the bulk of a hive or raiding party. Occasionally, a grell will become separated from its fellows; these become rogues. Rogues carry no weapons, collect no treasure, and avoid sunlight.}}\n{{desc9=**Combat:** The grell\'s most common strategy is to use its natural levitation ability to hide in the upper reaches of large chambers. It can then drop silently on a victim, who suffers a -3 penalty to surprise rolls when attacked in this way.\nA worker grell attacks with all 10 tentacles; each one that hits grips the opponent (the grip can be broken with a successful bend bars/lift gates roll). Grell use strategy and tactics in their battles, and can attack more than one opponent each round. They are intelligent enough to allocate their tentacle attacks in an advantageous way. They use their beaks only against paralyzed prey.}}'},
+ {name:'Gremlin',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Gremlin}}RaceData=[w:Gremlin, align:CE, cattr:int=11:12|mov=6|fly=18 (B)|ac=4|size=T|hd=4r3|thac0=17|attk1=1d4:Bite:0:P|mr=25|mw=+1|attkmsg=Only hit by magical weapons. 25% magic resistance, spdef:Only hit by magical weapons. 25% magic resistance]{{subtitle=Creature}}{{Section=**Attributes**}}{{Intelligence=Very (11 or 12)}}{{AC=4}}{{Alignment=Chaotic Evil}}{{Move=6, Fl 18(B)}}{{Hit Dice=4}}{{THAC0=17}}{{Attack=Bite for 1d4}}{{Languages=*Gremlin*. May also understand other languages, but never known to speak them}}{{Size=T, 18ins tall}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Surprise=}}{{Magic Resistance=25% magic resistance}}{{Magical Weapons To Hit=Magically enchanted weapons are required to hit Gremlins}}{{Section6=**Special Disadvantages**}}{{Section7=**Avoid Melee:** Gremlins are worthless in real combat; at every opportunity they flee rather than fight face-to-face. In melee, gremlins have only their weak bite for attacks (1d4 points of damage). They can fly quite well (MC B), but they usually stay close to the ground or well over their opponents\' heads, where they are difficult to reach.}}Specs=[Gremlin,CreatureRace,0H,Creature]{{Section8=**Description**}}{{desc8=Often mistaken for imps, gremlins are small, winged goblinoids. There are many varieties of gremlins, and most are chaotic and mischievous. Their skin color ranges from brown to black to gray, frequently in a mottled blend. Their ears are very large and pointed, giving them a 65% chance to hear noise. A pair of bat-like wings enables them to fly or glide. Gremlins never wear clothing or ornamentation.}}{{desc9=**Combat:** What gremlins like to do best is cause trouble. The angrier their victims are, the happier the gremlins. Their favorite tactic is to set up a trap to humiliate opponents and maybe even cause them to damage a valued possession or hurt a loved one. If the opponent gets hurt as well, that\'s just fine. For example, the gremlin may set a trip wire across a doorway that pulls down a fragile vase onto the victim\'s head. A building infested by a gremlin pack can be reduced to shambles in a single night.}}'},
+ {name:'Gremlin-Fremlin',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Fremlin}{{subtitle=Creature}}RaceData=[w:Fremlin]{{}}Specs=[Fremlin,CreatureRace,0H,Fremlin]{{}}'},
+ {name:'Gremlin-Galtrit',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Galtrit}{{}}RaceData=[w:Galtrit]{{}}Specs=[Galtrit,CreatureRace,0H,Galtrit]{{}}'},
+ {name:'Gremlin-Mite',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Mite}{{}}Specs=[Mite,CreatureRace,0H,Mite]{{}}RaceData=[w:Mite]{{}}'},
+ {name:'Gremlin-Mite-Female',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Mite-Female}{{}}RaceData=[w:Mite Female]{{}}Specs=[Mite Female,CreatureRace,0H,Mite-Female]{{}}'},
+ {name:'Gremlin-Mite-King',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Mite-King}{{}}RaceData=[w:Mite King]{{}}%{Race-DB-Creatures|Mite-King}{{}}Specs=[Mite King,CreatureRace,0H,Mite-King]{{}}'},
+ {name:'Gremlin-Snyad',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB_Creatures|Snyad}{{}}RaceData=[w:Snyad]{{}}Specs=[Snyad,CreatureRace,0H,Snyad]{{}}'},
+ {name:'Grick',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Grick}}RaceData=[w:Grick, align:N, cattr:int=3:4|mov=3|ac=6|size=M|hd=6|thac0=14|attk1=1d6+2:Tenticle x 1:0:S|attk2=2d4+2:Beak:0:P|attkmsg=Beak only gets an attack if a tentacle sucessfully hits, spattk:In stony environments gains a +3 benefit on surprise,ns:1],[cl:MI,items:random:1d5-1]{{subtitle=Creature}}{{Section=**Attributes**}}{{Intelligence=Semi (3 to 4)}}{{AC=6, natural skin}}{{Alignment=Neutral}}{{Move=3. Generally stays in one rocky place and attacks using surprise. Only moves if prey dries up.}}{{Hit Dice=6}}{{THAC0=14}}{{Section1=**Attack**\n4 tentacles at 1d6+2, but only 1 tentacle attack roll is made per round. Beak for 2d4+2 only if victim is successfully hit by a tentacle.}}{{Size=M}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=Any hit against a tentacle (AC 4) renders it unusable, but subtracts no hit points from the grell\'s total. Tentacles regenerate in 1-2 days}}Specs=[Grick,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc=This creature was first introduced in 3e so this 2e version is a custom adaptation.\nThe wormlike grick waits unseen, blending in with the rock of the caves and caverns it haunts. Only when prey comes near does it rear up, its four barbed tentacles unfurling to reveal its hungry, snapping beak.}}{{hide8=Over time, grick lairs accumulate the cast-off possessions of intelligent prey, and expert guides know to look out for these telltale signs. Underdark explorers sometimes seal off the routes leading to and from a grick lair to starve them, then claim the wealth of the foul creatures’ victims.\nGricks remain in an area until the food supply dwindles, often because sentient creatures become aware of their presence and plot alternate routes around their lairs. When prey is scarce in the Underdark, gricks venture aboveground to hunt in the wilderness, lurking in trees or on cliff-side ledges. A grick pack is often led by a single well-fed, oversized alpha around which the others congregate.}}{{desc9=**Combat:** Gricks rarely hunt. Instead, they drag their rubbery bodies to places where creatures regularly pass, lurking out of sight amid rocky rubble and debris, squeezing into burrows, holes, or crevices, climbing up to ledges, or coiling around stalactites to drop on unwary prey. A grick consumes virtually anything that moves except for other gricks. It targets the nearest prey, grabbing a fallen creature with its tentacles and dragging it off to eat alone.}}'},
+ {name:'Grick-Alpha',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Grick Alpha,cattr:attk1=2d8+2:Tentacle:0:S|attk2=1d8+4:Beak:0:P|attk3=1d6+2:Tail:0:B,ns:1]{{}}Specs=[Grick Alpha,CreatureRace,2H,Grick]{{}}%{Race-DB-Creatures|Grick}{{name=Alpha}}{{Section1=**Attack**\n4 tentacles at 2d8+2, but only 1 tentacle attack roll is made per round. Beak for 1d8+4 only if victim is successfully hit by a tentacle. In addition, gains a tail attack each round for 1d6+2.}}'},
+ {name:'Half-Ogre',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Half-Ogre}}{{subtitle=Creature}}Specs=[Half-Ogre,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Semi- to High (3-14)}}{{AC=5 (preset)}}{{Alignment=Chaotic Evil}}{{Move=12}}{{Hit Dice=2+6}}{{HP=}}{{THAC0=17}}{{Attacks=By weapon, usually equipped with either a half-ogre sword or war spear}}{{Languages=Half-ogres speak *common* (more clearly and unimpeded than ogres), *ogrish, orcish, troll,* and one other, usually human, language.}}{{Size=L 9-10ft tall}}{{Life Expectancy=About 110 years}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Great Mass=grants +2 damage}}{{Priest Spells=}}{{Infravision=60 feet}}{{Section5=**Leaders:** Half-ogres in combat are often found with full-blooded ogres. If so, the half-ogre will most likely be leading the ogre party. The ogres fight more wisely when led by a half-ogre that concentrates assaults on characters it recognizes as spellcasters, and teaming up against skilled fighters. Ambushes are better-planned and more carefully baited.}}RaceData=[w:Half Ogre, align:CE, cattr:int=3:14|mov=12|ac=5|hd=2+6r2|thac0=17|size=L|dmg=+2|attk1=2+1d10:Sword:10:S|attk2=2+2d4:Spear:8:P|attkmsg=Better to use equipped half-ogre weapons, spattk:Strength gives bonuses to damage. Equipped half-ogre weapons better than innate attacks,ns:1],[cl:MI,%:90,items:random:1],[cl:MI,%:10,items:random:1d2]{{Section9=**Description**}}{{desc8=When adventuring companies journey into the wilderness they often run into ogres; big, ugly humanoids. Occasionally, an ogre party will include one or two individuals that are a little shorter, but significantly smarter, wielding a weapon with more skill than might have been expected. They have a better understanding of their opponents, and they grunt commands that anticipate the adventurers\' moves. In\nthis way half-breeds, the issue of ogres and humans, earn the respect of their kind.\nHalf-ogres range from 7 to 8 feet in height and weigh from 315 to 425 pounds. Skin and hair color are variable, but tend toward brown, gray, black, dull yellow (skin only), or any of the above with a slight gray-green tint. Teeth and nails are always orange. Most half-ogres have human-like eyes, though about one in five have the white pupils common to ogres. Their odor is noticeable, but it is not as overpowering as that of a full-blooded ogre. The half-ogre traditionally wears heavy skins and furs, bringing his Armor Class up to that of his ogre brethren, but rare individuals have the ability to make a shirt of chain-mail, for an AC of 3.}}{{desc9=**Combat:** Half-ogres of any sort suffer -2 penalties to their attack rolls against dwarves and -4 against gnomes, since those smaller races are so skilled at battling bigger folk.\nTo earn command privileges, particularly when ogre leaders are present, a half-ogre must show himself quick to battle and fierce in combat. Half-ogres\' usual weapon of choice is a huge sword and shield, or a war spear capable of causing 2d4 points of damage. A half-ogre inflicts an additional 2 points of damage, due to his mass.}}'},
+ {name:'Half-Ogre-Kader',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Kader}}RaceData=[w:Half-Ogre Kader, cattr:hd=6r2|thac0=15,ns:1],[cl:MI,%:10,items:random:1d4]{{}}%{Race-DB-Creatures|Half-Ogre}{{}}Specs=[Half-Ogre Kader,CreatureRace,0H,Half-Ogre]{{Hit Dice=6}}{{THAC0=15}}{{desc=**Half-Ogre Kader:** For every 10 half-ogres in an encounter, there is a kader with 6 Hit Dice.}}'},
+ {name:'Half-Ogre-Shaman',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Shaman}}RaceData=[w:Half-Ogre Shaman, cattr:hd=5+3r2|thac0=15|cl=pr:priest|lv=4,ns:1],[cl:MI,%:10,items:random:1d4{{}}Specs=[Half-Ogre Shaman,CreatureRace,0H,Half-Ogre]{{}}%{Race-DB-Creatures|Half-Ogre}{{Hit Dice=5+3}}{{THAC0=15}}{{Priest Spells=Has spell casting capability as a 4th level priest}}{{desc=**Half-Ogre Shaman:** If more than 15 half-ogres are encountered, they will have a shaman, a fighter/priest with 5 + 3 Hit Dice and the spells of a 4th-level priest, and two acolyte shamans, with 4+6 Hit Dice and the spells of a 2nd-level priest.}}'},
+ {name:'Half-Ogre-Veteran',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Veteran}}RaceData=[w:Half-Ogre Veteran, cattr:hd=5+3r2|thac0=15,ns:1],[cl:MI,%:10,items:random:1d6]{{}}%{Race-DB-Creatures|Half-Ogre}{{}}Specs=[Half-Ogre Veteran,CreatureRace,0H,Half-Ogre]{{Hit Dice=5+3}}{{THAC0=15}}{{desc=**Half-Ogre Veteran:** For every five half-ogres in an encounter, there is an additional veteran with 5+3 Hit Dice.}}'},
+ {name:'Half-Ogre-no-armour',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Half-Ogre no armour, cattr:ac=9]{{}}%{Race-DB-Creatures|Half-Ogre}{{}}Specs=[Half-Ogre no armour,CreatureRace,0H,Half-Ogre]{{AC=9, can equip with armour to improve AC}}'},
+ {name:'Heavy-War-Horse',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Heavy War Horse, cattr:mov=15|hd=3+3r5|attk1=1d3:Bite:0:P|attk2=1d8:Left Hoof:0:B|attk3=1d8:Right Hoof:0:B]{{}}Specs=[Heavy War Horse,CreatureRace,0H,Horse]{{}}%{Race-DB-Creatures|Horse}{{name=(Heavy War)}}{{Move=15}}{{Attacks=Bite for 1d3, 2 x Hooves for 1d8 each}}{{desc8=**Heavy War Horse:** Warhorses are bred and trained to the lance, the spear, and the sword. They have higher morale than other horses, and are not as skittish about sudden movements and loud noises. The choice of knights and cavalry, these are the pinnacle of military horses. There are three varieties; heavy, medium and light.\n*Heavy war horses* are similar to draft animals. Large and muscular, they are relatively slow. Their size and powerful legs allow them to be armored in plate, and to carry a warrior in plate, as easily as a pony carries saddle bags. A good heavy war horse, fully trained, costs 400 or more gold pieces.}}{{desc9=**Combat:** War horses will fight independently of the rider on the second and succeeding rounds of a melee. They attack three-times per round by kicking with their front hooves and biting.\n*War Horses* are specially trained, and are accustomed to loud noises, strange smells, fire, or sudden movements, panicing only 10% of the time.}}'},
+ {name:'Hell-Hound-4HD',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Hell Hound}}{{name=4HD}}RaceData=[w:Hell Hound 4HD, align:LE, ac:none, weaps:none, cattr:int=5:7|mov=12|ac=4|hd=4r3|thac0=17|size=M|attk1=1d10:Bite:0:B|attkmsg=Remember immune to fire; keen hearing so only surprised on 1 or 2; can see hidden or invisible creatures 50% of the time|dmgmsg=If rolled a natural 20 then do Fire Breath damage of \\lbrak;\\lbrak;@{selected¦hitdice}\\rbrak;\\rbrak; HP as well \\lpar;save vs. breath to halve\\rpar;, spattk:Fire Breath as power. Stealth means opponents get -5 penalty on surprise, spdef:Immune to fire. Only surprised on 1 or 2. See invisible or hidden creatures 50% of the time, ns:1],[cl:PW,w:Hell-Hound-Breath,pd:-1,sp:0]{{subtitle=Creature}}Specs=[Hell-Hound,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low (5-7)}}{{AC=4 is natural AC. Do not wear armour}}{{Alignment=Lawful Evil}}{{Move=12}}{{Hit Dice=4HD}}{{THAC0=17}}{{Section1=**Attacks:**}}{{Bite=for 1d10 HP damage}}{{Fire Breath=Fiery breath out to 10yds for damage equal to number of Hit Dice. On a natural 20, does both bite \\amp breath damage}}{{Languages=The baying sounds it makes have an eerie, hollow tone that send a shiver through any who hear them. While normally stealthy, when pursuing fleeing prey the hounds might bay}}{{Size=M}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Fire Breath=A 10 yard long bolt of fire which does damage equal to the number of Hit Dice of the Hell Hound}}{{Section4=**Special Advantages**}}{{Immunity=Immunity to fire of all types}}{{Stealthy=Opponents get -5 penalty on surprise when hell hounds stalk them.}}{{Exceptional Hearing=Hell hounds are only surprised on a 1 or 2 on a d10}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=Hell hounds are fire-breathing canines from another plane of existence brought here in the service of evil beings.\nA hell hound resembles a large hound with rust-red or red-brown fur and red, glowing eyes. The markings, teeth, and tongue are soot black. It stands two to three feet high at the shoulder, and has a distinct odor of smoke and sulfur.\nHell hounds are native to those extradimensional planes notable for their hot, fiery landscapes. There they roam in packs of 2d20 beasts. The hell hounds on the Prime Material plane are summoned there to serve the needs of evil creatures. Most of them later escape to the wild.\nHell hounds cause more forest fires than any other creature except for humanoids. Hell hounds have their uses, though. Because of their ability to easily detect hidden or invisible creatures, hell hounds make excellent watch dogs, especially for intelligent monsters such as fire giants.}}{{desc9=**Combat:** Hell hounds are clever hunters that operate in packs of 2d20 beasts. Each pack is led by a 7-Hit Die hell hound. The leader drives off other 7 HD rivals, who form their own packs. They move with great stealth, imposing a -5 penalty to opponents\' surprise rolls. One or two of the pack sneak up on a quarry while the others form a ring around it. The first hell hound then springs from ambush, attacks the nearest victim, and attempts to drive the others toward the rest of the pack. If the prey does not run away, the rest of the pack closes in within 1d4+2 rounds. \nHell hounds attack first by breathing fire at an opponent up to 10 yards away. The hell hound then attacks with its teeth. If the hell hound rolls a natural 20 on its attack roll, it grabs a victim in its jaws and breathes fire on the victim.}}'},
+ {name:'Hell-Hound-5HD',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Hell Hound 5HD, cattr:hd=5r3|thac0=15]{{}}Specs=[Hell-Hound-5HD,CreatureRace,0H,Hell-Hound-4HD]%{Race-DB-Creatures|Hell-Hound-4HD}{{}}{{name=5HD}}{{Hit Dice=5HD}}{{THAC0=15}}'},
+ {name:'Hell-Hound-6HD',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Hell Hound 6HD, cattr:hd=6r3|thac0=15]{{}}Specs=[Hell-Hound-6HD,CreatureRace,0H,Hell-Hound-4HD]%{Race-DB-Creatures|Hell-Hound-4HD}{{}}{{name=6HD}}{{Hit Dice=6HD}}{{THAC0=15}}'},
+ {name:'Hell-Hound-7HD',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Hell Hound 7HD, cattr:hd=7r3|thac0=13]{{}}Specs=[Hell-Hound-7HD,CreatureRace,0H,Hell-Hound-4HD]%{Race-DB-Creatures|Hell-Hound-4HD}{{}}{{name=7HD}}{{Hit Dice=7HD}}{{THAC0=13}}'},
+ {name:'Heway-Snake',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Heway Snake, cattr:int=5:7|mov=12|swim=6|ac=7|hd=1+3r4|thac0=19| size=M| attk1=1d3:Bite:0:P|attkmsg=Leave poison in near-by water. Creatures drinking water are \\lbrak;poisoned\\rbrak;\\lpar;!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the Unfortunate Victim?¦token_id}¦Heway Poison_Not quite right¦\\amp#91;\\lbrak;3d6\\rbrak;\\amp#93;¦-1¦That bite was quite painful. Should I see a Cleric?¦stopwatch\\rpar;. **Don\'t save now!** Save when the effect message pops up in a few rounds - that way the surprise is maintained! This poison inflicts damage and paralyses in 3d6 minutes. Successful save just does less damage. **Remember** hypnotic stare power., spattk:Heway poisons near-by water which poisons creatures that drink it, spdef:Hypnotic stare power, ns:1],[cl:PW,w:Hypnosis,sp:1,pd:-1]{{}}Specs=[Poison Snake,CreatureRace,0H,Poison Snake 1-4]{{}}%{Race-DB-Creatures|Poison-Snake-1-4}{{title=Heway Snake}}{{Intelligence=Low (5-7)}}{{AC=7}}{{Move=12, Sw 6}}{{Hit Dice=1+3}}{{THAC0=19}}{{Attacks=Bite for 1d3HP damage. Poisoned water near-by}}{{Size=M 12ft long}}{{Section5=**Poison:** Heways poison a near-by water source with a poison which does damage and paralyses\n**Hypnosis:** Powerful hypnosis can charm creatures which are then taken back to the Heway\'s lair and are willingly consumed}}{{desc9=**Combat:** These intelligent snakes have slimy, poisonous skins that they use to foul wells and oases. After swimming in a body of water for several hours and releasing its poison, it slinks off to wait for its prey to arrive. A creature drinking water poisoned by a heway must make a successful saving throw vs. poison at +2 or suffer 30 points damage within 3d6 minutes and be paralyzed for 1d6 hours. Creatures that make their saving throws suffer 15 points of damage. Even animals that survive the initial effects are often\ndoomed to die of dehydration.\nMany humans and animals attack heways on sight, but it can defend itself with its hypnotic stare, which has a powerful effect; any creature failing a saving throw vs. paralyzation will follow the heway to its lair and allow itself to be devoured. The heway sometimes uses this stare simply to immobilize a menacing creature. It then leaves the area while the hypnotized creature remains stationary for 1d6 turns.\nHeway are innate cowards and avoid contact with other animals. It is a weak fighter, its bite is not venomous, and its jaws are weak. Its preferred food is small animal carrion. Simply touching heway skin has no effect; the poison must be ingested.}}'},
+ {name:'Hill-Giant-AC0',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Hill Giant AC0,cattr:ac=0]{{}}Specs=[Hill-Giant-AC0,CreatureRace,2H,Hill-Giant-AC3]{{}}%{Race-DB-Creatures|Hill-Giant-AC3}{{name= AC0}}{{AC=Wearing very rare Hill Giant metal armour, so AC0}}{{desc8=Hill giants\' natural Armor Class is 5. Most wear crudely-sewn animal hides, which are the equivalent of leather armor, giving them AC3. Only a few (5%) of the giants fashion metal armor from the armor of men they have defeated. These giants have an Armor Class of 0.}}'},
+ {name:'Hill-Giant-AC3',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{prefix=Hill }}{{title=Giant}}RaceData=[w:Hill Giant AC3, align:CE, ac:none, cattr:int=5:7|mov=12|ac=3|hd=12+1d2|thac0=9|tohit=+3|dmg=+7|size=H|attk1=1d6:Fist:0:B, spdef:Can catch rocks hurled at them 30% of the time, ns:1],[cl:WP,prime:Hill-Giant-Club,items:HG-Rock:2d4],[cl:MI,%:90,items:random:1],[cl:MI,%:10,items:random:1d6]{{subtitle=Creature}}Specs=[Hill-Giant-AC3,CreatureRace,2H,Creature]{{Section=**Attributes**}}{{Intelligence=Low (5-7)}}{{AC=3 from crude leather armour. Natural AC is 5}}{{Alignment=Chaotic Evil}}{{Move=12}}{{Hit Dice=12+2 HD}}{{THAC0=9}}{{Section1=**Attacks:** +3 on ToHit rolls from strength. 1 x Fist for 1d6 HP damage, or using a Hill Giant Club for 2d6 plus strength bonus of +7. Throw rocks 3 to 200 yards doing 2d8 damage}}{{Languages=*Hill Giant* and *Giant Common*}}{{Size=H, 16ft tall}}{{Life Expectancy=About 200 years}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc7=**Hill giants:** are selfish, cunning brutes who survive through hunting and by terrorizing and raiding nearby communities. Despite their low intelligence, they are capable fighters. \nHill giants are oddly simian and barbaric in appearance, with overly long arms, stooped shoulders, and low foreheads. Even though they are the smallest of the giants, their limbs are more muscular and massive than those of the other giant races. Females have the same builds as males. Their skin color ranges from a light tan to a deep ruddy brown. Their hair is brown or black, and their eyes are black.\nLike other races of giants, hill giants carry their belongings with them in huge hide sacks. A typical hill giant\'s bag will contain 2-8 (2d4) throwing rocks, the giant\'s wealth, and 1-8 additional common items.}}{{desc8=Hill giants\' Armor Class is 3 when they wear crudely-sewn animal hides, which are the equivalent of leather armor. Nearly all hill giants wear these hides, which are a symbol of esteem in some hill giant communities -- the more hides a giant has, the more large kills to his credit.}}{{desc9=**Combat:** Hill giants prefer to fight their opponents from high rocky outcroppings where they can pelt their targets with rocks and boulders while limiting the risks posed to themselves.\nHill giants\' favorite weapons are oversized clubs which do 2-12 +7 points of damage (double the damage of a man-sized club plus their strength bonus). They hurl rocks for 2-16 (2d8) points of damage. Their targets for such attacks must be between 3 and 200 yards away from the giant. They can catch rocks or other similar missiles 30% of the time.}}'},
+ {name:'Hill-Giant-AC5',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Hill Giant AC5,cattr:ac=5|mov=15]{{}}Specs=[Hill-Giant-AC5,CreatureRace,2H,Hill-Giant-AC3]{{}}%{Race-DB-Creatures|Hill-Giant-AC3}{{name= AC5}}{{AC=Not wearing any armour, so natural AC of 5}}{{desc8=Hill giants\' natural Armor Class is 5, when not wearing any armour. This is rare, as most wear crudely-sewn animal hides, which are the equivalent of leather armor.}}'},
+ {name:'Hill-Giant-Juvenile',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Hill Giant Juvenile,cattr:ac=5|hd=4+1r5|tohit=+2|dmg=+2|attk1=1d10,Fist,0,B,ns:=1],[cl:WP,prime:Ogre-Club+0]{{}}Specs=[Hill-Giant-Juvenile,CreatureRace,2H,Hill-Giant-AC3]{{}}%{Race-DB-Creatures|Hill-Giant-AC3}{{name= Juvenile}}{{AC=Not wearing any armour, so natural AC of 5}}{{desc8=Hill giants\' natural Armor Class is 5, when not wearing any armour. Juveniles have not yet made their kills to source the leather for armour}}{{desc9=**Combat:** Hill giants prefer to fight their opponents from high rocky outcroppings where they can pelt their targets with rocks and boulders while limiting the risks posed to themselves.\nJuvenile hill giants have hit dice, damage, and attack rolls equal to that of an ogre. Their primary weapon is an Ogre Club (doing 2d8+2 damage) and they do not hurl rocks yet.}}'},
+ {name:'Hippocampus',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Hippocampus\n}}RaceData=[w:Hippocampus, align:CG, weaps:none, ac:barding, cattr:int=8:10|swim=24|ac=5|hd=4r4|thac0=17|size=H|attk1=1d4:Bite:0:P|attk2=1d2:Head butt:0:B|attkmsg=Can only do *either* bite *or* head-butt as an attack in one round|dmgmsg=$$Head butt can do the damage above and possibly *stun* the opponent. At the GMs discretion save vs. paralysation or \\lbrak;be stunned\\rbrak;\\lpar;!rounds ~~target single¦@{selected¦token_id}¦\\amp#64;{target¦Who got head-butted?¦token_id}¦Stunned¦\\lbrak;\\amp#91;1d3\\amp#93;\\rbrak;¦-1¦Stunned by a head-butt from a hippocampus¦back-pain\\rpar; for 1d3 rounds]{{subtitle=Marine Creature}}Specs=[Hippocampus,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Average (8 to 10)}}{{AC=naturally 5. Can wear certain types of barding (GM decision)}}{{Alignment=Chaotic Good}}{{Move=Swim 24}}{{Hit Dice=4HD}}{{THAC0=17}}{{Attacks=Bite for 1d4 piercing damage *or* Head-butt for 1d2 bludgeoning damage and possibly stun the opponent (interpretation of Monsterous Manual...)}}{{Size=H - 18ft long}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc7=The hippocampus is the most prized of the marine steeds, a creature that combines features of a horse and a fish.\nThe hippocampus has the head, forelegs, and torso of a horse. The equine section is covered with short hair. The mane is made of long, flexible fins. The front hooves are replaced by webbed fins that fold up as the leg moves forward, then fan out as the leg strokes back. Past the rib cage the body becomes fish-like. The tail tapers 14 feet into a wide horizontal fin. A dorsal fin is located on the rump. Coloration is that of seawater. Typical colors include ivory, pale green, pale blue, aqua, deep blue, and deep green.\nHippocampi are the prized steeds of the sea. They can be found in deep waters anywhere, in freshwater lakes and oceans. They are able to breathe fresh and salt water with equal ease. They can also breathe air but require frequent gulps of water to keep from drying out. They are unable to\nmove out of water.\nDespite their radically different environments, horses and hippocampi are very similar. They have approximately the same sizes, life spans, and personalities, although hippocampi are blessed with much higher intelligence.\nHippocampi may be "domesticated" by water-breathing humanoids, especially tritons. In truth, the intelligent hippocampi cooperate with the humanoids. The hippocampi provide their services as steeds and allies while the humanoids provide protection. The benevolent hippocampi may assist surface dwellers who are visiting the aquatic world, whether voluntarily or by accident. Many a shipwrecked sailor has been saved from drowning by a passing hippocampus. Hippocampi are good judges of character; they will not assist an evil being or anyone who acts in a hostile manner toward them. Sometimes a hippocampus\'s offer of a ride can be more trouble than it is worth. Young hippocampi often forget that most surface dwellers breathe air, not water.\nHippocampi do not accumulate treasure. Most spurn even ornamental gifts such as collars or leg bands. They simply have no use for these gewgaws. They do appreciate delicacies, however, in the forms of tasty foods not available in the water.}}{{desc9=**Combat:** Hippocampi are usually peaceful creatures. They do not attack unless cornered or if another hippocampus or an ally is threatened. They are fast enough to out-swim most anything that would want to attack them.\nThe hippocampus attacks with a strong bite. It suddenly extends its head, chomps down with a crushing bite, and then releases. Hippocampi do not hold onto their opponents. Hippocampi also butt their heads against targets. Such attacks may stun an opponent or break his bones.\nTheir firm, powerfully muscled bodies provide a strong protection against attack. The blood coagulates quickly on exposure to water, thus minimizing blood loss that could both debilitate the hippocampus and attract sharks (sharks have only a 20% chance of going into a feeding frenzy if the only bleeding creature is a hippocampus).}}'},
+ {name:'Hippogriff',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Hippogriff}}{{subtitle=Creature}}RaceData=[w:Hippogriff, align:N, cattr:int=2:4|mov=18|fly=36(C/D)|ac=5|size=L|hd=3+3|thac0=17|attk1=1d6:Claw1:0:S|attk2=1d6:Claw2:0:S|attk3=1d10:Beak:1:P]{{Section=**Attributes**}}{{Intelligence=Semi- (2 to 4)}}{{AC=5}}{{Alignment=Neutral}}{{Move=18, FL36 (C,D)}}{{Hit Dice=3+3}}{{THAC0=17}}{{Attacks=2 x Claws for 1d6 each, Beak for 1d10}}{{Languages=None}}{{Size=L, 10ft long}}{{Life Expectancy=Unknown}}{{Section1=**Powers**}}{{Section2=None}}{{Section3=**Special Advantages**}}{{Section4=**Flying Mount:** If a hippogriff is captured while still very young (under four months), it can be domesticated and trained to serve as a steed. It will probably have to be taught to fly.}}{{Section7=**Special Disadvantages**}}{{Section8=None}}Specs=[Hippogriff,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc8=Hippogriffs are flying monsters that have an equal likelihood to be predator, prey, or steed. The hippogriff is a monstrous hybrid of eagle and equine features. It has the ears, neck, mane, torso, and hind legs of a horse. The wings, forelegs, and face are those of an eagle. It is about the size of a light riding horse. A hippogriff may be colored russet, golden tan, or a variety of browns. The feathers are usually a different shade than the hide. The beak is ivory or golden yellow.}}{{desc9=**Combat:** The hippogriff attacks with its eagle-like claws and beak. Each claw can tear for 1d6 points of damage, while the scissor-like beak inflicts 1d10 points of damage.\nThey feed on whatever is available, whether greenery, fruits, or wildlife. Hippogriffs are able to attack fairly large prey, such as bison, but they do not prey on carnivores. The exception is humanoids. Hippogriffs may, in the absence of other meat, attack small groups of people. Bodies are then carried back to the nest to feed the others; this is where the victim\'s possessions usually spill out. Hippogriffs are clean monsters; they dispose of carcasses and other debris by carrying them downhill. They like clear, sparkly things like glass, crystals, and precious gems. Males may amass a small trove kept covered by brush. As a mating ritual, he arranges these in a display to entice mares.}}'},
+ {name:'Hippogriff-Baby-Foal',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Baby Foal}}RaceData=[w:Hippogriff Baby Foal, cattr:fly= |tohit=-4]{{subtitle=Creature}}%{Race-DB-Creatures|Hippogriff}{{Move=18}}{{Section8=**Immature Attacking:** Due to inexperience and lack of musculature, foals younger than 6 months old have a -4 penalty on their attack rolls}}Specs=[Hippogriff Baby Foal,CreatureRace,0H,Hippogriff]{{Section9=**Description**}}{{desc=**Baby Foal:** The foal is able to walk upon hatching. Its beak remains soft for the first two weeks; this enables the foal to nurse. Then its beak hardens and the hippogriff switches to regurgitated food from its mother. The colts learn to eat solid meat at four months, although they are clumsy killers (-4 penalty to attack rolls and damage)}}'},
+ {name:'Hippogriff-Young-Foal',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Baby Foal}}RaceData=[w:Hippogriff Young Foal, cattr:fly=18(D)|tohit=-2]{{subtitle=Creature}}%{Race-DB-Creatures|Hippogriff}{{Move=18, FL18 (D)}}{{Section4=**Flying Mount:** While foals captured early enough and trained can become flying mounts, this foal is already too old}}{{Section8=**Immature Attacking:** Due to inexperience and lack of musculature, young foals have a -2 penalty on their attack rolls}}Specs=[Hippogriff Young Foal,CreatureRace,0H,Hippogriff]{{Section9=**Description**}}{{desc=**Young Foal:** At six months they can fly (18, class D) and fight with a -2 penalty to attack rolls and damage. Yearlings are identical to adults, although they are unable to breed until they are three years old.}}'},
+ {name:'Hobgoblin',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Hobgoblin}}{{subtitle=Creature}}RaceData=[w:Hobgoblin, align:LE, ac:leather|padded|studded|ring-mail|brigandine|scale-mail|hide|shield, weaps:polearm|morningstar|long-blade|short-blade|bow|spears|whip, cattr:int=8:10|mov=9|ac=10|size=M|hd=1+1|thac0=19|attkmsg=Hate elves and always attack them first, spattk:Hate Elves and always attack them first, ns:19],[cl:PW,w:Detect New Construction,sp:0,pd:-1],[cl:PW,w:Detect Shifting Walls,sp:0,pd:-1],[cl:PW,w:Detect Slope,sp:0,pd:-1],[cl:WP,%:5,both:Awl Pike],[cl:WP,%:5,both:Bec de Corbin],[cl:WP,%5:,both:Fauchard],[cl:WP,%:5,both:Glaive],[cl:WP,%:5,both:Glaive-Guisarme],[cl:WP,%:5,both:Military Fork],[cl:WP,%:20,prime:Morningstar],[cl:WP,%:5,prime:Shortsword,items:Shortbow:1|Sheaf Arrows:20],[cl:WP,%:5,both:Shortbow,items:Shortsword:1|Sheaf Arrows:20],[cl:WP,%:5,prime:Longsword,items:Longbow:1|Flight Arrows:20],[cl:WP,%:5,both:Longbow,items:Longsword:1|Flight Arrows:20],[cl:WP,%:10,prime:Spear],[cl:WP,%:5,prime:Shortsword,offhand:Spear],[cl:WP,%:5,prime:Spear,offhand:Shortsword],[cl:WP,%:5,prime:Shortsword,offhand:Morningstar],[cl:WP,%:5,prime:Shortsword,offhand:Whip],[cl:MI,%:90],[cl:MI,%:10,items:random:1d4]{{Section=**Attributes**}}{{Intelligence=Average (8 to 10)}}{{AC=10 - can equip with armour up to AC5}}{{Alignment=Lawful Evil}}{{Move=9}}{{Hit Dice=1+1}}{{Hit Points=}}{{THAC0=19}}{{Attacks=By weapon - must be equipped via menus}}{{Languages=*Hobgoblin, orcs, goblins,* and *carnivorous apes*. Roughly 20% of them can speak *common*}}{{Size=M, 6½ft tall}}{{Life Expectancy=Unknown}}{{Section1=**Powers**}}{{Section2=**Mining Experts:** They are highly adept at mining and can *detect new construction, sloping passages,* and *shifting walls* 40% of the time.}}{{Section3=**Special Advantages**}}{{Strength=}}{{Infravision=60 feet, with no disadvantages in light}}{{Section7=**Special Disadvantages**}}{{Section8=None}}Specs=[Hobgoblin,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc8=Hobgoblins are a fierce humanoid race that wage a perpetual war with the other humanoid races. They are intelligent, organized, and aggressive.\nThe typical hobgoblin is a burly humanoid standing 6½\' tall. Their hairy hides range from dark reddish-brown to dark gray. Their faces show dark red or red-orange skin. Large males have blue or red noses. Hobgoblin eyes are either yellowish or dark brown while their teeth are yellow. Their garments tend to be brightly colored, often bold, blood red. Any leather is always tinted black. Hobgoblin weaponry is kept polished and repaired.}}{{desc9=**Combat:** Hobgoblins in a typical force will be equipped with polearms (30%), morningstars (20%), swords and bows (20%), spears (10%), swords and spears (10%), swords and morning stars (5%), or swords and whips (5%). Equip using standard menus.\nHobgoblins fight equally well in bright light or virtual darkness, having infravision with a range of 60 feet.\nHobgoblins hate elves and always attack them first.}}'},
+ {name:'Hobgoblin-Assistant',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Assisstant}}RaceData=[w:Hobgoblin Assistant, cattr:hp:9|ac=5]{{subtitle=Creature}}%{Race-DB-Creatures|Hobgoblin}{{AC= (preset) - can equip with armour up to AC5}}Specs=[Hobgoblin Assistant,CreatureRace,0H,Hobgoblin]{{desc=**Hobgoblin Assistant:** For every 20 male hobgoblins there will be a leader (known as a sergeant) and two assistants. These have 9 hit points each but still fight as 1+1 Hit Die monsters.}}'},
+ {name:'Hobgoblin-Chief',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Chief}}RaceData=[w:Hobgoblin Chief, cattr:hd=4r3|hp:22|ac=2|dmg=+3,ns:1],[cl:MI,%:10,items:random:2d3]{{subtitle=Creature}}%{Race-DB-Creatures|Hobgoblin}{{AC=2 (preset) - can equip with armour up to AC2}}{{Hit Dice=4HD for saves and magical attacks}}{{Hit Points=22HP as standard}}{{Strength=Gains +3 bonus to damage due to their great strength}}Specs=[Hobgoblin Chief,CreatureRace,0H,Hobgoblin]{{desc=**Hobgoblin Chief:** If the hobgoblins are encountered in their lair, they will be led by a chief with AC 2, 22 hit points, and +3 points of damage per attack, who fights as a 4 Hit Die monster. The chief has 5-20 (5d4) sub-chiefs acting as bodyguards. Leaders and chiefs always carry two weapons.}}'},
+ {name:'Hobgoblin-Sergeant',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Sergeant}}RaceData=[w:Hobgoblin Sergeant, cattr:hp:9|ac=5,ns:1],[cl:MI,%:10,items:random:2d2]{{subtitle=Creature}}%{Race-DB-Creatures|Hobgoblin}{{AC=5 (preset) - can equip with armour up to AC5}}Specs=[Hobgoblin Sergeant,CreatureRace,0H,Hobgoblin]{{desc=**Hobgoblin Sergeant:** For every 20 male hobgoblins there will be a leader (known as a sergeant) and two assistants. These have 9 hit points each but still fight as 1+1 Hit Die monsters.}}'},
+ {name:'Hobgoblin-Sub-Chief',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Sub-Chief}}RaceData=[w:Hobgoblin Sub-Chief, cattr:hd=3r3|hp:16|ac=3|dmg=+2,ns:1],[cl:MI,%:10,items:random:1d6]{{subtitle=Creature}}%{Race-DB-Creatures|Hobgoblin}{{AC=3 (preset) - can equip with armour up to AC3}}{{Hit Dice=3HD for saves and magical attacks}}{{Hit Points=16HP as standard}}{{Strength=Gains +2 bonus to damage due to their great strength}}Specs=[Hobgoblin Sub-Chief,CreatureRace,0H,Hobgoblin]{{desc=**Hobgoblin Sub-Chief:** Groups numbering over 100 are led by a sub-chief who has 16 hit points and an Armor Class of 3. The great strength of a sub-chief gives it a +2 on its damage rolls and allows it to fight as a 3 Hit Die monster.}}'},
+ {name:'Homonculus',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Homonculus}}{{subtitle=Creature}}RaceData=[w:Homonculus, align:any, ac:none, weaps:none, cattr:int=8:10|mov=6|fly=18(B)|ac=6|size=T|hd=2|thac0=19|attk1=1d3:Bite:0:P|dmgmsg=A successful bite injects the opponent with sleep venom: save vs. poison or \\lbrak;become comatose\\rbrak;\\lpar;!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Select the victim¦token_id}¦Homonculus Venom¦\\lbrak;\\amp#91;5d6\\amp#93;\\rbrak;¦-1¦That homonculus venom was powerful! Still asleep¦sleepy\\rpar; for 5d6 minutes. If homonculus dies creator takes \\lbrak;2d10HP\\rbrak;\\lpar;!\\amp#13;\\amp#47;gr 2d10 HP damage to creator of the homonculus\\rpar; damage. If creator dies homonculus dies, spattk:Bite injects venom that makes victim comatose for 5d6 minutes., spdef:Saves same as creator i.e. use creators saveing table when necessary]{{Section=**Attributes**}}{{Intelligence=Has creators intelligence}}{{AC=6}}{{Alignment=Same as creator}}{{Move=6, FL18(B)}}{{Hit Dice=2}}{{THAC0=19}}{{Attacks=Bite for 1d3 and injection of sleep venom}}{{Languages=Communicates telepathically with creator}}{{Size=T, 1½ft tall}}{{Life Expectancy=As long as creator}}{{Section1=**Powers**}}{{Section2=None}}{{Section3=**Special Advantages**}}{{Poison Bite=Sve vs. poison or victim is comatose for 5d6 minutes (rounds)}}{{Saves=Same as those of creator}}{{Infravision=60 feet, with no disadvantages in light}}{{Section7=**Special Disadvantages**}}{{Cost=Expensive in money \\amp time to create}}{{Damage on Death=If homonculus dies, creator takes 2d10 damage}}Specs=[Homonculus,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc8=Homonculi are small mystical beings created by magicians for spying and other special tasks. The average homonculous is vaguely humanoid in form. It is 18 inches tall and its greenish, reptilian skin may have spots or warts. They have leathery, bat-like wings with a span of 24 inches and a mouth filled with long, pointed teeth that can inject a potent sleeping venom.}}{{desc9=**Combat:** The homonculous is a quick and agile flyer which uses this ability to great advantage in combat. It can dart to and fro so quickly that any attempt to capture it short of a net or web spell is almost impossible.\nIn combat, the homonculous will land on its chosen victim and bite with its needle-like fangs. In addition to doing 1-3 points of damage, the creature injects a powerful venom. Anyone bitten by the homonculous must save vs. poison or fall into a comatose sleep for 5-30 (5d6) minutes.\nThe creature\'s saving throws are the same as those of its creator. While most attacks against either the homonculous or creator do not affect the other, there is one exception. Any attack which destroys the homonculous causes its creator to suffer 2-20 (2d10) points of damage. Conversely, if the creator is slain, the homonculous also dies and its body swiftly melts away into a pool of ichor.}}'},
+ {name:'Horned-Owl',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Horned Owl, cattr:mov=1|fly=24D|ac=7|hd=1-4r5|thac0=20]{{}}Specs=[Horned Owl,CreatureRace,0H,Owl]{{}}%{Race-DB-Creatures|Owl}{{title=Horned }}{{AC=7}}{{Move=1, FL 24(D)}}{{Hit Dice=1-4 HD, 2d2 HP}}{{THAC0=20}}{{Infravision=90ft infravision at night, but poor eyesight during daylight}}{{Silent Flight=95% silent when in flight}}{{desc8=**Horned Owl:** Same as a normal *Owl* except for as noted above}}'},
+ {name:'Horse',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Horse\n}}RaceData=[w:Horse, align:N, weaps:none, ac:barding, cattr:int=1|mov=24|ac=7|hd=3r5|thac0=17|size=L|attk1=1d2:Hoof left:0:B|attk2=1d2:Hoof right:0:B]{{subtitle=Mammal}}Specs=[Horse,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Animal (1)}}{{AC=7}}{{Alignment=Neutral}}{{Move=24}}{{Hit Dice=3HD}}{{THAC0=17}}{{Attacks=2 x Hooves for 1d2 each}}{{Size=L}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc7=Horses are large quadrupeds often used for transportation, or as pack and draft animals, by human and demihuman races. They are frequently bred for their speed and for their beauty.\nA horse can be solid white, gray, chestnut, brown, black, or various reddish tones; its hide can instead show a variation or combination of these colors. In addition to the coat\'s color, the horse may have markings of various sorts.\nHorses are measured in "hands." One hand equals 4 inches.}}{{desc9=**Combat:** War horses will fight independently of the rider on the second and succeeding rounds of a melee. Other breeds fight only if cornered. Most attack twice per round by kicking with their front hooves.\nUnless specially trained, horses can be panicked by loud noises, strange smells, fire, or sudden movements 90% of the time. Horses trained and accustomed to such things (usually warhorses) panic only 10% of the time.}}'},
+ {name:'Horse-Draft',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Draft Horse]{{}}Specs=[Draft Horse,CreatureRace,0H,Draft Horse]{{}}%{Race-DB-Creatures|Draft-Horse}'},
+ {name:'Horse-Heavy-War',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Heavy War Horse]{{}}Specs=[Heavy War Horse,CreatureRace,0H,Heavy War Horse]{{}}%{Race-DB-Creatures|Heavy-War-Horse}'},
+ {name:'Horse-Light-War',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Light War Horse]{{}}Specs=[Light War Horse,CreatureRace,0H,Light War Horse]{{}}%{Race-DB-Creatures|Light-War-Horse}'},
+ {name:'Horse-Medium-War',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Medium War Horse]{{}}Specs=[Medium War Horse,CreatureRace,0H,Medium War Horse]{{}}%{Race-DB-Creatures|Medium-War-Horse}'},
+ {name:'Horse-Mule',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Mule]{{}}Specs=[Mule,CreatureRace,0H,Mule]{{}}%{Race-DB-Creatures|Mule}'},
+ {name:'Horse-Pony',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Pony]{{}}Specs=[Pony,CreatureRace,0H,Pony]{{}}%{Race-DB-Creatures|Pony}'},
+ {name:'Horse-Riding',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Riding Horse]{{}}Specs=[Riding Horse,CreatureRace,0H,Riding Horse]{{}}%{Race-DB-Creatures|Riding-Horse}'},
+ {name:'Horse-Steppe-Pony',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Steppe Pony]{{}}Specs=[Steppe Pony,CreatureRace,0H,Steppe Pony]{{}}%{Race-DB-Creatures|Steppe-Pony}'},
+ {name:'Horse-Wild',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Wild Horse]{{}}Specs=[Wild Horse,CreatureRace,0H,Wild Horse]{{}}%{Race-DB-Creatures|Wild-Horse}'},
+ {name:'Huge-Centipede',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Huge Centipede,svall:-2,cattr:hp=1|mov=21|dmgmsg=Click \\lbrak;Check for Paralysation\\rbrak;(!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Select Target¦token_id}¦Paralysation¦\\amp#91;\\lbrak;60\\amp#42;1d6\\rbrak;\\amp#93;¦-1¦Paralysed by a Giant Centipede bite¦padlock¦svpar;+4) and then ask victim to save vs paralysis or be paralysed for 2d6 hours]{{}}Specs=[Huge Centipede,CreatureRace,2H,Giant Centipede]{{}}%{Race-DB-Creatures|Giant-Centipede}{{prefix=Huge}}{{Size=T, 6ins long}}{{Move=21}}{{Hit Dice=Only 1 HP}}{{desc8=Huge centipedes are identical to giant centipedes save that they are only 6 inches long. Their poison is weaker than that of their larger cousins and a failed saving throw will immobilize the victim for only 1d6 hours. Huge centipedes make their own saving throws at -2. Mice and other large insects are the favorite prey of huge centipedes. They in turn are hunted by giant centipedes.}}'},
+ {name:'Huge-Scorpion',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Huge Scorpion, cattr:mov=12|ac=4|hd=4+4r2|attk1=1d8:Claw1:0:S|attk2=1d8:Claw2:0:S|attk3=1d3:Sting:1:P|dmgmsg=If both claws hit victim is held and future stinger and claw hits are automaticly successful. Only one *Bend bar* check to escape$$If both claws hit victim is held and future stinger and claw hits are automaticly successful. Only one *Bend bar* check to escape$$On a successful hit with the stinger do damage and victim must save vs. poison or be poisoned with a Type F poison and **die** immediately. If save take **20HP** damage, spattk:Stinger does poison type F. If both claws hit victim is held. Stinger \\amp claw hits are then automatic]{{subtitle=Creature}}Specs=[Scorpion,CreatureRace,0H,Giant Scorpion]{{}}%{Race-DB-Creatures|Giant-Scorpion}{{title=Huge }}{{AC=4 from chitinous carapace}}{{Move=12}}{{Hit Dice=4+4 HD}}{{Section1=**Attacks:** 2 x claws for 1d8HP each. If both hit victim is held and subsequent attacks automatically hit. Sting for 1d3HP and poison type F}}{{Size=M, 4ft long}}{{desc8=Often found in dungeons and wildernesses, these creatures are merely smaller versions of the giant scorpion. Colors range from tan to brown to black, and rumors persist of rare white scorpions deep underground. }}{{desc9=**Combat:** All attack with pincers and tail stinger. If struck by the stinger, the victim must save versus poison or die the next round. Huge scorpions have deadly (type F) poison and can pin a victim in a way similar to the giant scorpion, but with the huge scorpion, the victim can still fight back. It is not unusual to see scorpions of various sizes fighting with each other.}}'},
+ {name:'Ice-Mephit',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{subtitle=Creature}}RaceData=[w:Imp Ice-Mephit, cattr:hd=3|attk1=1d2:Claw1:0:S|attk2=1d2:Claw2:0:S|dmgmsg=A successful claw hit also does an additional \\lbrak;\\lbrak;1\\rbrak;\\rbrak;HP of cold damage, spattk:Claws do additional 1HP cold damage. Breath weapon: Ice Volley \\lpar;Power\\rpar;, spdef:*Gate* in \\lpar;Power\\rpar; another mephit 1/hour,ns:=2],[cl:PW,w:Ice Mephit Volley,sp:0,pd:3],[cl:PW,w:Gate Mephit,sp:0,pd:24]{{}}%{Race-DB-Creatures|Imp-Mephit-Fire}{{title=Imp - Ice Mephit}}{{Hit Dice=3}}{{Attacks=2 x Claw for 1d2 and 1HP additional cold damage}}{{Section2=Breath weapon (Power): *Ice Shard Volley* x 3/day. *Gate Mephit* 1/hour}}{{Section4=**Touching Skin:** Touching an Ice Mephit causes 1HP freezing damage (no save)}}Specs=[Mephit,CreatureRace,0H,Imp-Mephit-Fire]{{desc=**Ice Mephit:** Angular in form, with translucent ice-blue skin. They live on the colder lower planes and never mix with fire, lava, smoke, or steam mephits. Ice mephits are aloof and cruel, surpassing all other mephits in the fine arts of torture and wanton destruction.\nFreezing effects from claws are cumulative and last three to four turns, or until the victim is healed to full hit points (whichever comes first).\nIce mephits may breathe a volley of ice shards three times per day. This volley automatically hits a single victim within 15 feet of the mephit. Damage is 1d6, halved if the victim rolls a successful saving throw. Once per hour an ice mephit may attempt to gate in one other mephit. The chance of success is 25% and the summoned mephit is either mist or ice (equal probability of each).}}'},
+ {name:'Imp',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Imp}}{{subtitle=Creature}}RaceData=[w:Imp, align:LE, ac:none, weaps:none, svspe:+3, cattr:int=8:10|mov=6|fly=18(A)|ac=2|size=T|hd=2+2|regen:1|thac0=19|attk1=1d4:Tail Stinger:0:P|dmgmsg=A successful stinger hit also injects venom which can slay. Save vs. poison or die. Remember 25% magic resistance\\comma damaged only by silver \\amp magic weapons\\comma Cold fire \\amp electricity have no effect, spattk:Can *polymorph* into two possible animal forms. Can use *suggestion* once per day, spdef:*detect good detect magic* and become *invisable* at will regardless of polymorphed form. Immune to cold fire and electricity. 25% magic resistance. Save vs. spell as a 7HD creature. Only harmed by silver \\amp magic weapons. Regenerate at 1HP per round,ns:1],[cl:PW,w:PR-Detect-Good,sp:10,pd:-1],[cl:PW,w:PR-Detect-Magic,sp:10,pd:-1],[cl:PW,w:MU-Invisibility,sp:2,pd:-1],[cl:PW,w:MU-Polymorph-Self,sp:4,pd:-1],[cl:PW,w:MU-Suggestion,sp:3,pd:1],[cl:MI,items:random:1]{{Section=**Attributes**}}{{Intelligence=Average (8:10)}}{{AC=2}}{{Alignment=Lawful Evil}}{{Move=6, FL18(A)}}{{Hit Dice=2+2}}{{THAC0=19}}{{Attacks=1 x tail stinger with deadly poison, or as per polymorphed animal}}{{Languages=*Imp*}}{{Size=T, 2ft tall}}{{Life Expectancy=Eternal}}{{Section1=**Powers**}}{{Polymorph=at will into one of two predefined creatures (determined by DM). The most commonly encountered alternate forms are those of a large spider, raven, giant rat, or goat. In such forms the imp is physically identical to a normal animal.}}{{Spells as Powers=*Detect Good, Detect Magic* and become *Invisible* at will even if polymorphed. *Suggestion* 1/day}}{{Section4=**Special Advantages**}}{{Magic Resistance=25% resistant to all spells, and save vs. spell as a 7HD creature}}{{Immunities=Immune to Cold, Fire and Electricity}}{{Invulnerabilities=Require silver or magical weapons to hit}}{{Section7=**Special Disadvantages**}}{{Section8=None}}Specs=[Imp,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc=**Imp:** diminutive creatures of an evil nature who roam the world and act as familiars for lawful evil wizards and priests.\nThe average imp is a 2\' humanoid with leathery, bat-like wings, a barbed tail, and sharp, twisted horns. Its skin is a dark red and its horns and jagged teeth are a gleaming white.\nImps are beings of a very evil nature who originate on the darkest of evil planes. Their main purpose on the Prime Material plane is to spread evil by assisting lawful evil wizards and priests. When such a person is judged worthy of an imp\'s service, the imp comes in answer to a *find familiar* spell.}}{{hide7=Once they have contacted their new "master", they begin at once to take control of his actions. Although imps maintain the illusion that the summoner is in charge, the actual relationship is closer to that of a workman (the imp) and his tools (the master).\nWhile they are technically in the service of their master, imps retain a basic independence and ambition to become more powerful someday. They may acquire treasure from those they slay, and will often pilfer valuables encountered during their travels.\nThe imp confers some of its powers upon its master. A telepathic link connects the two whenever they are within one mile of each other. This enables the master to receive all of the imp\'s sensory impressions, including its infravision. The master also gains the imp\'s inherent 25% magical resistance and is able to regenerate just as the imp does. If the imp is within telepathic range, the master acts as if he were one level higher than he actually is. Conversely, if the imp is more than a mile away, the master acts as if he were one level of ability below his actual rank. If the imp is killed, the master instantly drops by four levels, though these can be regained in the usual manner.}}{{hide8=**Combat:** In its natural form, the imp attacks with the wicked stinger on its tail. In addition to inflicting 1-4 points of damage, this stinger injects a powerful poison which is so deadly that those who fail their save versus poison are instantly slain by it. When it is polymorphed, the imp attacks with the natural weaponry of its adopted form, though the goat and raven forms lack damaging attacks}}{{hide9=Although an imp\'s body can be destroyed on the Prime Material plane, it is not so easily slain. When its physical form is lost, its corrupt spirit instantly returns to its home plane where it is reformed and, after a time, returned to our world to resume its work.}}'},
+ {name:'Imp-Mephit-Fire',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Fire-Mephit}{{}}Specs=[Fire Mephit,CreatureRace,0H,Fire-Mephit]{{}}RaceData=[w:Fire Mephit]{{}}\n'},
+ {name:'Imp-Mephit-Ice',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Ice-Mephit}{{}}RaceData=[w:Ice Mephit]]{{}}Specs=[Ice Mephit,CreatureRace,0H,Ice-Mephit]{{}}'},
+ {name:'Imp-Mephit-Lava',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Lava-Mephit}{{}}RaceData=[w:Lava Mephit]{{}}Specs=[Lava Mephit,CreatureRace,0H,Lava-Mephit]{{}}'},
+ {name:'Imp-Mephit-Mist',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Mist-Mephit}{{}}RaceData=[w:Mist Mephit]{{}}Specs=[Mist Mephit,CreatureRace,0H,Mist-Mephit]{{}}'},
+ {name:'Imp-Mephit-Smoke',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Smoke-Mephit}{{}}RaceData=[w:Smoke Mephit]{{}}Specs=[Smoke Mephit,CreatureRace,0H,Smoke-Mephit]{{}}'},
+ {name:'Imp-Mephit-Steam',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Steam-Mephit}{{}}RaceData=[w:Steam Mephit]{{}}Specs=[Steam Mephit,CreatureRace,0H,Steam-Mephit]{{}}'},
+ {name:'Invisible-Stalker',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Invisible Stalker}}RaceData=[w:Invisible Stalker, align:N, weaps:none, ac:none, cattr:int=13:14|mov=12|fly=12A|ac=3|hd=8r3|thac0=13|size=L|attk1=4d4:Vortex:1:SPB,spdef:Opponents get -6 on surprise rolls. -2 on attack for opponents who can\'t see or detect invisible]{{subtitle=Creature}}Specs=[Invisible Stalker,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=High (13-14))}}{{AC=3}}{{Alignment=Neutral}}{{Move=12 FL 12(A)}}{{Hit Dice=8 HD}}{{THAC0=13}}{{Attacks=1 x Air Vortex for 4d4}}{{Size=L, 8ft tall}}{{Language=Invisible stalkers understand the common speech of men, but can not speak it. They can converse only in their own language, which sounds much like the roaring and whooshing of a great wind storm.}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Invisibility=All opponents who are unable to see or detect invisible foes are at a -2 on their attack rolls. Although they are fully invisible on the Prime Material plane, their outlines can be dimly perceived on the Astral or Ethereal planes.}}{{Surprise=Due to their invisibility, these creatures impose a -6 penalty on the surprise rolls of those they choose to attack.}}{{Section6=**Special Disadvantages**}}{{Unwilling Servant=The invisible stalker is, at best, an unwilling servant. It resents any task assigned to it, although brief, uncomplicated labors may be seen as something of a diversion and thus undertaken with little resentment. Tasks that require a week or more of its time will drive the invisible stalker to pervert the stated intent of the command. Such commands must be carefully worded and come from a powerful wizard. An invisible stalker may look for a loop hole in the command as a means of striking back at its master. For example, a simple command such as "keep me safe from all harm" may result in the stalker carrying the conjurer back to the elemental plane of air and leaving him there in a well hidden location.\nEach day of the invisible stalker\'s indenturedness there is a 1% cumulative chance that the creature will seek a means to pervert its commands and free itself of servitude. If no option is open, the creature must continue to serve.}}{{Section9=**Description**}}{{desc8=The invisible stalker is a creature from the elemental plane of Air. Those present on the material plane are there as the result of a conjuration by some wizard. This magic causes the creature to serve its summoner for a time. The conjurer retains full command of the stalker until it either fulfills its duties or is defeated and driven back to its home plane. Once given a task, an invisible stalker is relentless. They are faultless trackers who can detect any trail less than a day old. If ordered to attack, they will do so with great fury and will cease their efforts only upon their own destruction or the direct orders of their master. Once their mission is accomplished, the creature is free to return to its home plane.\nThe true form of the invisible stalker is unknown. On the Material, Astral, or Ethereal planes, the invisible stalker can only be perceived as a shimmering air mass which looks much like the refraction effect caused by hot air passing in front of cold.}}{{desc9=**Combat:** Invisible stalkers attack by using the air itself as a weapon. It is capable of creating a sudden, intense vortex that batters a victim for 4-16 (4d4) points of damage. Such attacks affect a single victim on the same plane as the invisible stalker.\nInvisible stalkers can only be killed on the elemental plane of Air. If attacked on another plane, they automatically return to their home plane when their total hit points are exceeded by the damage they suffered.}}'},
+ {name:'Jackal',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Jackal}}RaceData=[w:Jackal, align:N, weaps:none, ac:none, cattr:int=1|mov=12|ac=7|hd=1-4r6|hp=1:4|thac0=20|size=S|attk1=1d2:Bite:0:P]{{subtitle=Creature}}Specs=[Jackal,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Animal (1)}}{{AC=7}}{{Alignment=Neutral}}{{Move=12}}{{Hit Dice=1/2 HD}}{{THAC0=20}}{{Attacks=Bite for 1d2}}{{Size=S}}{{Life Expectancy=8 to 9 years in the wild}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=Jackals are timid scavengers that run from the threat of other predators. When attacking, the jackal darts in to bite its victim and quickly retreats to a safe distance. If more than one jackal is trying to down an animal, they attack in a haphazard fashion with little or no coordination of effort.}}'},
+ {name:'Jaguar',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Jaguar}}RaceData=[w:Jaguar, align:N, weaps:none, ac:none, spattk:Can leap up to 30ft, spdef:Only surprised on a 1, cattr:int=2:4|mov=15|ac=6|hd=4+1r4|thac0=17|size=L|attk1=1d3:2 x Front Claws:0:S|attk2=1d8:Bite:0:P|attk3=1+1d4:2 x Rear Claw Rake:1:S|attkmsg=If both front claws successfully hit then both back claws can do rake attacks$$ $$Only valid if both front claws successfully hit. One attempted rake attack for each rear claw|dmgmsg=$$ $$Only valid if both front claws successfully hit]{{subtitle=Creature}}Specs=[Jaguar,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Semi (2 to 4)}}{{AC=6}}{{Alignment=Neutral}}{{Move=15}}{{Hit Dice=4+1 HD}}{{THAC0=17}}{{Attacks=2 x 1d3 front claws, bite for 1d8. If both front claws hit, rake with 2 x rear claws is attempted for 1+1d4 each}}{{Size=L (5ft to 6ft long)}}{{Life Expectancy=12 to 16 years in the wild}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Surprise=Only surprised on a 1}}{{Leap=Can leap up to 30ft after a run-up, e.g. when chasing prey}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=The jaguar is a powerful cat with a deep chest and muscular limbs. Its color ranges from light yellow to brownish red, and it is covered with dark spots.\nThe jaguar inhabits jungles, spending a great deal of time in tree tops. It climbs, swims, and stalks superbly. Jaguars are solitary and territorial, meeting only to mate. If found in a lair, there is a 75% chance there will be 1-3 cubs. Cubs do not fight effectively.}}{{desc9=**Combat:** The jaguar will attack anything that it perceives as a threat. It relies on stealth to close with its prey, often pouncing from above. Their strength and ferocity make jaguars one of the most feared predators of the jungle.}}'},
+ {name:'Jermlaine',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Jermlaine}}{{subtitle=Creature}}RaceData=[w:Jermlaine, align:NE, cattr:int=8:10|mov=15|ac=7|size=T|hd=4|hp=1:4|thac0=20|attk1=1d2:Dart:1:P|attk2=1d4:Small pike:3:P|attk3=1d4:Blackjack:3:B|dmgmsg=2% cumulative chance per club hit on trapped opponent of \\lbrak;stunning the victim\\rbrak;\\lpar;!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who is the victim?¦token_id}¦Stunned¦99¦0¦Stunned by Jermlaine Clubs. What next?¦pummeled\\rpar;but only if the victim is in armor worse than splint mail. **Remember:** detect invisible creatures 50%. Move silently 75% undetectable. Opponent surprise penalty -5, spattk:Try to trap victims or otherwise make them prone. Once trapped or prone 2% cumulative chance per club hit of stunning the victim but only if the victim is in armor worse than splint mail. Detect invisible creatures 50% of the time, spdef:Treated as 4HD monster for saves \\amp magic attacks. Move silently \\amp 75% undetectable. Opponents get -5 penalty on surprise,ns:1],[cl:MI,%:90],[cl:MI,%:7,items:random:1d4],[cl:MI,%:3,items:random:2d3]{{Section=**Attributes**}}{{Intelligence=Average (Genius cunning) (8 to 10)}}{{AC=7}}{{Alignment=Neutral Evil (Lawful tendancies)}}{{Move=15}}{{Hit Dice=4HD for the purposes of saves and magical attacks}}{{Hit Points=1 to 4}}{{THAC0=20}}{{Section1=**Attacks:** Dart for 1d2, Small 1.5ft pike for 1d4, Blackjack to pummel for 1d4 (2% cumulative chance to knock unconsious). Also use acid flasks \\amp flaming oil, so DM can equip with these.}}{{Section2=**Languages:** They speak in high-pitched squeaks and twitters. This speech may be mistaken for the sounds of a bat or rat. They can also converse with all sorts of rats, both normal and monstrous. Each jermlaine has a 10% chance to understand *common, dwarvish, gnomish, goblin,* or *orc* (roll separately for each language).}}{{Size=T, 1ft tall}}{{Life Expectancy=Approx. 35 years}}{{Section3=**Powers**}}{{Section4=None}}{{Section5=**Special Advantages**}}{{Drain Magic=}}{{Infravision=30 yards, and use accute hearing \\amp smell to detect even invisible creatures 50%}}{{Silent \\amp Quick=Making them 75% undetectable, even if listened and watched for}}{{Improved Saves=Jermlaine are treated as 4-Hit Die monsters for purposes of saving throws and magical attacks}}{{Section6=**Special Disadvantages**}}{{Section7=None}}Specs=[Jermlaine,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc8=**Jermlaine:** Jermlaine are a diminutive humanoid race that dwells in tunnels and ambushes hapless adventurers. They are known by a variety of names such as jinxkin or bane-midges.\nJermlaine appear to be tiny humans dressed in baggy clothing and leather helmets. In fact the "clothing" is their own saggy skin and pointed heads. The limbs are knottily muscled. The fingernails and toenails are thick and filthy, although the fingers and toes are very nimble. Their gray-brown, warty hide blends in with natural earth and stone. When they wear rags or scraps as clothing, such items are also camouflage colored.}}{{desc9=**Combat:** Jermlaine are cowards who have made an art of the ambush. They only attack when they feel there is no serious opposition. They prefer to attack injured, ill, or sleeping victims. They avoid directly confronting strong, alert parties, although they may try to injure them out of sheer maliciousness.\nThe jermlaines\' favorite tactic is capturing victims with nets or pits. In little-used passages the creatures prepare pits covered by camouflaged doors or string nets overhead. In more-traveled passages, the jermlaine stretch trip cords. When a victim falls afoul of a trap, the jermlaine swarm over him. Some pummel him with blackjacks while others tie him with ropes and cords. Such beatings have a cumulative 2% chance per blow of causing the victim to lapse into unconsciousness. If a victim is wearing splint, banded, or plate mail, these pummeling attacks are ineffective. Knowing this, the jermlaine attack well-armored victims with acid or flaming oil missiles.}}'},
+ {name:'Jermlaine-Elder',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Elder}}RaceData=[w:Jermlaine Elder, align:NE, cattr:int=10, spattk:If can handle a magical item for \\lbrak;1d4\\rbrak;\\lpar;!\\amp#13;\\amp#47;gr 1d4 rounds to drain item\\rpar; rounds can drain the magic unless is an artefact. Detect invisible creatures 50% of the time,ns:1],[cl:MI,%:30,items:random:2d3]{{subtitle=Creature}}%{Race-DB-Creatures|Jermlaine}{{Drain Magic=Has the magical ability to drain the magic from most magical items if he can handle such an object for 1d4 rounds}}{{Section6=**Special Disadvantages**}}{{Section7=None}}Specs=[Jermlaine,CreatureRace,0H,Creature]{{Section9=**Description**}}{{desc=**Jermlaine Elder:** Groups of 35 or more jermlaine are accompanied by an elder -- a very old jermlaine with the magical ability to drain the magic from most magical items if he can handle such an object for 1d4 rounds. Artifacts and relics are immune to such attacks.}}'},
+ {name:'Ju-Ju-Zombie',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= Ju-Ju}}RaceData=[w:Ju-Ju Zombie, align:N, cattr:int=5:7|mov=9|ac=6|size=M|hd=3+12r4|thac0=15|attk1=3d4:Claw:0:S|attkmsg=Remember +1 weapons to hit; Bludgeon \\amp Piercing does half damage. Immune to *Sleep / Charm / hold / mind affecting / magic missile* and *death* spells and all cold / psionics / illusions / and electricity attacks. Fire causes only half damage, spdef:+1 weapons to hit; Bludgeon \\amp Piercing does half damage. Immune to *Sleep / Charm / hold / mind affecting / magic missile* and *death* spells and all cold / psionics / illusions / and electricity attacks. Fire bludgeoning \\amp piercing weapons cause only half damage]{{subtitle=Creature}}%{Race-DB-Creatures|Zombie}{{Intelligence=Low (5-7)}}Specs=[Ju-Ju Zombie,CreatureRace,0H,Zombie]{{AC=6}}{{Alignment=Neutral Evil}}{{Move=9}}{{Hit Dice=3d8+12}}{{THAC0=15}}{{Attack=1 x Claw 3d4, or by any type of weapon}}{{Languages=While having some vestidge of intelligence, Ju-Ju Zombies cannot talk, but understand full-sentence instructions with conditions, and use simple tactics and strategies}}{{Spell Immunity=Immune to all *sleep, charm,* and *hold* spells, *death* magic and poisons, and all forms of cold-based attacks, as well as mind affecting spells and psionics, illusions, and to electricity and magic missiles}}{{Fire Resistance=Fire causes only half damage}}{{Half Damage from B\\ampP=Bludgeoning or piercing weapons inflict only half damage. Edged, slashing weapons cause normal damage}}{{desc8=These creatures are made when a wizard drains the life force from a man-sized humanoid creature with an energy drain spell. Their skin is hard, gray, and leathery. Ju-ju zombies have a spark of intelligence. A hateful light burns in their eyes, as they realize their condition and wish to destroy living things. They understand full-sentence instructions with conditions, and use simple tactics and strategies. Since they became zombies at the moment of death, their bodies tend to be in better condition. Ju-ju zombies use normal initiative rules to determine when they strike. They are dexterous enough to use normal weapons, although they must be specifically commanded to do so. These zombies can hurl weapons like javelins or spears, and can fire bows and crossbows. Their Dexterity allows them to climb walls as a thief (92%) and they strike as a 6 Hit Die monster. Ju-ju zombies are turned as specters.\nThe animating force of a ju-ju zombie is more strongly tied to the Negative Material plane. The result is that only +1 or better magical weapons can harm them. Regardless of the magic on the weapon, edged and cleaving weapons inflict normal damage, while blunt and piercing weapons cause half damage. In addition to normal zombie spell immunities, ju-ju zombies are immune to mind affecting spells and psionics, illusions, and to electricity and magic missiles. Fire causes only half damage.}}{{desc9=}}'},
+ {name:'Sea-Horse-Giant',type:'seahorserace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Giant-Sea-Horse}{{}}Specs=[Giant Sea Horse,SeaHorseRace,0H,Giant-Sea-Horse]{{}}RaceData=[w:Giant-Sea-Horse]{{}}'},
]},
- Race_DB_Creatures_K_O:{bio:'Creatures Database v2.04 26/01/2025
This sheet holds definitions of pre-defined creatures from The Monsterous Compendium that can be used by the RPGMaster API system (creatures can also be added directly to a character sheet by editing the Monster tab on the sheet). The definitions include automatically setable attributes, valid alignments, the weapons & armour each creature can use, bonuses and penalties to saves, attacks, surprise etc, and the powers that the creature gets. Depending on API configuration, the APIs can restrict creatures to these specifications, or not as desired.',
- gmnotes:'Change Log: v2.04 26/01/2025 Added chance of random items to be added to humanoid Drag & Drop creatures v2.03 20/12/2023 Gave leopards the ability to use barding v2.02 14/10/2023 Fixed issue with War Dog & added Leopard & Snow Leopard v2.01 29/09/2023 Added several families of Giants, and all Chromatic & Metalic Dragons, Titans, & others with substantial functional upgrades v1.34 24/09/2023 Fixed issues with Goblin definition v1.33 13/08/2023 Added a basic chest to act as the basis for the *Drag & Drop* container system v1.32 11/07/2023 Added creatures that can be contained in an Iron Flask v1.31 07/06/2023 Corrected some spattk & spdef entries with wrong syntax v1.30 30/04/2023 Added creatures to support Figurines of Wonderous Power and other MIs v1.28 03/03/2023 Added Elephant, Rhino and Mouse to support Wand of Wonder v1.27 12/02/2023 Added Adder as a creature to support Staff of the Serpent (Adder) v1.26 16/01/2023 Added both attkmsg & dmgmsg to display with attack & damage respectively. v1.25 14/01/2023 Switched round creature attack names and dice rolls so will work with character sheet buttons as well as APIs v1.15-24 16/12/2022 Added more creatures and changed format for inherrited template fields v1.14 25/11/2022 Added more creatures, especially undead at DM request v1.10 14/11/2022 Initial live release of a sample creatures database v1.02 10/11/2022 Fixes and additional creatures v1.01 01/11/2022 First version of Race-DB-Creatures',
+ Race_DB_Creatures_K_O:{bio:'Creatures Database v2.05 05/04/2025
This sheet holds definitions of pre-defined creatures from The Monsterous Compendium that can be used by the RPGMaster API system (creatures can also be added directly to a character sheet by editing the Monster tab on the sheet). The definitions include automatically setable attributes, valid alignments, the weapons & armour each creature can use, bonuses and penalties to saves, attacks, surprise etc, and the powers that the creature gets. Depending on API configuration, the APIs can restrict creatures to these specifications, or not as desired.',
+ gmnotes:'Change Log: v2.05 05/04/2025 Added Megalo Centipede v2.04 26/01/2025 Added chance of random items to be added to humanoid Drag & Drop creatures v2.03 20/12/2023 Gave leopards the ability to use barding v2.02 14/10/2023 Fixed issue with War Dog & added Leopard & Snow Leopard v2.01 29/09/2023 Added several families of Giants, and all Chromatic & Metalic Dragons, Titans, & others with substantial functional upgrades v1.34 24/09/2023 Fixed issues with Goblin definition v1.33 13/08/2023 Added a basic chest to act as the basis for the *Drag & Drop* container system v1.32 11/07/2023 Added creatures that can be contained in an Iron Flask v1.31 07/06/2023 Corrected some spattk & spdef entries with wrong syntax v1.30 30/04/2023 Added creatures to support Figurines of Wonderous Power and other MIs v1.28 03/03/2023 Added Elephant, Rhino and Mouse to support Wand of Wonder v1.27 12/02/2023 Added Adder as a creature to support Staff of the Serpent (Adder) v1.26 16/01/2023 Added both attkmsg & dmgmsg to display with attack & damage respectively. v1.25 14/01/2023 Switched round creature attack names and dice rolls so will work with character sheet buttons as well as APIs v1.15-24 16/12/2022 Added more creatures and changed format for inherrited template fields v1.14 25/11/2022 Added more creatures, especially undead at DM request v1.10 14/11/2022 Initial live release of a sample creatures database v1.02 10/11/2022 Fixes and additional creatures v1.01 01/11/2022 First version of Race-DB-Creatures',
root:'Race-DB',
api:'cmd',
type:'class,race',
controlledby:'all',
avatar:'https://s3.amazonaws.com/files.d20.io/images/241737383/GL25pkAS2z5JJ4S9cMKkjw/max.png?1629918721',
- version:2.04,
+ version:2.05,
db:[{name:'Killmoulis',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Killmoulis}}{{subtitle=Creature}}Specs=[Killmoulis,CreatureRace,0H,Brownie]{{Intelligence=Average (8 to 10)}}{{AC=6}}{{Alignment=Neutral (Chaotic Good)}}{{Move=15}}{{Attack=None}}{{Languages=*Killmoulis, Brownie, elvish, pixie, sprite,* and *halfling,* as well as *common*}}{{Size=T, under 1ft tall}}{{Section5=**Blend into Surroundings:** They are superb at blending into\ntheir surroundings and are only 10% detectable}}RaceData=[w:Killmoulis, align:N|CG, cattr:int=8:10|ac=6|attk1=0:None:0:S,spattk:Spell-casting powers,spdef:Can blend into surroundings to become only 10% detectable. Cannot be surprised]{{desc=**Killmoulis:** The killmoulis is a distant relative of the brownie, standing under 1-foot in height but with a disproportionately large head and a prodigious nose. Killmoulis are able to blend into surroundings and are therefore 10% detectable. They live in symbiotic relationships with humans, usually where foodstuffs are handled, making their homes under the floors, and in the walls and crawlspaces}}'},
{name:'Kobold',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Kobold}}{{subtitle=Creature}}Specs=[Kobold,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Average (8-10)}}{{AC=10, Can wear simple armour, up to AC7. Use menus to add armour)}}{{Alignment=Lawful Evil}}{{Move=6}}{{Hit Dice=1/2 (1d4)}}{{THAC0=20}}{{Attack=By weapon}}{{Languages=Kobolds speak their own language (which sounds like small dogs yapping); some (75%) speak orc and goblin}}{{Size=S, Barely 3 feet}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Infravision=60 ft, but suffer -1 to hit in bright sunlight}}{{Weapon use=Can use clubs, axes, javelins, shortswords, and spears. Use menus to add to character sheet}}RaceData=[w:Kobold, align:LE, weaps:clubs|axe|javelin|shortsword|spears, ac:wooden-shield|leather|padded|studded-leather|ring-mail|ring|cloak|magic-item, cattr:int=8:10|mov=6|size=S|hd=1-4r4|thac0=20|attk1=1d6:Shortsword:3:S|attk2=1d4:Crude club:4:B|attkmsg=Remember -1 to-hit penalty in \\lbrak;Bright Sunlight\\rbrak;\\lpar;!rounds ~~target caster¦`{selected¦token_id}¦Sunlight 1 tohit penalty¦99¦0¦Suffering -1 to hit due to being in bright sunlight¦bleeding-eye\\rpar; but back to normal in \\lbrak;Shade\\rbrak;\\lpar;!rounds ~~removetargetstatus `{selected¦token_id}¦Sunlight 1 tohit penalty\\rpar;,ns:1],[cl:MI,%:90],[cl:MI,%:10,items:random:1d2]{{Section9=**Description**}}{{desc=Kobolds are a cowardly, sadistic race of short humanoids that vigorously contest the human and demi-human races for living space and food. They especially dislike gnomes and attack them on sight. Barely clearing 3 feet in height, kobolds have scaly hides that range from dark, rusty brown to a rusty black. They smell of damp dogs and stagnant water. Their eyes glow like a bright red spark and they have two small horns ranging from tan to white. Because of the kobolds\' fondness for wearing raggedy garb of red and orange, their non-prehensile rat-like tails, and their language (which sounds like small dogs yapping), these fell creatures are often not taken seriously. This is often a fatal mistake, for what they lack in size and strength they make up in ferocity and tenacity}}{{desc1=**Combat:** The kobold approach to combat uses overwhelming odds or trickery. Kobolds will attack gnomes on sight, but will think twice about attacking humans, elves, or dwarves unless the kobolds outnumber them by at least two to one. They often hurl javelins and spears, preferring not to close until they see that their enemies have been weakened.\nKobolds attack in overwhelming waves. Should the kobolds be reduced to only a three to two ratio in their favor, they must make a morale check. Kobolds are wary of spellcasters and will aim for them when possible.\nThis diminutive race also enjoys setting up concealed pits with spikes, crossbows, and other mechanical traps. They usually have view ports and murder holes near these traps so that they can pour flaming oil, missile weapons, or drop poisonous insects on their victims.\nKobold war bands are armed with spiked clubs, axes, javelins, short swords and spears. Their shields are seldom metal, but are normally wood or wicker. Chiefs and guards tend to have the best weapons available.\nKobolds have 60-foot infravision but do not see well in bright sunlight, suffering a -1 on their attack rolls.}}'},
{name:'Kobold+ac7',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name= with simple armour}}RaceData=[w:Kobold ac7, cattr:ac=7]{{subtitle=Creature}}%{Race-DB-Creatures|Kobold}{{Section=**Attributes**}}Specs=[Kobold,CreatureRace,0H,Kobold]{{Intelligence=Average (8-10)}}{{AC=7 (preset)}}'},
@@ -1519,6 +1542,7 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Marine-Scrag-Shaman',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Saltwater-Troll-Shaman}{{}}RaceData=[w:Saltwater Troll Shaman]{{}}Specs=[Saltwater Troll Shaman,CreatureRace,0H,Saltwater-Troll-Shaman]{{}}'},
{name:'Mastodon',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Mastodon, align:N, weaps:none, ac:none, cattr:mov=12|ac=5|hd=13r2|thac0=7|attk1=3d6:Tusks x 2:0:P|attk2=2d8:Trunk:0:B|attk3=2d6:Trample x 2:0:B]{{subtitle=Mammal}}Specs=[Mastodon,CreatureRace,0H,Elephant]{{}}%{Race-DB-Creatures|Elephant}{{name=Mastodon}}{{AC=5}}{{Move=12}}{{Hit Dice=13HD}}{{THAC0=7}}{{Attacks=2 x Tusks for 3d6 Piercing damage each, 1 x Trunk crush for 2d8 Bludgeoning (crushing) damage, 2 x Trampling for 2d6 each of Bludgeoning damage. Max of 2 attacks on any single opponent, but can tackle up to 6 man-sized opponents}}{{Size=L (10ft to 14ft tall)}}{{desc8=Like the mammoth, the mastodon is an ancestor of the elephant that was common in the Pleistocene era, when they roamed from subarctic to tropical plains. They are larger than the modern elephant, hairier, and somewhat greater in length. Encountered outside of a Pleistocene campaign, mastodons are rare, and found only in subarctic plains.}}'},
{name:'Medium-War-Horse',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Medium War Horse, cattr:mov=18|hd=2+2r5|attk1=1d3:Bite:0:P|attk2=1d6:Left Hoof:0:B|attk3=1d6:Right Hoof:0:B]{{}}Specs=[Medium War Horse,CreatureRace,0H,Horse]{{}}%{Race-DB-Creatures|Horse}{{name=(Medium War)}}{{Move=18}}{{Attacks=Bite for 1d3, 2 x Hooves for 1d6 each}}{{desc8=**Medium War Horse:** Warhorses are bred and trained to the lance, the spear, and the sword. They have higher morale than other horses, and are not as skittish about sudden movements and loud noises. The choice of knights and cavalry, these are the pinnacle of military horses. There are three varieties; heavy, medium and light.\n*Medium war horses* are lighter and smaller than their heavy cousins. They can be encumbered with leather or light plate armor and carry a rider wearing leather or light plate. The advantage of the medium war horse is its increased speed. The price of a medium war horse is 200 gp or more.}}{{desc9=**Combat:** War horses will fight independently of the rider on the second and succeeding rounds of a melee. They attack three-times per round by kicking with their front hooves and biting.\n*War Horses* are specially trained, and are accustomed to loud noises, strange smells, fire, or sudden movements, panicing only 10% of the time.}}'},
+ {name:'Megalo-Centipede',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Megalo Centipede,svall:0,cattr:int=1|size=M|ac=5|hd=3r3|hp=|mov=18|thac0=17|attk1=2d4:Bite:0:P|dmgmsg=On a successful hit, the victim must save vs. poison or immediately die]{{}}Specs=[Megalo Centipede,CreatureRace,2H,Giant Centipede]{{}}%{Race-DB-Creatures|Giant-Centipede}{{prefix=Megalo}}{{Intelligence=Animal (1)}}{{AC=5}}{{Alignment=Neutral}}{{Move=18}}{{Hit Dice=3 HD}}{{THAC0=17}}{{Attack=1 bite which, if successful, victim must save vs. poison to take 2d4 damage, or die if fail}}{{Size=M, 5ft long}}{{desc8=The megalo-centipede, because of its great size, is no longer classed as an irritant but is a threat to human and animal alike. It is more intelligent than its smaller cousins and it is a far more cunning hunter, although they still do not cooperate with each other.}}{{desc9=**Combat:** When hunting, centipedes use their natural coloration to remain unseen until they can drop on their prey from above or crawl out of hiding in pursuit of food. They attack by biting their foes and injecting an acidic poison, far more potent than that of its weaker cousins. The victims of a megalo-centipede bite receive no bonuses on their saving throws and failure indicates death. If the target successfully resists the poison, the acid burns the victim\'s skin, inflicting 2d4 points of damage. When more than one centipede is encountered, the monsters will fight independently, even to the point of fighting among themselves over fallen victims.\nIn the wilderness the megalo-centipede prey on animals the size of deer. In the subterranean environment, it attacks man-sized or smaller creatures, including orcs, goblins, or humans.}}'},
{name:'Mephit-Fire',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Fire-Mephit}{{}}Specs=[Fire Mephit,CreatureRace,0H,Fire-Mephit]{{}}RaceData=[w:Fire Mephit]{{}}\n'},
{name:'Mephit-Ice',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Ice-Mephit}{{}}RaceData=[w:Ice Mephit]]{{}}Specs=[Ice Mephit,CreatureRace,0H,Ice-Mephit]{{}}'},
{name:'Mephit-Lava',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Lava-Mephit}{{}}RaceData=[w:Lava Mephit]{{}}Specs=[Lava Mephit,CreatureRace,0H,Lava-Mephit]{{}}'},
@@ -1577,14 +1601,14 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Owl-Horned',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Horned-Owl}{{}}RaceData=[w:Horned Owl]{{}}Specs=[Horned Owl,CreatureRace,0H,Horned Owl]{{}}'},
{name:'Owl-Talking',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Talking-Owl}{{}}RaceData=[w:Talking Owl]{{}}Specs=[Talking Owl,CreatureRace,0H,Talking Owl]{{}}'},
]},
- Race_DB_Creatures_P_T:{bio:'Creatures Database v2.05 27/01/2025
This sheet holds definitions of pre-defined creatures from The Monsterous Compendium that can be used by the RPGMaster API system (creatures can also be added directly to a character sheet by editing the Monster tab on the sheet). The definitions include automatically setable attributes, valid alignments, the weapons & armour each creature can use, bonuses and penalties to saves, attacks, surprise etc, and the powers that the creature gets. Depending on API configuration, the APIs can restrict creatures to these specifications, or not as desired.',
- gmnotes:'Change Log: v2.05 26/01/2025 Added chance of random items to be added to humanoid Drag & Drop creatures v2.04 20/12/2024 Added Quasit v2.03 20/10/2023 Added more creatures for current campaigns v2.02 14/10/2023 Fixed issue with War Dog & added Leopard & Snow Leopard v2.01 29/09/2023 Added several families of Giants, and all Chromatic & Metalic Dragons, Titans, & others with substantial functional upgrades v1.34 24/09/2023 Fixed issues with Goblin definition v1.33 13/08/2023 Added a basic chest to act as the basis for the *Drag & Drop* container system v1.32 11/07/2023 Added creatures that can be contained in an Iron Flask v1.31 07/06/2023 Corrected some spattk & spdef entries with wrong syntax v1.30 30/04/2023 Added creatures to support Figurines of Wonderous Power and other MIs v1.28 03/03/2023 Added Elephant, Rhino and Mouse to support Wand of Wonder v1.27 12/02/2023 Added Adder as a creature to support Staff of the Serpent (Adder) v1.26 16/01/2023 Added both attkmsg & dmgmsg to display with attack & damage respectively. v1.25 14/01/2023 Switched round creature attack names and dice rolls so will work with character sheet buttons as well as APIs v1.15-24 16/12/2022 Added more creatures and changed format for inherrited template fields v1.14 25/11/2022 Added more creatures, especially undead at DM request v1.10 14/11/2022 Initial live release of a sample creatures database v1.02 10/11/2022 Fixes and additional creatures v1.01 01/11/2022 First version of Race-DB-Creatures',
+ Race_DB_Creatures_P_T:{bio:'Creatures Database v2.06 05/04/2025
This sheet holds definitions of pre-defined creatures from The Monsterous Compendium that can be used by the RPGMaster API system (creatures can also be added directly to a character sheet by editing the Monster tab on the sheet). The definitions include automatically setable attributes, valid alignments, the weapons & armour each creature can use, bonuses and penalties to saves, attacks, surprise etc, and the powers that the creature gets. Depending on API configuration, the APIs can restrict creatures to these specifications, or not as desired.',
+ gmnotes:'Change Log: v2.06 05/04/2025 Added puddings v2.05 26/01/2025 Added chance of random items to be added to humanoid Drag & Drop creatures v2.04 20/12/2024 Added Quasit v2.03 20/10/2023 Added more creatures for current campaigns v2.02 14/10/2023 Fixed issue with War Dog & added Leopard & Snow Leopard v2.01 29/09/2023 Added several families of Giants, and all Chromatic & Metalic Dragons, Titans, & others with substantial functional upgrades v1.34 24/09/2023 Fixed issues with Goblin definition v1.33 13/08/2023 Added a basic chest to act as the basis for the *Drag & Drop* container system v1.32 11/07/2023 Added creatures that can be contained in an Iron Flask v1.31 07/06/2023 Corrected some spattk & spdef entries with wrong syntax v1.30 30/04/2023 Added creatures to support Figurines of Wonderous Power and other MIs v1.28 03/03/2023 Added Elephant, Rhino and Mouse to support Wand of Wonder v1.27 12/02/2023 Added Adder as a creature to support Staff of the Serpent (Adder) v1.26 16/01/2023 Added both attkmsg & dmgmsg to display with attack & damage respectively. v1.25 14/01/2023 Switched round creature attack names and dice rolls so will work with character sheet buttons as well as APIs v1.15-24 16/12/2022 Added more creatures and changed format for inherrited template fields v1.14 25/11/2022 Added more creatures, especially undead at DM request v1.10 14/11/2022 Initial live release of a sample creatures database v1.02 10/11/2022 Fixes and additional creatures v1.01 01/11/2022 First version of Race-DB-Creatures',
root:'Race-DB',
api:'cmd',
type:'class,race',
controlledby:'all',
avatar:'https://s3.amazonaws.com/files.d20.io/images/241737383/GL25pkAS2z5JJ4S9cMKkjw/max.png?1629918721',
- version:2.05,
+ version:2.06,
db:[{name:'Bear-Polar-Huge',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Huge-Polar-Bear}{{}}Specs=[Huge-Polar-Bear,CreatureRace,0H,Huge-Polar-Bear]{{}}RaceData=[w:Huge Polar Bear]{{}}'},
{name:'Huge-Polar-Bear',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Huge Polar Bear, cattr:hd=10+8r2|thac0=9|attk1=5+2d8:Claw1:0:S|attk2=5+2d8:Claw2:0:S|attk3=5+2d10:Bite:1:P]{{}}Specs=[Huge Polar Bear,CreatureRace,0H,Polar-Bear]{{}}%{Race-DB-Creatures|Polar-Bear}{{prefix=Huge}}{{Hit Dice=10+8r2}}{{THAC0=9}}{{Attack=2 x Claw 2d8+5, 1 x Bite 2d10+5}}{{Size=H, 18ft tall}}'},
{name:'Piercer-1HD',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Piercer 1HD, cattr:hd=1r2|attk1=1d6:Pierce:0:P]{{}}%{Race-DB-Creatures|Piercer-2HD}{{name= 1HD}}{{Size=M, 1ft tall}}Specs=[Piercer 1HD,CreatureRace,0H,Piercer 2HD]{{Hit Dice=1}}{{Attacks=Drop from above for 1d6 damage}}'},
@@ -1603,6 +1627,10 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Polar-Bear-Huge',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Huge-Polar-Bear}{{}}Specs=[Huge-Polar-Bear,CreatureRace,0H,Huge-Polar-Bear]{{}}RaceData=[w:Huge Polar Bear]{{}}'},
{name:'Poltergeist',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Poltergeist}}RaceData=[w:Poltergeist, align:LE, weaps:none, ac:none, cattr:int=5:7|mov=12|ac=10|hd=1-4r4|thac0=15|size=M|attk1=0:Thrown item:0:B|dmgmsg=If hit no damage is done but victim must save vs. spell or \\lbrak;flee in *fear*\\rbrak;\\lpar;!rounds ~~target single¦`{selected¦token_id}¦\\amp#64;{target¦Who\'s the Victim?¦token_id}¦Poltergeist fear¦\\lbrak;\\amp#91;2d12\\amp#93;\\rbrak;¦-1¦Fleeing in fear from a poltergeist!¦screaming\\rpar; for 2d12 rounds. \\lbrak;50% chance\\rbrak;\\lpar;!\\amp#13;\\amp#47;gr 1d100\\lt50 if less than 50 drop what is holding\\rpar; of dropping what is held. Gain benefits of being invisible. Silver or magical weapons to hit, spattk:If hit no damage is done but victim must save vs. spell or flee in *fear* for 2d12 rounds. 50% chance of dropping what is held, spdef:Gain benefits of being invisible. Silver or magical weapons to hit]{{subtitle=Creature}}Specs=[Poltergeist,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low (5-7)}}{{AC=10}}{{Alignment=Lawful Evil}}{{Move=6}}{{Hit Dice=½ HD}}{{THAC0=15}}{{Attacks=Throw items to create *fear*}}{{Size=M, 6ft tall}}{{Life Expectancy=Already dead!}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=**Cause Fear:** Don\'t do damage but struck opponent must save vs. spell or cause *fear* and flee for 2d12 rounds, with 50% chance of dropping whatever was held}}{{Invisible=Those who can\'t see invisible creatures get -4 penalty to-hit}}{{Silver or Magical Weapons=These are required to hit the Poltergeist}}{{Turning=If bound to a location, turned as *ghouls*. If wandering turned as *skeletons*}}{{Section6=**Special Disadvantages**}}{{Repellants=*Holy Water* and holy symbols do *not* do damage but do drive Poltergeist back}}{{Section9=**Description**}}{{desc8=Poltergeists are the spirits of restless dead. They are similar to haunts but are more malevolent. They hate living things and torment them constantly, by breaking furniture, throwing heavy objects, and making haunting noises. They are often, but not always, attached to a particular area.\nPoltergeists are always invisible. Those who can see invisible objects describe them as humans whose features have been twisted at the sight of horrors. They wear rags and are covered with chains and other heavy objects that represent a multitude of evil deeds that these creatures have committed against themselves as well as others.}}{{desc9=**Combat:** A poltergeist attacks by throwing a heavy object - any nearby object that a strong human can throw will suffice. It has the same chance to hit as a 5-HD monster (hence its adjusted THAC0). If struck the victim suffers no damage (treat deadly weapons as terrifying near misses), but must save vs. spell or flee in terror for 2d12 rounds. 50% chanceof dropping whatever he was holding (at the start of his flight). Once a person successfully saves, they are immune to further fear attempts by the poltergeist in that area.\nPoltergeists that are bonded to the area of their death are hard to dispel; treated as if they were ghouls on the *Turning Undead* table. Wandering poltergeists may be turned or destroyed by a priest as if they were skeletons.}}'},
{name:'Pony',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Pony, cattr:mov=12|hd=1+1r6|thac0=19|attk1=1d2:Bite:0:P]{{}}Specs=[Pony,CreatureRace,0H,Horse]{{}}%{Race-DB-Creatures|Horse}{{name=(Pony)}}{{Move=12}}{{Attacks=Bite for 1d2}}{{Hit Dice=1+1HD}}{{THAC0=19}}{{desc8=**Pony:** Small horses used primarily for transportation and occasionally farm work, ponies are a lively breed. They are more excitable than the larger horses, but frequently more gentle, as well. They are sometimes trained and used as war horses by several of the smaller demihuman races. Prices vary depending on training and size, but most cost around 500 gp.}}{{desc9=**Combat:** Unless trained as war horses for use by a smaller race, ponies fight only if cornered. They can only bite once per round. Unless specially trained, ponies can be panicked by loud noises, strange smells, fire, or sudden movements 90% of the time. Ponies trained and accustomed to such things (usually warhorses) panic only 10% of the time.}}'},
+ {name:'Pudding-Black',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Black-Pudding}{{}}Specs=[Black Pudding,CreatureRace,0H,Black Pudding]{{}}RaceData=[w:Black Pudding]{{}}'},
+ {name:'Pudding-Brown',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Brown-Pudding}{{}}Specs=[Brown Pudding,CreatureRace,0H,Brown Pudding]{{}}RaceData=[w:Brown Pudding]{{}}'},
+ {name:'Pudding-Dun',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Dun-Pudding}{{}}Specs=[Dun Pudding,CreatureRace,0H,Dun Pudding]{{}}RaceData=[w:Dun Pudding]{{}}'},
+ {name:'Pudding-White',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|White-Pudding}{{}}Specs=[White Pudding,CreatureRace,0H,White Pudding]{{}}RaceData=[w:White Pudding]{{}}'},
{name:'Quasit',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}Specs=[Quasit,CreatureRace,2H,Imp]{{}}RaceData=[w:Quasit, align:CE, cattr:int=6:7|mov=15|size=T|hd=3|thac0=17|attk1=1d2:Left Claw:0:S|attk2=1d2:Right Claw:0:S|attk3=1d4:Bite:0:S||dmgmsg=On a successful claw hit click \\lbrak;injects poison\\rbrak;\\lpar;!rounds ~~target-save single¦@{selected¦token_id}¦\\amp#64;{target¦Which creature was hit?¦token_id}¦Clumsey¦$\\lbrak;\\lbrak;2d6\\rbrak;\\rbrak;¦-1¦Dexterity reduced by 1 - cumulative¦back-pain¦svpoi\\clon;0\\rpar; then ask creature to save vs. poison or lose 1 point Dexterity for 2d6 rounds. Remember 25% magic resistance\\comma damaged only by silver \\amp magic weapons\\comma Cold fire \\amp electricity have no effect, ns:1],[cl:PW,w:PR-Cause-Fear,sp:1,pd:1],[cl:PW,w:Commune,sp:100,pd:1]{{}}%{Race-DB-Creatures|Imp}{{title=Quasit}}{{subtitle=Imp}}{{Intelligence=Low (6:7)}}{{Alignment=Chaotic Evil}}{{Move=15}}{{Hit Dice=3}}{{THAC0=17}}{{Attacks=2 x poisoned claws doing 1d2 \\amp save vs. poison or Dexterity reduced by 1 for 2d6 rounds (cumulative), and bite for 1d4}}{{Polymorph=At will into one of two predefined creatures (determined by DM). The most commonly encountered alternate forms are those of bats, giant centipedes, frogs, or wolves. In such forms the quasit is physically identical to a normal animal.}}{{Spells as Powers=*Detect Good, Detect Magic* and become *Invisible* at will even if polymorphed. *Commune* 1/week}}{{desc=**Quasit:** Quasits are chaotic evil counterparts to imps. The chaotic evil priests and wizards which quasits "serve" gain the same benefits and disadvantages that an imp\'s master does. Like imps, each quasit can assume two other forms. Those most commonly chosen by quasits are bats, giant centipedes, frogs, or wolves. They can use their magic in any of their forms.\nThe average quasit is a 2ft humanoid with sharp, twisted horns.\nQuasit are beings of a very chaotic evil nature who originate on the darkest of evil planes. Their main purpose on the Prime Material plane is to spread evil by assisting chaotic evil wizards and priests. When such a person is judged worthy of a quasit\'s service, the quasit comes in answer to a *find familiar* spell.}}{{hide8=**Combat:** In its natural form, the quasit attacks with two poisoned claws and a bite.The quasit\'s claws are coated in a toxin which causes anyone struck by them to save versus poison or lose one point of dexterity for 2-12 (2d6) rounds. The effects of multiple wounds are cumulative. When it is polymorphed, the imp attacks with the natural weaponry of its adopted form, though the goat and raven forms lack damaging attacks}}'},
{name:'Rakshasa',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{title=Rakshasa}}RaceData=[w:Rakshasa, align:LE, weaps:any, ac:magicitem|cloak|ring, cattr:int=11:12|mov=15|ac=-4|hd=7r4|thac0=13|size=M|cl=F:Rakshasa|lv=7|attk1=1d3:Claw1:1:S|attk2=1d3:Claw2:1:S|attk3=1+1d4:Bite:2:P,spattk:Illusion and spell use,spdef:+1 or better magical weapon needed to hit. +1 \\amp +2 only do half damage,ns:1],[cl:PW,w:Rakshasa-Illusion,sp:0,pd:-1]{{subtitle=Creature}}Specs=[Rakshasa,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Very (11:12))}}{{AC=-4}}{{Alignment=Lawful Evil}}{{Move=15}}{{Hit Dice=7 HD}}{{THAC0=13}}{{Attacks=2 x Claws for 1d3, 1 x Bite for 1+1d4}}{{Size=M, 6ft tall}}{{Section2=**Powers**}}{{Illusion=Rakshasas savor fresh human meat and use illusions to get it. They have a limited form of *ESP* which allows them to disguise themselves as someone the victim trusts; the rakshasa uses this illusion as a lure and strikes when the victim is most unprepared. The rakshasa must drop the illusion when it attacks.}}{{Spell Use=Rakshasas can have magical abilities, up to the following limits: four 1st level wizard spells, three 2nd level wizard spells, two 3rd level wizard spells, and three 1st level priest spells. These are cast at 7th level ability.}}{{Section4=**Special Advantages**}}{{Spell Immunity=Rakshasas are immune to all spells lower than 8th level.}}{{Resistance=An attacker needs at least a +1 magical weapon to harm a rakshasa; any weapon below +3 inflicts only half damage.}}{{Section6=**Special Disadvantages**}}{{*Blessed* crossbow bolts=A hit by any *blessed* crossbow bolt kills a rakshasa instantly}}{{Section9=**Description**}}{{desc8=Rakshasas are a race of malevolent spirits encased in flesh that hunt and torment humanity. No one knows where these creatures originate; some say they are the embodiment of nightmares.\nRakshasas stand 6 to 7 feet tall and weigh between 250 and 300 pounds. They have no uniform appearance but appear as humanoid creatures with the bodily features of various beasts (most commonly tigers and apes). Hands whose palms curve backward, away from the body, seem to be common. Rakshasas of the highest standing sometimes have several heads. All rakshasas wear human clothing of the highest quality.}}'},
{name:'Rakshasa-Maharajah',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:Rakshasa Maharajah, cattr:cl=F:Rakshasa-Maharajah|lv=13|hd=13+39,ns:1],[cl:PW,w:Rakshasa-Illusion,sp:0,pd:-1]{{}}%{Race-DB-Creatures|Rakshasa-Ruhks}{{name=Maharajah}}Specs=[Rakshasa-Maharajah,CreatureRace,0H,Rakshasa-Ruhks]{{Spell Use=Rakshasa Maharajas have the spell casting abilities of a 13th level wizard and 9th level priest, both cast at 13th level ability.}}{{desc7=**Rakshasa Maharajah:** About 5% of all rakshasa rajahs are rakshasa maharajahs, or dukes. Maharajahs have the same abilities as a ruhk, but have 13+39 Hit Dice, and the spell casting abilities of a 13th level wizard and 9th level priest. A maharajah is the leader of either several small, related clans, or a single powerful clan. Maharajahs reside on the outer planes, where they rule island communities of hundreds of rakshasas, and serve as minions to even greater powers.}}'},
@@ -1703,19 +1731,20 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Troll-Shaman-Chieftain',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{subtitle=Creature}}RaceData=[w:Troll Shaman Chieftain, cattr:int=7|cl=pr:troll-shaman|lv=7,ns:1],[cl:MI,%:100,items:random:2d2]{{Intelligence=Low (7)}}%{Race-DB-Creatures|Troll}{{name=Troll Shaman Chieftain}}Specs=[Troll Shaman,CreatureRace,0H,Troll]{{Priest Spells=Cast at 7th level: Charm, Divination, Sun (Darkness only), and Weather.}}{{desc=**Troll Shaman Chieftain:** Trolls live in small packs of 3 to 12 trolls led by a dominant female who acts as shaman/chieftain. She casts priest spells at 7th level; spheres typically include Charm, Divination, Sun (Darkness only), and Weather. Leadership is only retained by combat, so fights for pack control are frequent. Often trolls rend each other limb from limb, but these battles are never fatal. Still, it is the custom of trolls to toss the loser\'s head a great distance from the fight scene, and frequently losers must sit and stew for a week until their new head grows in.\nThe pack chieftain\'s duties are few. She leads the trolls on nightly forages, loping along, sniffing the air for prey. If a scent is found, the trolls charge, racing to get there first, and letting out a great cry once prey is spotted. In return for being the hunt leader, the shaman gets her choice of mates in the pack. Females give birth to a single troll about once every five years.}}'},
{name:'Two-Headed-Giant',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'%{Race-DB-Creatures|Ettin}{{}}Specs=[Two-Headed-Giant,CreatureRace,2H,Ettin]{{}}RaceData=[w:Two-Headed Giant]{{}}'},
]},
- Race_DB_Creatures_U_Z:{bio:'Creatures Database v2.03 27/01/2025
This sheet holds definitions of pre-defined creatures from The Monsterous Compendium that can be used by the RPGMaster API system (creatures can also be added directly to a character sheet by editing the Monster tab on the sheet). The definitions include automatically setable attributes, valid alignments, the weapons & armour each creature can use, bonuses and penalties to saves, attacks, surprise etc, and the powers that the creature gets. Depending on API configuration, the APIs can restrict creatures to these specifications, or not as desired.',
- gmnotes:'Change Log: v2.04 26/01/2025 Added chance of random items to be added to humanoid Drag & Drop creatures v2.02 14/10/2023 Fixed issue with War Dog & added Leopard & Snow Leopard v2.01 29/09/2023 Added several families of Giants, and all Chromatic & Metalic Dragons, Titans, & others with substantial functional upgrades v1.34 24/09/2023 Fixed issues with Goblin definition v1.33 13/08/2023 Added a basic chest to act as the basis for the *Drag & Drop* container system v1.32 11/07/2023 Added creatures that can be contained in an Iron Flask v1.31 07/06/2023 Corrected some spattk & spdef entries with wrong syntax v1.30 30/04/2023 Added creatures to support Figurines of Wonderous Power and other MIs v1.28 03/03/2023 Added Elephant, Rhino and Mouse to support Wand of Wonder v1.27 12/02/2023 Added Adder as a creature to support Staff of the Serpent (Adder) v1.26 16/01/2023 Added both attkmsg & dmgmsg to display with attack & damage respectively. v1.25 14/01/2023 Switched round creature attack names and dice rolls so will work with character sheet buttons as well as APIs v1.15-24 16/12/2022 Added more creatures and changed format for inherrited template fields v1.14 25/11/2022 Added more creatures, especially undead at DM request v1.10 14/11/2022 Initial live release of a sample creatures database v1.02 10/11/2022 Fixes and additional creatures v1.01 01/11/2022 First version of Race-DB-Creatures',
+ Race_DB_Creatures_U_Z:{bio:'Creatures Database v2.04 05/04/2025
This sheet holds definitions of pre-defined creatures from The Monsterous Compendium that can be used by the RPGMaster API system (creatures can also be added directly to a character sheet by editing the Monster tab on the sheet). The definitions include automatically setable attributes, valid alignments, the weapons & armour each creature can use, bonuses and penalties to saves, attacks, surprise etc, and the powers that the creature gets. Depending on API configuration, the APIs can restrict creatures to these specifications, or not as desired.',
+ gmnotes:'Change Log: v2.04 05/04/2025 Added White Pudding v2.03 26/01/2025 Added chance of random items to be added to humanoid Drag & Drop creatures v2.02 14/10/2023 Fixed issue with War Dog & added Leopard & Snow Leopard v2.01 29/09/2023 Added several families of Giants, and all Chromatic & Metalic Dragons, Titans, & others with substantial functional upgrades v1.34 24/09/2023 Fixed issues with Goblin definition v1.33 13/08/2023 Added a basic chest to act as the basis for the *Drag & Drop* container system v1.32 11/07/2023 Added creatures that can be contained in an Iron Flask v1.31 07/06/2023 Corrected some spattk & spdef entries with wrong syntax v1.30 30/04/2023 Added creatures to support Figurines of Wonderous Power and other MIs v1.28 03/03/2023 Added Elephant, Rhino and Mouse to support Wand of Wonder v1.27 12/02/2023 Added Adder as a creature to support Staff of the Serpent (Adder) v1.26 16/01/2023 Added both attkmsg & dmgmsg to display with attack & damage respectively. v1.25 14/01/2023 Switched round creature attack names and dice rolls so will work with character sheet buttons as well as APIs v1.15-24 16/12/2022 Added more creatures and changed format for inherrited template fields v1.14 25/11/2022 Added more creatures, especially undead at DM request v1.10 14/11/2022 Initial live release of a sample creatures database v1.02 10/11/2022 Fixes and additional creatures v1.01 01/11/2022 First version of Race-DB-Creatures',
root:'Race-DB',
api:'cmd',
type:'class,race',
controlledby:'all',
avatar:'https://s3.amazonaws.com/files.d20.io/images/241737383/GL25pkAS2z5JJ4S9cMKkjw/max.png?1629918721',
- version:2.03,
+ version:2.04,
db:[{name:'Vampire',type:'HumanoidCreature',ct:'1',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Vampire}}{{subtitle=Creature}}Specs=[Vampire,HumanoidCreature,0H,Creature]{{Alignment=Usually chaotic evil}}{{Languages=Whatever they knew before they were a vampire, or what their vampire parents taught them.}}{{Size=M, As per pre-vampire race (usually [65+2d6](!\\amp#13;\\amp#47;r 65+2d6 ins height)ins,}}{{Weight=Their weight before becoming a vampire or [140+6d10](!\\amp#13;\\amp#47;r 140+6d10 lbs weight)lbs}}{{Life(?) Expectancy=Immortal}}{{Section=**Attributes**}}{{Minimum=Str:18(76), Int:15}}{{Maximum=Int:16}}{{Adjustment=None}}{{Section1=**Powers**}}{{Energy Drain=Drains 2 levels from anyone they successfully touch}}{{Charm=Any person who allows the\nvampire to look into their eyes will be affected as if by a *charm person* spell. Due to the power of this enchantment, a -2 is applied to the victim\'s saving throw vs. spell}}{{Summon Creatures=Can summon swarms of creatures to their aid}}{{Shape Change=Can *Shape Change* into a large bat at will}}{{Spell-like powers=*Gaseous Form* and *Spider Climb* at will}}{{Section2=**Special Advantages**}}{{Infravision=60 feet}}{{Plus Weapons To Hit=Attackers must use weapons of at least +1 to be able to hit a vampire}}{{Immunities=Immune to *Sleep, Charm,* and *Hold* spells, Paralysis and Poison. Spells based on cold or electricity cause only half damage}}{{Section3=**Special Disadvantages**}}{{Repellants=Odor of Strong Garlic; Mirror or Holy Symbol presented with conviction}}{{Holy Water or Symbol=Burns a vampire for 2-7 (1d6+1) damage with a successful hit}}{{Others=See Monsterous Compendium for other disadvantages}}RaceData=[w:Vampire, cattr:int=15:16|ac=1|mov=12|fly=18C|hd=8d8+3|thac0=11|attk1=4+1d6:Hand:0:B|dmgmsg=[Drains 2 levels](!magic ~~level-change \\amp#64;{target¦Who is the Victim?¦token_id}¦-2) on a successful hit with a hand,spattk:Energy drain,spdef:+1 weapon to hit; immune to *sleep, charm \\amp hold*, ns:1],[cl:PW,w:Charm Person,sp:1,lv:0,pd:-1],[cl:PW,w:Summon Swarm,sp:2,lv:0,pd:-1],[cl:PW,w:Gaseous Form,sp:0,lv:0,pd:-1],[cl:PW,w:MU-Shape-Change,sp:9,lv:0,pd:-1],[cl:PW,w:Spider Climb,sp:1,lv:0,pd:-1],[cl:MI,items:random:2+2d4]{{Section9=**Description**}}{{desc=Of all the chaotic evil undead creatures that stalk the world, none is more dreadful than the vampire. Moving silently through the night, vampires prey upon the living without mercy or compassion. Unless deep underground, they must return to the coffins in which they pass the daylight hours, and even in the former case they must occasionally return to such to rest, for their power is renewed by contact with soil from their graves.\nOne aspect that makes the vampire far more fearful than many of its undead kindred is its appearance. Unlike other undead creatures, the vampire can easily pass among normal men without drawing attention to itself for, although its facial features are sharp and feral, they do not seem inhuman. In many cases, a vampire\'s true nature is revealed only when it attacks. There are ways in which a vampire may be detected by the careful observer, however. Vampires cast no reflection in a glass, cast no shadows, and move in complete silence.}}'},
{name:'War-Dog',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:War Dog, ac:barding, cattr:mov=12|ac=6|hd=2+2r5|size=M|attk1=2d4:Bite:0:P]{{}}Specs=[War Dog,CreatureRace,0H,Wild Dog]{{}}%{Race-DB-Creatures|Wild-Dog}{{name=War Dog}}{{AC=6}}{{Move=12}}{{Hit Dice=2+2 HD}}{{Attacks=Bite for 2d4}}{{Size=M}}{{Life Expectancy=5 to 7 years, exceptionally up to 12}}{{Section5=Keen senses of smell \\amp hearing}}{{desc8=Generally large mastiffs or wolfhounds, they have keen senses of smell and hearing, making them adept at detecting intruders. The status of war dogs varies greatly; some are loyal and beloved pets, some are watch dogs, others are hunting dogs, and some are trained for battle.}}{{desc9=**Combat:** Most war dogs are not usually vicious, and will rarely attack without cause.}}'},
{name:'Water-Elemental',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Water Elemental}}{{subtitle=Creature}}Specs=[Elemental,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Low (5-7)}}{{AC=2}}{{Alignment=Neutral}}{{Move=6, SW18 (on dry land never more than 60yds from water conjoured from)}}{{Hit Dice=8, 12, or 16}}{{THAC0=12, 9, or 7}}{{Attack=1 x 5d8 (On dry land, take 1 less damage per die)}}{{Languages=They rarely speak, but their voices can be heard in the crashing of waves on rocky shores and the howl of an ocean gale}}{{Size=L to H, [7+1d8](!\\amp#13;\\amp#47;r 7+1d8 feet height)feet,}}{{Life Expectancy=Unknown}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Special Defense=Only hit by +2 or better weapons}}RaceData=[w:Water Elemental, cattr:int=5:7|ac=2|mov=6|Swim=18|size=L|hd=8|thac0=12|attk1=5d8:Wave crash:0:B|attk2=\\lbrak;\\lbrak;{1d8-1\\amp#44;1d8-1\\amp#44;1d8-1\\amp#44;1d8-1\\amp#44;{1}\\amp#44;{1}\\amp#44;{1}\\amp#44;{1}\\rbrc;kh5\\rbrak;\\rbrak;:On dry land:0:B,spdef:+2 weapon or better to hit]{{Section9=**Description**}}{{desc=Water elementals can be conjured in any area containing a large amount of water or watery liquid. At least one thousand cubic feet of liquid is required to create a shell for the water elemental to inhabit. Usually a large pool serves this purpose, but several large kegs of wine or ale will do just as well.\nThe water elemental appears on the Prime Material Plane as a high-crested wave. The elemental\'s arms appear as smaller waves, one thrust out on each side of its main body. The arms ebb and flow, growing longer or shorter as the elemental moves. Two orbs of deep green peer out of the front of the wave and serve the elemental as eyes}}{{desc1=In combat, the water elemental is a dangerous adversary. It prefers to fight in a large body of water where it can constantly disappear beneath the waves and suddenly swell up behind its opponent.\nWhen the elemental strikes, it lashes out with a huge wave-like arm, doing 5-30 points of damage. Water elementals are also a serious threat to ships that cross their paths. A water elemental can easily overturn small craft (one ton of ship per hit die of the elemental) and stop or slow almost any vessel (one ton of ship per hit point of the elemental). Ships not completely stopped by an elemental will be slowed by a percentage equal to the ratio of ship\'s tons over the hit points of the attacking elemental.\nThough the water elemental is most effective in large areas of open water, it can be called upon to serve in a battle on dry land, close to the body of water from which it arose. However, the movement of the water elemental on land is the most restricted of any elemental type: a water elemental cannot move more than 60 yards away from the water it was conjured from, and 1 point of damage is subtracted from each die of damage they inflict out of the water (to a minimum of 1 point of damage per die)}}'},
{name:'Weasel',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Weasel}}RaceData=[w:Weasel, align:N, weaps:none, ac:none, cattr:int=1|mov=15|ac=6|hd=1-6r6|hp=2|thac0=20|size=S|attk1=1:Bite:0:P]{{subtitle=Creature}}Specs=[Weasel,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Animal (1)}}{{AC=6}}{{Alignment=Neutral}}{{Move=15}}{{Hit Dice=¼ HD}}{{THAC0=20}}{{Attacks=Bite for 1HP damage}}{{Size=S}}{{Life Expectancy=Short}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=Weasels, related to minks and stoats, are common predators, though they are hunted for their pelts, or for pets.}}'},
{name:'White-Dragon',type:'DragonRace',ct:'1',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}Specs=[White-Dragon,DragonRace,2H,Red-Dragon]{{}}RaceData=[w:White Dragon, cattr:int=5:7|mov=12|fly=40C|swim=12|ac=2-??1|hd=(11+??2)d8r1|mr=(v(^((??1-4);0);1)*(??1-4)*5)|cl=mu:white-dragon|lv=4+??1|thac0=9-??2|dmg=??1|size=G|attk1=1d6:Claw x 2 or Claw+Kick:0:S|attk2=2d8:Bite:0:P|attk3=2d6:Tail Swipe:0:B|attkmsg=Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$Remember powers such as *Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*$$\\lbrak;Show the radius\\rbrak;\\lpar;!rounds ~~aoe `{selected¦token_id}¦arc180¦feet¦0¦\\lbrak;\\lbrak;`{selected¦age¦max}*7\\rbrak;\\rbrak;¦\\lbrak;\\lbrak;`{selected¦age¦max}*14\\rbrak;\\rbrak;¦black\\rpar; then up to \\lbrak;\\lbrak;`{selected¦age¦max}\\rbrak;\\rbrak; opponents in the area take damage and Save vs. Petrification with the penalty shown below or be \\lbrak;Stunned\\rbrak;\\lpar;!rounds ~~target area¦`{selected¦token_id}¦\\amp#64;{target¦Select the stunned creature¦token_id}¦Stunned¦\\lbrak;\\amp#91;1+1d4\\amp#93;\\rbrak;¦-1¦Stunned by a dragon tail slap¦back-pain\\rpar; for 1d4+1 rounds., spattk:*Dragon Fear; Wing Buffet; Snatch; Plummet;* and *Spell Casting*, spdef:Magic resistance @{selected|monstermagicresist}% and immune to cold from birth, ns:=11],[cl:PW,w:White-Dragon-Breath,pd:-1,sp:1],[cl:PW,age:4,w:PW-Ice-Walking,pd:-1,sp:1],[cl:PW,age:7,w:MU-Gust-of-Wind,pd:3,sp:1],[cl:PW,w:MU-Wall-of-Fog,age:9,pd:3,sp:1],[cl:PW,w:PW-Freezing-Fog,age:11,pd:3,sp:1]{{}}%{Race-DB-Creatures|Red-Dragon}{{title=White}}{{Intelligence=Low (5-7)}}{{AC=Varies with age, adult white dragon is AC -1}}{{Move=12, FL 40(C), Sw 12}}{{Hit Dice=Varies with age, adult white dragon is 13 HD}}{{THAC0=Varies with age, adult white dragon is 7}}{{Section1=**Attacks:** Damage bonus varies with age, adult white dragon is +6. 2 x Claws for 1d6 HP each, possibly with 1 or 2 kicks for 1d6 each, bite for 2d8, and tail slap for 2d6 and possible *stun* within an area varying with age. Several other attacks possible - see *Powers*}}{{Languages=*White Dragon* and *Evil Dragon Common*, and 7% of hatchlings (+5% per age level) can perform universal communication with any intelligent creature}}{{Breath Weapon=A white dragon\'s breath weapon is a come of frost 70\' long, 5\' wide at the dragon\'s mouth, and 25\' wide at the base. Damage varies by age from 1d6+1 to 12d6+12. Save vs. Breath Weapon to take half damage}}{{Spell Casting=Knows a number of random wizard spells cast at a level from 10 to 16 varying with age. All spells are cast at a speed of 1 segment regardless of the spell}}{{Spell-like Powers=*Juvenile* dragons can do *ice walking* at will, *Mature Adults* can do *Gust of Wind* x 3 a day, a *Very Old* dragon gains *Wall of Fog* 3 x a day, producing snow or hail instead of rain, and a *Wyrm* dragon gains *Freezing Fog* x 3 per day}}{{desc8=**White Dragons:** White dragons, the smallest and weakest of the evil dragons, are slow witted but efficient hunters. They are impulsive, vicious, and animalistic, tending to consider only the needs and emotions of the moment and having no foresight or regret. Despite their low intelligence, they are as greedy and evil as the other evil dragons.\nThe scales of a hatchling white dragon are a mirror-like glistening ground. As the dragons ages, the sheen disappears, and by the time it reaches the very old stage, scales of pale blue and light gray are mixed in with the white.\nWhite dragons live in chilly or cold regions, preferring lands where the temperature rarely rises above freezing and ice and snow always cover the ground. When temperatures become too warm, the dragons become lethargic. White dragons bask in the frigid winds that whip over the landscape, and they wallow and play in deep snow banks.\nWhite dragons are lackadaisical parents. Although the young remain with the parents from hatchling to juvenile or young adult stage they are not protected. Once a dragon passes from it hatchling stage, it must fend for itself, learning how to hunt and defend itself, learning how to hunt and defend itself by watching the parents.\nWhite dragons\' lairs are usually icy caves and deep subterranean chambers; they select caves that open away from the warming rays of the sun. White dragons store all of their treasure within their lair, and prefer keeping it in caverns coated in ice, which reflect the gems, especially diamonds, because they are pretty to look at.}}{{desc9=**Combat:** Regardless of a target\'s size, a white dragon\'s favorite method of attack is to use its breath weapon and special abilities before closing to melee. This tactic sometimes works to the dragon\'s detriment, as it can exhaust its breath weapon on smaller prey and then be faces with a larger creature it must attack physically. If a white dragon is pursuing creatures in the water, such as polar bears or seal, it will melee them in their element, fighting with its claws and bite.}}'},
+ {name:'White-Pudding',type:'creaturerace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{}}RaceData=[w:White Pudding, cattr:mov=9|ac=8|hd=9|attk1=4+3d8:Bites:0:P|dmgmsg=Disolves animal and vegitable matter in one round. Does not affect metal, spattk:Disolves animal and vegitable matter in one round. Does not affect metal]{{}}Specs=[White Pudding,CreatureRace,0H,Black Pudding]{{}}%{Race-DB-Creatures|Black-Pudding}{{prefix=White}}{{AC=8}}{{Move=9}}{{Hit Dice=9 HD}}{{Attack=Multiple bites with acid juices doing 3d8+4 damage}}{{Section6=**Acid:** White puddings cannot affect metals but dissolve animal and vegetable materials in a single round, inflicting damage to flesh at an astonishing rate.}}{{desc9=**Combat:** These cold-loving creatures are 50% likely to be mistaken for ice and snow (guaranteeing surprise) even under the best of conditions. White puddings haunt polar regions or icy places in order to find prey, although they can live by devouring any animal or vegetable matter; even ice provides them with enough nutrition to exist.}}'},
{name:'Wight',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Wight}}{{subtitle=Creature}}Specs=[Wight,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Average (8-10)}}{{AC=5}}{{Alignment=Lawful Evil}}{{Move=12}}{{Hit Dice=4+3}}{{THAC0=15}}{{Attack=Touch for 1d4, and drain 1 level}}{{Languages=None known}}{{Size=M 4 to 7ft tall}}{{Life Expectancy=Already dead!}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Level Drain=If successfully touch their victim, as well as damage, drain 1 level of experience permanently}}{{Attack Immunity=Only hit by silver or magically enchanted weapons of +1 or better}}{{Spell Immunity=Subject to all attack forms except *sleep, charm* \\amp *hold* spells, and all cold-based attacks}}{{Other Immunities=Immune to paralysation and poison}}{{Infravision=No need for light (dead eyes) so can "sense" normally in absolute darkness}}{{Section6=**Special Disadvantages**}}{{Avoids Bright Light=Cannot tolerate bright light, including sunlight, and avoid it at all costs, but is not damaged by it}}RaceData=[w:Wight, align:LE, cattr:int=8:10|mov=12|ac=5|size=M|hd=4+3r3|thac0=15|attk1=1d4:Touch:0:S|dmgmsg=On successful hit opponents \\lbrak;lose one level\\rbrak;\\lpar;!magic ~~level-change \\amp#64;{target¦Who\'s the Victim?¦token_id}¦-1\\rpar; of Experience. Remember immune to Sleep Charm Hold \\amp Cold. +1 or better weapons to hit, spattk:Drain 1 level of experience per successful hit, spdef:+1 or better weapons to hit]{{Section9=**Description**}}{{desc=Typically inhabit barrow mounds and catacombs. From a distance, wights can easily be mistaken for any number of humanoid races. Upon closer examination, however, their true nature becomes apparent. As undead creatures, wights are nightmarish reflections of their former selves, with cruel, burning eyes set in mummified flesh over a twisted skeleton with hands that end in sharp claws.}}{{desc1=**Combat:** Wights are fierce and deadly foes in combat. When attacked, they are unharmed by any weapons that are not forged from silver or enchanted in some manner.\nThe wight attacks with its jagged claws and powerful blows, inflicting 1-4 points of damage with each successful strike. In addition to this physical harm, the wight is able to feed on the life essence of its foes. Each blow that the wight lands drains one level from the victim, reducing Hit Dice, class bonuses, spell abilities, and so forth.}}'},
{name:'Wild-Dog',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Wild Dog}}RaceData=[w:Wild Dog, align:N, weaps:none, ac:none, cattr:int=2:4|mov=15|ac=7|hd=1+1r6|thac0=19|size=S|attk1=1d4:Bite:0:P]{{subtitle=Creature}}Specs=[Wild Dog,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Semi (2 to 4)}}{{AC=7}}{{Alignment=Neutral}}{{Move=15}}{{Hit Dice=1+1 HD}}{{THAC0=19}}{{Attacks=Bite for 1d4}}{{Size=S}}{{Languages=}}{{Life Expectancy=5 to 7 years, exceptionally up to 12}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Section5=None}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=Smaller than wolves, the appearance of the wild dog varies from place to place. Most appear very wolf-like, while others seem to combine the looks of a wolf and a jackal. Found almost anywhere, they run in packs, and are led by the dominant male. The pack usually hunts a variety of game, even attacking deer or antelope. Pups are born in the spring. Wild dogs can be tamed if separated from their pack.}}{{desc9=**Combat:** Wild dogs fight as an organized pack. They favor small game, and attack men and human habitations only in times of great hunger. Wild dogs are omnivores which usually thrive on a combination of hunting and foraging.}}'},
{name:'Wild-Eagle',type:'CreatureRace',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.defaultTemplate+'}{{name=Wild Eagle}}RaceData=[w:Eagle, align:N, weaps:none, ac:none, spattk:Dive attack at +2 to hit and double dmg. Cannot be surprised, cattr:int=1|mov=1|fly=30|ac=6|hd=1+3r6|thac0=19|size=S|attk1=1d2:Talon1:0:S|attk2=1d2:Talon2:0:S|attk3=1:Beak:0:P|attkmsg=If diving from more than 100ft +2 to hit and inflicts double damage with talons but does not get a beak attack|dmgmsg=Double damage if diving from more than 100ft$$Double damage if diving from more than 100ft$$Cannot attack with beak if diving from height]{{subtitle=Creature}}Specs=[Wild Eagle,CreatureRace,0H,Creature]{{Section=**Attributes**}}{{Intelligence=Animal (1)}}{{AC=6}}{{Alignment=Neutral}}{{Move=1, FL 30(C)}}{{Hit Dice=1+3 HD}}{{THAC0=19}}{{Attacks=2 x Talons for 1d2 each, Beak for 1HP. Double damage with talons if diving from more than 100ft, but does not get a beak attack}}{{Size=S}}{{Life Expectancy=20 to 30 years in the wild}}{{Section2=**Powers**}}{{Section3=None}}{{Section4=**Special Advantages**}}{{Surprise=Due to eyesight, hearing, and other factors, cannot be surprised}}{{Section6=**Special Disadvantages**}}{{Section7=None}}{{Section9=**Description**}}{{desc8=Owls hunt rodents, small lizards, and insects, attacking humans only when frightened (or magically commanded).\nEagles mate for life and, since they nest in one spot, it is easy to identify places where eagles are normally present. On occasion, in an area of rich feeding, 1d8+4 eagles are encountered instead of the normal individual or pair.}}{{desc9=**Combat:** An eagle typically attacks from great heights, letting gravity hurtle it toward its prey. If an eagle dives more than 100 feet, its diving speed is double its normal flying speed and the eagle is restricted to attacking with its claws. These high-speed attacks gain a +2 attack bonus and double damage.\nEagles generally hunt rodents, fish, and other small animals. Eagles also feed on the carrion of recently killed creatures as well. Eagles never attack humanoids, though small creatures like brownies have to be wary of a hunting eagle.}}'},
@@ -2207,7 +2236,7 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
api:'attk,magic',
type:'mi',
controlledby:'all',
- avatar:'https://s3.amazonaws.com/files.d20.io/images/52530/max.png?1340359343',
+ avatar:'https://files.d20.io/images/52530/max.png?1340359343',
version:7.01,
db:[{name:'Awl-Pike',type:'melee',ct:'13',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{title=Awl Pike}}Specs=[Awl Pike,Melee,2H,Polearm]{{subtitle=Polearm}}ToHitData=[w:Awl Pike,sb:1,+:0,n:1,ch:20,cm:1,sz:L,ty:P,r:12-20,sp:13,ara:-1|0|0|0|0|0|0|-1|-2,rc:uncharged]{{}}%{MI-DB-Weapons-StdPlus|Weapon-Info}{{Speed=[[13]]}}Speed=[13,uncharged]{{Size=Large}}{{Weapon=2-handed melee polearm}}{{To-hit=+0 + Str Bonus}}{{Attacks=1 per 2 rounds + specialisation \\amp level, Piercing}}{{Damage=SM:1d6, L:1d12, + Str Bonus}}DmgData=[w:Awl Pike,sb:1,+:0,SM:1d6,L:1d12]{{Looks Like=Essentially this is a long spear 12 to 20 feet long ending in a spike point of tapered spear head.}}{{desc=This is a normal Awl Pike, a type of Polearm. The point is sharp and keen, but nothing special. However, it still does double damage when set to receive a charge.}}{{hide1= It was a popular weapon during the Renaissance. Since the pike stuck out in front, men could be packed side-by-side in dense formations, and several rows of men could fight. Large blocks of pikemen made formidable troops. However, once the pikemen engaged in close combat, they normally dropped their clumsy awl pikes and fought hand-to-hand with short swords.}}'},
{name:'Awl-Pike+Magical',type:'melee',ct:'13',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{}}Specs=[Awl Pike,Melee,2H,Polearm,Awl-Pike]{{}}WeapData=[w:Awl-Pike,query:weaponMagic,rc:^^weaponMagic#2^^]{{}}ToHitData=[w:Awl Pike^^weaponMagic#0^^,+:^^weaponMagic#1^^,rc:^^weaponMagic#2^^]{{}}DmgData=[w:Awl Pike^^weaponMagic#0^^,sb:1,+:^^weaponMagic#1^^,SM:1d6,L:1d12]{{}}%{MI-DB-Weapons-StdPlus|Magical-Weapon-Info}{{prefix=^^weaponMagic#2^^}}{{name=^^weaponMagic#0^^}}{{subtitle=^^weaponMagic#2^^ Polearm}}{{Speed=[[13]]}}Speed=[13,uncharged]{{Size=Large}}{{Weapon=^^weaponMagic#2^^ 2-handed melee polearm}}{{To-hit=^^weaponMagic#0^^ + Str Bonus}}{{Attacks=1 per 2 rounds + specialisation \\amp level, Piercing}}{{Damage=SM:1d6^^weaponMagic#0^^, L:1d12^^weaponMagic#0^^, + Str Bonus}}{{Looks Like=Essentially this is a long spear 12 to 20 feet long ending in a spike point of tapered spear head.}}{{hide1=It was a popular weapon during the Renaissance. Since the pike stuck out in front, men could be packed side-by-side in dense formations, and several rows of men could fight. Large blocks of pikemen made formidable troops. However, once the pikemen engaged in close combat, they normally dropped their clumsy awl pikes and fought hand-to-hand with short swords.}}{{desc=This is an Awl Pike, a type of Polearm. The point is sharp and keen, and there might even be something special about it. It does double damage when set to receive a charge.}}'},
@@ -2334,7 +2363,7 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Light-Catapult',type:'ranged',ct:'50',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Light Catapult}}{{subtitle=Siege Weapon}}{{Speed=[[50]]}}{{Size=Huge}}{{Weapon=4-handed ranged siege weapon}}Specs=[Light Catapult,Ranged,4H,Catapult]{{To-hit=+0 + Dex bonus}}ToHitData=[w:Light Catapult,sb:0,db:0,+:0,n:1,ch:20,cm:1,sz:M,ty:P,sp:50]{{Attacks=1 per 5 rounds, Piercing}}{{desc=This engine usually consists of some sort of lever mounted on a sturdy frame. The lever acts as a throwing arm and is fitted with a cup or sling to hold the projectile. When fired, a catapult lobs the projectile high into the air. Tension provides the catapult\'s power.\nCatapults usually fire large stones, but they can be loaded with almost anything: small stones, chains, dead animals, or anything else small enough to fit in the sling or cup and not so heavy that it overloads the lever. Large objects inflict the damage listed on the table. Masses of small objects can inflict an extra die of damage against most creatures but are useless against structures and any creature with a natural Armor Class of 0 or better (including characters with an Armor Class of 0 before shield or Dexterity modifiers).\nA light catapult with a full crew can target Huge creatures.\nA light or medium catapult can change facing 45 degrees during the End-of-Round step of any round when it fires.}}'},
{name:'Light-Crossbow',type:'ranged',ct:'7',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{title=Light Crossbow}}Specs=[Light Crossbow,Ranged,2H,Crossbow]{{}}ToHitData=[w:Light Crossbow,sb:0,db:1,+:0,ara:-2|-1|0|0|1|2|3|3|3,n:1,ch:20,cm:1,sz:M,ty:P,sp:7]{{}}%{MI-DB|Weapon-Info}{{subtitle=Crossbow}}{{Speed=[[7]]}}{{Size=Medium}}{{Weapon=2-handed ranged crossbow}}{{To-Hit=+0 + dex bonus only}}{{Attacks=1 per round + level \\amp specialisation, Piercing}}{{Looks Like=A crossbow is a bow mounted crosswise on a wooden or metal shaft, the latter called a tiller. The bow is usually made of ash or yew. The crossbow fires a quarrel.\nThe main differences between the light and heavy crossbows are the size of the quarrel and the presence of a stirrup, which is found only on the heavy crossbow. Heavy and light crossbows are more correctly referred to as two-foot and one-foot crossbows, respectively. This term refers to the length of the quarrels. The light (or one-foot) crossbow is made with a steel tiller and is quite rugged. It may be easily concealed beneath flowing garments such as cloaks or robes. It is frowned upon by the more lawful, civilized cities.}}{{desc=This is a light crossbow. Made of good quality wood and various metals, it is somewhat difficult to hold and reload, and is nothing special}}'},
{name:'Light-Crossbow-Magical',type:'ranged',ct:'7',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{title=Light Crossbow}}Specs=[Light Crossbow,Ranged,2H,Crossbow,Magical-Light-Crossbow]{{}}%{MI-DB|Magical-Light-Crossbow}'},
- {name:'Light-Horse-Lance',type:'melee',ct:'6',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Light Horse Lance}}{{subtitle=Lance}}{{Speed=[[6]]}}{{Size=Large}}{{Weapon=1-handed mounted melee lance}}Specs=[Lance,Melee,1H,Lances]{{To-hit=+0 + Str bonus}}ToHitData=[w:Light Horse Lance,sb:1,+:0,ara:-2|-2|-1|0|0|0|0|0|0,n:1,ch:20,cm:1,sz:L,ty:P,r:10,sp:6]{{Attacks=1 per round when mounted (except if jousting)}}{{Damage=+0, vs SM:1d6, L:1d8, + Str bonus (when mounted)}}DmgData=[w:Light Horse Lance,sb:1,+:0,SM:1d6,L:1d8]{{desc=This is a normal lance for use with a light war horse. The point is well hardened and the shaft in good condition, but nothing special.}}'},
+ {name:'Light-Horse-Lance',type:'melee',ct:'6',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{title=Lance}}{{prefix=Light Horse}}{{subtitle=Lance}}{{Speed=[[6]]}}{{Size=Large}}{{Weapon=1-handed mounted melee lance}}Specs=[Lance,Melee,1H,Lances]{{To-hit=+0 + Str bonus}}ToHitData=[w:Light Horse Lance,sb:1,+:0,ara:-2|-2|-1|0|0|0|0|0|0,n:1,ch:20,cm:1,sz:L,ty:P,r:10,sp:6]{{Attacks=1 per round when mounted (except if jousting)}}{{Damage=+0, vs SM:1d6, L:1d8, + Str bonus (when mounted)}}DmgData=[w:Light Horse Lance,sb:1,+:0,SM:1d6,L:1d8]{{desc=This is a normal lance for use with a light war horse. The point is well hardened and the shaft in good condition, but nothing special.}}'},
{name:'Long-Spear',type:'melee|ranged',ct:'8',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{}}Specs=[spear,melee,1H,spears,spear-long],[spear,melee,2H,spears,spear-long],[spear,ranged,1H,throwing-spears,spear-long]{{}}%{MI-DB|Spear-Long}'},
{name:'Longbow',type:'ranged',ct:'8',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{title=Longbow}}Specs=[longbow,ranged,2H,bow]{{}}ToHitData=[w:Longbow,sb:0,db:1,+:0,ara:-1|0|0|1|2|3|3|3|3,n:2,n:2,ch:20,cm:1,sz:L,ty:P,sp:8]{{}}%{MI-DB|Weapon-Info}{{subtitle=Bow}}{{Speed=[[8]]}}{{Size=Medium}}{{Weapon=Ranged 2-handed bow}}{{To-Hit=+0 + dex bonus}}{{Attacks=Piercing, 2 per round}}{{Looks Like=Bows are long, slender rods (also called staves) made of wood with a string of animal tendon or plant fiber. the staff is about as high as the archer, usually 6 to 6 1/2 feet. It has better range than the short bow, and can fire both flight and sheaf arrows.}}{{desc=This is a normal longbow. The wood is polished, the string taut, but nothing special.}}'},
{name:'Longbow-Magical',type:'ranged',ct:'8',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{}}Specs=[longbow,ranged,2H,bow,Magical-Longbow]{{}}%{MI-DB|Magical-Longbow}'},
@@ -2448,22 +2477,22 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Weapon-Info',type:'format',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.armourTemplate+'}{{}}Specs=[Weapon-Info,Format,0H,Format]{{}}WeapData=[a:Weapon Info]{{Weapon=}}{{Speed=}}{{Size=Medium}}{{To-hit=}}{{Attacks=}}{{Damage=}}{{Ammo=}}{{Range=}}{{Immunity=None}}{{Saves=No effect}}{{GM Info=If Auto-Hide config is set, this weapon will automatically hide as a standard weapon of its type when added to a container and will reveal manually by default (see Magic Help Handout about hiding and revealing items).}}{{Use=This weapon must be taken in-hand using the *Attk Menu \\gt Change Weapon* dialog in order to attack with it.}}'},
{name:'Whip',type:'melee',ct:'8',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Whip}}{{subtitle=Whip}}{{Speed=[[8]]}}{{Size=Medium}}{{Weapon=1-handed melee whip}}Specs=[Whip,Melee,1H,Whips]{{To-hit=+0 + Str bonus}}ToHitData=[w:Whip,sb:1,+:0,n:1,ch:20,cm:1,sz:M,ty:N,r:10,sp:8]{{Attacks=1 per round + level \\amp specialisation}}{{Damage=+0, vs SM:1d2, L:1 + Str bonus \\amp entangle}}DmgData=[w:Whip,sb:1,+:0,SM:1d2,L:1]{{desc=A standard Whip of good quality, but nothing special.\nTo inflict damage, the whip must strike exposed or lightly covered flesh. Heavy clothing, thick hair, or fur gives considerable protection until torn away by repeated lashing. The type of armor determines how long it takes the whip to begin doing damage. With heavy clothing, damage begins on the third successful blow; thick hair or fur, on the second; padded armor, on the fourth; leather armor, on the fifth; hide armor, on the sixth. The whip can do no harm through armor heavier than that. Thick hide, such as that of an elephant or rhinoceros, will allow a slight sting at best, with no real damage inflicted.\nWhips can be up to 25ft long, and are useful for Entanglement, with various percentages for achieving this: success = 5% per level for proficient wielders, and if successful, roll 1d100 for result (1-50: a non-weapon limb, 51-60: two limbs, 61-80 weapon wielding limb, 81-00 head). You can use a called shot at -10% on success roll to be able to vary the outcome roll by 20% either way (e.g. so if successful, you could make a 35 into a 55 and entangle 2 limbs instead of one)}}'},
]},
- MI_DB_Weapons_Special: {bio:'Weapons Database v7.01 26/01/2025
This sheet holds definitions of special magical weapons defined in the AD&D2E Dungeon Master\'s Guide and other manuals. They can be used in the RPGMaster API system. They are defined in such a way as to be lootable and usable magic items for MagicMaster and also usable weapons in attackMaster.',
- gmnotes:'Change Log: v7.01 26/01/2025 Updated with multiple changes for v4 RoundMaster APIs v6.34 26/12/2024 Marked items that should not be randomly allocated as DMitems v6.33 12/07/2024 Updated Defender sword to use new mods tables v6.32 07/05/2024 Updated sword effects to use latest features, e.g. the save mods table v6.31 04/04/2024 Started adding hide#= sections to long desc= to trigger "show more..." buttons v6.30 22/02/2024 Added all final weapons v6.29 20/02/2024 Fixed Sword of Dancing which wasn\'t! v6.28 08/02/2024 Added multiple new special weapons from the DMG v6.26 25/01/2024 Split growing Weapons Database into standard, special (DMG) and custom databases v6.25 11/01/2024 Implemented compression techniques and added magical versions of standard weapons. Fixed to-hit plus of thrown weapons. v6.21-4 01/11/2023 Added weapons for some giants & other creatures, & fixed some weapon issues v6.20 07/03/2023 Converted artefact weapons to use Magical Attacks for powers and functions v6.19 31/01/2023 Added Axe of Hurling and other new weapons v6.18 25/01/2023 Added weapons from The Complete Fighter\'s Handbook v6.17 16/12/2022 Added weapons used by creatures in the creatures database v6.16 11/12/2022 Fixed spell/power storing weapons v6.14-5 03/12/2022 Added more weapons including Flindbars v6.13 14/11/2022 Added Acid and Stun Darts, and weapon supertype "Throwing-" to support Race DB definitions. v6.11 21/10/2022 Added \'on\', \'off\' & \'c\' data attributes to weapon definitions, and Shortbow-of-Targeting v6.10 25/09/2022 Moved to RPGM Library and updated templates v6.06 14/07/2022 Removed hard-coded whisper commands on database entries as now directed to correct player(s) programmatically v6.04 31/05/2022 Refixed various errors that had crept back in v6.03 31/05/2022 Moved DB data to RPGMlib and added more weapons v6.02 31/05/2022 Fixed speed for magical shortswords; fixed macro calls for Wave v6.01 01/05/2022 Various minor fixes v5.10 28/02/2022 Added Shillelagh as a magical weapon to support Priest spell v5.9 20/02/2022 Pluralised weapon groups that had the same name as a weapon type (e.g. club and clubs) to add clarity in weapon proficiencies v5.8 04/02/2022 Added Scimitar+3 v5.7 17/01/2022 Corrected multiple weapon definitions to ensure consistency. v5.6 01/01/2022 Added summoned weapons needed for spells, such as Rainbow & Ice Knife v5.5 05/11/2021 Split the Ammo and Weapons databases v5.4 31/10/2021 Further encoded using machine readable data to support API databases v5.3.4 21/08/2021 Fixed incorrect damage for all types of Two-handed Sword v5.3.3 07/06/2021 Added the missing Scimitar macro v5.3.2 31/05/2021 Cleaned ranged weapon ranges, as specifying a range for the weapon in the {{To-Hit=...}} section will now adjust the range of the ammo by that amount (for extended range weapons). Self-ammoed weapons (like thrown daggers) should specify their range in the {{Range=...}} section. v5.3.1 19/05/2021 Fixed a couple of bugs, missing weapons in the transfer from MI-DB v5.3 14/05/2021 All standard weapons from the PHB now encoded. v5.2 12/05/2021 Added support for weapon types (S,P,B), and more standard weapons v5.1 06/05/2021 Added a number of standard and magical weapons v5.0 28/04/2021 Initial separation of weapons listings from the main MI-DB',
+ MI_DB_Weapons_Special: {bio:'Weapons Database v7.02 05/04/2025
This sheet holds definitions of special magical weapons defined in the AD&D2E Dungeon Master\'s Guide and other manuals. They can be used in the RPGMaster API system. They are defined in such a way as to be lootable and usable magic items for MagicMaster and also usable weapons in attackMaster.',
+ gmnotes:'Change Log: v7.02 05/04/2025 Added Lightning Lance weapon for use by Grell Soldiers v7.01 26/01/2025 Updated with multiple changes for v4 RoundMaster APIs v6.34 26/12/2024 Marked items that should not be randomly allocated as DMitems v6.33 12/07/2024 Updated Defender sword to use new mods tables v6.32 07/05/2024 Updated sword effects to use latest features, e.g. the save mods table v6.31 04/04/2024 Started adding hide#= sections to long desc= to trigger "show more..." buttons v6.30 22/02/2024 Added all final weapons v6.29 20/02/2024 Fixed Sword of Dancing which wasn\'t! v6.28 08/02/2024 Added multiple new special weapons from the DMG v6.26 25/01/2024 Split growing Weapons Database into standard, special (DMG) and custom databases v6.25 11/01/2024 Implemented compression techniques and added magical versions of standard weapons. Fixed to-hit plus of thrown weapons. v6.21-4 01/11/2023 Added weapons for some giants & other creatures, & fixed some weapon issues v6.20 07/03/2023 Converted artefact weapons to use Magical Attacks for powers and functions v6.19 31/01/2023 Added Axe of Hurling and other new weapons v6.18 25/01/2023 Added weapons from The Complete Fighter\'s Handbook v6.17 16/12/2022 Added weapons used by creatures in the creatures database v6.16 11/12/2022 Fixed spell/power storing weapons v6.14-5 03/12/2022 Added more weapons including Flindbars v6.13 14/11/2022 Added Acid and Stun Darts, and weapon supertype "Throwing-" to support Race DB definitions. v6.11 21/10/2022 Added \'on\', \'off\' & \'c\' data attributes to weapon definitions, and Shortbow-of-Targeting v6.10 25/09/2022 Moved to RPGM Library and updated templates v6.06 14/07/2022 Removed hard-coded whisper commands on database entries as now directed to correct player(s) programmatically v6.04 31/05/2022 Refixed various errors that had crept back in v6.03 31/05/2022 Moved DB data to RPGMlib and added more weapons v6.02 31/05/2022 Fixed speed for magical shortswords; fixed macro calls for Wave v6.01 01/05/2022 Various minor fixes v5.10 28/02/2022 Added Shillelagh as a magical weapon to support Priest spell v5.9 20/02/2022 Pluralised weapon groups that had the same name as a weapon type (e.g. club and clubs) to add clarity in weapon proficiencies v5.8 04/02/2022 Added Scimitar+3 v5.7 17/01/2022 Corrected multiple weapon definitions to ensure consistency. v5.6 01/01/2022 Added summoned weapons needed for spells, such as Rainbow & Ice Knife v5.5 05/11/2021 Split the Ammo and Weapons databases v5.4 31/10/2021 Further encoded using machine readable data to support API databases v5.3.4 21/08/2021 Fixed incorrect damage for all types of Two-handed Sword v5.3.3 07/06/2021 Added the missing Scimitar macro v5.3.2 31/05/2021 Cleaned ranged weapon ranges, as specifying a range for the weapon in the {{To-Hit=...}} section will now adjust the range of the ammo by that amount (for extended range weapons). Self-ammoed weapons (like thrown daggers) should specify their range in the {{Range=...}} section. v5.3.1 19/05/2021 Fixed a couple of bugs, missing weapons in the transfer from MI-DB v5.3 14/05/2021 All standard weapons from the PHB now encoded. v5.2 12/05/2021 Added support for weapon types (S,P,B), and more standard weapons v5.1 06/05/2021 Added a number of standard and magical weapons v5.0 28/04/2021 Initial separation of weapons listings from the main MI-DB',
root:'MI-DB',
api:'attk,magic',
type:'mi',
- avatar:'https://s3.amazonaws.com/files.d20.io/images/52530/max.png?1340359343',
- version:7.01,
+ avatar:'https://files.d20.io/images/52530/max.png?1340359343',
+ version:7.02,
db:[{name:'Acorn-Fire-Seed',type:'ranged',ct:'2',charge:'charged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Acorn Fire Seed (spell)}}{{subtitle=Thrown magical seed}}{{Speed=[[2]]}}{{Size=Tiny}}{{Weapon=1-handed ranged dart}}Specs=[Acorn-Fire-Seed,Ranged,1H,Dart]{{To-hit=+0, + Dex bonuses}}ToHitData=[w:Acorn Fire Seed,sb:0,db:1,+:0,n:1,ch:20,cm:1,sz:T,ty:B,sp:2,rc:charged,msg:Each acorn bursts upon striking any hard surface igniting any combustible materials within a \\lbrak;10-foot diameter\\rbrak;\\lpar;!rounds ~~aoe \\amp#64;{selected\\vbar;token_id}\\vbar;circle\\vbar;feet\\vbar;120\\vbar;10\\vbar;10\\vbar;fire\\rpar; of the point of impact. If a successful saving throw vs. spell is made a creature within the burst area receives only one-half damage. A creature struck directly suffers full damage (i.e. no saving throw)]{{Attacks=1 per round, + specialisation \\amp level, Fire burst}}{{Ammo=+0, vs. SM:2d8, L:2d8 in 10ft dia. from fire}}AmmoData=[w:Acorn Fire Seed,t:Acorn Fire Seed,st:Dart,sb:0,+:0,ru:-1,SM:2d8,L:2d8]{{Range=S:40, M:40, L:40}}RangeData=[t:Acorn Fire Seed,+:0,r:40]{{desc=The Fire Seed spell turns up to four acorns into special grenadelike missiles that can be hurled up to 40 yards. An attack roll is required to strike the intended target, and proficiency penalties are considered. Each acorn bursts upon striking any hard surface, causing 2d8 points of damage and igniting any combustible materials within a 10-foot diameter of the point of impact. If a successful saving throw vs. spell is made, a creature within the burst area receives only one-half damage, but a creature struck directly suffers full damage (i.e., no saving throw)}}'},
- {name:'Adamantite-Mace+1',type:'melee',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{title=Adamantite Mace}}Specs=[Adamantite Mace,Melee,1H,Clubs,Footmans-Mace]{{}}WeapData=[st:Mace]{{}}ToHitData=[w:Adamantite Mace+1,+:1]{{}}DmgData=[w:Adamantite Mace+1,+:1]{{}}%{MI-DB|Footmans-Mace}{{name= +1}}{{Weapon=+1 1-handed melee club}}{{To-hit=+1, + Str bonus}}{{Damage=+1, vs SM:1d6+1, L:1d6, + Str bonus}}{{Looks Like=A club with an adamantite head}}{{desc=This is an exeptional Mace. The business end is made of extra hard semi-precious adamantite stone, making it a plus weapon.}}'},
+ {name:'Adamantite-Mace+1',type:'melee',ct:'7',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{title=Adamantite Mace}}Specs=[Adamantite Mace,Melee,1H,Clubs,Footmans-Mace]{{}}WeapData=[st:Mace]{{}}ToHitData=[w:Adamantite Mace+1,+:1]{{}}DmgData=[w:Adamantite Mace+1,+:1]{{}}%{MI-DB|Footmans-Mace}{{name= +1}}{{Weapon=+1 1-handed melee club}}{{To-hit=+1, + Str bonus}}{{Damage=+1, vs SM:1d6+1, L:1d6, + Str bonus}}{{Looks Like=A club with an adamantite head}}{{desc=This is an exeptional Mace. The business end is made of extra hard semi-precious adamantite stone, making it a plus weapon.}}'},
{name:'Adamantite-Mace+2',type:'',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}Specs=[Adamantite Mace,Melee,1H,Clubs,Adamantite-Mace+1]{{}}WeapData=[st:Mace]{{}}ToHitData=[w:Adamantite Mace+2,+:2]{{}}DmgData=[w:Adamantite Mace+2,+:2]{{}}%{MI-DB|Adamantite-Mace+1}{{name= +2}}{{Weapon=+2 1-handed melee club}}{{To-hit=+2, + Str bonus}}{{Damage=+2, vs SM:1d6+1, L:1d6, + Str bonus}}'},
{name:'Adamantite-Mace+3',type:'',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}Specs=[Adamantite Mace,Melee,1H,Clubs,Adamantite-Mace+1]{{}}WeapData=[st:Mace]{{}}ToHitData=[w:Adamantite Mace+3,+:3]{{}}DmgData=[w:Adamantite Mace+3,+:3]{{}}%{MI-DB|Adamantite-Mace+1}{{name= +3}}{{Weapon=+3 1-handed melee club}}{{To-hit=+3, + Str bonus}}{{Damage=+3, vs SM:1d6+1, L:1d6, + Str bonus}}'},
{name:'Adamantite-Mace+4',type:'',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}Specs=[Adamantite Mace,Melee,1H,Clubs,Adamantite-Mace+1]{{}}WeapData=[st:Mace]{{}}ToHitData=[w:Adamantite Mace+4,+:4]{{}}DmgData=[w:Adamantite Mace,+:4]{{}}%{MI-DB|Adamantite-Mace+1}{{name= +4}}{{Weapon=+4 1-handed melee club}}{{To-hit=+4, + Str bonus}}{{Damage=+4, vs SM:1d6+1, L:1d6, + Str bonus}}'},
{name:'Adamantite-Mace+5',type:'',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}Specs=[Adamantite Mace,Melee,1H,Clubs,Adamantite-Mace+1]{{}}WeapData=[st:Mace]{{}}ToHitData=[w:Adamantite Mace+5,+:5]{{}}DmgData=[w:Adamantite Mace,+:5]{{}}%{MI-DB|Adamantite-Mace+1}{{name= +5}}{{Weapon=+5 1-handed melee club}}{{To-hit=+5, + Str bonus}}{{Damage=+5, vs SM:1d6+1, L:1d6, + Str bonus}}'},
{name:'Axe-of-Hurling',type:'melee|ranged',ct:'4',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{prefix=^^weaponMagic#2^^}}{{title=Axe}}{{name=of Hurling^^weaponMagic#1^^}}Specs=[Axe of Hurling,Melee,1H,Axe,Axe-of-Hurling+1],[Axe of Hurling,Ranged,1H,Axe,Axe-of-Hurling+1]{{}}WeapData=[w:Axe of Hurling,query:weaponMagic,rc:^^weaponMagic#2^^]{{}}ToHitData=[w:Axe of Hurling^^weaponMagic#0^^,+:^^weaponMagic#1^^],[w:Axe of Hurling^^weaponMagic#0^^,+:0]{{}}DmgData=[w:Axe of Hurling^^weaponMagic#0^^,+:^^weaponMagic#1^^],[]{{}}AmmoData=[w:Axe of Hurling^^weaponMagic#0^^,+:^^weaponMagic#1^^]{{}}RangeData=[t:Axe of Hurling,+:^^weaponMagic#1^]{{}}%{MI-DB|Axe-of-Hurling+1}{{}}%{MI-DB|Magical-Weapon-Info}{{name=^^weaponMagic#0^^}}{{subtitle=Magical Axe}}{{To-hit=^^weaponMagic#0^^ + Str \\amp Dex bonuses}}{{Speed=[[4]]}}{{Size=Medium}}{{Weapon=1-handed ^^weaponMagic#2^^ melee or thrown axe}}{{Attacks=1 per round + level \\amp specialisation, Slashing}}{{Damage=^^weaponMagic#0^^, vs SM:1d6, L:1d4, + Str bonus}}{{Ammo=^^weaponMagic#0^^, + Str bonus, returning}}'},
{name:'Axe-of-Hurling+1',type:'melee|ranged',ct:'4',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{title=Axe}}Specs=[Axe of Hurling+1,Melee,1H,Axe],[Axe of Hurling+1,Ranged,1H,Axe]{{}}WeapData=[w:Axe of Hurling,t:Hand-Axe]{{}}%{MI-DB|Weapon-Info}{{name= of Hurling+1}}{{subtitle=Magical Axe}}{{Speed=[[4]]}}{{Size=Medium}}{{Weapon=1-handed melee or thrown axe}}{{To-hit=+1 + Str \\amp Dex bonuses}}ToHitData=[w:Axe of Hurling+1,sb:1,+:1,n:1,ch:20,cm:1,sz:M,ty:S,r:5,sp:4,ara:-3|-2|-2|-1|0|0|+1|+1|+1],[w:Axe of Hurling+1,sb:1,db:1,+:0,n:1,ch:20,cm:1,sz:M,ty:S,r:4/10/18,sp:4,ara:-3|-2|-2|-1|0|0|+1|+1|+1]{{Attacks=1 per round + level \\amp specialisation, Slashing}}{{Damage=+1, vs SM:1d6, L:1d4 in-hand, + Str bonus}}DmgData=[w:Hand Axe,sb:1,+:1,SM:1d6,L:1d4],[]{{Ammo=+1, SM:2d6 L:2d4 when thrown, + Str bonus, returning}}AmmoData=[w:Axe of Hurling+1,t:Hand-Axe,sb:1,+:1,SM:2d6,L:2d4,ru:1]{{Range=S:40, M:100, L:180}}RangeData=[t:Axe of Hurling+1,+:1,r:4/10/18]{{Looks Like=A hand axe with a sturdy handle, a sharp long curved blade often with points at each end, and excellent balance. Feels so well balanced around its centre of gravity that it might work well when thrown.}}{{desc=This appears to be a normal hand axe. With familiarity and practice, however, the possessor will eventually discover that the axe can be hurled up to 180 feet, and it will return to the thrower in the same round whether or not it scores a hit.}}{{hide1=Damage inflicted by the magical throwing attack is twice normal (2d6 vs. S or M, 2d4 vs. L), with the weapon\'s magical bonus added thereafter. (For example, an axe of hurling +3 will inflict 2d6+3 points of damage vs. S- or M-sized creatures and 2d4+3 points of damage vs. creatures of size L if it hits the target after being thrown.) The axe will cause only normal damage (plus its magical bonus) when used as a hand-held weapon.\nAfter each week of using the weapon, the possessor has a one-in-eight chance of discovering the full properties of the weapon. In any event, the magical properties of the weapon will be fully known to the possessor after eight full weeks of such familiarization.}}'},
- {name:'CG-Rock',type:'ranged|DMitem',ct:'3',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{prefix=Cloud Giant}}Specs=[CG-Rock,Ranged|DMitem,2H,CG-Rock,Rock]{{}}ToHitData=[w:Rock]{{}}AmmoData=[w:Rock]{{}}RangeData=[t:Rock]{{}}%{MI-DB|Rock}{{desc=These rocks are hurled by giants, especially *Cloud Giants*.}}'},
+ {name:'CG-Rock',type:'ranged|dmitem',ct:'3',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{prefix=Cloud Giant}}Specs=[CG-Rock,Ranged|DMitem,2H,CG-Rock,Rock]{{}}ToHitData=[w:Rock]{{}}AmmoData=[w:Rock]{{}}RangeData=[t:Rock]{{}}%{MI-DB|Rock}{{desc=These rocks are hurled by giants, especially *Cloud Giants*.}}'},
{name:'Chimera-Breath',type:'innate-melee',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.CSdefaultTemplate+'}{{name=Chimera Breath}}{{subtitle=Breath Weapon}}{{Speed=0 (Innate attack)}}{{Weapon=Innate breath melee weapon}}Specs=[Chimera Breath,Innate-Melee,1H,Breath]{{Range=[5 yards](!rounds --aoe @{selected|token_id}|cone|yards|0|5|1|fire|true) }}ToHitData=[w:Chimera Breath, sb:0,+:0,n:1/3,ch:20,cm:1,sz:T,ty:P,r:15,sp:0,rc:uncharged]{{Attacks=1 per 3 rounds}}{{Damage=3d8 damage\nsave to half}}DmgData=[w:Chimera Breath,sb:0,+:0,SM:3d8,L:3d8]{{desc=If it desires to do so, a Chimera dragon head can loose a stream of flame onc every 3 rounds which is some 5 yards long in lieu of biting. The dragon\'s fire causes 3-24 (3d8) points damage, although a saving throw vs. breath weapon will cut the damage in half. The chimera will always attempt to breathe if its opponents are in range.}}'},
{name:'Cloud-Giant-Morningstar',type:'melee',ct:'7',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Cloud Giant Morningstar}}{{subtitle=Morningstar}}{{Speed=[[7]]}}{{Size=Large}}{{Weapon=1- or 2-handed melee club}}Specs=[Cloud-Giant-Morningstar,Melee,1H,Clubs],[Cloud-Giant-Morningstar,Melee,2H,Clubs]{{To-hit=+0 + Str bonus}}ToHitData=[w:Cloud Giant Morningstar,sb:1,+:0,n:1,ch:20,cm:1,sz:L,ty:B,r:8,sp:7]{{Attacks=1 per round + level \\amp specialisation, Bludgeoning}}{{Damage=+0, vs SM:6d4, L:6d4, + Str bonus}}DmgData=[w:Cloud Giant Morningstar,sb:1,+:0,SM:6d4,L:6d4]{{desc=This is an enormous morningstar that can be wield one or two handed by a Cloud Giant or any creature with cloud giant strength (23). Creatures of Frost Giant strength or better (21) can only wield it two-handed, and those weaker cannot wield it at all. The spikes glint sharply in torchlight, but it is nothing special.}}'},
{name:'Cutlass+1-Luck-Blade',type:'melee',ct:'5',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Cutlass +1 Luck Blade}}{{subtitle=Sword}}{{Speed=[[5]]}}{{Size=Medium}}{{Weapon=1-handed melee short-blade}}Specs=[Cutlass,melee,1H,short-blade],[Cutlass,melee,1H,short-blade]{{To-Hit=+1 + str bonus}}ToHitData=[w:Cutlass+1 Luck Blade,sb:1,+:1,n:1,ch:20,cm:1,sz:M,ty:S,r:5,sp:5],[w:Cutlass+1 Punch,sb:1,+:1,n:1,ch:20,cm:1,sz:M,ty:S,r:5,sp:5]{{Attacks=1 per round + level \\amp specialisation, Slashing}}WeaponData=[svall:+1,rules:+inHand]{{Damage=+1, vs SM:1d6, L:1d8, + str bonus}}DmgData=[w:Cutlass+1 Luck Blade,sb:1,+:1,SM:1d6,L:1d8],[w:Cutlass+1 Punch,sb:1,+:1,SM:1d3,L:1d3,msg:See the Player\'s Handbook p97-98. Metal gauntlets and other metal hand-protection makes that 1d3 plus strength bonus and punching effects.]{{desc=A short, heavy sword, sharp along only one edge, with a heavy basket hilt (a protective cup) around the hilt to protect the hand.\nThe *Luck Blade* gives its possessor a +1 bonus to all saving throws and will have 1d4+1 wishes. The DM should keep the number of wishes secret.}}{{hide1=The cutlass\' basket hilt provides the following benefits: it gives the wielder a +1 to attack rolls with the Parry maneuver; and it works just the same as an iron gauntlet if the wielder wishes to punch someone with the hilt rather than slash with the blade. (See the Player\'s Handbook, pages 97-98. metal gauntlets and other metal hand-protection makes that 1d3 plus strength bonus and punching effects. Note: An enchanted cutlass, say a cutlass +1, does not confer the +1 to attack rolls and damage with these basket-hilt punches: only with blade attacks.)\nIn a campaign with pirates, cutlasses are common and readily available in any port community; they are much less common inland.}}'},
@@ -2474,15 +2503,15 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Dagger-of-Venom',type:'melee|ranged',ct:'2',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{}}Specs=[Dagger,Melee,1H,Short-blade,Dagger+1],[Dagger,Ranged,1H,Throwing-blade,Dagger+1]{{}}ToHitData=[w:Dagger of Venom],[w:Dagger of Venom]{{}}DmgData=[w:Dagger of Venom,msg:On a critical hit a potentially leathal dose of poison is injected. Victim must save vs. poison or die],[ ]{{}}AmmoData=[w:Dagger of Venom,msg:On a critical hit a potentially leathal dose of poison is injected. Victim must save vs. poison or die]{{}}%{MI-DB|Dagger+1}{{name=of Venom}}{{Damage=+1, vs. SM:1d4, L:1d3, + Str Bonus + poison on critical hit}}{{Ammo=+0, vs. SM:1d4, L:1d3 + Str bonus + poison on critical hit}}{{desc=This appears to be a standard dagger +1, but its hilt holds a hidden store of poison. Any hit on a roll of 20 injects fatal poison into the opponent unless a saving throw vs. poison is successful. The dagger of venom holds up to six doses of poison. If the hilt contains fewer than six doses, the owner can pour more in up to the maximum. (Use of this weapon by good—particularly lawful good—characters must be carefully monitored for effects on alignment.)}}'},
{name:'Dart-of-Homing',type:'ranged',ct:'2',charge:'change-each',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{}}Specs=[Dart,Ranged,1H,Dart,Dart+3]{{}}WeapData=[rc:change-each,to:Dart]{{}}ToHitData=[w:Dart of Homing]{{}}AmmoData=[w:Dart of Homing,cmd:!attk ~~setammo `{selected|token_id}¦Dart-of-Homing¦+1¦+1¦silent]{{}}RangeData=[r:2/4/8]{{}}%{MI-DB|Dart+3}{{name=of Homing}}{{Range=S:20, M:40, L:80}}{{desc=These appear to be normal projectiles, but are actually +3 magical weapons. If a dart hits the intended target, it will magically return to the thrower in the same round and can be re-used. A dart inflicts a base 1d6 points of damage plus its magical bonus on a successful hit against any size creature (4-9 points total). A dart that misses its target loses its magical power. These weapons have twice the range of ordinary darts—20 yards short, 40 yards medium, 80 yards long.}}'},
{name:'Dragonslayer-Broadsword',type:'melee',ct:'5',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name= Dragonslayer}}Specs=[Broadsword,Melee,1H,Long-blade,Broadsword],[Broadsword,Melee,1H,Long-blade,Broadsword],[Broadsword,Melee,1H,Long-blade,Broadsword]{{}}ToHitData=[w:Broadsword,+:2,msg:Gains +1 attack bonus on Parry maneuver],[w:Hilt Punch,+:2],[w:Dragonslayer vs. Dragon,sb:1,+:4,ara:-3|-2|-1|0|0|1|1|1|2,ty:S]{{}}DmgData=[w:Broadsword+2,+:2],[w:Hilt Punch,+:2],[w:Dragonslayer vs Dragon,sb:1,+:4,SM:2d4,L:1+1d6]{{}}%{MI-DB|Broadsword}{{subtitle=Magical Sword}}{{To-hit=+2, +4 vs. Dragons, + Str Bonus}}{{Damage=+2, +4 vs Dragons, + Str bonus. Kills 1 type - or does triple damage}}{{desc=This +2 sword has a +4 bonus against any sort of true dragon. It either inflicts triple damage against one sort of dragon (i.e., 3d6+3+4), or might be of a type that slays the dragon in 1 blow and immediately disintegrates. It will only act as a normal +2 sword against a dragon of a diametrically different colour (e.g. if a Black Dragonslayer, then will only be ordinary vs. a Silver dragon). Note that an unusual sword with intelligence and alignment will not be made to slay dragons of the same alignment. Determine dragon type (excluding unique ones like Bahamut and Tiamat) by rolling 1d10:\n1 black (CE)\n2 blue (LE)\n3 brass (CG)\n4 bronze (LG)\n5 copper (CG)\n6 gold (LG)\n7 green (LE)\n8 red (CE)\n9 silver (LG)\n10 white (CE)}}'},
- {name:'Ettin-Club-Left',type:'melee|DMitem',ct:'5',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Ettin Club (left)}}{{subtitle=Club}}{{Speed=[[5]]}}{{Size=Large}}{{Weapon=1-handed melee club}}Specs=[Ettin Club,Melee|DMitem,1H,Clubs]{{To-hit=+0 + Str bonus}}ToHitData=[w:Left Ettin Club,sb:1,+:0,ara:-5|-4|-3|-2|-1|-1|0|0|1,n:1,sz:L, ty:B, r:6,sp:5]{{Attacks=1 per round + level \\amp specialisation, Bludgeoning}}{{Damage=+0, vs SM:2d8, L:2d8, + Str bonus}}DmgData=[w:Left Ettin Club,sb:1,+:0,SM:2d8,L:2d8]{{desc=This club is massive, and requires the strength of a *Hill Giant* to wield.}}'},
- {name:'Ettin-Club-Right',type:'melee|DMitem',ct:'5',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Ettin Club (right)}}{{subtitle=Club}}{{Speed=[[5]]}}{{Size=Large}}{{Weapon=1-handed melee club}}Specs=[Ettin Club,Melee|DMitem,1H,Clubs]{{To-hit=+0 + Str bonus}}ToHitData=[w:Right Ettin Club,sb:1,+:0,ara:-5|-4|-3|-2|-1|-1|0|0|1,n:1,sz:L, ty:B, r:6,sp:5]{{Attacks=1 per round + level \\amp specialisation, Bludgeoning}}{{Damage=+0, vs SM:3d6, L:3d6, + Str bonus}}DmgData=[w:Right Ettin Club,sb:1,+:0,SM:3d6,L:3d6]{{desc=This club is massive, and requires the strength of a *Hill Giant* to wield.}}'},
- {name:'FG-Rock',type:'ranged|DMitem',ct:'3',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{prefix=Frost Giant}}Specs=[FG-Rock,Ranged|DMitem,2H,FG-Rock,Rock]{{}}ToHitData=[w:Rock]{{}}AmmoData=[w:Rock,t:FG-Rock,st:FG-Rock,SM:2d10,L:2d10]{{}}RangeData=[t:FG-Rock,r:4/10/20]{{}}%{MI-DB|Rock}{{Damage=+0, vs SM:2d10, L:2d10, No strength bonus}}{{Range=S:40, M:100, L:200}}{{desc=These rocks are hurled by giants, especially *Fire Giants*.}}'},
+ {name:'Ettin-Club-Left',type:'melee|dmitem',ct:'5',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Ettin Club (left)}}{{subtitle=Club}}{{Speed=[[5]]}}{{Size=Large}}{{Weapon=1-handed melee club}}Specs=[Ettin Club,Melee|DMitem,1H,Clubs]{{To-hit=+0 + Str bonus}}ToHitData=[w:Left Ettin Club,sb:1,+:0,ara:-5|-4|-3|-2|-1|-1|0|0|1,n:1,sz:L, ty:B, r:6,sp:5]{{Attacks=1 per round + level \\amp specialisation, Bludgeoning}}{{Damage=+0, vs SM:2d8, L:2d8, + Str bonus}}DmgData=[w:Left Ettin Club,sb:1,+:0,SM:2d8,L:2d8]{{desc=This club is massive, and requires the strength of a *Hill Giant* to wield.}}'},
+ {name:'Ettin-Club-Right',type:'melee|dmitem',ct:'5',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Ettin Club (right)}}{{subtitle=Club}}{{Speed=[[5]]}}{{Size=Large}}{{Weapon=1-handed melee club}}Specs=[Ettin Club,Melee|DMitem,1H,Clubs]{{To-hit=+0 + Str bonus}}ToHitData=[w:Right Ettin Club,sb:1,+:0,ara:-5|-4|-3|-2|-1|-1|0|0|1,n:1,sz:L, ty:B, r:6,sp:5]{{Attacks=1 per round + level \\amp specialisation, Bludgeoning}}{{Damage=+0, vs SM:3d6, L:3d6, + Str bonus}}DmgData=[w:Right Ettin Club,sb:1,+:0,SM:3d6,L:3d6]{{desc=This club is massive, and requires the strength of a *Hill Giant* to wield.}}'},
+ {name:'FG-Rock',type:'ranged|dmitem',ct:'3',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{prefix=Frost Giant}}Specs=[FG-Rock,Ranged|DMitem,2H,FG-Rock,Rock]{{}}ToHitData=[w:Rock]{{}}AmmoData=[w:Rock,t:FG-Rock,st:FG-Rock,SM:2d10,L:2d10]{{}}RangeData=[t:FG-Rock,r:4/10/20]{{}}%{MI-DB|Rock}{{Damage=+0, vs SM:2d10, L:2d10, No strength bonus}}{{Range=S:40, M:100, L:200}}{{desc=These rocks are hurled by giants, especially *Fire Giants*.}}'},
{name:'Fire-Giant-Sword',type:'melee',ct:'10',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=+1}}Specs=[Fire-Giant-Sword,Melee,2H,Long-blade|Great-blade,Two-Handed-Sword]{{}}WeapData=[st:Great Blade]{{}}ToHitData=[w:Fire Giant Sword,+:0]{{}}DmgData=[w:Fire Giant Sword,+:0,sm:2d10,L:2d10]{{}}%{MI-DB|Two-Handed-Sword}{{subtitle=Magic Sword}}{{To-hit=+0 + Str bonus}}{{Damage=+0, vs SM:2d10, L:2d10, + Str bonus}}{{desc=This is a really well balanced, but enormous sword, for use with Fire Giant strength. The blade is sharp, but nothing special}}'},
{name:'Flaming-Scimitar',type:'melee',ct:'5',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Flaming Scimitar}}{{subtitle=Magic Sword}}{{Speed=[[5]]}}{{Size=Medium}}{{Weapon=1-handed melee long-blade}}Specs=[Scimitar,Melee,1H,Long-blade],[Scimitar,Melee,1H,Long-blade]{{To-hit=+1 + Str bonus}}ToHitData=[w:Scimitar+1,sb:1,+:1,ara:-3|-2|-2|-1|0|0|1|1|3,n:1,ch:20,cm:1,sz:M,ty:S,r:5,sp:5,rc:uncharged],[w:Scimitar+1 Flaming,sb:1,+:1,n:1,ch:20,cm:1,sz:M,ty:S,r:5,sp:5,rc:uncharged]{{Attacks=1 per round + level \\amp specialisation, Slashing}}{{Damage=+1, normally SM:1d8, L:1d8, + Str bonus, when flaming add 1d6}}DmgData=[w:Scimitar+1,sb:1,+:1,SM:1d8,L:1d8],[w:Scimitar+1 Flaming,sb:1,+:1,SM:1d8+1d6,L:1d8+1d6]{{desc=This sword flames upon the command of the wielder, causing flame to appear all along the blade as if fed from some invisible magical oil channels running from the hilt. The flame easily ignites oil, burns webs, or sets fire to paper, parchment, dry wood, etc. For creatures who take flame damage, does an additional 1d6 of flaming damage}}'},
{name:'Frost-Giant-Battle-Axe',type:'melee',ct:'7',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Frost Giant Battle Axe}}{{subtitle=Axe}}{{Speed=[[7]]}}{{Size=Large}}{{Weapon=1- or 2-handed melee long-blade}}Specs=[Frost-Giant-Battle-Axe,Melee,1H,Axe],[Frost-Giant-Battle-Axe,Melee,2H,Axe]{{To-hit=+0 + Str bonus}}ToHitData=[w:Frost Giant Battle Axe,sb:1,+:0,ara:-3|-2|-1|-1|0|0|1|1|2,n:1,ch:20,cm:1,sz:L,ty:S,r:8,sp:7]{{Attacks=1 per round + level \\amp specialisation, Slashing}}{{Damage=+0, vs SM:2d8, L:2d8, + Str bonus}}DmgData=[w:Frost Giant Battle Axe,sb:1,+:0,SM:2d8,L:2d8]{{desc=This is an enormous battle axe that can be wield one or two handed by a Frost Giant or any creature with frost giant strength (21). Creatures of Hill Giant strength or better (19) can only wield it two-handed, and those weaker cannot wield it at all. The blade is sharp and keen, but nothing special.}}'},
{name:'Frost-Giant-Battle-Axe+2',type:'melee',ct:'7',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Frost Giant Battle Axe+2}}{{subtitle=Axe}}{{Speed=[[7]]}}{{Size=Large}}{{Weapon=1- or 2-handed melee long-blade}}Specs=[Frost-Giant-Battle-Axe,Melee,1H,Axe],[Frost-Giant-Battle-Axe,Melee,2H,Axe]{{To-hit=+2 + Str bonus}}ToHitData=[w:Frost Giant Battle Axe,sb:1,+:2,ara:-3|-2|-1|-1|0|0|1|1|2,n:1,ch:20,cm:1,sz:L,ty:S,r:8,sp:7]{{Attacks=1 per round + level \\amp specialisation, Slashing}}{{Damage=+2, vs SM:2d8, L:2d8, + Str bonus}}DmgData=[w:Frost Giant Battle Axe,sb:1,+:2,SM:2d8,L:2d8]{{desc=This is an enormous battle axe that can be wield one or two handed by a Frost Giant or any creature with frost giant strength (21). Creatures of Hill Giant strength or better (19) can only wield it two-handed, and those weaker cannot wield it at all. The blade is sharp and keen, but nothing special.}}'},
{name:'Giant-Club',type:'melee',ct:'5',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Giant Club}}{{subtitle=Club}}{{Speed=[[5]]}}{{Size=Large}}{{Weapon=1-handed melee club}}Specs=[Giant Club,Melee,1H,Clubs]{{To-hit=+0 + Str bonus}}ToHitData=[w:Giant Club,sb:1,+:0,ara:-5|-4|-3|-2|-1|-1|0|0|1,n:1,sz:L, ty:B, r:5,sp:5]{{Attacks=1 per round + level \\amp specialisation, Bludgeoning}}{{Damage=+0, vs SM:2d6, L:2d6, + Str bonus}}DmgData=[w:Giant Club,sb:1,+:0,SM:2d6,L:2d6]{{desc=This club is massive, and requires the strength of a *Hill Giant* to wield.}}'},
- {name:'HG-Rock',type:'ranged|DMitem',ct:'3',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{prefix=Hill Giant}}Specs=[HG-Rock,Ranged|DMitem,2H,HG-Rock,Rock]{{}}ToHitData=[w:Rock]{{}}AmmoData=[w:Rock,t:HG-Rock,st:HG-Rock,SM:2d8,L:2d8]{{}}RangeData=[t:HG-Rock,r:4/10/20]{{}}%{MI-DB|Rock}{{Damage=+0, vs SM:2d8, L:2d8, No strength bonus}}{{Range=S:40, M:100, L:200}}{{desc=These rocks are hurled by giants, especially *Hill Giants*.}}'},
+ {name:'HG-Rock',type:'ranged|dmitem',ct:'3',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{prefix=Hill Giant}}Specs=[HG-Rock,Ranged|DMitem,2H,HG-Rock,Rock]{{}}ToHitData=[w:Rock]{{}}AmmoData=[w:Rock,t:HG-Rock,st:HG-Rock,SM:2d8,L:2d8]{{}}RangeData=[t:HG-Rock,r:4/10/20]{{}}%{MI-DB|Rock}{{Damage=+0, vs SM:2d8, L:2d8, No strength bonus}}{{Range=S:40, M:100, L:200}}{{desc=These rocks are hurled by giants, especially *Hill Giants*.}}'},
{name:'Half-Ogre-Sword',type:'melee',ct:'10',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Half-Ogre Sword}}{{subtitle=Sword}}{{Speed=[[10]]}}{{Size=Large}}{{Weapon=1-handed melee great-blade}}Specs=[Half-Ogre-Sword,Melee,1H,long-blade|great-blade]{{To-hit=+0 + Str bonus}}ToHitData=[w:Half-Ogre-Sword,sb:1,+:0,ara:-2|-1|0|0|0|0|0|1|2,n:1,ch:20,cm:1,sz:M,ty:S,r:5,sp:10]{{Attacks=1 per round + level \\amp specialisation, Slashing}}{{Damage=+0, vs SM:1d10, L:3d6, + Str bonus}}DmgData=[w:Half-Ogre-Sword,sb:1,+:0,SM:1d10,L:3d6]{{desc=This is a normal sword. The blade is sharp and keen, but nothing special.}}'},
{name:'Half-Ogre-War-Spear',type:'melee|ranged',ct:'6',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Half-Ogre War Spear}}{{subtitle=Spear}}{{Speed=[[6]]}}{{Size=Large}}{{Weapon=1-handed melee or thrown spear}}Specs=[Spear,Melee,1H,Spears],[Spear,Ranged,1H,Throwing-Spears]{{To-hit=+0 + Str \\amp Dex bonuses}}ToHitData=[w:Half-Ogre War Spear,sb:1,+:0,ara:-2|-1|-1|-1|0|0|0|0|0,n:1,ch:20,cm:1,sz:M,ty:P,r:8,sp:6],[w:Half-Ogre War Spear,sb:1,db:1,+:0,ara:-2|-1|-1|-1|0|0|0|0|0,n:1,ch:20,cm:1,sz:M,ty:P,sp:6]{{Attacks=1 per round + level \\amp specialisation, Piercing}}{{Damage=+0, vs SM:2d4, L:2d4, + Str bonus}}DmgData=[w:Half-Ogre War Spear,sb:1,+:0,SM:2d4,L:2d4],[]{{Ammo=+0, vs SM:2d4, L:2d4, + Str bonus}}AmmoData=[w:Half-Ogre War Spear,t:Spear,st:Spears,sb:1,+:0,SM:2d4,L:2d4]{{Range=S:10, M:20, L:30}}RangeData=[t:Spear,+:0,r:1/2/3]{{desc=This is a normal Spear. The point is sharp and it is well balanced, but nothing special.}}'},
{name:'Hammer-Dwarven-Thrower',type:'melee|ranged',ct:'4',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name= Dwarven Thrower}}Specs=[Warhammer,Melee,1H,Clubs,Warhammer],[Warhammer,Ranged,1H,Throwing-Clubs,Warhammer],[Warhammer,Melee,1H,Clubs,Warhammer],[Warhammer,Ranged,1H,Throwing-Clubs,Warhammer],[Warhammer,Ranged,1H,Throwing-Clubs,Warhammer],[Warhammer,Melee,2H,Clubs]{{}}ToHitData=[w:Warhammer+2,+2],[w:Warhammer+2],[w:Dwarf Throwing Hammer,+:3,db:0,r:5],[w:Dwarf Throwing Hammer],[w:Dwarf Throwing vs Giant]{{}}DmgData=[w:Warhammer+2,+:2],[],[w:Dwarven Throwing Hammer,sb:1,db:0,+:3,SM:1+1d4,L:1d4]{{}}AmmoData=[w:Warhammer+2,t:Warhammer,st:Throwing-club,sb:1,+:2,SM:1+1d4,L:1d4],[w:Dwarf Throwing Hammer,t:Warhammer,st:Throwing-club,sb:1,+:3,ru:1,SM:2+2d4,L:2d4],[w:Dwarf Throwing vs Giant,t:Warhammer,st:Throwing-club,sb:1,+:3,ru:1,SM:3+3d4,L:3d4]{{}}RangeData=[t:Warhammer,+:0,r:1/2/3],[t:Warhammer,+:0,r:6/12/18],[t:Warhammer,+:0,r:6/12/18]{{}}%{MI-DB|Warhammer}{{subtitle=Magical Hammer}}{{To-hit=+2, +3 for Dwarves + Str \\amp Dex bonus}}{{Damage=+2, +3 for Dwarves vs SM:1d4+1, L:1d4, + Str bonus}}{{Ammo=+2, vs SM:1d4+1, L:1d4, for Dwarves +3 \\amp double dmg, tripple dmg vs. giant-size creatures + Str bonus}}{{Range=S:10, M:20, L:30, for Dwarves S:60, M:120, L:180}}{{desc=This appears to be a standard hammer +2. In the hands of a dwarven fighter who knows the appropriate command word, its full potential is realized. In addition to the +3 bonus, the hammer has the following characteristics:\nThe hammer has a 180-foot range and will return to its wielder\'s hand like a boomerang. It has a +3 bonus to attack and damage rolls. When hurled, the hammer inflicts double damage against all opponents except giants (including ogres, ogre magi, trolls, and ettins). Against giants it causes triple damage (plus the bonus of +3).}}'},
@@ -2495,13 +2524,14 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Hornblade-Dagger',type:'melee|ranged',ct:'2',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{prefix=Hornblade}}{{name=^^weaponPlus#0^^}}Specs=[Dagger,Melee,1H,Short-blade,Dagger],[Dagger,Ranged,1H,Throwing-blade,Dagger]{{}}WeapData=[query:weaponPlus,+:^^weaponPlus#1^^]{{}}ToHitData=[w:Hornblade^^weaponPlus#0^^,+:^^weaponPlus#1^^],[w:Hornblade^^weaponPlus#0^^]{{}}DmgData=[w:Hornblade^^weaponPlus#0^^,+:^^weaponPlus#1^^],[ ]{{}}AmmoData=[w:Hornblade^^weaponPlus#0^^,+:^^weaponPlus#1^^]{{}}RangeData=[+:^^weaponPlus#1^^]{{}}%{MI-DB|Hornblade-Knife}{{To-hit=+^^weaponPlus#0^^ + Str \\amp Dex bonuses}}{{Damage=+^^weaponPlus#0^^, vs SM:1d4, L:1d3, + Str bonus}}{{Ammo=+^^weaponPlus#0^^, vs SM:1d4, L:1d3, + Str bonus}}'},
{name:'Hornblade-Knife',type:'melee|ranged',ct:'2',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{prefix=Hornblade}}{{name=^^weaponPlus#0^^}}Specs=[Knife,Melee,1H,Fencing-blade|Short-blade,Knife],[Knife,Ranged,1H,Throwing-blade,Knife]{{}}WeapData=[query:weaponPlus,+:^^weaponPlus#1^^]{{}}ToHitData=[w:Hornblade^^weaponPlus#0^^,+:^^weaponPlus#1^^],[w:Hornblade^^weaponPlus#0^^]{{}}DmgData=[w:Hornblade^^weaponPlus#0^^,+:^^weaponPlus#1^^],[ ]{{}}AmmoData=[w:Hornblade^^weaponPlus#0^^,+:^^weaponPlus#1^^]{{}}RangeData=[+:^^weaponPlus#1^^]{{}}%{MI-DB|Knife}{{}}%{MI-DB-Magical-Weapon-Info}{{subtitle=Magical Blade}}{{To-hit=+^^weaponPlus#0^^ + Str \\amp Dex bonuses}}{{Damage=+^^weaponPlus#0^^, vs SM: 1d3, L:1d2, + Str bonus}}{{Ammo=+^^weaponPlus#0^^, vs SM:1d3, L:1d2 + Str bonus}}{{Looks Like=A piece of horn of a 1/2-foot to 1 1/2-foot in length, set in some sort of handle or grip.}}{{desc=This is a magical weapon with a sickle-like blade resembling some sort of animal horn. Hornblades range in size from that of a knife to somewhat less than the length of a short sword. Even a close inspection is 90% unlikely to reveal it as anything other than a piece of horn of a _-foot to 1_-foot in length, set in some sort of handle or grip. If magic is detected for, a hornblade will radiate faintly of enchantment magic. However, if the proper pressure is applied in the correct place, a curved blade of great strength and sharpness will spring out.\nThe small versions (knife-sized and dagger-sized) are usually enchanted to +1 or +2, and the largest version (scimitar-sized) commonly has a bonus of +2 or +3. Smaller hornblades can be thrown, and the bonus applies to both the attack number and damage determination.\nAny character class permitted to use sickle-like weapons can use a hornblade. The possessor can use it with proficiency, providing he has proficiency with the appropriately sized weapon (knife, dagger, or scimitar).}}'},
{name:'Hornblade-Scimitar',type:'melee',ct:'5',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{prefix=Hornblade}}{{name=^^weaponPlus#0^^}}Specs=[Scimitar,Melee,1H,Long-blade,Scimitar]{{}}WeapData=[query:weaponPlus,+:^^weaponPlus#1^^]{{}}ToHitData=[w:Hornblade^^weaponPlus#0^^,+:^^weaponPlus#1^^]{{}}DmgData=[w:Hornblade^^weaponPlus#0^^,+:^^weaponPlus#1^^]{{}}%{MI-DB|Hornblade-Knife}{{To-hit=+^^weaponPlus#0^^ + Str \\amp Dex bonuses}}{{Damage=+^^weaponPlus#0^^, vs SM:1d8, L:1d8, + Str bonus}}'},
+ {name:'Javelin+poison',type:'melee|ranged',ct:'4',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{}}Specs=[Javelin+poison,Melee,1H,Spears,Javelin],[Javelin+poison,Melee,2H,Spears,Javelin],[Javelin+poison,Ranged,1H,Throwing-Spears,Javelin]{{}}ToHitData=[w:javelin+poison],[w:javelin+poison],[w:javelin+poison]{{}}DmgData=[w:Javelin+poison,cmd:!rounds ~~target-save single|@{selected|token_id}|`{target|Which creature did you hit?|token_id}|Unconscious|\\lbrak;\\lbrak;60*\\lbrak;\\lbrak;2d4\\rbrak;\\rbrak; \\rbrak;\\rbrak;|-1|Rendered unconscious by Drow poison|broken-skull|svpoi\\clon-4,msg:This is a poisoned Javelin which if a save is not made renders the victim unconscious for 2d4 hours. Select the victim hit when prompted and then ask them to make a save vs. poison \\lpar;the -4 penalty to the roll and the effect is automatically applied if failed\\rpar;],[w:Javelin+poison,cmd:!rounds ~~target-save single|@{selected|token_id}|`{target|Which creature did you hit?|token_id}|Unconscious|\\lbrak;\\lbrak;60*\\lbrak;\\lbrak;2d4\\rbrak;\\rbrak; \\rbrak;\\rbrak;|-1|Rendered unconscious by Drow poison|broken-skull|svpoi|\\clon;-4,msg:This is a poisoned Javelin which if a save is not made renders the victim unconscious for 2d4 hours. Select the victim hit when prompted and then ask them to make a save vs. poison \\lpar;the -4 penalty to the roll and the effect is automatically applied if failed\\rpar;],[ ]{{}}AmmoData=[w:Javelin+poison,t:javelin+poison,cmd:!rounds ~~target-save single|@{selected|token_id}|`{target|Which creature did you hit?|token_id}|Unconscious|\\lbrak;\\lbrak;60*\\lbrak;\\lbrak;2d4\\rbrak;\\rbrak; \\rbrak;\\rbrak;|-1|Rendered unconscious by Drow poison|broken-skull|svpoi\\clon;-4,msg:This is a poisoned Javelin which if a save is not made renders the victim unconscious for 2d4 hours. Select the victim hit when prompted and then ask them to make a save vs. poison \\lpar;the -4 penalty to the roll and the effect is automatically applied if failed\\rpar;]{{}}RangeData=[t:Javelin,+:0,r:2/2/4/6]{{}}%{MI-DB|Javelin}{{name=+poison}}{{Use=This weapon must be taken in-hand using the Attk Menu \\gt Change Weapon dialog in order to attack with it. On a successful hit, obey the instruction to target (or target again) the victim hit, a saving throw will be prompted for and the poison will then be automatically applied if the save is failed.}}'},
{name:'Javelin-of-Lightning',type:'melee|ranged',ct:'4',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name= of Lightning}}Specs=[Javelin,Melee,1H,Spears,Javelin],[Javelin,Melee,2H,Spears,Javelin],[Javelin,Ranged,1H,Throwing-Spears,Javelin]{{}}WeapData=[rc:uncharged,qty:1+1d4]{{}}ToHitData=[w:Javelin of Lightning,c:0,msg:Consider a +2 weapon for purposes of creratures only hit by magical weapons but is actually +0],[w:Javelin of Lightning 2H,c:0,msg:Consider a +2 weapon for purposes of creratures only hit by magical weapons but is actually +0],[w:Javelin of Lightning,c:0,msg:Consider a +2 weapon for purposes of creratures only hit by magical weapons but is actually +0]{{}}DmgData=[w:Javelin of Lightning,SM:20+1d6,L:20+1d6,c:1,rc:rechargeable,cmd:!rounds ~~aoe `{target¦Select Target¦token_id}¦bolt¦feet¦0¦30¦5¦lightning,msg:On a successful hit the javelin forms the source of a 5ft x 30ft bolt of lightning. Target hit takes full 20HP damage with no save. Others in the area take 20HP save to half. The weapon is consumed by the lightning],[w:Javelin of Lightning 2H,SM:20+1d6,L:20+1d6,c:1,rc:rechargeable,cmd:!rounds ~~aoe `{target¦Select Target¦token_id}¦bolt¦feet¦0¦30¦5¦lightning,msg:On a successful hit the javelin forms the source of a 5ft x 30ft bolt of lightning. Target hit takes full 20HP damage with no save. Others in the area take 20HP save to half. The weapon is consumed by the lightning],[]{{}}AmmoData=[w:Javelin of Lightning,SM:20+1d6,L:20+1d6,cmd:!rounds ~~aoe `{target¦Select Target¦token_id}¦bolt¦feet¦0¦30¦5¦lightning \n!attk ~~setammo `{selected¦token_id}¦Javelin-of-Lightning¦¦-1¦silent,msg:On a successful hit the javelin forms the source of a 5ft x 30ft bolt of lightning. Target hit takes full 20HP damage with no save. Others in the area take 20HP save to half. The weapon is consumed by the lightning]{{}}%{MI-DB|Javelin}{{To-hit=Considered +2 for attacks vs. creatures requiring magical weapons to-hit, but is +0 + Str Bonus}}{{Attacks=1 per round + level \\amp specialisation, Piercing + Electrical damage}}{{Damage=+0, vs SM:1d6, L:1d6 + Str bonus + lightning 20HP save to half (no save for target struck)}}{{Ammo=+0, vs SM:1d6, L:1d6 + Str bonus + lightning 20HP save to half (no save for target struck)}}{{desc=considered equal to a +2 magical weapon, although it has neither attack nor damage bonuses. It has a range of 90 yards and whenever it strikes, the javelin becomes the head of a 5-foot wide, 30-foot long stroke of lightning. Any creature hit by the javelin suffers 1d6 points of damage, plus 20 points of electrical damage. Any other creatures in the path of the stroke take either 10 or 20 points of damage, based on whether their saving throws are successful or not.\nFrom 2-5 javelins will be found. The javelin is consumed in the lightning discharge.}}'},
{name:'Javelin-of-Piercing',type:'ranged',ct:'4',charge:'change-each',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name= of Piercing}}Specs=[Javelin,Ranged,1H,Throwing-Spears,Javelin]{{}}WeapData=[c:0,rc:change-each,to:Javelin,qty:2d4]{{}}ToHitData=[w:Javelin of Piercing,db:1,r: ,c:0,msg:Whether it hits successfully or not this will now become a normal javelin,cmd:!attk ~~dance `{selected¦token_id}¦Javelin-of-Piercing¦stop]{{}}AmmoData=[w:Javelin of Piercing,+:6,SM1d6,L:1d6]{{}}RangeData=[r:18]{{}}%{MI-DB|Javelin}{{To-hit=+6 + Str Bonus}}{{Ammo=+6, vs SM:1d6, L:1d6 + Str bonus}}{{Range=180 feet with all ranges considered short}}{{Use=This weapon *is not* taken in-hand, but instead used as a magical weapon and [launched](!attk --dance @{selected|token_id}|Javelin-of-Piercing) (click "launched" button to attack). As each *javelin of piercing" is used, they automatically turn back into normal javelins}}{{desc=This weapon is not actually hurled - when a command word is spoken, the javelin of piercing launches itself. Range is 180 feet, all distances considered as short range. The javelin has a +6 bonus to attack rolls and inflicts 1d6+6 points of damage. (Note this missile will fly horizontally, vertically, or any combination thereof to the full extent of its range.) From 2-8 (2d4) will be found at one time. The magic of the javelin of piercing is good for only one throw after which it becomes a normal javelin.}}'},
- {name:'Javelin+poison',type:'melee|ranged',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{}}Specs=[Javelin+poison,Melee,1H,Spears,Javelin],[Javelin+poison,Melee,2H,Spears,Javelin],[Javelin+poison,Ranged,1H,Throwing-Spears,Javelin]{{}}ToHitData=[w:javelin+poison],[w:javelin+poison],[w:javelin+poison]{{}}DmgData=[w:Javelin+poison,cmd:!rounds ~~target-save single|@{selected|token_id}|`{target|Which creature did you hit?|token_id}|Unconscious|\\lbrak;\\lbrak;60*\\lbrak;\\lbrak;2d4\\rbrak;\\rbrak; \\rbrak;\\rbrak;|-1|Rendered unconscious by Drow poison|broken-skull|svpoi\\clon-4,msg:This is a poisoned Javelin which if a save is not made renders the victim unconscious for 2d4 hours. Select the victim hit when prompted and then ask them to make a save vs. poison \\lpar;the -4 penalty to the roll and the effect is automatically applied if failed\\rpar;],[w:Javelin+poison,cmd:!rounds ~~target-save single|@{selected|token_id}|`{target|Which creature did you hit?|token_id}|Unconscious|\\lbrak;\\lbrak;60*\\lbrak;\\lbrak;2d4\\rbrak;\\rbrak; \\rbrak;\\rbrak;|-1|Rendered unconscious by Drow poison|broken-skull|svpoi|clon;-4,msg:This is a poisoned Javelin which if a save is not made renders the victim unconscious for 2d4 hours. Select the victim hit when prompted and then ask them to make a save vs. poison \\lpar;the -4 penalty to the roll and the effect is automatically applied if failed\\rpar;],[ ]{{}}AmmoData=[w:Javelin+poison,t:javelin+poison,cmd:!rounds ~~target-save single|@{selected|token_id}|`{target|Which creature did you hit?|token_id}|Unconscious|\\lbrak;\\lbrak;60*\\lbrak;\\lbrak;2d4\\rbrak;\\rbrak; \\rbrak;\\rbrak;|-1|Rendered unconscious by Drow poison|broken-skull|svpoi\\clon;-4,msg:This is a poisoned Javelin which if a save is not made renders the victim unconscious for 2d4 hours. Select the victim hit when prompted and then ask them to make a save vs. poison \\lpar;the -4 penalty to the roll and the effect is automatically applied if failed\\rpar;]{{}}RangeData=[t:Javelin,+:0,r:2/2/4/6]{{}}%{MI-DB|Javelin}{{name=+poison}}{{Use=This weapon must be taken in-hand using the Attk Menu \\gt Change Weapon dialog in order to attack with it. On a successful hit, obey the instruction to target (or target again) the victim hit, a saving throw will be prompted for and the poison will then be automatically applied if the save is failed.}}'},
{name:'Knife-Buckle',type:'melee|ranged',ct:'2',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{}}Specs=[Knife,Melee,1H,Fencing-blade|Short-blade,Magical-Knife],[Knife,Ranged,1H,Throwing-blade,Magical-Knife]{{}}WeapData=[st:Belt-Buckle]{{}}%{MI-DB|Magical-Knife}{{Looks Like=Looks just like a large belt-buckle ornament or a complete small buckle.}}{{desc=This magical blade has a hilt that looks just like a large belt-buckle ornament or a complete small buckle. The hilt can be grasped easily and the weapon drawn from its belt-sheath. The knife blade is short but has a very sharp point—it inflicts damage as a knife.}}'},
{name:'Light-Crossbow-of-Accuracy',type:'ranged',ct:'7',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name= of Accuracy}}Specs=[Light Crossbow,Ranged,2H,Crossbow,Light-Crossbow]{{}}ToHitData=[w:Light Crossbow of Accuracy,+:3,r:=180]{{}}%{MI-DB|Light-Crossbow}{{subtitle=Magical Crossbow}}{{To-Hit=+3 + dex bonus only}}{{desc=This is a light crossbow. Made of rare woods and exotic metals, it is somewhat difficult to hold and reload, but gives a +3 bonus to attack rolls with its missiles but not to damage. All ranges are considered short.}}'},
{name:'Light-Crossbow-of-Distance',type:'ranged',ct:'7',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name= of Distance}}Specs=[Light Crossbow,Ranged,2H,Crossbow,Light-Crossbow]{{}}ToHitData=[w:Light Crossbow of Distance,+:++1,r:+3/+6/+12/+18]{{}}%{MI-DB|Light-Crossbow}{{subtitle=Magical Crossbow}}{{To-Hit=+1 + dex bonus only}}{{Damage=+1 bonus to ammo}}{{desc=This is a light crossbow. Made of rare woods and exotic metals, it is somewhat difficult to hold and reload, but gives a +1 bonus to attack rolls with its missiles and to damage. All ranges are doubled.}}'},
{name:'Light-Crossbow-of-Speed',type:'ranged',ct:'7',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name= of Speed}}Specs=[Light Crossbow,Ranged,2H,Crossbow,Light-Crossbow]{{}}ToHitData=[w:Light Crossbow of Speed,+:++1,pre:1,n:2]{{}}%{MI-DB|Light-Crossbow}{{subtitle=Magical Crossbow}}{{To-Hit=+1 + dex bonus only}}{{Damage=+1 bonus to ammo}}{{desc=This is a light crossbow. Made of rare woods and exotic metals, it is somewhat difficult to hold and reload. However, allows its possessor to double the rate of fire normal for the weapon. If it is grasped, the crossbow of speed will automatically cock itself. In surprise situations it is of no help. Otherwise, it allows first fire in any melee round, and end-of-round fire also, when applicable. It gives a +1 bonus to attack rolls with its missiles and to damage.}}'},
+ {name:'Lightning-Lance',type:'melee',ct:'6',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{prefix=Lightning}}Specs=[Lightning Lance,Melee,1H,Spears,Light Horse Lance],[Lightning Lance,Melee,2H,Spears,Light Horse Lance]{{}}WeapData=[rc:uncharged,qty:26+1d10]{{}}ToHitData=[w:Lightning Lance,c:0],[w:Lightning Lance 2H,c:0]{{}}DmgData=[w:Lightning Lance,sb:0,SM:3d6,L:3d6,c:1,rc:charged,msg:Save vs. Spell to halve electrical damage],[w:Lightning Lance,sb:0,SM:3d6,L:3d6,c:1,rc:charged,msg:Save vs. Spell to halve electrical damage]{{}}%{MI-DB|Light-Horse-Lance}{{Attacks=1 per round + level \\amp specialisation, Piercing + Electrical damage}}{{Damage=+0, vs SM:3d6, L:3d6 electrical damage save to half}}{{desc=A hand-held electrical weapon similar to a "cattle-prod". Needs to touch (rather than pierce) the victim at which point it delivers an electrical shock for 3d6, using 1 charge. Cannot be recharged}}'},
{name:'Longsword+1+3-vs-Regenerating',type:'melee',ct:'5',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Longsword +1,+3 vs Regenerating (charged)}}{{subtitle=Magic Sword}}{{Speed=[[5]]}}{{Size=Medium}}{{Weapon=1-handed melee long-blade}}Specs=[Longsword,Melee,1H,Long-blade,Longsword],[Longsword,Melee,1H,Long-blade,Longsword],[Longsword,Melee,2H,Long-blade,Longsword]{{To-Hit=+1, +3 vs Regenerating (uses 1 charge), + Str bonus}}ToHitData=[w:Longsword+1,sb:1,+:1,n:1,ch:20,cm:1,sz:M,ty:S,r:5,sp:5],[w:Longsword vs Regen+3,sb:1,+:3,n:1,ch:20,cm:1,sz:M,ty:S,r:5,sp:5]{{Attacks=1 per round + level \\amp specialisation, Slashing}}{{Damage=+1, +3 vs Regenerating (uses 1 charge), vs SM:1d8, L:1d12, + Str bonus}}DmgData=[w:Longsword+1,sb:1,+:1,SM:1d8,L:1d12],[w:Longsword vs Regen+3,sb:1,+:3,SM:1d8,L:1d12]{{desc=This sword has a hilt guard with a centre boss of a sculpted Troll. The blade is sharp and keen, and is a +[[1]] magical weapon at all times. When facing Regenerating creatures, its blade seems to turn blood red, and the increasing sharpness can almost be seen by the wielder. \n It is +[[3]] on attack and damage vs. Regenerating creatures, but each hit will use a charge if the sword has charges}}'},
{name:'Longsword-of-Dancing',type:'melee',ct:'5',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{title=Longsword of Dancing}}Specs=[Longsword,Melee,1H,Long-blade,Longsword],[Longsword,Melee,2H,Long-blade,Longsword]{{}}WeapData=[dancing d:+1|4]{{}}ToHitData=[w:Dancing Longsword]{{}}DmgData=[w:Dancing Longsword]{{}}%{MI-DB|Longsword}{{subtitle=Magical Sword}}{{Weapon=1- or 2-handed dancing melee long-blade}}{{To-hit=+1/2/3/4 + Str bonus}}{{Damage=+1/2/3/4, vs SM:1d8, L:1d12, + Str bonus}}{{desc=This is a very special sword. It is etched with dramatic battle scenes, almost balletic in grace and poise.}}'},
{name:'Mace-of-Disruption',type:'melee',ct:'7',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name= of Disruption}}Specs=[Footmans Mace,Melee,1H,Clubs,Footmans-Mace],[Footmans Mace,Melee,1H,Clubs,Footmans-Mace]{{}}WeapData=[st:Mace]{{}}ToHitData=[w:Mace+1,+:1],[w:Mace vs Undead+Evil,+:1,sb:1,n:1,ch:20,cm:1,sz:M,ty:B,r:5,sp:7]{{}}DmgData=[w:Mace+1,+:1],[w:Mace vs Undead+Evil,+:2,sb:1,SM:2+2d6,L:2d6,msg:Instantly kills *Skeletons Zombies Ghouls Shadows Wights \\amp Ghasts.* Others save *Wraiths* 5% *Mummies* 20% *Specters* 35% *Vampires* 50% *Ghosts* 65% *Liches* 80% Others 95% of time or die]{{}}%{MI-DB|Footmans-Mace}{{subtitle=Magical Mace}}{{To-hit=+1, + Str bonus}}{{Damage=+1, vs SM:1d6+1, L:1d6, double vs Undead or Evil from lower planes, + Str bonus. Chance of instant kill}}{{desc=This appears to be a mace +1, but it has a neutral good alignment, and any evil character touching it will receive 5d4 points of damage due to the powerful enchantments laid upon the weapon. If a mace of disruption strikes any undead creature or evil creature from one of the lower planes, may utterly destroy the creature.\nSkeletons, zombies, ghouls, shadows, wights, and ghasts, if hit, are instantly blasted out of existence. Other creatures roll saving throws as follows:\nCreature Save\nWraiths 5%\nMummies 20%\nSpectres 35%\nVampires 50%\nGhosts 65%\nLiches 80%\nOther affected evil creatures 95%\nEven if these saving throws are effective, the *mace of disruption* scores double damage upon opponents of this sort, and twice the damage bonus.}}'},
@@ -2600,7 +2630,7 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Waveblade',type:'melee',ct:'6',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Waveblade}}{{subtitle=Sword}}{{Speed=1H [[6]], 2H [[8]]}}{{Size=Medium}}{{Weapon=1 or 2-handed melee long blade}}Specs=[Bastard-sword, Melee, 1H, Long-blade],[Bastard-sword, Melee, 2H, Long-blade]{{To-hit=+3 + Str Bonus}}ToHitData=[w:Waveblade, sb:1,+:3,n:1,ch:20,cm:1,sz:M,ty:S,r:5,sp:6,rc:uncharged],[w:Bastard-Sword 2H,sb:1,+:3,n:1,ch:20,cm:1,sz:M,ty:S,r:5,sp:8]{{Attacks=1 per round + specialisation \\amp level, Slashing}}{{Damage=Magical +3 blade, 1-handed SM:1d8 L:1d12, 2-handed SM:2d4 L:2d8}}DmgData=[w:Waveblade,sb:1,+:3,SM:1d8,L:1d12],[w:Bastard-Sword 2H,sb:1,+:0,SM:2d4,L:2d8]{{Looks Like=A prettily decorated bastard sword of exceptional crafting.}}{{desc=This is a very fine blade, decorated with etchings of waves and the sharks that patrol them. The blade is extremely sharp and keen, and glints with magical sharpness.}}'},
{name:'Whelm',type:'melee|ranged|magic',ct:'4',charge:'single-uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Whelm\nIntelligent, Lawful Neutral}}{{subtitle=Magic Warhammer}}{{Speed=[[10]]}}{{Size=M}}WeapData=[w:Whelm,wt:10,sp:4,rc:single-uncharged,ns:4],[cl:PW,w:Whelm-Shockwave,sp:10,pd:1,lv:12],[cl:PW,w:Whelm-Detect-Evil,sp:10,pd:1,lv:12],[cl:PW,w:Whelm-Detect-Good,sp:10,pd:1,lv:12],[cl:PW,w:Whelm-Locate-Object,sp:100,pd:1,lv:12]{{Weapon=1-handed melee or thrown club}}Specs=[Warhammer,Melee,1H,Clubs,Warhammer],[Warhammer,Ranged,1H,Throwing-Clubs,Warhammer],[Warhammer,Melee,2H,Clubs,Warhammer],[Warhammer,Magic,1H|2H,Evocation],[Warhammer,Magic,1H|2H,Divination],[Warhammer,Magic,1H|2H,Divination],[Warhammer,Magic,1H|2H,Divination]{{To-hit=+3 + Str \\amp Dex bonuses}}ToHitData=[w:Whelm,sb:1,+:3,n:1,ch:20,cm:1,sz:M,ty:B,r:5,sp:4],[w:Whelm,sb:1,db:1,+:3,n:1,ch:20,cm:1,sz:M,ty:B,sp:4],[w:Whelm,sb:1,+:0,n:1,ch:20,cm:1,sz:M,ty:B,r:5,sp:4],[w:Shockwave,pw:Whelm-Shockwave,sp:10,lv:12],[w:Detect Evil,pw:Whelm-Detect-Evil,sp:10,lv:12],[w:Detect Good,pw:Whelm-Detect-Good,sp:10,lv:12],[w:Locate Object,pw:Whelm-Locate-Object,sp:10,lv:12]{{Attacks=1 per round + level \\amp specialisation, Bludgeoning}}{{Damage=+3, vs SM:1d4+1, L:1d4, + Str bonus}}DmgData=[w:Whelm,sb:1,+:3,SM:1+1d4,L:1d4],[],[w:Whelm,sb:1,+:3,SM:1+1d4,L:1d4]{{Ammo=+3, vs SM:1d4+1d8+1, L:1d4+2d8, + Str Bonus, and automatically returns}}AmmoData=[w:Whelm,t:Warhammer,st:Throwing-club,+:3,ru:1,SM:1+1d4+1d8,L:1d4+2d8]{{Range=S:20, M:40, L:60}}RangeData=[t:Warhammer,+:3,r:2/4/6]{{desc=**Whelm:** Weapon (warhammer), legendary. Powerful war-hammer forged by dwarves.\n\n**Attacks:** +3 attack and damage rolls.\n**Disadvantage:** Wielder has fear of being outdoors. Disadvantage (roll twice and take the worse outcome) on attack, saves, and ability checks under daytime sky.\n**Thrown Weapon:** range 20/40/60 feet. extra 1d8 (TSM) 2d8 (LG) bludgeoning damage when thrown. Flies back to your hand after attack. If don\'t have hand free, weapon lands at your feet.\n**Shock Wave:** Strike the ground with *Whelm* and send out *Shock Wave* (1 per day). Creatures of your choice within [[60]]ft of impact point must save vs. Staves or stunned for [[1]] turn (additional save each round)\n**Detect Evil:** 1/day\n**Detect Good:** 1/day\n**Locate Object:** 1/day\n\n***Sentience:*** Lawful Neutral weapon, Int 15, Wisdom 12, Chr 15.Hearing and *darkvision* range 120 ft, uses powers at L12. Communicates telepathically with wielder and can speak, read, and understand Dwarvish. Giant, and Goblin. It shouts battle cries in Dwarvish when used in combat.}}{{Use=Take Wave in-hand using *Change Weapon* to be able to use its attacks and powers via the *Attack* action}}\n!setattr --charid @{selected|character_id} --silent --MI-used|Whelm doing Shock Wave --MI-cast|Whelm-Stunned --MI-duration|10 --MI-direction|-1 --MI-msg|Stunned roll save vs Staves again --MI-marker|fishing-net --casting-level|12 --casting-name|Whelm'},
{name:'Fire-Giant-Sword',type:'melee',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=+1}}Specs=[Fire-Giant-Sword,Melee,2H,Long-blade|Great-blade,Two-Handed-Sword]{{}}WeapData=[st:Great Blade]{{}}ToHitData=[w:Fire Giant Sword,+:0]{{}}DmgData=[w:Fire Giant Sword,+:0,sm:2d10,L:2d10]{{}}%{MI-DB|Two-Handed-Sword}{{subtitle=Magic Sword}}{{To-hit=+0 + Str bonus}}{{Damage=+0, vs SM:2d10, L:2d10, + Str bonus}}{{desc=This is a really well balanced, but enormous sword, for use with Fire Giant strength. The blade is sharp, but nothing special}}'},
- {name:'Tentale-Rod',type:'rod|innate-melee',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Tentacle Rod}}{{subtitle=Rod}}{{Speed=[[5]]}}{{Size=Small}}{{Weapon=1-handed melee rod}}Specs=[Tentacle Rod,Rod|Innate-Melee,1H,Rod]{{Range=[[15]] ft}}WandData=[query:attackBonus=What plus does each tentacle attack with? |+3%%+3 |+4%%+4 |+5%%+5 |+6%%+6 |+7%%+7 |+8%%+8 |+9%%+9 ]{{Attacks=^^attackBonus#1^^ magical weapon, 3 per round vs. up to 3 creatures}}ToHitData=[w:Tentacle Rod,sb:0,+:^^attackBonus#1^^,n:3,ch:20,cm:1,sz:M,ty:B,r:15,sp:5,rc:uncharged]{{Damage=SM:1d6, L:1d6 per tentacle hit (bonus does not apply to damage). All tentacles successfully hit 1 creature save vs. Rod or *Slowed*. Save again each round to negate}}DmgData=[w:Tentacle Rod,sb:0,+:0,SM:1d6,L:1d6,msg:If all 3 tentacles hit the same creature in 1 round click \\lbrak;Slow\\rbrak;(!rounds --target-save single|@{selected|token_id}|\\amp#64;{target|Which creature has been struck 3 times?|token_id}|Slow|99|0|You are slowed until you save vs. rod|snail|svrod\\clon;0) ***then*** ask creature to make save vs. rod or the creature will be slowed]{{Use=Take rod in-hand, then attack as a melee weapon up to three times per round. If all 3 attacks hit the same creature successfully then click the [Slow] button in the Damage dialog message which will prompt for a Save vs. Rod to be done which, if failed, will automatically slow the creature. Creature tries to save again each round and, once successful Use Item to display Tentacle Rod and click [Remove Slow](!rounds --removetargetstatus \\amp#64;{target|Remove slow from which creature?|token_id}|Slow) }}{{desc=Made by the drow, this rod is a magic weapon that ends in three rubbery tentacles. While holding the rod, you can use an action to direct each tentacle to attack a creature you can see within 15 feet of you.}}{{hide1= Each tentacle makes a melee attack roll with a ^^attackBonus#1^^ bonus. On a hit, the tentacle deals 1d6 bludgeoning damage. If you hit a target with all three tentacles, it must make a saving throw vs. rod. On a failure, the creature is *Slowed*. At the end of each of its turns, it can repeat the saving throw, ending the effect on itself on a success.}}'},
+ {name:'Tentacle-Rod',type:'rod|innate-melee',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.weaponTemplate+'}{{name=Tentacle Rod}}{{subtitle=Rod}}{{Speed=[[5]]}}{{Size=Small}}{{Weapon=1-handed melee rod}}Specs=[Tentacle Rod,Rod|Innate-Melee,1H,Rod]{{Range=[[15]] ft}}WandData=[query:attackBonus=What plus does each tentacle attack with? |+3%%+3 |+4%%+4 |+5%%+5 |+6%%+6 |+7%%+7 |+8%%+8 |+9%%+9 ]{{Attacks=^^attackBonus#1^^ magical weapon, 3 per round vs. up to 3 creatures}}ToHitData=[w:Tentacle Rod,sb:0,+:^^attackBonus#1^^,n:3,ch:20,cm:1,sz:M,ty:B,r:15,sp:5,rc:uncharged]{{Damage=SM:1d6, L:1d6 per tentacle hit (bonus does not apply to damage). All tentacles successfully hit 1 creature save vs. Rod or *Slowed*. Save again each round to negate}}DmgData=[w:Tentacle Rod,sb:0,+:0,SM:1d6,L:1d6,msg:If all 3 tentacles hit the same creature in 1 round click \\lbrak;Slow\\rbrak;(!rounds --target-save single|@{selected|token_id}|\\amp#64;{target|Which creature has been struck 3 times?|token_id}|Slow|99|0|You are slowed until you save vs. rod|snail|svrod\\clon;0) ***then*** ask creature to make save vs. rod or the creature will be slowed]{{Use=Take rod in-hand, then attack as a melee weapon up to three times per round. If all 3 attacks hit the same creature successfully then click the [Slow] button in the Damage dialog message which will prompt for a Save vs. Rod to be done which, if failed, will automatically slow the creature. Creature tries to save again each round and, once successful Use Item to display Tentacle Rod and click [Remove Slow](!rounds --removetargetstatus \\amp#64;{target|Remove slow from which creature?|token_id}|Slow) }}{{desc=Made by the drow, this rod is a magic weapon that ends in three rubbery tentacles. While holding the rod, you can use an action to direct each tentacle to attack a creature you can see within 15 feet of you.}}{{hide1= Each tentacle makes a melee attack roll with a ^^attackBonus#1^^ bonus. On a hit, the tentacle deals 1d6 bludgeoning damage. If you hit a target with all three tentacles, it must make a saving throw vs. rod. On a failure, the creature is *Slowed*. At the end of each of its turns, it can repeat the saving throw, ending the effect on itself on a success.}}'},
]},
MI_DB_Ammo: {bio:'Weapons Database v7.01 26/01/2025
This sheet holds definitions of weapons that can be used in the RPGMaster API system. They are defined in such a way as to be lootable and usable magic items for MagicMaster and also usable weapons in attackMaster.',
gmnotes:'Change Log: v7.01 26/01/2025 Updated with multiple changes for v4 RoundMaster APIs v6.07 22/12/2024 Corrected speed and charge type of several entries v6.05 30/01/2024 Added more magical ammo options v6.04 23/01/2024 Compressed database items and added standard magical versions v6.03 16/10/2023 Added Ballista Javelin v6.02 10/12/2022 Added quarrels for crossbows used underwater v6.01 25/09/2022 Moved to RPGM Library and updated templates v5.8 14/07/2022 Removed hard-coded whisper commands on database entries as now directed to correct player(s) programmatically v5.7 06/04/2022 Force update to RPGMaster templates v5.6 01/01/2022 Added summoned Rainbow Sheaf Arrows for Rainbow spell v5.5 05/11/2021 Split the Weapon and Ammo databases v5.4 31/10/2021 Further encoded using machine readable data to support API databases v5.3.4 21/08/2021 Fixed incorrect damage for all types of Two-handed Sword v5.3.3 07/06/2021 Added the missing Scimitar macro v5.3.2 31/05/2021 Cleaned ranged weapon ranges, as specifying a range for the weapon in the {{To-Hit=...}} section will now adjust the range of the ammo by that amount (for extended range weapons). Self-ammoed weapons (like thrown daggers) should specify their range in the {{Range=...}} section. v5.3.1 19/05/2021 Fixed a couple of bugs, missing weapons in the transfer from MI-DB v5.3 14/05/2021 All standard weapons from the PHB now encoded. v5.2 12/05/2021 Added support for weapon types (S,P,B), and more standard weapons v5.1 06/05/2021 Added a number of standard and magical weapons v5.0 28/04/2021 Initial separation of weapons listings from the main MI-DB',
@@ -2608,8 +2638,8 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
api:'attk,magic',
type:'mi',
controlledby:'all',
- avatar:'https://s3.amazonaws.com/files.d20.io/images/52530/max.png?1340359343',
- version:7.01,
+ avatar:'https://files.d20.io/images/52530/max.png?1340359343',
+ version:7.02,
db:[{name:'-',type:'',ct:'0',charge:'uncharged',cost:'0',body:'This is a blank slot in your Magic Item bag. Go search out some new Magic Items to fill it up!'},
{name:'Ammo-Info',type:'format',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.armourTemplate+'}{{}}Specs=[Weapon-Info,Format,0H,Format]{{}}WeapData=[a:Weapon Info]{{Speed=}}{{Size=Small}}{{Ammo=}}{{Range=}}{{Immunity=None}}{{Saves=No effect}}{{GM Info=If Auto-Hide config is set, this weapon will automatically hide as a standard weapon of its type when added to a container and by default will reveal manually (see Magic Help Handout about hiding and revealing items).}}{{Use=Ammunition will automatically be transferred to the quiver or pouch when the appropriate ranged weapon is taken in-hand using the *Attk Menu \\gt Change Weapon* dialog.)}}'},
{name:'Arrow-of-Direction',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow]{{}}WeapData=[ns:1],[cl:PW,w:MU-Locate-Object,sp:2,pd:1]{{}}AmmoData=[w:Arrow of Direction]{{}}%{MI-DB|Flight-Arrow}{{Power=Limited [Locate Object](!magic --mi-power @{selected|token_id}|MU-Locate-Object|Flight-Arrow-of-Direction) capability}}{{Use=To indicate use of the Power, select the *Locate Object* button on the displayed information. Ammunition will automatically be transferred to the quiver or pouch when the appropriate ranged weapon is taken in-hand using the *Attk Menu \\gt Change Weapon* dialog.}}{{desc=This typically appears to be a normal arrow. However, its magical properties make it function like a locate object spell, empowering the arrow to show the direction to the nearest stairway, passage, cave, etc.\nOnce per day the device can be tossed into the air; it will fall and point in the requested direction. This process can be repeated seven times during the next seven turns. The request must be for one of the following:\n• Stairway (up or down)\n• Sloping passage (up or down)\n• Dungeon exit or entrance\n• Cave or cavern\nRequests must be phrased by distance (nearest, farthest, highest, lowest) or by direction (north, south, east, west, etc.).}}'},
@@ -2625,38 +2655,38 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Bullet-Cursed',type:'ammo',ct:'0',charge:'Cursed',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Bullet,Ammo,1H,Bullet,Cursed-Bullet]{{}}%{MI-DB|Cursed-Bullet}'},
{name:'Chalk',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{title=Chalk Stone}}Specs=[Chalk,Ammo,1H,Bullet]{{}}WeapData=[qty:10+1d10]{{}}AmmoData=[w:Chalk,st:Sling,+:2,SM:1+1d4,L:1+1d6]{{}}RangeData=[t:sling,+:0,r:3/5/10/20]{{}}%{MI-DB|Ammo-Info}{{subtitle=Ammo}}{{Speed=As per sling}}{{Size=Tiny}}{{Ammo=+2, vs SM:1+1d4, L:1+1d6}}{{Range=Point Blank 6-30,\nShort 31-50,\nMedium 51-100,\nLong 101-200}}{{desc=A piece of teacher\'s chalk, which can be used to great effect in a sling (though teachers can possibly just throw it with the same effect!)}}'},
{name:'Cursed-Bullet',type:'ammo',ct:'0',charge:'Cursed',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{prefix=Cursed }}{{name=^^weaponCurse#0^^}}Specs=[Bullet,Ammo,1H,Bullet]{{}}WeapData=[w:Bullet,query:weaponCurse,+:^^weaponCurse#1^^,rc:Cursed]{{}}AmmoData=[w:Bullet^^weaponCurse#0^^,+:^^weaponCurse#1^^,rc:cursed]{{}}RangeData=[+:^^weaponCurse#1^^]{{}}%{MI-DB|Bullet}{{Ammo=^^weaponCurse#0^^, vs SM:1+1d4, L:1+1d6}}{{desc=A Sling Bullet of good quality, perfectly spherical and with some unknown substance alloyed with the lead. But is there something odd?}}'},
- {name:'Cursed-Flight-Arrow',type:'ammo',ct:'0',charge:'Cursed',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{prefix=Cursed }}{{name=^^weaponCurse#0^^}}Specs=[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow],[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow]{{}}WeapData=[query:weaponCurse,+:^^weaponCurse#1^^,rc:Cursed]{{}}AmmoData=[w:Flight Arrow^^weaponCurse#0^^,+:^^weaponCurse#1^^],[w:Warbow Flight Arrow^^weaponCurse#0^^,+:^^weaponCurse#1^^]{{}}RangeData=[t:longbow,+:^^weaponCurse#1^^],[t:shortbow,+:^^weaponCurse#1^^],[t:warbow,+:^^weaponCurse#1^^],[t:compositelongbow,+:^^weaponCurse#1^^],[t:compositeshortbow,+:^^weaponCurse#1^^]{{}}%{MI-DB|Flight-Arrow}{{subtitle=Magic Weapon}}{{Ammo=^^weaponCurse#0^^,\n**Warbow** vs. SM:1d8, L:1d8,\n**Other Bows** vs. SM:1d6, L:1d6, Piercing}}{{desc=A magical Flight Arrow of good quality, but there\'s something not quite right about the markings on the shaft}}'},
+ {name:'Cursed-Flight-Arrow',type:'ammo',ct:'0',charge:'Cursed',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{prefix=Cursed }}{{name=^^weaponCurse#0^^}}Specs=[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow],[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow],[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow]{{}}WeapData=[query:weaponCurse,+:^^weaponCurse#1^^,rc:Cursed]{{}}AmmoData=[w:Flight Arrow^^weaponCurse#0^^,+:^^weaponCurse#1^^],[w:Warbow Flight Arrow^^weaponCurse#0^^,+:^^weaponCurse#1^^],[w:Flight Arrow^^weaponCurse#0^^,+:^^weaponCurse#1^^]{{}}RangeData=[t:longbow,+:^^weaponCurse#1^^],[t:shortbow,+:^^weaponCurse#1^^],[t:warbow,+:^^weaponCurse#1^^],[t:compositelongbow,+:^^weaponCurse#1^^],[t:compositeshortbow,+:^^weaponCurse#1^^]{{}}%{MI-DB|Flight-Arrow}{{subtitle=Magic Weapon}}{{Ammo=^^weaponCurse#0^^,\n**Warbow** vs. SM:1d8, L:1d8,\n**Other Bows** vs. SM:1d6, L:1d6, Piercing}}{{desc=A magical Flight Arrow of good quality, but there\'s something not quite right about the markings on the shaft}}'},
{name:'Cursed-Hand-Quarrel',type:'ammo',ct:'0',charge:'Cursed',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{prefix=Cursed }}{{name=^^weaponCurse#0^^}}Specs=[Hand-Quarrel,Ammo,1H,Quarrel,Hand-Quarrel]{{}}WeapData=[query:weaponCurse,+:^^weaponCurse#1^^,rc:Cursed]{{}}AmmoData=[w:Hand Quarrel ^^weaponCurse#0^^,+:^^weaponCurse#1^^]{{}}RangeData=[+:^^weaponCurse#1^^]{{}}%{MI-DB|Hand-Quarrel}{{}}%{MI-DB|Magical-Ammo-Info}{{subtitle=Cursed Ammo}}{{Ammo=^^weaponCurse#0^^, vs SM:1d3, L:1d2, Piercing}}{{desc=A quarrel for a hand crossbow, which has some odd markings on the shaft.}}'},
{name:'Cursed-Heavy-Quarrel',type:'ammo',ct:'0',charge:'Cursed',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{prefix=Cursed }}{{name=^^weaponCurse#0^^}}Specs=[Heavy-Quarrel,Ammo,1H,Quarrel,Heavy-Quarrel]{{}}WeapData=[query:weaponCurse,+:^^weaponCurse#1^^,rc:Cursed]{{}}AmmoData=[w:Heavy Quarrel ^^weaponCurse#0^^,+:^^weaponCurse#1^^]{{}}RangeData=[+:^^weaponCurse#1^^]{{}}%{MI-DB|Heavy-Quarrel}{{}}%{MI-DB|Magical-Ammo-Info}{{subtitle=Cursed Ammo}}{{Ammo=^^weaponCurse#0^^, vs SM:1d4+1, L:1d6+1, Piercing}}{{desc=A quarrel for a heavy crossbow, which has some odd markings on the shaft and head.}}'},
{name:'Cursed-Light-Quarrel',type:'ammo',ct:'0',charge:'Cursed',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{prefix=Cursed }}{{name=^^weaponCurse#0^^}}Specs=[Light Quarrel,Ammo,1H,Quarrel,Light-Quarrel]{{}}WeapData=[query:weaponCurse,+:^^weaponCurse#1^^,rc:Cursed]{{}}AmmoData=[w:Light Quarrel^^weaponCurse#0^^,+:^^weaponCurse#1^^]{{}}RangeData=[+:^^weaponCurse#1^^]{{}}%{MI-DB|Cursed-Light-Quarrel}{{}}%{MI-DB|Magical-Weapon-Info}{{Ammo=^^weaponCurse#0^^, vs SM:1d4, L:1d4, Piercing}}{{desc=A quarrel for a light crossbow, of questionable quality but suitable for holding an enchantment. The designs etched into the pointed metal head are disturbing.}}'},
{name:'Cursed-Sheaf-Arrow',type:'ammo',ct:'0',charge:'Cursed',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{prefix=Cursed }}{{name= ^^weaponCurse#0^^}}Specs=[Sheaf-Arrow,Ammo,1H,Arrow,Sheaf-Arrow]{{}}WeapData=[query:weaponCurse,+:^^weaponCurse#1^^,rc:Cursed]{{}}AmmoData=[w:Sheaf Arrow^^weaponCurse#0^^,+:^^weaponCurse#1^^],[w:Warbow Sheaf Arrow^^weaponCurse#0^^,+:^^weaponCurse#1^^]{{}}RangeData=[t:longbow,+:^^weaponCurse#1^^],[t:warbow,+:^^weaponCurse#1^^],[t:compositelongbow,+:^^weaponCurse#1^^]{{}}%{MI-DB|Sheaf-Arrow}{{}}%{MI-DB|Magical-Weapon-Info}{{Ammo=^^weaponCurse#0^^,\n**Warbow** vs. SM:1d10, L:1d10,\n**Other Bows** vs. SM:1d8, L:1d8, Piercing}}{{desc=A Sheaf Arrow of questionable quality with odd markings on the shaft and etched into the head}}'},
{name:'Daikyu-Arrow',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{title=Daikyu Arrow}}specs=[Daikyu-arrow,Ammo,1H,Arrow]{{}}WeapData=[qty:10+1d10]{{}}AmmoData=[w:Daikyu Arrow,t:Daikyu,+:0,sm:1d8,l:1d6,rc:uncharged]{{}}RangeData=[t:Daikyu,sb:1,+:0,r:3/7/14/21]{{subtitle=Ammo}}{{Speed=As per bow}}{{Size=small}}{{Ammo=+0,\n**Daikyu** vs. sm:1d8, l:1d6,\n**Other bows** does not work, Piercing}}{{Range=PB:30, S:70, M:140, L:210}}{{desc=An arrow that, due to the nock and the shape of the flights, can only be used with a Daikyu bow.}}'},
- {name:'Flight-Arrow',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{title=Flight Arrow}}Specs=[Flight-Arrow,Ammo,1H,Arrow],[Flight-Arrow,Ammo,1H,Arrow]{{}}WeapData=[qty:10+1d20]{{}}AmmoData=[w:Flight Arrow,st:Bow,+:0,SM:1d6,L:1d6,rc:uncharged],[w:Warbow Flight Arrow,t:warbow,+:0,SM:1d8,L:1d8,rc:uncharged]{{}}RangeData=[t:longbow,sb:1,+:0,r:3/6/12/21],[t:shortbow,+:0,r:3/5/10/15],[t:warbow,sb:1,+:0,r:3/9/16/25],[t:compositelongbow,sb:1,+:0,r:3/7/14/21],[t:compositeshortbow,sb:1,+:0,r:3/5/10/18]{{}}%{MI-DB|Ammo-Info}{{subtitle=Ammo}}{{Speed=As per bow}}{{Size=Small}}{{Ammo=+0,\n**Warbow** vs. SM:1d8, L:1d8,\n**Other Bows** vs. SM:1d6, L:1d6, Piercing}}{{Range=PB:30, others vary by bow\n**Shortbow:**\nS:50, M:100, L150,\n**Longbow:**\nS:60, M:120, L:210,\n**Warbow:**\nS90, M:160, L:250,\n**Composite Sbow:**\nS:50, M:100, L:180,\n**Composite Lbow:**\nS:70, M:140, L:210}}{{Looks Like=An arrow of 30 to 40 ins.}}{{Hide1=In general, arrows range in length from 20 to 40 inches. The feathers, or fletching, of the arrow consist of two or more feathers set coaxially to the shaft. The flight arrow is built for distance. These are lightweight arrows and are often used for hunting. Most of these arrows are made of ash or birch and are 30 to 40 inches long.}}{{desc=A Flight Arrow of good quality but otherwise ordinary}}'},
- {name:'Flight-Arrow+1',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=+1}}Specs=[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow],[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow]{{}}AmmoData=[w:Flight Arrow+1,+:1],[w:Warbow Flight Arrow+1,+:1]{{}}RangeData=[t:longbow,+:1],[t:shortbow,+:1],[t:warbow,+:1],[t:compositelongbow,+:1],[t:compositeshortbow,+:1]{{}}%{MI-DB|Flight-Arrow}{{subtitle=Magic Weapon}}{{Ammo=+1,\n**Warbow** vs. SM:1d8, L:1d8,\n**Other Bows** vs. SM:1d6, L:1d6, Piercing}}{{desc=A magical Flight Arrow of fine quality}}'},
- {name:'Flight-Arrow+2',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=+2}}Specs=[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow],[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow]{{}}AmmoData=[w:Flight Arrow+2,+:2],[w:Warbow Flight Arrow+2,+:2]{{}}RangeData=[t:longbow,+:2],[t:shortbow,+:2],[t:warbow,+:2],[t:compositelongbow,+:2],[t:compositeshortbow,+:2]{{}}%{MI-DB|Flight-Arrow}{{subtitle=Magic Weapon}}{{Ammo=+2,\n**Warbow** vs. SM:1d8, L:1d8,\n**Other Bows** vs. SM:1d6, L:1d6, Piercing}}{{desc=A magical Flight Arrow of fine quality}}'},
- {name:'Flight-Arrow+3',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=+3}}Specs=[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow],[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow]{{}}AmmoData=[w:Flight Arrow+3,+:3],[w:Warbow Flight Arrow+3,+:3]{{}}RangeData=[t:longbow,+:3],[t:shortbow,+:3],[t:warbow,+:3],[t:compositelongbow,+:3],[t:compositeshortbow,+:3]{{}}%{MI-DB|Flight-Arrow}{{subtitle=Magic Weapon}}{{Ammo=+3,\n**Warbow** vs. SM:1d8, L:1d8,\n**Other Bows** vs. SM:1d6, L:1d6, Piercing}}{{desc=A magical Flight Arrow of fine quality}}'},
- {name:'Flight-Arrow+4',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=+4}}Specs=[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow],[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow]{{}}AmmoData=[w:Flight Arrow+4,+:4],[w:Warbow Flight Arrow+4,+:4]{{}}RangeData=[t:longbow,+:4],[t:shortbow,+:4],[t:warbow,+:4],[t:compositelongbow,+:4],[t:compositeshortbow,+:4]{{}}%{MI-DB|Flight-Arrow}{{subtitle=Magic Weapon}}{{Ammo=+4,\n**Warbow** vs. SM:1d8, L:1d8,\n**Other Bows** vs. SM:1d6, L:1d6, Piercing}}{{desc=A magical Flight Arrow of fine quality}}'},
- {name:'Flight-Arrow-Cursed',type:'ammo',ct:'0',charge:'Cursed',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Flight-Arrow,Ammo,1H,Arrow,Cursed-Flight-Arrow],[Flight-Arrow,Ammo,1H,Arrow,Cursed-Flight-Arrow]{{}}%{MI-DB|Cursed-Flight-Arrow}'},
- {name:'Flight-Arrow-Stone',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Flight arrow - stone}}WeapData=[qty:4+1d6]{{subtitle=ammo}}{{speed=As per bow}}{{size=Small}}specs=[flight-arrow,ammo,1h,arrow],[flight-arrow,ammo,1h,arrow]{{ammo=+0,\n**warbow** vs. sm:0, l:0,\n**other bows** vs. sm:1d4, l:1d4, piercing}}ammodata=[w:Stone flight arrow,st:bow,+:0,sm:1d4,l:1d4,rc:uncharged],[w:Stone flight arrow,t:warbow,+:0,sm:0,l:0,rc:uncharged,msg:Automatically shatters with the force from the bow]{{range=pb:30, others vary by bow\n**shortbow:**\ns:50, m:100, l150,\n**longbow:**\ns:60, m:120, l:210,\n**warbow:**\ns:0, m:0, l:0,\n**composite sbow:**\ns:50, m:100, l:180,\n**composite lbow:**\ns:70, m:140, l:210}}rangedata=[t:longbow,sb:1,+:0,r:3/6/12/21],[t:shortbow,+:0,r:3/5/10/15],[t:warbow,sb:1,+:0,r:3/9/16/25],[t:compositelongbow,sb:1,+:0,r:3/7/14/21],[t:compositeshortbow,sb:1,+:0,r:3/5/10/18]{{desc=A stone flight arrow. Shatters 1 in 6 times. If used with a warbow, will shatter as soon as fired from the bow without doing any damage (won\'t travel even 5ft) as the bow is just too powerful for it.}}'},
+ {name:'Flight-Arrow',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{title=Flight Arrow}}Specs=[Flight-Arrow,Ammo,1H,Arrow],[Flight-Arrow,Ammo,1H,Arrow],[Flight-Arrow,Ammo,1H,Arrow]{{}}WeapData=[qty:10+1d20]{{}}AmmoData=[w:Flight Arrow,st:Bow,+:0,SM:1d6,L:1d6,rc:uncharged],[w:Warbow Flight Arrow,t:warbow,+:0,SM:1d8,L:1d8,rc:uncharged],[w:Flight Arrow,t:shortbow,+:0,SM:1d6,L:1d6,rc:uncharged]{{}}RangeData=[t:longbow,sb:1,+:0,r:3/6/12/21],[t:shortbow,+:0,r:3/5/10/15],[t:warbow,sb:1,+:0,r:3/9/16/25],[t:compositelongbow,sb:1,+:0,r:3/7/14/21],[t:compositeshortbow,sb:1,+:0,r:3/5/10/18]{{}}%{MI-DB|Ammo-Info}{{subtitle=Ammo}}{{Speed=As per bow}}{{Size=Small}}{{Ammo=+0,\n**Warbow** vs. SM:1d8, L:1d8,\n**Other Bows** vs. SM:1d6, L:1d6, Piercing}}{{Range=PB:30, others vary by bow\n**Shortbow:**\nS:50, M:100, L150,\n**Longbow:**\nS:60, M:120, L:210,\n**Warbow:**\nS90, M:160, L:250,\n**Composite Sbow:**\nS:50, M:100, L:180,\n**Composite Lbow:**\nS:70, M:140, L:210}}{{Looks Like=An arrow of 30 to 40 ins.}}{{Hide1=In general, arrows range in length from 20 to 40 inches. The feathers, or fletching, of the arrow consist of two or more feathers set coaxially to the shaft. The flight arrow is built for distance. These are lightweight arrows and are often used for hunting. Most of these arrows are made of ash or birch and are 30 to 40 inches long.}}{{desc=A Flight Arrow of good quality but otherwise ordinary}}'},
+ {name:'Flight-Arrow+1',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=+1}}Specs=[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow],[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow]{{}}AmmoData=[w:Flight Arrow+1,+:1],[w:Warbow Flight Arrow+1,+:1],[w:Shortbow Flight Arrow+1,+:1]{{}}RangeData=[t:longbow,+:1],[t:shortbow,+:1],[t:warbow,+:1],[t:compositelongbow,+:1],[t:compositeshortbow,+:1]{{}}%{MI-DB|Flight-Arrow}{{subtitle=Magic Weapon}}{{Ammo=+1,\n**Warbow** vs. SM:1d8, L:1d8,\n**Other Bows** vs. SM:1d6, L:1d6, Piercing}}{{desc=A magical Flight Arrow of fine quality}}'},
+ {name:'Flight-Arrow+2',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=+2}}Specs=[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow],[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow]{{}}AmmoData=[w:Flight Arrow+2,+:2],[w:Warbow Flight Arrow+2,+:2],[w:Shortbow Flight Arrow+2,+:2]{{}}RangeData=[t:longbow,+:2],[t:shortbow,+:2],[t:warbow,+:2],[t:compositelongbow,+:2],[t:compositeshortbow,+:2]{{}}%{MI-DB|Flight-Arrow}{{subtitle=Magic Weapon}}{{Ammo=+2,\n**Warbow** vs. SM:1d8, L:1d8,\n**Other Bows** vs. SM:1d6, L:1d6, Piercing}}{{desc=A magical Flight Arrow of fine quality}}'},
+ {name:'Flight-Arrow+3',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=+3}}Specs=[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow],[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow]{{}}AmmoData=[w:Flight Arrow+3,+:3],[w:Warbow Flight Arrow+3,+:3],[w:Shortbow Flight Arrow+3,+:3]{{}}RangeData=[t:longbow,+:3],[t:shortbow,+:3],[t:warbow,+:3],[t:compositelongbow,+:3],[t:compositeshortbow,+:3]{{}}%{MI-DB|Flight-Arrow}{{subtitle=Magic Weapon}}{{Ammo=+3,\n**Warbow** vs. SM:1d8, L:1d8,\n**Other Bows** vs. SM:1d6, L:1d6, Piercing}}{{desc=A magical Flight Arrow of fine quality}}'},
+ {name:'Flight-Arrow+4',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=+4}}Specs=[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow],[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow]{{}}AmmoData=[w:Flight Arrow+4,+:4],[w:Warbow Flight Arrow+4,+:4],[w:Shortbow Flight Arrow+4,+:4]{{}}RangeData=[t:longbow,+:4],[t:shortbow,+:4],[t:warbow,+:4],[t:compositelongbow,+:4],[t:compositeshortbow,+:4]{{}}%{MI-DB|Flight-Arrow}{{subtitle=Magic Weapon}}{{Ammo=+4,\n**Warbow** vs. SM:1d8, L:1d8,\n**Other Bows** vs. SM:1d6, L:1d6, Piercing}}{{desc=A magical Flight Arrow of fine quality}}'},
+ {name:'Flight-Arrow-Cursed',type:'ammo',ct:'0',charge:'Cursed',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Flight-Arrow,Ammo,1H,Arrow,Cursed-Flight-Arrow],[Flight-Arrow,Ammo,1H,Arrow,Cursed-Flight-Arrow],[Flight-Arrow,Ammo,1H,Arrow,Cursed-Flight-Arrow]{{}}%{MI-DB|Cursed-Flight-Arrow}'},
+ {name:'Flight-Arrow-Stone',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Flight arrow - stone}}WeapData=[qty:4+1d6]{{subtitle=ammo}}{{speed=As per bow}}{{size=Small}}specs=[flight-arrow,ammo,1h,arrow],[flight-arrow,ammo,1h,arrow],[flight-arrow,ammo,1h,arrow]{{ammo=+0,\n**warbow** vs. sm:0, l:0,\n**other bows** vs. sm:1d4, l:1d4, piercing}}ammodata=[w:Stone flight arrow,st:bow,+:0,sm:1d4,l:1d4,rc:uncharged],[w:Stone flight arrow,t:warbow,+:0,sm:0,l:0,rc:uncharged,msg:Automatically shatters with the force from the bow],[w:Stone flight arrow,t:shortbow,+:0,sm:1d4,l:1d4,rc:uncharged]{{range=pb:30, others vary by bow\n**shortbow:**\ns:50, m:100, l150,\n**longbow:**\ns:60, m:120, l:210,\n**warbow:**\ns:0, m:0, l:0,\n**composite sbow:**\ns:50, m:100, l:180,\n**composite lbow:**\ns:70, m:140, l:210}}rangedata=[t:longbow,sb:1,+:0,r:3/6/12/21],[t:shortbow,+:0,r:3/5/10/15],[t:warbow,sb:1,+:0,r:3/9/16/25],[t:compositelongbow,sb:1,+:0,r:3/7/14/21],[t:compositeshortbow,sb:1,+:0,r:3/5/10/18]{{desc=A stone flight arrow. Shatters 1 in 6 times. If used with a warbow, will shatter as soon as fired from the bow without doing any damage (won\'t travel even 5ft) as the bow is just too powerful for it.}}'},
{name:'Flight-Arrows',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Flight-Arrow,Ammo,1H,Arrow,Flight-Arrow]{{}}%{MI-DB|Flight-Arrow}'},
{name:'Flight-arrow+?',type:'ammo|dminfo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Flight Arrow+?}}{{subtitle=Magic Weapon}}{{Speed=As per bow}}{{Size=Small}}Specs=[Flight-Arrow,Ammo|DMinfo,1H,Arrow]{{To-hit=Unknown}}{{damage=Unknown}}{{desc=A magical Flight Arrow of very fine quality, but with unknown plusses}}'},
- {name:'Glass-Arrow+3',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Glass Sheaf Arrow+3}}{{subtitle=Magic Weapon}}WeapData=[qty:1d6]{{Speed=As per bow}}{{Size=Small}}Specs=[Glass Arrow,Ammo,1H,Arrow],[Glass Arrow,Ammo,1H,Arrow]{{Ammo=+3 Piercing,\n**Warbow** vs\nSM:1d10, L:1d10\n**Other Bows** vs\nSM:1d8, L:1d8,\nbreaks on use}}AmmoData=[w:Glass Arrow+3,st:Bow,+:3,ru:-1,SM:1d8,L:1d8],[w:Glass Arrow+3,t:warbow,+:3,ru:-1,SM:1d10,L:1d10]{{Range=Varies by bow:\n**Longbow**\nPB:30 S:50 M:100 L:170\n**Shortbow**\nPB:30 S:40 M:80 L:150\n**Warbow**\nPB:30 S:70 M:120 L:210\n**Composite Lbow**\nPB:30 S:50 M:100 L:180\n**Composite Sbow**\nPB:30 S:50 M:100 L:150}}RangeData=[t:longbow,+:3,r:3/5/10/17],[t:shortbow,+:3,r:3/4/8/15],[t:warbow,+:3,r:3/7/12/21],[t:compositelongbow,+:3,r:3/5/10/18],[t:compositeshortbow:,+:3,r:3/5/10/17]{{desc=A magical Sheaf Arrow made of ultra-sharp glass. The arrows always shatter on use.}}'},
- {name:'Glass-arrow+10',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Glass Sheaf Arrow+3}}{{subtitle=Magic Weapon}}WeapData=[qty:1d3]{{Speed=As per bow}}{{Size=Small}}Specs=[Glass Arrow,Ammo,1H,Arrow],[Glass Arrow,Ammo,1H,Arrow]{{Ammo=+10 Piercing,\n**Warbow** vs\nSM:1d10, L:1d10\n**Other Bows** vs\nSM:1d8, L:1d8,\nbreaks on use}}AmmoData=[w:Glass Arrow+10,st:Bow,+:10,ru:-1,SM:1d8,L:1d8],[w:Glass Arrow+10,t:warbow,+:10,ru:-1,SM:1d10,L:1d10]{{Range=Varies by bow:\n**Longbow**\nPB:30 S:50 M:100 L:170\n**Shortbow**\nPB:30 S:40 M:80 L:150\n**Warbow**\nPB:30 S:70 M:120 L:210\n**Composite Lbow**\nPB:30 S:50 M:100 L:180\n**Composite Sbow**\nPB:30 S:50 M:100 L:150}}RangeData=[t:longbow,+:10,r:3/5/10/17],[t:shortbow,+:10,r:3/4/8/15],[t:warbow,+:10,r:3/7/12/21],[t:compositelongbow,+:10,r:3/5/10/18],[t:compositeshortbow:,+:10,r:3/5/10/17]{{desc=A magical Sheaf Arrow made of ultra-sharp glass. The arrows always shatter on use.}}'},
+ {name:'Glass-Arrow+3',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Glass Sheaf Arrow+3}}{{subtitle=Magic Weapon}}WeapData=[qty:1d6]{{Speed=As per bow}}{{Size=Small}}Specs=[Glass Arrow,Ammo,1H,Arrow],[Glass Arrow,Ammo,1H,Arrow],[Glass Arrow,Ammo,1H,Arrow]{{Ammo=+3 Piercing,\n**Warbow** vs\nSM:1d10, L:1d10\n**Other Bows** vs\nSM:1d8, L:1d8,\nbreaks on use}}AmmoData=[w:Glass Arrow+3,st:Bow,+:3,ru:-1,SM:1d8,L:1d8],[w:Glass Arrow+3,t:warbow,+:3,ru:-1,SM:1d10,L:1d10],[w:Glass Arrow+3,t:shortbow,+:3,ru:-1,SM:1d8,L:1d8]{{Range=Varies by bow:\n**Longbow**\nPB:30 S:50 M:100 L:170\n**Shortbow**\nPB:30 S:40 M:80 L:150\n**Warbow**\nPB:30 S:70 M:120 L:210\n**Composite Lbow**\nPB:30 S:50 M:100 L:180\n**Composite Sbow**\nPB:30 S:50 M:100 L:150}}RangeData=[t:longbow,+:3,r:3/5/10/17],[t:shortbow,+:3,r:3/4/8/15],[t:warbow,+:3,r:3/7/12/21],[t:compositelongbow,+:3,r:3/5/10/18],[t:compositeshortbow:,+:3,r:3/5/10/17]{{desc=A magical Sheaf Arrow made of ultra-sharp glass. The arrows always shatter on use.}}'},
+ {name:'Glass-arrow+10',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Glass Sheaf Arrow+3}}{{subtitle=Magic Weapon}}WeapData=[qty:1d3]{{Speed=As per bow}}{{Size=Small}}Specs=[Glass Arrow,Ammo,1H,Arrow],[Glass Arrow,Ammo,1H,Arrow],[Glass Arrow,Ammo,1H,Arrow]{{Ammo=+10 Piercing,\n**Warbow** vs\nSM:1d10, L:1d10\n**Other Bows** vs\nSM:1d8, L:1d8,\nbreaks on use}}AmmoData=[w:Glass Arrow+10,st:Bow,+:10,ru:-1,SM:1d8,L:1d8],[w:Glass Arrow+10,t:warbow,+:10,ru:-1,SM:1d10,L:1d10],[w:Glass Arrow+10,t:shortbow,+:10,ru:-1,SM:1d8,L:1d8]{{Range=Varies by bow:\n**Longbow**\nPB:30 S:50 M:100 L:170\n**Shortbow**\nPB:30 S:40 M:80 L:150\n**Warbow**\nPB:30 S:70 M:120 L:210\n**Composite Lbow**\nPB:30 S:50 M:100 L:180\n**Composite Sbow**\nPB:30 S:50 M:100 L:150}}RangeData=[t:longbow,+:10,r:3/5/10/17],[t:shortbow,+:10,r:3/4/8/15],[t:warbow,+:10,r:3/7/12/21],[t:compositelongbow,+:10,r:3/5/10/18],[t:compositeshortbow:,+:10,r:3/5/10/17]{{desc=A magical Sheaf Arrow made of ultra-sharp glass. The arrows always shatter on use.}}'},
{name:'Hand-Quarrel',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{title=Hand Quarrel}}Specs=[Hand-Quarrel,Ammo,1H,Quarrel]{{}}WeapData=[qty:20+1d10]{{}}AmmoData=[w:Hand Quarrel,t:Hand Crossbow,+:0,SM:1d3,L:1d2]{{}}RangeData=[t:Hand Crossbow,+:0,r:2/2/4/6]{{}}%{MI-DB|Ammo-Info}{{subtitle=Ammo}}{{Speed=As per crossbow}}{{Size=Tiny}}{{Ammo=+0, vs SM:1d3, L:1d2, Piercing}}{{Range=PB:20, S:20, M:40, L:60}}{{Looks Like=Quarrels or bolts are the ammunition fired by crossbows. Crossbows are rated as hand, one-footers (light) or two-footers (heavy), according to the bolt\'s length. Quarrels are shaped like arrows, but the shafts are shorter and thicker. The quarrel heads used for warfare are conical or pyramid-shaped iron heads.}}{{desc=A quarrel for a hand crossbow, of good quality but otherwise ordinary}}'},
{name:'Hand-Quarrel+1',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=+1}}Specs=[Hand-Quarrel,Ammo,1H,Quarrel,Hand-Quarrel]{{}}AmmoData=[w:Hand Quarrel+1,+:1]{{}}RangeData=[+:1]{{}}%{MI-DB|Hand-Quarrel}{{subtitle=Magical Ammo}}{{Ammo=+1, vs SM:1d3, L:1d2, Piercing}}{{desc=A well made quarrel for a hand crossbow, of excellent quality and suitable for enchanting}}'},
{name:'Hand-Quarrel+2',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Hand-Quarrel,Ammo,1H,Quarrel,Hand-Quarrel+1]{{}}AmmoData=[w:Hand Quarrel+2,+:2]{{}}RangeData=[+:2]{{}}%{MI-DB|Hand-Quarrel+1}{{name=+2}}{{Ammo=+2, vs SM:1d3, L:1d2, Piercing}}'},
{name:'Hand-Quarrel+3',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Hand-Quarrel,Ammo,1H,Quarrel,Hand-Quarrel+1]{{}}AmmoData=[w:Hand Quarrel+3,+:3]{{}}RangeData=[+:3]{{}}%{MI-DB|Hand-Quarrel+1}{{name=+3}}{{Ammo=+3, vs SM:1d3, L:1d2, Piercing}}'},
{name:'Hand-Quarrel+4',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Hand-Quarrel,Ammo,1H,Quarrel,Hand-Quarrel+1]{{}}AmmoData=[w:Hand Quarrel+4,+:4]{{}}RangeData=[+:4]{{}}%{MI-DB|Hand-Quarrel+1}{{name=+4}}{{Ammo=+4, vs SM:1d3, L:1d2, Piercing}}'},
- {name:'Hand-Quarrel-Cursed',type:'ammo',ct:'0',charge:'Cursed',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{prefix=Cursed }}{{name=^^weaponCurse#0^^}}Specs=[Hand-Quarrel,Ammo,1H,Quarrel,Cursed-Hand-Quarrel]{{}}%{MI-DB|Cursed-Hand-Quarrel}'},
{name:'Hand-Quarrel+poison',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Hand-Quarrel+poison,Ammo,1H,Quarrel,Hand-Quarrel]{{}}WeapData=[qty:1d6]{{}}AmmoData=[w:Hand-Quarrel+poison,t:Hand-Crossbow,cmd:!rounds ~~target-save single|@{selected|token_id}|`{target|Which creature did you hit?|token_id}|Unconscious|\\lbrak;\\lbrak;[60*\\lbrak;\\lbrak;2d4\\rbrak;\\rbrak; \\rbrak;\\rbrak;|-1|Rendered unconscious by Drow poison|broken-skull|svpoi\\clon;-4,msg:This is a poisoned quarrel which if a save is not made renders the victim unconscious for 2d4 hours. Select the victim hit when prompted and then ask them to make a save vs. poison \\lpar;the -4 penalty to the roll and the effect is automatically applied if failed\\rpar;]{{}}%{MI-DB|Hand-Quarrel}{{}}{{Use=Ammunition will automatically be transferred to the quiver or pouch when the appropriate ranged weapon is taken in-hand using the Attk Menu \\gt Change Weapon dialog.). On a successful hit, obey the instruction to target (or target again) the victim hit, a saving throw will be prompted for and the poison will then be automatically applied if the save is failed.}}'},
+ {name:'Hand-Quarrel-Cursed',type:'ammo',ct:'0',charge:'Cursed',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{prefix=Cursed }}{{name=^^weaponCurse#0^^}}Specs=[Hand-Quarrel,Ammo,1H,Quarrel,Cursed-Hand-Quarrel]{{}}%{MI-DB|Cursed-Hand-Quarrel}'},
{name:'Heavy-Quarrel',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{title=Heavy Quarrel}}Specs=[Heavy-Quarrel,Ammo,1H,Quarrel]{{}}WeapData=[qty:10+1d10]{{}}AmmoData=[w:Heavy Quarrel,t:Heavy Crossbow,+:0,SM:1+1d4,L:1+1d6]{{}}RangeData=[t:Heavy Crossbow,+:0,r:3/8/16/24]{{}}%{MI-DB|Ammo-Info}{{subtitle=Ammo}}{{Speed=As per crossbow}}{{Size=Tiny}}{{Ammo=+0, vs SM:1d4+1, L:1d6+1, Piercing}}{{Range=PB:30 S:80 M:160 L:240}}{{Looks Like=Quarrels or bolts are the ammunition fired by crossbows. Crossbows are rated as hand, one-footers (light) or two-footers (heavy), according to the bolt\'s length. Quarrels are shaped like arrows, but the shafts are shorter and thicker. The quarrel heads used for warfare are conical or pyramid-shaped iron heads.}}{{desc=A quarrel for a heavy crossbow, of good quality but otherwise ordinary}}'},
{name:'Heavy-Quarrel+1',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=+1}}Specs=[Heavy-Quarrel,Ammo,1H,Quarrel,Heavy-Quarrel]{{}}AmmoData=[w:Heavy Quarrel+1,+:1]{{}}RangeData=[+:1]{{}}%{MI-DB|Heavy-Quarrel}{{subtitle=Magic Ammo}}{{Ammo=+1, vs SM:1d4+1, L:1d6+1, Piercing}}{{desc=A quarrel for a heavy crossbow, of excellent quality and suitable for holding an enchantment}}'},
{name:'Heavy-Quarrel+2',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Heavy-Quarrel,Ammo,1H,Quarrel,Heavy-Quarrel+1]{{}}AmmoData=[w:Heavy Quarrel+2,+:2]{{}}RangeData=[+:2]{{}}%{MI-DB|Heavy-Quarrel+1}{{name=+2}}{{Ammo=+2, vs SM:1d4+1, L:1d6+1, Piercing}}'},
+ {name:'Heavy-Quarrel+3',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Heavy-Quarrel,Ammo,1H,Quarrel,Heavy-Quarrel+1]{{}}AmmoData=[w:Heavy Quarrel+3,+:3]{{}}RangeData=[+:3]{{}}%{MI-DB|Heavy-Quarrel+1}{{name=+3}}{{Ammo=+3, vs SM:1d4+1, L:1d6+1, Piercing}}'},
{name:'Heavy-Quarrel+4',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Heavy-Quarrel,Ammo,1H,Quarrel,Heavy-Quarrel+1]{{}}AmmoData=[w:Heavy Quarrel+4,+:4]{{}}RangeData=[+:4]{{}}%{MI-DB|Heavy-Quarrel+1}{{name=+4}}{{Ammo=+4, vs SM:1d4+1, L:1d6+1, Piercing}}'},
{name:'Heavy-Quarrel-Cursed',type:'ammo',ct:'0',charge:'Cursed',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{prefix=Cursed }}{{name=^^weaponCurse#0^^}}Specs=[Heavy-Quarrel,Ammo,1H,Quarrel,Cursed-Heavy-Quarrel]{{}}%{MI-DB|Cursed-Heavy-Quarrel}'},
{name:'Heavy-Quarrel-Magical-Underwater',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Heavy-Quarrel,Ammo,1H,Quarrel,Magical-Heavy-Quarrel-Underwater]{{}}%{MI-DB|Magical-Heavy-Quarrel-Underwater}'},
{name:'Heavy-Quarrel-Underwater',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name= used Underwater}}Specs=[Heavy-Quarrel,Ammo,1H,Quarrel,Heavy-Quarrel]{{}}AmmoData=[w:Heavy Quarrel Underwater]{{}}RangeData=[t:Heavy Crossbow,r:2/5/8/12]{{}}%{MI-DB|Heavy-Quarrel}{{Range=PB:20 S:50 M:80 L:120}}{{desc=A quarrel for a heavy crossbow, of good quality but otherwise ordinary, used underwater so range is halved}}'},
- {name:'Heavy-Quarrel+3',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Heavy-Quarrel,Ammo,1H,Quarrel,Heavy-Quarrel+1]{{}}AmmoData=[w:Heavy Quarrel+3,+:3]{{}}RangeData=[+:3]{{}}%{MI-DB|Heavy-Quarrel+1}{{name=+3}}{{Ammo=+3, vs SM:1d4+1, L:1d6+1, Piercing}}'},
{name:'Heavy-Xbow-Bolt+2',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Magic Crossbow Bolts}}{{subtitle=Magic Ammo}}{{Size=Tiny}}Specs=[Heavy-Quarrel,Ammo,1H,Quarrel]{{Ammo=+2, vs SM:1d4+1, L:1d6+1, no other bonuses}}AmmoData=[t:heavy-crossbow,st:heavy-crossbow,sb:0,+:2,SM:1+1d4,L:1+1d6]{{Range=PB:30 S:80 M:160 L:240}}RangeData=[t:heavy-crossbow,+:2,r:3/8/16/24]{{desc=Fine quality heavy crossbow bolts which are +2 on to-hit and damage. The tips are sharp and keen, and are very shiny.}}'},
{name:'Indirect',type:'',ct:'0',charge:'uncharged',cost:'0',body:'@{'},
{name:'Light-Ballista-Bolt',type:'ammo|dminfo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Light-Ballista Bolt}}{{subtitle=Ammo}}{{Speed=As per Ballista}}{{Size=Large}}Specs=[Light Ballista Bolt,Ammo|DMinfo,1H,Quarrel]{{Ammo=+0, vs SM:2d6, L:3d6, Piercing}}AmmoData=[w:Light Ballista Bolt,t:Light-Ballista,+:0,SM:2d6,L:3d6],{{Range=S:110 M:220 L:330}}RangeData=[t:Light-Ballista,+:0,r:110/220/330]{{desc=A bolt for a light ballista, of good quality but otherwise ordinary}}'},
@@ -2668,7 +2698,6 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Light-Quarrel+4',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=+4}}Specs=[Light Quarrel,Ammo,1H,Quarrel,Light-Quarrel]{{}}AmmoData=[w:Light Quarrel+4,+:4]{{}}RangeData=[+:4]{{}}%{MI-DB|Light-Quarrel}{{Ammo=+4, vs SM:1d4, L:1d4, Piercing}}{{desc=A quarrel for a light crossbow, of excellent quality and suitable for holding an enchantment}}'},
{name:'Light-Quarrel-Cursed',type:'ammo',ct:'0',charge:'Cursed',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Light Quarrel,Ammo,1H,Quarrel,Cursed-Light-Quarrel]{{}}%{MI-DB|Cursed-Light-Quarrel}'},
{name:'Light-Quarrel-Magical-Underwater',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Light-Quarrel,Ammo,1H,Quarrel,Magical-Light-Quarrel-Underwater]{{}}%{MI-DB|Magical-Light-Quarrel-Underwater}'},
- {name:'Poisoned-Light-Quarrel',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Light Quarrel}}{{subtitle=Ammo}}{{Speed=As per crossbow}}{{Size=Tiny}}Specs=[Poisoned Light Quarrel,Ammo,1H,Quarrel]{{Ammo=+0, vs SM:1d4, L:1d4}}AmmoData=[w:Poisoned Light Quarrel,t:Light Crossbow,+:0,SM:1d4,L:1d4,msg:Save vs. poison or be \\lbrakincapacitated\\rbrak\\lpar!rounds \\dash-target single|^^tid^^|\\amp#64;{target|Who\'s the victim?|token_id}|Locathah venom|2|-1|Incapacitated and prone due to venom|back-pain\\rpar for 2 rounds]{{Range=PB:30 S:60 M:120 L:180}}RangeData=[t:Light Crossbow,+:0,r:3/6/12/18]{{desc=A quarrel for a light crossbow, of good quality but otherwise ordinary}}'},
{name:'Light-Quarrel-Underwater',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name= used Underwater}}Specs=[Light Quarrel,Ammo,1H,Quarrel,Light-Quarrel]{{}}AmmoData=[w:Light Quarrel Underwater,t:Light Crossbow,+:0,SM:1d4,L:1d4]{{}}RangeData=[t:Light Crossbow,+:0,r:2/4/6/9]{{}}%{MI-DB|Light-Quarrel}{{Range=PB:20 S:40 M:60 L:90}}{{desc=A quarrel for a light crossbow, of good quality but otherwise ordinary, used underwater to the range is halved}}'},
{name:'Magic-Ammo',type:'ammo|dmitem',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Unknown Magical Ammo}}{{subtitle=Magic Ammo}}{{Speed=As per ranged weapon?}}{{Size=Small}}Specs=[Magic-Ammo,Ammo|DMitem,1H,Ammo]{{To-hit=Unknown}}{{damage=Unknown}}{{desc=Magical Ammo of fine quality}}'},
{name:'Magic-Heavy-Xbow-Bolts',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Magic Crossbow Bolts}}WeapData=[qty:1d6]{{subtitle=Magic Ammo}}{{Size=Tiny}}Specs=[Magic-Ammo,Ammo,1H,Ammo]{{Ammo=[t:heavy-xbow,st:heavy-xbow,sb:0,+:2,SM:1+1d4,L:1+1d6]{{desc=Fine quality heavy crossbow bolts. The tips are sharp and keen, and are very shiny.}}'},
@@ -2677,9 +2706,10 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Magical-Light-Quarrel-Underwater',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Light-Quarrel,Ammo,1H,Quarrel,Light-Quarrel-Underwater]{{}}WeapData=[query:weaponMagic,+:^^weaponMagic#1^^,rc:^^weaponMagic#2^^]{{}}AmmoData=[w:Light Quarrel ^^weaponMagic#0^^ Underwater,+:^^weaponMagic#1^^,rc:^^weaponMagic#2^^]{{}}RangeData=[t:Light Crossbow,+:^^weaponMagic#1^^]{{}}%{MI-DB|Light-Quarrel-Underwater}{{}}%{MI-DB|Magical-Weapon-Info}{{prefix=^^weaponMagic#2^^}}{{name= ^^weaponMagic#0^^ used Underwater}}{{Ammo=^^weaponMagic#0^^, vs SM:1d4, L:1d4, Piercing}}'},
{name:'Magical-Needle',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{prefix=^^weaponMagic#2^^}}{{name= ^^weaponMagic#0^^}}Specs=[Needle,Ammo,1H,Blowgun,Needle]{{}}WeapData=[query:weaponMagic,+:^^weaponMagic#1^^,rc:^^weaponMagic#2^^]{{}}AmmoData=[w:Needle ^^weaponMagic#0^^,+:^^weaponMagic#1^^]{{}}RangeData=[+:^^weaponMagic#1^^]{{}}%{MI-DB|Needle}{{}}%{MI-DB|Magical-Weapon-Info}{{subtitle=Magical Ammo for Blowgun}}{{Ammo=^^weaponMagic#0^^, vs SM:1, L:1, no bonuses}}{{desc=A Blowgun needle, tiny and sharp, made of some exotic material that gleams and sparcles - careful! Perhaps dipped in poison?}}'},
{name:'Magical-Sheaf-Arrows',type:'ammo|dminfo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Unknown Magical Sheaf Arrow}}{{subtitle=Magic Ammo}}{{Speed=As per bow?}}{{Size=Small}}Specs=[Magic-Ammo,Ammo|DMinfo,1H,Ammo]{{To-hit=Unknown}}{{damage=Unknown}}{{desc=A magical Sheaf Arrow of fine quality}}'},
- {name:'Manticore-Tail-Spikes',type:'ranged|DMinfo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Manticore Tail Spikes}}{{subtitle=Ammo}}{{Size=Tiny}}Specs=[Manticore Tail Spikes,Ranged|DMinfo,1H,Quarrel]{{Ammo=+1, vs SM:1d6, L:1d6, for a light crossbow with no other bonuses}}AmmoData=[t:light-crossbow,st:light-crossbow,sb:0,+:1,SM:1d6,L:1d6]{{Range=PB:30 S:60 M:120 L:180}}RangeData=[t:light-crossbow,+:2,r:3/6/12/18]{{desc=These Manticore Tail Spikes can be used as ammunition for a light crossbow with a +1 to hit \\amp on damage}}'},
+ {name:'Manticore-Tail-Spikes',type:'ammo|dminfo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Manticore Tail Spikes}}{{subtitle=Ammo}}{{Size=Tiny}}Specs=[Manticore Tail Spikes,Ammo|DMinfo,1H,Quarrel]{{Ammo=+1, vs SM:1d6, L:1d6, for a light crossbow with no other bonuses}}AmmoData=[t:light-crossbow|manticore-tail,st:light-crossbow|manticore-tail,sb:0,+:1,SM:1d6,L:1d6]{{Range=PB:30 S:60 M:120 L:180}}RangeData=[t:light-crossbow,+:2,r:3/6/12/18]{{desc=These Manticore Tail Spikes can be used as ammunition for a light crossbow with a +1 to hit \\amp on damage}}'},
{name:'Needle',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{title=Needle}}Specs=[Needle,Ammo,1H,Blowgun]{{}}WeapData=[qty:10+1d20]{{}}AmmoData=[w:Needle,t:Blowgun,+:0,SM:1,L:1]{{}}RangeData=[t:Blowgun,+:0,r:1/2/3]{{}}%{MI-DB|Ammo-Info}{{subtitle=Ammo for Blowgun}}{{Speed=As per blowgun}}{{Size=Tiny}}{{Ammo=+0, vs SM:1, L:1, no bonuses}}{{Range=S:10, M:20, L:30}}{{Looks Like=A thin needle made of metal or a very hard wood which might have a groove or be hollow. One end might have a wider section to fit a blowgun barrel}}{{desc=A Blowgun needle, tiny and sharp, of good quality but otherwise ordinary - careful! Perhaps dipped in poison?}}'},
{name:'Needle+Magical',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Needle,Ammo,1H,Blowgun,Magical-Needle]{{}}%{MI-DB|Magical-Needle}'},
+ {name:'Poisoned-Light-Quarrel',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Light Quarrel}}{{subtitle=Ammo}}{{Speed=As per crossbow}}{{Size=Tiny}}Specs=[Poisoned Light Quarrel,Ammo,1H,Quarrel]{{Ammo=+0, vs SM:1d4, L:1d4}}AmmoData=[w:Poisoned Light Quarrel,t:Light Crossbow,+:0,SM:1d4,L:1d4,msg:Save vs. poison or be \\lbrakincapacitated\\rbrak\\lpar!rounds \\dash-target single|^^tid^^|\\amp#64;{target|Who\'s the victim?|token_id}|Locathah venom|2|-1|Incapacitated and prone due to venom|back-pain\\rpar for 2 rounds]{{Range=PB:30 S:60 M:120 L:180}}RangeData=[t:Light Crossbow,+:0,r:3/6/12/18]{{desc=A quarrel for a light crossbow, of good quality but otherwise ordinary}}'},
{name:'Rainbow-Sheaf-Arrow',type:'ammo',ct:'0',charge:'recharging',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Rainbow Sheaf Arrow+2}}{{subtitle=Magic Weapon}}WeapData=[qty:1]{{Speed=As per bow}}{{Size=Small}}Specs=[Rainbow-Sheaf-Arrow,Ammo,1H,Arrow]{{Ammo=+2,\n**Rainbow Bow** vs. SM:1d8, L:1d8}}AmmoData=[w:Rainbow-Sheaf Arrow+2,st:Rainbow-Bow,sb:1,+:2,SM:1d8,L:1d8,rc:recharging]{{Range=PB:30, S:50, M:100, L:170}}RangeData=[t:rainbow-bow,+:2,r:3/5/10/17]{{desc=A magical rainbow-hewed Sheaf Arrow of pure magic. See *Rainbow* spell for full details.}}'},
{name:'Sheaf-Arrow',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{title=Sheaf Arrow}}Specs=[Sheaf-Arrow,Ammo,1H,Arrow]{{}}WeapData=[qty:10+1d10]{{}}AmmoData=[w:Sheaf Arrow,st:Bow,sb:1,+:0,SM:1d8,L:1d8],[w:Warbow Sheaf Arrow,t:warbow,sb:1,+:0,SM:1d10,L:1d10]{{}}RangeData=[t:longbow,+:0,r:3/5/10/17],[t:warbow,+:0,r:3/7/12/21],[t:compositelongbow,+:0,r:3/5/10/18]{{}}%{MI-DB|Ammo-Info}{{subtitle=Ammo}}{{Speed=As per bow}}{{Size=Small}}{{Ammo=+0,\n**Warbow** vs. SM:1d10, L:1d10,\n**Other Bows** vs. SM:1d8, L:1d8, Piercing}}{{Range=PB:30, others vary by bow\n**Longbow:**\nS:50, M:100, L:170,\n**Warbow:**\nS70, M:120, L:210,\n**Composite Lbow:**\nS:70, M:100, L:180}}{{Looks Like=A heavier arrow with a steel arrowhead.}}{{hide1=Sheaf arrows, also known as war arrows, are heavier arrows with less range than flight arrows, but cause more damage. The arrowheads are steel and quite sharp. Sheaf arrows are used in warfare and can be fired only by long bows. These arrows range in length from 20 to 27 inches.}}{{desc=A Sheaf Arrow of good quality but otherwise ordinary}}'},
{name:'Sheaf-Arrow+1',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name= +1}}Specs=[Sheaf-Arrow,Ammo,1H,Arrow,Sheaf-Arrow]{{}}AmmoData=[w:Sheaf Arrow+1,+:1],[w:Warbow Sheaf Arrow+1,+:1]{{}}RangeData=[t:longbow,+:1],[t:warbow,+:1],[t:compositelongbow,+:1]{{}}%{MI-DB|Sheaf-Arrow}{{Ammo=+1,\n**Warbow** vs. SM:1d10, L:1d10,\n**Other Bows** vs. SM:1d8, L:1d8, Piercing}}{{desc=A Sheaf Arrow of exceptional quality with interesting markings on the shaft and etched into the head}}'},
@@ -2690,7 +2720,7 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
{name:'Sheaf-Arrows',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{}}Specs=[Sheaf-Arrow,Ammo,1H,Arrow,Sheaf-Arrow]{{}}%{MI-DB|Sheaf-Arrow}'},
{name:'Silver-Bullets',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Silver Bullet}}{{subtitle=Ammo}}WeapData=[qty:4+1d6]{{Speed=As per sling}}{{Size=Tiny}}Specs=[Silver Bullet,Ammo,1H,Bullet]{{Ammo=+0, vs SM:1d4+1, L:1d6+1, no bonuses}}[w:Silver Bullet,st:Sling,+:0,SM:1+1d4,L:1+1d6]{{Range=PB:30 S:40 M:80 L:160}}RangeData=[t:sling,+:0,r:3/4/8/16]{{desc=A Sling Bullet coated or made of silver of good quality but otherwise ordinary}}'},
{name:'Silver-tipped-Sheaf',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Silver-Tipped Sheaf Arrow}}{{subtitle=Ammo}}WeapData=[qty:4+1d6]{{Speed=As per bow}}{{Size=Small}}Specs=[Sheaf Arrow,Ammo,1H,Arrow]{{Ammo=+0,\n**Warbow** vs. SM:1d10, L:1d10,\n**Other Bows** vs. SM:1d8, L:1d8, Piercing}}AmmoData=[w:Silver Sheaf Arrow,st:Bow,+:0,SM:1d8,L:1d8],[w:Warbow Silver Sheaf Arrow,t:warbow,+:0,SM:1d10,L:1d10]{{Range=PB:30, others vary by bow\n**Longbow:**\nS:50, M:100, L:170,\n**Warbow:**\nS70, M:120, L:210,\n**Composite Lbow:**\nS:70, M:100, L:180}}RangeData=[t:longbow,+:0,r:3/5/10/17],[t:warbow,+:0,r:3/7/12/21],[t:compositelongbow,+:0,r:3/5/10/18]{{desc=A Sheaf Arrow of good quality with a silver tip, good against werecreatures}}'},
- {name:'Stone',type:'ammo',ct:'1',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Sling Stone}}{{subtitle=Ammo}}{{Speed=As per sling}}{{Size=Tiny}}Specs=[Stone,Ammo,1H,Bullet]{{Ammo=+0, no bonuses}}AmmoData=[w:Stone,st:Sling,+:0,SM:1+1d4,L:1+1d6]{{Range=PB:20 S:30 M:60 L:120}}RangeData=[t:sling,+:0,r:2/3/6/12]{{desc=A nicely rounded stone that can be used in a sling}}'},
+ {name:'Stone',type:'ammo',ct:'0',charge:'uncharged',cost:'0',body:'\\amp{template:'+fields.ammoTemplate+'}{{name=Sling Stone}}{{subtitle=Ammo}}{{Speed=As per sling}}{{Size=Tiny}}Specs=[Stone,Ammo,1H,Bullet]{{Ammo=+0, no bonuses}}AmmoData=[w:Stone,st:Sling,+:0,SM:1+1d4,L:1+1d6]{{Range=PB:20 S:30 M:60 L:120}}RangeData=[t:sling,+:0,r:2/3/6/12]{{desc=A nicely rounded stone that can be used in a sling}}'},
]},
MI_DB_Equipment:{bio:'Equipment Database v7.01 26/01/2025
This database holds definitions for equipment such as torches & lanterns that can be carried by creatures or found in locations and picked up.',
gmnotes:'Change Log: v7.01 26/01/2025 Updated with multiple changes for v4 RoundMaster APIs v6.07 26/12/2024 Mark items that can\'t be allocated randomly as DMitems v6.06 22/12/2024 Fixed certain entries with corrected data v6.04-5 31/03/2024 Added more standard equipment v6.03 17/03/2024 Added equipment for the Robe of Useful Items v6.02 28/02/2024 Changed from MI-DB-Light to -Equipment and added basic equipment objects v6.01 25/09/2022 Moved to RPGM Library and updated templates v5.9 14/07/2022 Removed hard-coded whisper commands on database entries as now directed to correct player(s) programmatically v5.8 06/04/2022 Force update to RPGMaster templates v5.7 01/02/2022 Added common light sources v5.6 01/01/2022 Updated to common release version v5.2 - 5.5 Skipped to even up version numbers v5.1 31/10/2021 Encoded using machine readable data to support API databases v5.0 08/10/2021 Initial creation by separating out the MI-DB into item types',
@@ -4687,17 +4717,20 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
const handouts = Object.freeze({
RPGM_Release_Notes: {name:'RPGM Release Notes',
- version:'4.000',
+ version:'4.003',
avatar:'https://s3.amazonaws.com/files.d20.io/images/257656656/ckSHhNht7v3u60CRKonRTg/thumb.png?1638050703',
bio:''
+'RPGM Release Notes v4.000'
+' '
+''
+' RPGMaster Release Notes'
- +' for version 4.0.0'
+ +' for version 4.0.3'
+' '
- +' v4.0.0 Release Notes'
- +' This is a major release, with considerable changes in the background to make the RPGMaster suite of APIs smaller and faster, while increasing utility and helpfulness. '
+ +' v4.0.3 Release Notes'
+ +' 4.0.1 was a major release, with considerable changes in the background to make the RPGMaster suite of APIs smaller and faster, while increasing utility and helpfulness. '
+ +' Shortbows Ammo Restriction'
+ +' Until recently shortbows could use any type of arrow. However, sheaf arrows should only work with longbows and longbow derivatives. Shortbows have now been restricted to only use ammo with a superType specified of \'st:shortbow\' or a type of \'t:shortbow\'. This can be specified as one of multiple ammoData datasets, thus allowing a particular type of arrow to be used on multiple bow types. However, ammo with a superType specified as \'st:bow\' will no longer be available for use with shortbows. '
+ +' Note: a bug in v4.0.1 (and possibly also previous versions) of the RPGMaster Library meant shortbows could not find any ammo at all. This has been fixed. '
+' Drag & Drop fully populated NPCs'
+' In 2023, RPGMaster introduced Drag & Drop creatures. This functionality has now been extended to add NPCs, with fully populated character sheets, rolled attributes, populated skills such as rogue skills, populated spell books and powers, all driven by user-definable NPC definitions. A new [NPC] button exists on the Drag & Drop Class & Race dialog, which presents a drop-down Roll Query listing the currently defined NPCs to select from. Other queries will request more detail, such as the level of the NPC. Creating and playing a Drag & Drop NPC is identical in process to a Drag & Drop creature. Help is provided in the CommandMaster Help handout, and the Class & Race Database Help handout. '
+' Configure Attribute Rolls'
@@ -4726,6 +4759,11 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
+' Attempted fix for listing/viewing/using items listed on character sheet that are not in any database'
+' Fixed bug in container scaling when openned or closed using Search for Items & Treasure'
+' Corrected allocation of Spell Menu action button for Drag & Drop creatures so all who have spells also have means to access them!'
+ +' Fixed parsing of API buttons with empty button names to default to hyphens'
+ +' Fixed [Convert Spells] error.'
+ +' Allow semi-colon as well as colon as a separator for targeted saving throw qualifiers'
+ +' Force characters with a character class of "creature" to use Hit Dice for Thac0 calculations, rather than class level (which can still be used for saving throws, spell casting etc)'
+ +' Fixed data error which prevented Shortbows from finding ammo - can now use Flight Arrows & Glass Arrows'
+''
+' ',
},
@@ -8385,42 +8423,26 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
if (!every) return tableIndex;
indexArray.push(tableIndex);
}
-/* if (!every) {
- tableIndex = this.sortKeys.indexOf(
- _.findKey(this[attrDef[0]].attrs, function( elem ) {
- elem = (!def || _.isUndefined(attrDef[2])) ? undefined : String(attrDef[2]);
- return (_.isUndefined(elem) ? false :
- (findVal ? (val === (String(elem.get(property)).dbName() || '-')) :
- (findRE ? String((elem.get(property)).search(val) >= 0) :
- (findArray ? (val.includes(String(elem.get(property)).dbName() || '-')) :
- false ))));
- })
- );
- } else {
-*/ let attrs = this[attrDef[0]].attrs;
- for (let i=0; i < this.sortKeys.length; i++) {
- let elem = _.has(attrs,this.sortKeys[i]) ? attrs[this.sortKeys[i]].get(property) : (def ? attrDef[2] : undefined);
-// log('tableFind: row '+i+' value = '+elem+(findVal ? ' against '+val : ''));
- if (!_.isUndefined(elem)) {
- if (findVal ? (val === (String(elem).dbName() || '-')) :
- (findRE ? (String(elem).search(val) >= 0) :
- (findArray ? (val.includes(String(elem).dbName() || '-')) :
- false ))) {
-
- indexArray.push(i);
- if (tableIndex < 0) tableIndex = i;
-// log('tableFind: found at row '+i+', every is '+every);
- if (!every) break;
- };
+ let attrs = this[attrDef[0]].attrs;
+ for (let i=0; i < this.sortKeys.length; i++) {
+ let elem = _.has(attrs,this.sortKeys[i]) ? attrs[this.sortKeys[i]].get(property) : (def ? attrDef[2] : undefined);
+ if (!_.isUndefined(elem)) {
+ if (findVal ? (val === (String(elem).dbName() || '-')) :
+ (findRE ? (String(elem).search(val) >= 0) :
+ (findArray ? (val.includes(String(elem).dbName() || '-')) :
+ false ))) {
+
+ indexArray.push(i);
+ if (tableIndex < 0) tableIndex = i;
+ if (!every) break;
};
};
-// };
+ };
if (tableIndex < 0 && ((findVal && val === '-') || (findArray && val.includes('-')))) {
tableIndex = this.sortKeys.length;
indexArray.push(tableIndex);
}
-// log('tableFind: indexArray.length = '+indexArray.length+' so returning '+(!indexArray.length ? undefined : (every ? indexArray : tableIndex)));
return !indexArray.length ? undefined : (every ? indexArray : tableIndex)
};
@@ -9007,7 +9029,8 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
.replace(/{{=/img,'{{ =')
.replace(/</img,'<')
.replace(/>/img,'>')
- .replace(/{{\s*}}/img,'');
+ .replace(/{{\s*}}/img,'')
+ .replace(/\[\]\(/img,'[-](');
var colours, colourSet;
@@ -9411,7 +9434,6 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
});
result = !fumble && (crit || result);
-// log('RPGMdefault: result = '+result+', crit = '+crit+', fumble = '+fumble);
_.each(txtObj,(t,k) => {
t = t.replace(/\/img,tableStyle);
t = t.replace(/\<\/table\>/img,endTableStyle);
@@ -9422,7 +9444,6 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
if (!isGM) {
content += (row2col[(j++)%2]+row2+ t +endRow2+endRow2col);
} else {
-// content += (row1col[(j++)%2]+rowHeader+ k +endRowHeader+rowBodyC+ t +endRowBodyC+endRow1col);
content += (row2col[(j++)%2]+row2+ '**'+k+'**: '+t +endRow2+endRow2col);
}
} else if (isLooksLike) {
@@ -10333,8 +10354,8 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
do {
do{
if (loopCount++ >= 30) {
- log('evalAttr: loop count exceeded, returning '+v);
- return v;
+ log('evalAttr: loop count exceeded, returning '+v);
+ return v;
}
while (rePar.test(v)) v = v.replace(rePar,eval).replace(/\-\-/g,'+').replace(/\+\-/g,'-');
v = v.replace(reRange,LibFunctions.calcAttr).replace(/\-\-/g,'+').replace(/\+\-/g,'-');
@@ -10433,6 +10454,7 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
val,
varRes = ( m, w, v = 'current' ) => LibFunctions.parseStr((LibFunctions.attrLookup( charCS, [fields.ItemVar[0]+item+'+'+row+'-'+w,'current'] ) || '').split('/')[v] || '');
+ attributes = String(attributes) || '';
if (charCS) while (reVars.test(attributes)) attributes = attributes.replace(reVars,varRes);
_.each( reSpecs, spec => {
if (_.isUndefined(spec) || _.isUndefined(spec.re)) return;
@@ -11170,11 +11192,11 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
if (!type) {
return Math.max(1,Math.min( parseInt(LibFunctions.attrLookup( charCS, fields.MonsterThac0 )) || 20,
- baseThac0table[0][LibFunctions.attrLookup( charCS, fields.Fighter_level ) || 0],
- baseThac0table[1][LibFunctions.attrLookup( charCS, fields.Wizard_level ) || 0],
- baseThac0table[2][LibFunctions.attrLookup( charCS, fields.Priest_level ) || 0],
- baseThac0table[3][LibFunctions.attrLookup( charCS, fields.Rogue_level ) || 0],
- baseThac0table[4][LibFunctions.attrLookup( charCS, fields.Psion_level ) || 0]
+ baseThac0table[0][(LibFunctions.attrLookup( charCS, fields.Fighter_class ).toUpperCase() === 'CREATURE') ? 0 : (LibFunctions.attrLookup( charCS, fields.Fighter_level ) || 0)],
+ baseThac0table[0][(LibFunctions.attrLookup( charCS, fields.Wizard_class ).toUpperCase() === 'CREATURE') ? 0 : (LibFunctions.attrLookup( charCS, fields.Wizard_level ) || 0)],
+ baseThac0table[0][(LibFunctions.attrLookup( charCS, fields.Priest_class ).toUpperCase() === 'CREATURE') ? 0 : (LibFunctions.attrLookup( charCS, fields.Priest_level ) || 0)],
+ baseThac0table[0][(LibFunctions.attrLookup( charCS, fields.Rogue_class ).toUpperCase() === 'CREATURE') ? 0 : (LibFunctions.attrLookup( charCS, fields.Rogue_level ) || 0)],
+ baseThac0table[0][(LibFunctions.attrLookup( charCS, fields.Psion_class ).toUpperCase() === 'CREATURE') ? 0 : (LibFunctions.attrLookup( charCS, fields.Psion_level ) || 0)]
));
} else if (!isNaN(type)) {
return parseInt(type);
@@ -11475,7 +11497,6 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
types = {par:'sav',poi:'sav',dea:'sav',rod:'sav',sta:'sav',wan:'sav',pet:'sav',pol:'sav',bre:'sav',spe:'sav',str:'atr',con:'atr',dex:'atr',int:'atr',wis:'atr',chr:'atr',pp:'th',ol:'th',rt:'th',ms:'th',hs:'th',dn:'th',cw:'th',rl:'th',ib:'th'},
reRules = /[,\[\s]rules:(.*?)[,\s\]]/i,
saveMods = [];
-// if (modsClass.toLowerCase() === 'magic') log('scanForItems: item '+item+' is magic');
_.each( dataArray, data => {
if (!data) return;
@@ -11580,7 +11601,6 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
currentArmour = LibFunctions.attrLookup( charCS, fields.Armor_trueName ) || 'No Armor',
item;
for (let itemRow = ItemNames.table[1]; !_.isUndefined(item = ItemNames.tableLookup( fields.Items_name, itemRow, false )); itemRow++) {
-// if (item == 'Ring-of-Protection+2') log('scanItemMods: item = '+item);
if (item && item.length && item != '-') {
let trueItem = ItemNames.tableLookup( fields.Items_trueName, itemRow );
let itemObj = LibFunctions.abilityLookup( fields.MagicItemDB, trueItem, charCS );
@@ -11598,9 +11618,7 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
}
}
let itemData = LibFunctions.resolveData( trueItem, fields.MagicItemDB, reNotAttackData, charCS, reValues );
-// if (item == 'Ring-of-Protection+2') log('scanItemMods: about to scan '+item+' for mods. Data is '+_.pairs(itemData.parsed));
[mods,itemMods,itemFlags,itemText] = LibFunctions.scanForMods( charCS, item, trueItem, miClass.dbName().split('|'), specsArray, itemData.raw, mods, itemMods, blanks, itemFlags, reValues, itemText );
-// if (item == 'Ring-of-Protection+2') log('scanItemMods: scanned and revealed '+_.pairs(itemText));
};
};
};
@@ -11822,8 +11840,6 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
content +=' | }}'
+ ((selected.length == 1) ? itemText : '');
};
-// log('checkThisSave: finished checking '+charCS.get('name'));
-// return;
} catch (e) {
sendCatchError('RPGM Library',null,e,'RPGM Library handleCheckSaves()');
content = '';
@@ -11847,10 +11863,8 @@ const libRPGMaster = (() => { // eslint-disable-line no-unused-vars
for (const token of selected) {
if (msg && msg.length) msg += '\n'+who;
-// if (!token || (token.get('name').dbName() === 'thorg')) continue;
msg += await checkThisSave( attkMenu, token, senderId, silent, selected );
};
-// log('checkAllSaves: finished checking all selected tokens');
if (!silent && !nomenu && (attkMenu || (args && args[1]))) {
if (!msg) msg = '&{template:'+fields.defaultTemplate+'}';
diff --git a/RPGMlibrary AD+D2e/script.json b/RPGMlibrary AD+D2e/script.json
index be4779465..3b555a4f1 100644
--- a/RPGMlibrary AD+D2e/script.json
+++ b/RPGMlibrary AD+D2e/script.json
@@ -2,8 +2,8 @@
"$schema": "https://github.com/DameryDad/roll20-api-scripts/blob/RPGMlibrary/RPGMlibrary AD+D2e/Script.json",
"name": "RPGMaster library AD+D2e",
"script": "libRPGMaster2e.js",
- "version": "4.0.2",
- "previousversions": ["1.3.00","1.3.01","1.3.02","1.3.03","1.3.04","1.4.01","1.4.02","1.4.03","1.4.04","1.4.05","1.4.06","1.4.07","1.5.01","1.5.02","1.5.03","1.5.04","1.5.05","1.5.06","2.1.0","2.2.0","2.2.1","2.2.2","2.3.0","2.3.1","2.3.2","2.3.3","2.3.4","3.0.0","3.0.1","3.0.2","3.1.3","3.2.0","3.2.1","3.3.0","3.4.0","3.5.0","3.5.1","3.5.2","4.0.1"],
+ "version": "4.0.3",
+ "previousversions": ["1.3.00","1.3.01","1.3.02","1.3.03","1.3.04","1.4.01","1.4.02","1.4.03","1.4.04","1.4.05","1.4.06","1.4.07","1.5.01","1.5.02","1.5.03","1.5.04","1.5.05","1.5.06","2.1.0","2.2.0","2.2.1","2.2.2","2.3.0","2.3.1","2.3.2","2.3.3","2.3.4","3.0.0","3.0.1","3.0.2","3.1.3","3.2.0","3.2.1","3.3.0","3.4.0","3.5.0","3.5.1","3.5.2","4.0.1","4.0.2"],
"description": "RPGMaster Library for AD&D2e provides all of the game-version-specific data and rule processing for the RPGMaster series of APIs to work with the Advanced Dungeon & Dragons 2nd Edition rule set, and with the Advanced D&D2e Character Sheet by Peter B. Other versions of the library will support other gave versions in future. In order for versions of the RPGMaster series APIs later than 1.0.0 to work (i.e. those that have version numbers with three segments) they require one of the RPGMaster Libraries to be loaded with them: which one determines which rule set and character sheet they work with. The Library does not support any API commands itself (the other RPGMaster APIs provide those), but it supports a unique set of Roll Templates, and provides API Authors with a number of callable functions that might be of use. See the RPGMaster Library Help handout that the Library creates in your campaign when initially loaded for details.\n\n[RPGMaster Documentation](https://wiki.roll20.net/RPGMaster) \n### Getting Started\n1. When all APIs in the RPGMaster suite are loaded, run `!cmd --initialise` and add the player macros created to the Macro Bar, then\n2. Select tokens and use the `Token Setup` macro bar button just created to add all relevant Action Buttons to the token(s) (plus set the tokens/Characters up in any other way provided in the menu displayed) \n3. Once steps 1 & 2 have been done, the players and DM can then use the buttons displayed at the top of the screen when their character's token is selected to perform all actions needed in normal play.",
"authors": "Richard E.",
"roll20userid": "6497708",
|