diff --git a/RolemasterUnified/sheet_RMU_v1.0.html b/RolemasterUnified/sheet_RMU_v1.0.html index 3ecbb2b7fe..d02d982d05 100644 --- a/RolemasterUnified/sheet_RMU_v1.0.html +++ b/RolemasterUnified/sheet_RMU_v1.0.html @@ -5,7 +5,7 @@ -

V2. 05/25/2020 by Diana P.

+

V2. 02/04/2021 by PantsWorth

@@ -86,6 +86,8 @@ + +
Deity: @@ -5614,13 +5616,13 @@ Auto calculate experience needed for next level (using RMSS std scale where level 1 is at 10000 xp).
-
+
- Auto populate profession skill-category bonuses for professions in the Rolemaster Standard Rules book.
Supported: Fighter, Thief, Rogue, Warrior Monk, Layman, Magician, Illusionist, Cleric, Animist, Mentalist, Lay Healer, Healer, Mystic, Sorcerer, Ranger, Paladin, Monk, Dabbler, Bard, Magent. If this box is checked and the Profession field does not match the spelling of one of the above professions, no bonuses will be populated. To clear the profession bonuses, enter the keyword: None .
+ Auto populate profession skill-category bonuses for professions in the Rolemaster Unified Rules book.
Supported: Fighter, Warrior Monk, Thief, Rogue, Laborer, Scholar, Cleric, Druid, Magician, Illusionist, Mentalist, Lay Healer, Healer, Mystic, Sorcerer, Paladin, Ranger, Monk, Bard, Magent, Dabbler, No Profession. If this box is checked and the Profession field does not match the spelling of one of the above professions, no bonuses will be populated. To clear the profession bonuses, enter the keyword: None .
@@ -5682,14 +5684,14 @@
- Coins per Pound (RMSS suggested value is 64 coins weigh 1 pound): + Coins per Pound:

-
+
Skill Progression Setup
- These Skill Rank Progressions are per the rules in the RMSS Standard Rules. + These Skill Rank Progressions are per the rules in the RMU.
@@ -7964,7 +7966,7 @@ function StatCalc(base, racial, special) { // takes skill rank and progression and returns rank bonus function GenSkillMod(rank, prog0, prog10, prog20, prog30, prog31) { let mod = 0; - // console.log('/* ----------inside GenSkillMod rank:'+rank+'------------ */'); + console.log('/* ----------inside GenSkillMod rank:'+rank+'------------ */'); if (rank == 0) { if (isNaN(prog0)) {mod=0;} else {mod = prog0;} @@ -7982,7 +7984,7 @@ function GenSkillMod(rank, prog0, prog10, prog20, prog30, prog31) { mod = Math.round(100 + ((rank - 30) * prog31)); // mod = 45 + Math.round(rank / 2); } - // console.log('/* ----------leaving GenSkillMod mod:'+mod+'------------ */'); + console.log('/* ----------leaving GenSkillMod mod:'+mod+'------------ */'); return mod; } @@ -8058,77 +8060,34 @@ on('change:realmselect change:race change:racialcalc change:inbonus change:embon function SkillChange(name) { getAttrs(['skillcalc'], function(values) { if (parseInt(values.skillcalc,10) == 1){ - // console.log('/* ----------entering SkillChange ------------ */'); + console.log('/* ----------entering SkillChange ------------ */'); let prog; prog = name.replace(/ranks/g,'prog'); let bonus = name.replace(/ranks/g,'rankbonus'); - // console.log('/* ----------SkillChange: prog:'+prog+' bonus:'+bonus+' ------------ */'); // debug + console.log('/* ----------SkillChange: prog:'+prog+' bonus:'+bonus+' ------------ */'); // debug getAttrs([prog],function(values) { - // console.log('/* ----------SkillChange: prog value:'+values[prog]+' ------------ */'); // debug - if (values[prog] == 1) { //combined - getAttrs([name, 'combprog0', 'combprog10', 'combprog20', 'combprog30', 'combprog31'], function(values) { - let update = {}; - update[bonus]=GenSkillMod(parseInt(values[name],10), parseFloat(values.combprog0),parseFloat(values.combprog10), parseFloat(values.combprog20), parseFloat(values.combprog30), parseFloat(values.combprog31)); - setAttrs(update); - }); - } else if (values[prog] == 2) { // Category - getAttrs([name, 'catprog0', 'catprog10', 'catprog20', 'catprog30', 'catprog31'], function(values) { - let update = {}; - update[bonus]=GenSkillMod(parseInt(values[name],10), parseFloat(values.catprog0),parseFloat(values.catprog10), parseFloat(values.catprog20), parseFloat(values.catprog30), parseFloat(values.catprog31)); - setAttrs(update); - }); - } else if (values[prog] == 3) { // Standard + console.log('/* ----------SkillChange: prog value:'+values[prog]+' ------------ */'); // debug + // Standard getAttrs([name, 'stdprog0', 'stdprog10', 'stdprog20', 'stdprog30', 'stdprog31'], function(values) { let update = {}; update[bonus]=GenSkillMod(parseInt(values[name],10), parseFloat(values.stdprog0),parseFloat(values.stdprog10), parseFloat(values.stdprog20), parseFloat(values.stdprog30), parseFloat(values.stdprog31)); setAttrs(update); }); - } else if (values[prog] == 4) { // Special/Spell - getAttrs([name, 'spellprog0', 'spellprog10', 'spellprog20', 'spellprog30', 'spellprog31'], function(values) { - let update = {}; - update[bonus]=GenSkillMod(parseInt(values[name],10), parseFloat(values.spellprog0),parseFloat(values.spellprog10), parseFloat(values.spellprog20), parseFloat(values.spellprog30), parseFloat(values.spellprog31)); - setAttrs(update); - }); - } else if (values[prog] == 5) { // Bodydev - getAttrs([name, 'bodydevprog0', 'bodydevprog10', 'bodydevprog20', 'bodydevprog30', 'bodydevprog31'], function(values) { - let update = {}; - update[bonus]=GenSkillMod(parseInt(values[name],10), parseFloat(values.bodydevprog0),parseFloat(values.bodydevprog10), parseFloat(values.bodydevprog20), parseFloat(values.bodydevprog30), parseFloat(values.bodydevprog31)); - setAttrs(update); - }); - } else if (values[prog] == 6) { // PPDev - getAttrs([name, 'ppdevprog0', 'ppdevprog10', 'ppdevprog20', 'ppdevprog30', 'ppdevprog31'], function(values) { - let update = {}; - update[bonus]=GenSkillMod(parseInt(values[name],10), parseFloat(values.ppdevprog0),parseFloat(values.ppdevprog10), parseFloat(values.ppdevprog20), parseFloat(values.ppdevprog30), parseFloat(values.ppdevprog31)); - setAttrs(update); - }); - } else if (values[prog] == 7) { // Custom1 - getAttrs([name, 'cust1prog0', 'cust1prog10', 'cust1prog20', 'cust1prog30', 'cust1prog31'], function(values) { - let update = {}; - update[bonus]=GenSkillMod(parseInt(values[name],10), parseFloat(values.cust1prog0),parseFloat(values.cust1prog10), parseFloat(values.cust1prog20), parseFloat(values.cust1prog30), parseFloat(values.cust1prog31)); - setAttrs(update); - }); - } else if (values[prog] == 8) { // Custom2 - getAttrs([name, 'cust2prog0', 'cust2prog10', 'cust2prog20', 'cust2prog30', 'cust2prog31'], function(values) { - let update = {}; - update[bonus]=GenSkillMod(parseInt(values[name],10), parseFloat(values.cust2prog0),parseFloat(values.cust2prog10), parseFloat(values.cust2prog20), parseFloat(values.cust2prog30), parseFloat(values.cust2prog31)); - setAttrs(update); - }); - } }); - // console.log('/* ----------exiting SkillChange ------------ */'); + console.log('/* ----------exiting SkillChange ------------ */'); } }); } // Update the dropdown stats for the skills since they got renamed and we don't want to lose data NYI -//function FixDropdownStats(name) { -// let stat = name + 'stat'; +function FixDropdownStats(name) { + let stat = name + 'stat'; let display = name + 'statdisplay'; let choice = name + 'statchoice'; let svalue = 0; let cvalue = ''; //console.log('/* ---------- stat:'+stat+'; choice:'+choice+'------------ */'); - getAttrs([stat, display, choice, 'agbonus', 'cobonus', 'mebonus', 'rebonus', 'sdbonus', 'embonus', 'inbonus', 'prbonus', 'qubonus', 'stbonus'], function(values) { + getAttrs([stat, display, choice, 'rlbonus', 'nabonus', 'agbonus', 'cobonus', 'mebonus', 'rebonus', 'sdbonus', 'embonus', 'inbonus', 'prbonus', 'qubonus', 'stbonus'], function(values) { console.log('/* ---------- stat:'+stat+' value stat:'+values[stat]+'; display:'+display+'; value display:'+values[display]+'; choice:'+choice+'; value choice:'+values[choice]+'------------ */'); if (values[stat].includes('ag')) { svalue = parseInt(values.agbonus,10); @@ -8169,6 +8128,18 @@ function SkillChange(name) { if (values.stat.includes('st')) { svalue = parseInt(values.stbonus,10); cvalue = 'st'; + } + if (values.stat.includes('rl')) { + svalue = parseInt(values.rlbonus,10); + cvalue = 'rl'; + } + if (values.stat.includes('co')) { + svalue = parseInt(values.cobonus,10); + cvalue = 'co'; + } + if (values.stat.includes('na')) { + svalue = parseInt(0); + cvalue = 'na'; } console.log ('/*------ svalue:'+svalue+'; cvalue:'+cvalue); setAttrs({ @@ -9015,114 +8986,6 @@ on('change:levelexpcalc change:level', function() { }); }); -// -//on('change:race change:racialcalc', function() { -// getAttrs(['race', 'racialnotes', 'racialcalc'], function(values) { - // console.log('/* ---------- can we set up racial bonuses?------------ */'); - // first set up a table of mods for all the racial stats. - // note you can put linespaces after any comma here, if you want to arrange it so its easily read. -// const modsbyrace = { -// 'common man': {bodydevprog0:0, bodydevprog10:6, bodydevprog20:4, bodydevprog30:2, bodydevprog31:1, agracial: 0, coracial: 0, meracial: 0, reracial: 0, sdracial: 2, emracial: 0, inracial: 0, prracial: 0, quracial: 0, stracial: 2, esssaverace: 0, chansaverace: 0, mentsaverace: 0, poisonsaverace: 0, diseasesaverace: 0, willsaverace: 0, souldepart: 12, recoverymult: 1, racetypeforstatloss: 2, exhaustmiscbonus: 0}, -// 'mixed man': {bodydevprog0:0, bodydevprog10:6, bodydevprog20:5, bodydevprog30:2, bodydevprog31:1, agracial: 0, coracial:2, meracial: 0, reracial: 0, sdracial: 2, emracial: 2, inracial: 0, prracial: 2, quracial: 0, stracial: 2, esssaverace: 0, chansaverace: 0, mentsaverace: 0, poisonsaverace: 0, diseasesaverace: 0, willsaverace: 0, souldepart: 11, recoverymult: 0.9, racetypeforstatloss: 2, exhaustmiscbonus: 0}, -// 'high man': {bodydevprog0:0, bodydevprog10:7, bodydevprog20:5, bodydevprog30:3, bodydevprog31:1, agracial: -2, coracial: 4, meracial: 0, reracial: 0, sdracial: 0, emracial: 0, inracial: 0, prracial: 4, quracial: -2, stracial: 4, esssaverace: -5, chansaverace: -5, mentsaverace: -5, poisonsaverace: 0, diseasesaverace: 0, willsaverace: 0, souldepart: 10, recoverymult: 0.75, racetypeforstatloss: 2, exhaustmiscbonus: 0}, -// 'half-elf': {bodydevprog0:0, bodydevprog10:7, bodydevprog20:5, bodydevprog30:3, bodydevprog31:1, agracial: 2, coracial: 2, meracial: 0, reracial: 0, sdracial: -3, emracial: 0, inracial: 0, prracial: 4, quracial: 4, stracial: 2, esssaverace: -5, chansaverace: -5, mentsaverace: -5, poisonsaverace: 0, diseasesaverace: 50, willsaverace: -15, souldepart: 6, recoverymult: 1.5, racetypeforstatloss: 3, exhaustmiscbonus: 0}, -// 'wood elf': {bodydevprog0:0, bodydevprog10:6, bodydevprog20:3, bodydevprog30:1, bodydevprog31:1, agracial: 4, coracial: 0, meracial: 2, reracial: 0, sdracial: -5, emracial:2, inracial: 0, prracial: 2, quracial: 2, stracial: 0, esssaverace: -5, chansaverace: -5, mentsaverace: -5, poisonsaverace: 10, diseasesaverace: 100, willsaverace: -15, souldepart: 3, recoverymult: 1.5, racetypeforstatloss: 3, exhaustmiscbonus: 0}, -// 'grey elf': {bodydevprog0:0, bodydevprog10:6, bodydevprog20:3, bodydevprog30:2, bodydevprog31:1, agracial: 2, coracial: 0, meracial: 2, reracial: 0, sdracial: -5, emracial:2, inracial: 0, prracial: 4, quracial: 4, stracial: 0, esssaverace: -5, chansaverace: -5, mentsaverace: -5, poisonsaverace: 10, diseasesaverace: 100, willsaverace: -15, souldepart: 2, recoverymult: 2, racetypeforstatloss: 4, exhaustmiscbonus: 0}, -// 'high elf': {bodydevprog0:0, bodydevprog10:7, bodydevprog20:3, bodydevprog30:2, bodydevprog31:1, agracial: 2, coracial: 0, meracial: 2, reracial: 0, sdracial: -5, emracial:2, inracial: 0, prracial: 6, quracial: 6, stracial: 0, esssaverace: -5, chansaverace: -5, mentsaverace: -5, poisonsaverace: 10, diseasesaverace: 100, willsaverace: -15, souldepart: 1, recoverymult: 3, racetypeforstatloss: 5, exhaustmiscbonus: 0}, -// 'dwarf': {bodydevprog0:0, bodydevprog10:7, bodydevprog20:4, bodydevprog30:2, bodydevprog31:1, agracial: -2, coracial: 6, meracial: 0, reracial: 0, sdracial: 2, emracial: -4, inracial: 0, prracial: -4, quracial: -2, stracial: 2, esssaverace: 40, chansaverace: 0, mentsaverace: 40, poisonsaverace: 20, diseasesaverace: 15, willsaverace: 80, souldepart: 21, recoverymult: 0.5, racetypeforstatloss: 1, exhaustmiscbonus: 0}, -// 'halfling': {bodydevprog0:0, bodydevprog10:6, bodydevprog20:2, bodydevprog30:2, bodydevprog31:1, agracial: 6, coracial: 6, meracial: 0, reracial: 0, sdracial: -4, emracial:-2, inracial: 0, prracial: -6, quracial: 4, stracial: -8, esssaverace: 40, chansaverace: 0, mentsaverace: 40, poisonsaverace: 30, diseasesaverace: 15, willsaverace: 90, souldepart: 18, recoverymult: 0.5, racetypeforstatloss: 1, exhaustmiscbonus: 0}, -// 'half-orc': {bodydevprog0:0, bodydevprog10:7, bodydevprog20:4, bodydevprog30:2, bodydevprog31:1, agracial: 0, coracial: 2, meracial: 0, reracial: 0, sdracial: 2, emracial: 0, inracial: 0, prracial: 0, quracial: 0, stracial: 2, esssaverace: 0, chansaverace: 0, mentsaverace: 0, poisonsaverace: 5, diseasesaverace: 5, willsaverace: 0, souldepart: 6, recoverymult: 0.75, racetypeforstatloss: 2, exhaustmiscbonus: 10}, -// 'common orc': {bodydevprog0:0, bodydevprog10:6, bodydevprog20:3, bodydevprog30:2, bodydevprog31:1, agracial: 0, coracial: 2, meracial: -4, reracial:-2, sdracial:-4, emracial:-2, inracial: -4, prracial:-2, quracial: 0, stracial: 2, esssaverace: 0, chansaverace: 0, mentsaverace: 0, poisonsaverace: 0, diseasesaverace: 5, willsaverace: 0, souldepart: 1, recoverymult: 0.5, racetypeforstatloss: 2, exhaustmiscbonus: 20}, -// 'greater orc': {bodydevprog0:0, bodydevprog10:7, bodydevprog20:3, bodydevprog30:2, bodydevprog31:1, agracial: 0, coracial: 4, meracial: -2, reracial:-2, sdracial:-2, emracial:-2, inracial: -2, prracial:-2, quracial: 0, stracial: 4, esssaverace: 0, chansaverace: 0, mentsaverace: 0, poisonsaverace: 5, diseasesaverace: 10, willsaverace: 0, souldepart: 1, recoverymult: 0.5, racetypeforstatloss: 2, exhaustmiscbonus: 30}, -// 'none': {bodydevprog0:0, bodydevprog10:0, bodydevprog20:0, bodydevprog30:0, bodydevprog31:0, agracial: 0, coracial: 0, meracial: 0, reracial: 0, sdracial: 0, emracial: 0, inracial: 0, prracial: 0, quracial: 0, stracial: 0, esssaverace: 0, chansaverace: 0, mentsaverace: 0, poisonsaverace: 0, diseasesaverace: 0, willsaverace: 0, souldepart: 0, recoverymult: 0, racetypeforstatloss: 0, exhaustmiscbonus: 0} -// }; - // check to make sure that it's ok to do the racial setup per the setup tab -// if (parseInt(values.racialcalc) == 1) { - //console.log('/* ---------- racial calc is 1; setup racialbonuses etc!------------ */'); -// const race = values.race.toLowerCase(); -// if (modsbyrace.hasOwnProperty(race)) { - // race exists in data set above so use it. -// const mods = modsbyrace[race]; -// setAttrs(mods); - - // Note: skill bonuses would probably be handled best in a skill worker. - // racial skill bonuses? Swimming (-50 for dwarves), Scaling(+20 Hillmen), Acrobatics(+20 Hillmen, Woodmen), Public Speaking(+20 Hillmen), Acting(+20 Hillmen), Boat Piloting(+20 Mariners), Navigation(+20 Mariners), Rope Mastery(+20 Mariners), Rowing(+20 Mariners), Sailing(+20 Mariners), Star-gazing(+20 Mariners), Weather Watching(+20 Mariners), Mounted Combat(+20 Nomads), all Outdoor-Animal skills(+20 Nomads), Trickery(+10 Wood-elves), Stalking(+10 Wood-elves), Hiding(+10 Wood-elves), Climbing(+20 Woodmen), Foraging(+10 Woodmen), bard based spell attacks (+10 Wood-elves)?, Awareness involving hearing (+10 elves)???, + DB/RR for heat and/or cold (various) - - // racial notes? (maybe but how to keep it from over-writing what's there or inserting itself again everytime??) - // The simple solution is to add racialnotes: to the race data object above, then it's be printed automatically, replacing whats there at - // no loss in performance, since its just part of a single setAttrs. - -// } -// } -// }); - //console.log('/* ---------- exiting set up racial bonuses call------------ */'); -//}); - -// -//on('change:bodydevprog0 change:bodydevprog10 change:bodydevprog20 change:bodydevprog30 change:bodydevprog31 change:racialcalc change:skillcalc', function() { -// getAttrs(['bodydevranks', 'bodydevprog0', 'bodydevprog10', 'bodydevprog20', 'bodydevprog30', 'bodydevprog31', 'racialcalc', 'skillcalc'], function(values) { - // console.log('/* ----------entering bodydevcalc; racialcalc:' + values.racialcalc + ' skillcalc:' + values.skillcalc + ' bodydevranks:' + values.bodydevranks+ '------------ */'); -// if ((parseInt(values.skillcalc,10) == 1) && (parseInt(values.racialcalc,10) == 1)) { -// setAttrs({ -// bodydevrankbonus: GenSkillMod(parseInt(values.bodydevranks,10), parseFloat(values.bodydevprog0), parseFloat(values.bodydevprog10), parseFloat(values.bodydevprog20), parseFloat(values.bodydevprog30), parseFloat(values.bodydevprog31)) -// }); -// } -// }); -//}); - -// -//on('change:realm change:ppdevranks change:ppdevprog0 change:ppdevprog10 change:ppdevprog20 change:ppdevprog30 change:ppdevprog31 change:skillcalc change:racialcalc change:inbonus change:embonus change:prbonus', function() { -// getAttrs(['ppdevranks', 'ppdevprog0', 'ppdevprog10', 'ppdevprog20', 'ppdevprog30', 'ppdevprog31', 'skillcalc', 'racialcalc'], function(values) { - // console.log('/* ------------------ppdevranks:'+parseInt(values.ppdevranks,10)+' ppdevprog0:'+parseFloat(values.ppdevprog0)+' ppdevprog10:'+parseFloat(values.ppdevprog10)+' ppdevprog20:'+parseFloat(values.ppdevprog20)+' ppdevprog30:'+parseFloat(values.ppdevprog30)+' ppdevprog31:'+parseFloat(values.ppdevprog31)+'-----------*/'); -// if ((parseInt(values.skillcalc,10) == 1)) { -// setAttrs({ -// ppdevrankbonus: GenSkillMod(parseInt(values.ppdevranks,10), parseFloat(values.ppdevprog0), parseFloat(values.ppdevprog10), parseFloat(values.ppdevprog20), parseFloat(values.ppdevprog30), parseFloat(values.ppdevprog31)) -// }); -// } -// }); -//}); - -// -on('change:profession change:professioncalc', function() { - getAttrs(['profession', 'professioncalc'], function(values) { - //console.log('/* ---------- can we set up profession bonuses?------------ */'); - // first set up a table of mods for all the profession bonuses. - const profbonusbyprofession = { - 'none': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 0, 'cat-aware-search-profbonus': 0, 'cat-aware-senses-profbonus': 0, 'bodydevcatbonus': 0, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 0, 'cat-power-manipulation-profbonus': 0, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'fighter': {'cat-armor-heavy-profbonus': 10, 'cat-armor-light-profbonus': 10, 'cat-armor-med-profbonus': 10, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 0, 'cat-aware-search-profbonus': 0, 'cat-aware-senses-profbonus': 0, 'bodydevcatbonus': 10, 'cat-combat-maneuvers-profbonus': 10, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 0, 'cat-power-manipulation-profbonus': 0, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 20, 'cat-weapon-1hedged-profbonus': 20, 'cat-weapon-2handed-profbonus': 20, 'cat-weapon-missile-profbonus': 20, 'cat-weapon-missileartillery-profbonus': 20, 'cat-weapon-polearms-profbonus': 20, 'cat-weapon-thrown-profbonus': 20}, - 'thief': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 5, 'cat-aware-percept-profbonus': 10, 'cat-aware-search-profbonus': 10, 'cat-aware-senses-profbonus': 10, 'bodydevcatbonus': 5, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 0, 'cat-power-manipulation-profbonus': 0, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 5, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 15, 'cat-subterfuge-mechanics-profbonus': 15, 'cat-subterfuge-stealth-profbonus': 15, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 10, 'cat-weapon-1hedged-profbonus': 10, 'cat-weapon-2handed-profbonus': 10, 'cat-weapon-missile-profbonus': 10, 'cat-weapon-missileartillery-profbonus': 10, 'cat-weapon-polearms-profbonus': 10, 'cat-weapon-thrown-profbonus': 10}, - 'rogue': {'cat-armor-heavy-profbonus': 5, 'cat-armor-light-profbonus': 5, 'cat-armor-med-profbonus': 5, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 5, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 5, 'cat-combat-maneuvers-profbonus': 5, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 0, 'cat-power-manipulation-profbonus': 0, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 10, 'cat-subterfuge-mechanics-profbonus': 10, 'cat-subterfuge-stealth-profbonus': 10, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 15, 'cat-weapon-1hedged-profbonus': 15, 'cat-weapon-2handed-profbonus': 15, 'cat-weapon-missile-profbonus': 15, 'cat-weapon-missileartillery-profbonus': 15, 'cat-weapon-polearms-profbonus': 15, 'cat-weapon-thrown-profbonus': 15}, - 'warrior monk': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 5, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 10, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 15, 'cat-ma-sweeps-profbonus': 15, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 0, 'cat-power-manipulation-profbonus': 0, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 15, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'layman': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 5, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 5, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 5, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 5, 'cat-outdoor-environ-profbonus': 5, 'cat-power-awareness-profbonus': 5, 'cat-power-manipulation-profbonus': 5, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 5, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 5, 'cat-tech-professional': 5, 'cat-tech-vocational-profbonus': 5, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 5, 'cat-weapon-1hedged-profbonus': 5, 'cat-weapon-2handed-profbonus': 5, 'cat-weapon-missile-profbonus': 5, 'cat-weapon-missileartillery-profbonus': 5, 'cat-weapon-polearms-profbonus': 5, 'cat-weapon-thrown-profbonus': 5}, - 'magician': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 0, 'cat-aware-search-profbonus': 0, 'cat-aware-senses-profbonus': 0, 'bodydevcatbonus': 0, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 10, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 10, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 10, 'cat-power-manipulation-profbonus': 10, 'ppdevcatbonus': 5, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 5, 'cat-sropenprofbonus': 5, 'cat-srclosedprofbonus': 5, 'cat-srotherbprofbonus': 5, 'cat-oropenprofbonus': 5, 'cat-orclosedprofbonus': 5, 'cat-orbaseprofbonus': 5, 'cat-arcopenprofbonus': 5, 'cat-arcclosedprofbonus': 5, 'cat-arcbaseprofbonus': 5, 'cat-arcotherbaseprofbonus': 5, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'illusionist': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 0, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 5, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 10, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 10, 'cat-power-manipulation-profbonus': 10, 'ppdevcatbonus': 5, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 5, 'cat-sropenprofbonus': 5, 'cat-srclosedprofbonus': 5, 'cat-srotherbprofbonus': 5, 'cat-oropenprofbonus': 5, 'cat-orclosedprofbonus': 5, 'cat-orbaseprofbonus': 5, 'cat-arcopenprofbonus': 5, 'cat-arcclosedprofbonus': 5, 'cat-arcbaseprofbonus': 5, 'cat-arcotherbaseprofbonus': 5, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'cleric': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 0, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 5, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 5, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 5, 'cat-outdoor-environ-profbonus': 5, 'cat-power-awareness-profbonus': 10, 'cat-power-manipulation-profbonus': 5, 'ppdevcatbonus': 5, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 5, 'cat-sropenprofbonus': 5, 'cat-srclosedprofbonus': 5, 'cat-srotherbprofbonus': 5, 'cat-oropenprofbonus': 5, 'cat-orclosedprofbonus': 5, 'cat-orbaseprofbonus': 5, 'cat-arcopenprofbonus': 5, 'cat-arcclosedprofbonus': 5, 'cat-arcbaseprofbonus': 5, 'cat-arcotherbaseprofbonus': 5, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 5, 'cat-weapon-1hedged-profbonus': 5, 'cat-weapon-2handed-profbonus': 5, 'cat-weapon-missile-profbonus': 5, 'cat-weapon-missileartillery-profbonus': 5, 'cat-weapon-polearms-profbonus': 5, 'cat-weapon-thrown-profbonus': 5}, - 'animist': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 0, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 5, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 20, 'cat-outdoor-environ-profbonus': 20, 'cat-power-awareness-profbonus': 5, 'cat-power-manipulation-profbonus': 5, 'ppdevcatbonus': 5, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 5, 'cat-sropenprofbonus': 5, 'cat-srclosedprofbonus': 5, 'cat-srotherbprofbonus': 5, 'cat-oropenprofbonus': 5, 'cat-orclosedprofbonus': 5, 'cat-orbaseprofbonus': 5, 'cat-arcopenprofbonus': 5, 'cat-arcclosedprofbonus': 5, 'cat-arcbaseprofbonus': 5, 'cat-arcotherbaseprofbonus': 5, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'mentalist': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 5, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 10, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 5, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 5, 'cat-power-manipulation-profbonus': 5, 'ppdevcatbonus': 5, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 5, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 5, 'cat-sropenprofbonus': 5, 'cat-srclosedprofbonus': 5, 'cat-srotherbprofbonus': 5, 'cat-oropenprofbonus': 5, 'cat-orclosedprofbonus': 5, 'cat-orbaseprofbonus': 5, 'cat-arcopenprofbonus': 5, 'cat-arcclosedprofbonus': 5, 'cat-arcbaseprofbonus': 5, 'cat-arcotherbaseprofbonus': 5, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'lay healer': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 10, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 5, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 5, 'cat-power-manipulation-profbonus': 5, 'ppdevcatbonus': 5, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 10, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 5, 'cat-sropenprofbonus': 5, 'cat-srclosedprofbonus': 5, 'cat-srotherbprofbonus': 5, 'cat-oropenprofbonus': 5, 'cat-orclosedprofbonus': 5, 'cat-orbaseprofbonus': 5, 'cat-arcopenprofbonus': 5, 'cat-arcclosedprofbonus': 5, 'cat-arcbaseprofbonus': 5, 'cat-arcotherbaseprofbonus': 5, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'healer': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 10, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 5, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 5, 'cat-power-manipulation-profbonus': 5, 'ppdevcatbonus': 5, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 10, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 5, 'cat-sropenprofbonus': 5, 'cat-srclosedprofbonus': 5, 'cat-srotherbprofbonus': 5, 'cat-oropenprofbonus': 5, 'cat-orclosedprofbonus': 5, 'cat-orbaseprofbonus': 5, 'cat-arcopenprofbonus': 5, 'cat-arcclosedprofbonus': 5, 'cat-arcbaseprofbonus': 5, 'cat-arcotherbaseprofbonus': 5, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'mystic': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 0, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 5, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 5, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 10, 'cat-power-manipulation-profbonus': 5, 'ppdevcatbonus': 5, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 5, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 5, 'cat-sropenprofbonus': 5, 'cat-srclosedprofbonus': 5, 'cat-srotherbprofbonus': 5, 'cat-oropenprofbonus': 5, 'cat-orclosedprofbonus': 5, 'cat-orbaseprofbonus': 5, 'cat-arcopenprofbonus': 5, 'cat-arcclosedprofbonus': 5, 'cat-arcbaseprofbonus': 5, 'cat-arcotherbaseprofbonus': 5, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 5, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'sorcerer': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 0, 'cat-aware-search-profbonus': 0, 'cat-aware-senses-profbonus': 0, 'bodydevcatbonus': 0, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 5, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 10, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 10, 'cat-power-manipulation-profbonus': 15, 'ppdevcatbonus': 5, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 5, 'cat-sropenprofbonus': 5, 'cat-srclosedprofbonus': 5, 'cat-srotherbprofbonus': 5, 'cat-oropenprofbonus': 5, 'cat-orclosedprofbonus': 5, 'cat-orbaseprofbonus': 5, 'cat-arcopenprofbonus': 5, 'cat-arcclosedprofbonus': 5, 'cat-arcbaseprofbonus': 5, 'cat-arcotherbaseprofbonus': 5, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'ranger': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 5, 'cat-athletic-endur-profbonus': 5, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 10, 'cat-aware-search-profbonus': 10, 'cat-aware-senses-profbonus': 10, 'bodydevcatbonus': 5, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 20, 'cat-outdoor-environ-profbonus': 20, 'cat-power-awareness-profbonus': 0, 'cat-power-manipulation-profbonus': 0, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 5, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 5, 'cat-weapon-1hedged-profbonus': 5, 'cat-weapon-2handed-profbonus': 5, 'cat-weapon-missile-profbonus': 5, 'cat-weapon-missileartillery-profbonus': 5, 'cat-weapon-polearms-profbonus': 5, 'cat-weapon-thrown-profbonus': 5}, - 'paladin': {'cat-armor-heavy-profbonus': 5, 'cat-armor-light-profbonus': 5, 'cat-armor-med-profbonus': 5, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 5, 'cat-athletic-endur-profbonus': 5, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 10, 'cat-combat-maneuvers-profbonus': 10, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 0, 'cat-power-manipulation-profbonus': 5, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 10, 'cat-weapon-1hedged-profbonus': 10, 'cat-weapon-2handed-profbonus': 10, 'cat-weapon-missile-profbonus': 10, 'cat-weapon-missileartillery-profbonus': 10, 'cat-weapon-polearms-profbonus': 10, 'cat-weapon-thrown-profbonus': 10}, - 'monk': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 5, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 5, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 10, 'cat-ma-sweeps-profbonus': 10, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 5, 'cat-power-manipulation-profbonus': 0, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 10, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 5, 'cat-subterfuge-mechanics-profbonus': 5, 'cat-subterfuge-stealth-profbonus': 5, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 5, 'cat-weapon-1hedged-profbonus': 5, 'cat-weapon-2handed-profbonus': 5, 'cat-weapon-missile-profbonus': 5, 'cat-weapon-missileartillery-profbonus': 5, 'cat-weapon-polearms-profbonus': 5, 'cat-weapon-thrown-profbonus': 5}, - 'dabbler': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 10, 'cat-aware-search-profbonus': 10, 'cat-aware-senses-profbonus': 10, 'bodydevcatbonus': 5, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 5, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 5, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 5, 'cat-power-manipulation-profbonus': 5, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 5, 'cat-subterfuge-mechanics-profbonus': 5, 'cat-subterfuge-stealth-profbonus': 5, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 5, 'cat-weapon-1hconcussion-profbonus': 5, 'cat-weapon-1hedged-profbonus': 5, 'cat-weapon-2handed-profbonus': 5, 'cat-weapon-missile-profbonus': 5, 'cat-weapon-missileartillery-profbonus': 5, 'cat-weapon-polearms-profbonus': 5, 'cat-weapon-thrown-profbonus': 5}, - 'bard': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 5, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 5, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 5, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 5, 'cat-lore-general-profbonus': 10, 'cat-lore-magical-profbonus': 10, 'cat-lore-obscure-profbonus': 10, 'cat-lore-technical-profbonus': 10, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 5, 'cat-power-manipulation-profbonus': 0, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 5, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 5, 'cat-weapon-1hedged-profbonus': 5, 'cat-weapon-2handed-profbonus': 5, 'cat-weapon-missile-profbonus': 5, 'cat-weapon-missileartillery-profbonus': 5, 'cat-weapon-polearms-profbonus': 5, 'cat-weapon-thrown-profbonus': 5}, - 'magent': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 10, 'cat-aware-search-profbonus': 10, 'cat-aware-senses-profbonus': 10, 'bodydevcatbonus': 5, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 5, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 5, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 5, 'cat-power-manipulation-profbonus': 0, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 10, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 5, 'cat-subterfuge-mechanics-profbonus': 5, 'cat-subterfuge-stealth-profbonus': 5, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 5, 'cat-weapon-1hedged-profbonus': 5, 'cat-weapon-2handed-profbonus': 5, 'cat-weapon-missile-profbonus': 5, 'cat-weapon-missileartillery-profbonus': 5, 'cat-weapon-polearms-profbonus': 5, 'cat-weapon-thrown-profbonus': 5} - }; - // check to make sure that it's ok to do the profession setup per the setup tab - if (parseInt(values.professioncalc) == 1) { - //console.log('/* ---------- profession calc is 1; setup professionbonuses etc!------------ */'); - const profession = values.profession.toLowerCase(); - if (profbonusbyprofession.hasOwnProperty(profession)) { - // profession exists in data set above so use it. - const mods = profbonusbyprofession[profession]; - setAttrs(mods); - } - } - }); - //console.log('/* ---------- exiting set up profession bonuses call------------ */'); -}); // on('sheet:opened', function() { @@ -9453,58 +9316,31 @@ categories.forEach(cat => { }); }); -// -on('change:heightunit sheet:opened', function() { - getAttrs(['heightunit'], function(values) { - const heightunit = values.heightunit.toLowerCase(); - if ( (heightunit == "in") || (heightunit == 'in.') || (heightunit == 'inches') || (heightunit == 'inch')) { - setAttrs({ 'feetinches-show': 1 }); - } else { - setAttrs({ 'feetinches-show': 0 }); - } - }); -}); - // -on('change:heightunit sheet:opened change:height change:qubonus change:weightpenalty change:bonusbasemoverate', function() { - getAttrs(['heightunit', 'height', 'qubonus', 'stbonus', 'weightpenalty', 'bonusbasemoverate'], function(values) { +on('sheet:opened change:height change:qubonus change:weightpenalty change:bonusbasemoverate', function() { + getAttrs([ 'height', 'qubonus', 'stbonus', 'weightpenalty', 'bonusbasemoverate'], function(values) { const output = {}; - const heightunit = values.heightunit.toLowerCase(); const height = int(values.height); const qubonus = int(values.qubonus); const stbonus = int(values.stbonus); const weightpenalty = int(values.weightpenalty); const bonusbasemoverate = int(values.bonusbasemoverate); - if ( (heightunit == "in") || (heightunit == 'in.') || (heightunit == 'inches') || (heightunit == 'inch')) { - //let p1 = Math.ceil((height/6)-12.5); - //let p2 = 5*p1; - //let p3 = 50 + p2 + 3*qubonus; - let basemove = (50+(5*Math.ceil((height/6)-12.5)) + 3*qubonus +bonusbasemoverate); - let movement = (50+(5*Math.ceil((height/6)-12.5)) + 3*qubonus + weightpenalty +bonusbasemoverate); + + //let basemove = (50+(5*Math.ceil((height/6)-12.5)) + 3*qubonus +bonusbasemoverate); + //let movement = (50+(5*Math.ceil((height/6)-12.5)) + 3*qubonus + weightpenalty +bonusbasemoverate); + let basemove = (20+(Math.ceil(qubonus/2))) + bonusbasemoverate); + let movement = (20+(Math.ceil(qubonus/2))) + bonusbasemoverate); output['basemoverate'] = basemove; output['currentmoverate'] = movement; - let runninghorizjump = Math.round((height-70)/2 +50 + 2*stbonus); + let runninghorizjump = 50 + bonusbasemoverate); output['runhorizjump'] = runninghorizjump; let standinghorizjump = Math.round(runninghorizjump/2); output['standhorizjump'] = standinghorizjump; - let runningvertjump = Math.round((height-70)/3 +12 +stbonus); + let runningvertjump = Math.round(runninghorizjump/5); output['runvertjump'] = runningvertjump; - let standingvertjump = Math.round(runningvertjump/3); + let standingvertjump = Math.round(runninghorizjump/10); output['standvertjump'] = standingvertjump; - //console.log('heightunit:' + heightunit + '_ height:' + height + '_ qubonus:' + qubonus + '_ stbonus:' + stbonus + '_ p1:' + p1 + '_ p2:' + p2 + '_ p3:' + p3 + '_ weightpenalty:' + weightpenalty + '_ bonusbasemoverate:' + bonusbasemoverate + '_ basemoverate:'+ basemove + '_ runninghorizjump:' + runninghorizjump + '_ standinghorizjump:' + standinghorizjump + '_ runningvertjump' + runningvertjump + '_ standingvertjump:' + standingvertjump); - } else { - let basemove = (50+(5*Math.ceil((height/6)-12.5)) +3*qubonus+ weightpenalty+bonusbasemoverate); - output['basemoverate'] = basemove; - let runninghorizjump = Math.round((height-70)/2 +50 +2*stbonus); - output['runhorizjump'] = runninghorizjump; - let standinghorizjump = Math.round(runninghorizjump/2); - output['standhorizjump'] = standinghorizjump; - let runningvertjump = Math.round((height-70)/3 +12 +stbonus); - output['runvertjump'] = runningvertjump; - let standingvertjump = Math.round(runningvertjump/3); - output['standvertjump'] = standingvertjump; - //console.log('heightunit:' + heightunit + '_ height:' + height + '_ qubonus:' + qubonus + '_ stbonus:' + stbonus + '_ weightpenalty:' + weightpenalty + '_ bonusbasemoverate:' + bonusbasemoverate + 'basemoverate:'+ basemove + '_ runninghorizjump:' + runninghorizjump + '_ standinghorizjump:' + standinghorizjump + '_ runningvertjump' + runningvertjump + '_ standingvertjump:' + standingvertjump); - } + } setAttrs(output); }); }); @@ -10405,1037 +10241,5 @@ on('change:skillcalc', function() { }); }); -// -on('sheet:opened', function() { - getAttrs(['sheetversion', 'npchitscode'], function(values) { - const output = {}; - var npchitscode = parseFloat(values.npchitscode); - if (parseFloat(values.sheetversion) < 3.13){ - if (npchitscode == .01){ //- - output['npcbasehitscode']= 0; - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 0; - output['npcstaminabonus']= '-'; - } else if (npchitscode == .02){ //A - output['npcbasehitscode']= 1; - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 1; - output['npcstaminabonus']= '-7(01); -5(02-09); -3(10-25); -2(26-30); 0(31-70); 2(71-75); 3(76-92); 5(93-99); 7(100)'; - } else if (npchitscode == .03){ //B - output['npcbasehitscode']= 2; - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 2; - output['npcstaminabonus']= '-8(01); -7(02-04); -5(05-11); -3(12-31); -2(32-35); 0(36-65); 2(66-69); 3(70-89); 5(90-96); 7(97-99); 8(100)'; - } else if (npchitscode == .04){ //C - output['npcbasehitscode']= 3; - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 3; - output['npcstaminabonus']= '-10(01); -8(02-03); -7(04-08); -5(09-23); -3(24-74); -2(75-79); 0(75-89); 2(86-89); 3(90-94); 5(95-97); 7(98-99); 8(100)'; - } else if (npchitscode == .05){ //D - output['npcbasehitscode']= 4; - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 5; - output['npcstaminabonus']= '-10(01); -8(02); -7(03-04); -5(05-09); -3(10-25); -2(26-30); 0(31-70); 2(71-75); 3(76-89); 5(90-94); 7(95-97); 8(98-99); 10(100)'; - } else if (npchitscode == 50){ //E; - output['npcbasehitscode']= 5; - output['npcexhaustmiscbonus']= 50; - output['npchitsperleveldiff']= 8; - output['npcstaminabonus']= '-10(01); -8(02); -7(03-04); -5(05-09); -3(10-24); -2(25-29); 0(30-67); 2(68-72); 3(73-87); 5(88-92); 7(93-95); 8(96-97); 10(98); 12(99); 13(100)'; - } else if (npchitscode == 100){ //F - output['npcbasehitscode']= 6; - output['npcexhaustmiscbonus']= 100; - output['npchitsperleveldiff']= 10; - output['npcstaminabonus']= '-10(01); -8(02); -7(03); -5(04-05); -3(06-10); -2(11-15); 0(16-20); 2(21-25); 3(26-72); 5(73-87); 7(88-92); 8(93-95); 10(96-97); 12(98); 13(99); 17(100)'; - } else if (npchitscode == 150){ //G - output['npcbasehitscode']= 7; - output['npcexhaustmiscbonus']= 150; - output['npchitsperleveldiff']= 12; - output['npcstaminabonus']= '-10(01); -8(02); -7(03); -5(04); -3(05-06); -2(07-11); 0(12-16); 2(17-31); 3(32-36); 5(37-71); 7(72-86); 8(87-91); 10(92-94); 12(95-96); 13(97-98); 17(99); 22(100)'; - } else if (npchitscode == 200){ //H - output['npcbasehitscode']= 8; - output['npcexhaustmiscbonus']= 200; - output['npchitsperleveldiff']= 15; - output['npcstaminabonus']= '-10(01); -8(02); -7(03); -5(04); -3(05); -2(06-07); 0(08-12); 2(13-17); 3(18-32); 5(32-37); 7(38-72); 8(73-88); 10(89-93); 12(94-96); 13(97-98); 17(99); 22(100)'; - } else { - output['npcbasehitscode']= 0; - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 0; - output['npcstaminabonus']= '-'; - } - setAttrs(output); - } - }); -}); - -// -on('change:npcbasehitscode', function() { -//console.log('------------entering npcbasehitscode change---------------'); - getAttrs(['npcbasehitscode'], function(values) { - const output = {}; - var npcbasehitscode = parseFloat(values.npcbasehitscode); - // console.log('/* ---------- npcbasehitscode: '+values.npcbasehitscode+' ------------ */'); - if (npcbasehitscode == 1){ //A - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 1; - output['npcstaminabonus']= '-7(01); -5(02-09); -3(10-25); -2(26-30); 0(31-70); 2(71-75); 3(76-92); 5(93-99); 7(100)'; - } else if (npcbasehitscode == 2){ //B - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 2; - output['npcstaminabonus']= '-8(01); -7(02-04); -5(05-11); -3(12-31); -2(32-35); 0(36-65); 2(66-69); 3(70-89); 5(90-96); 7(97-99); 8(100)'; - } else if (npcbasehitscode == 3){ //C - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 3; - output['npcstaminabonus']= '-10(01); -8(02-03); -7(04-08); -5(09-23); -3(24-74); -2(75-79); 0(75-89); 2(86-89); 3(90-94); 5(95-97); 7(98-99); 8(100)'; - } else if (npcbasehitscode == 4){ //D - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 5; - output['npcstaminabonus']= '-10(01); -8(02); -7(03-04); -5(05-09); -3(10-25); -2(26-30); 0(31-70); 2(71-75); 3(76-89); 5(90-94); 7(95-97); 8(98-99); 10(100)'; - } else if (npcbasehitscode == 5){ //E - output['npcexhaustmiscbonus']= 50; - output['npchitsperleveldiff']= 8; - output['npcstaminabonus']= '-10(01); -8(02); -7(03-04); -5(05-09); -3(10-24); -2(25-29); 0(30-67); 2(68-72); 3(73-87); 5(88-92); 7(93-95); 8(96-97); 10(98); 12(99); 13(100)'; - } else if (npcbasehitscode == 6){ //F - output['npcexhaustmiscbonus']= 100; - output['npchitsperleveldiff']= 10; - output['npcstaminabonus']= '-10(01); -8(02); -7(03); -5(04-05); -3(06-10); -2(11-15); 0(16-20); 2(21-25); 3(26-72); 5(73-87); 7(88-92); 8(93-95); 10(96-97); 12(98); 13(99); 17(100)'; - } else if (npcbasehitscode == 7){ //G - output['npcexhaustmiscbonus']= 150; - output['npchitsperleveldiff']= 12; - output['npcstaminabonus']= '-10(01); -8(02); -7(03); -5(04); -3(05-06); -2(07-11); 0(12-16); 2(17-31); 3(32-36); 5(37-71); 7(72-86); 8(87-91); 10(92-94); 12(95-96); 13(97-98); 17(99); 22(100)'; - } else if (npcbasehitscode == 8){ //H - output['npcexhaustmiscbonus']= 200; - output['npchitsperleveldiff']= 15; - output['npcstaminabonus']= '-10(01); -8(02); -7(03); -5(04); -3(05); -2(06-07); 0(08-12); 2(13-17); 3(18-32); 5(32-37); 7(38-72); 8(73-88); 10(89-93); 12(94-96); 13(97-98); 17(99); 22(100)'; - } else { - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 0; - output['npcstaminabonus']= '-'; - } - setAttrs(output); - }); -}); - -// -on('change:habitatclear', function() { - setAttrs({ - habitat1code: 0, - habitat2code: 0, - habitat3code: 0, - habitat4code: 0, - habitat5code: 0, - habitat6code: 0, - habitat7code: 0, - habitat8code: 0, - habitat9code: 0, - habitat10code: 0, - habitat11code: 0, - habitat12code: 0, - habitatclear: 0 - }); -}); - -// -on('change:spfeaturesclear', function() { - setAttrs({ - spfeatures1code: 0, - spfeatures2code: 0, - spfeatures3code: 0, - spfeatures4code: 0, - spfeatures5code: 0, - spfeatures6code: 0, - spfeatures7code: 0, - spfeatures8code: 0, - spfeatures9code: 0, - spfeatures10code: 0, - spfeatures11code: 0, - spfeatures12code: 0, - spfeaturesclear: 0 - }); -}); - -// -on('change:watersourcesclear', function() { - setAttrs({ - watersources1code: 0, - watersources2code: 0, - watersources3code: 0, - watersources4code: 0, - watersources5code: 0, - watersources6code: 0, - watersources7code: 0, - watersources8code: 0, - watersources9code: 0, - watersources10code: 0, - watersources11code: 0, - watersources12code: 0, - watersourcesclear: 0 - }); -}); - -// -on('change:terrainclear', function() { - setAttrs({ - terrain1code: 0, - terrain2code: 0, - terrain3code: 0, - terrain4code: 0, - terrain5code: 0, - terrain6code: 0, - terrainclear: 0 - }); -}); - -// -on('change:vegetationclear', function() { - setAttrs({ - vegetation1code: 0, - vegetation2code: 0, - vegetation3code: 0, - vegetation4code: 0, - vegetation5code: 0, - vegetation6code: 0, - vegetation7code: 0, - vegetation8code: 0, - vegetationclear: 0 - }); -}); - - -// -on('change:npcimportcheckbox', function(){ -//console.log('------------entering NPC Import change---------------'); - getAttrs(['npcinput','npcimportcheckbox'], function(text) { - if(text.npcimportcheckbox=='1'){ - var goodcode=true; - var error=''; - //console.log('------------checkbox is 1---------------'); - try{ - var npcinputfile=JSON.parse(text.npcinput); - }catch(err){ - goodcode=false; - } - if(goodcode){ - var attributes={}; - try{ - if(npcinputfile.category!=null) - attributes.npccategory=npcinputfile.category; - if(npcinputfile.type!=null) - attributes.type=npcinputfile.type; - if(npcinputfile.class!=null) - attributes.class=npcinputfile.class; - if(npcinputfile.level!=null) - attributes.npclevel=npcinputfile.level; - if(npcinputfile.levelcode!=null) - attributes.levelcode=npcinputfile.levelcode; - if(npcinputfile.carrycapacity!=null) - attributes.npccarrycapacity=npcinputfile.carrycapacity; - if(npcinputfile.ridingbonus!=null) - attributes.npcridingbonus=npcinputfile.ridingbonus; - if(npcinputfile.description!=null) - attributes.npcdescription=npcinputfile.description; - if(npcinputfile.lifestyle!=null) - attributes.npclifestyle=npcinputfile.lifestyle; - if(npcinputfile.combat!=null) - attributes.npccombatnotes=npcinputfile.combat; - if(npcinputfile.background!=null) - attributes.npcbackgroundnotes=npcinputfile.background; - if(npcinputfile.observations!=null) - attributes.npcobservationsnotes=npcinputfile.observations; - if(npcinputfile.notes!=null) - attributes.npcothernotes=npcinputfile.notes; - if(npcinputfile.numenc!=null) - attributes.npcnumenc=npcinputfile.numenc; - if(npcinputfile.height!=null) - attributes.npcheight=npcinputfile.height; - if(npcinputfile.offspring!=null) - attributes.npcoffspring=npcinputfile.offspring; - if(npcinputfile.treasure!=null){ - attributes.treasurecode=npcinputfile.treasure; - } - if(npcinputfile.bonusxp!=null){ - if(npcinputfile.bonusxp=='-'){ - attributes.bonusxpcode=' --(1-2)/ --(3)/ --(5)/ --(7)/ --(9)/ --(11)/ --(13)/ --(15)/ --(17)/ --(19)/ --(21+)'; - }else if(npcinputfile.bonusxp=='A'){ - attributes.bonusxpcode=' 50(1-2)/ 40(3)/ 30(5)/ 20(7)/ 10(9)/ --(11)/ --(13)/ --(15)/ --(17)/ --(19)/ --(21+)'; - }else if(npcinputfile.bonusxp=='B'){ - attributes.bonusxpcode=' 75(1-2)/ 60(3)/ 50(5)/ 40(7)/ 30(9)/ 20(11)/ 10(13)/ --(15)/ --(17)/ --(19)/ --(21+)'; - }else if(npcinputfile.bonusxp=='C'){ - attributes.bonusxpcode=' 100(1-2)/ 95(3)/ 90(5)/ 85(7)/ 80(9)/ 75(11)/ 70(13)/ 65(15)/ 60(17)/ 55(19)/ 50(21+)'; - }else if(npcinputfile.bonusxp=='D'){ - attributes.bonusxpcode=' 200(1-2)/ 190(3)/ 180(5)/ 170(7)/ 160(9)/ 150(11)/ 140(13)/ 130(15)/ 120(17)/ 110(19)/ 100(21+)'; - }else if(npcinputfile.bonusxp=='E'){ - attributes.bonusxpcode=' 400(1-2)/ 380(3)/ 360(5)/ 340(7)/ 320(9)/ 300(11)/ 280(13)/ 260(15)/ 240(17)/ 220(19)/ 210(21+)'; - }else if(npcinputfile.bonusxp=='F'){ - attributes.bonusxpcode=' 800(1-2)/ 760(3)/ 720(5)/ 680(7)/ 640(9)/ 600(11)/ 560(13)/ 520(15)/ 480(17)/ 440(19)/ 400(21+)'; - }else if(npcinputfile.bonusxp=='G'){ - attributes.bonusxpcode='1200(1-2)/ 1140(3)/ 1080(5)/ 1020(7)/ 960(9)/ 900(11)/ 840(13)/ 780(15)/ 720(17)/ 660(19)/ 600(21+)'; - }else if(npcinputfile.bonusxp=='H'){ - attributes.bonusxpcode='1600(1-2)/ 1520(3)/ 1440(5)/ 1360(7)/ 1280(9)/ 1200(11)/ 1120(13)/ 1040(15)/ 960(17)/ 880(19)/ 800(21+)'; - }else if(npcinputfile.bonusxp=='I'){ - attributes.bonusxpcode='2000(1-2)/ 1900(3)/ 1800(5)/ 1700(7)/ 1600(9)/ 1500(11)/ 1400(13)/ 1300(15)/ 1200(17)/ 1100(19)/ 1000(21+)'; - }else if(npcinputfile.bonusxp=='J'){ - attributes.bonusxpcode='3000(1-2)/ 2850(3)/ 2700(5)/ 2550(7)/ 2400(9)/ 2250(11)/ 2100(13)/ 1950(15)/ 1800(17)/ 1650(19)/ 1500(21+)'; - }else if(npcinputfile.bonusxp=='K'){ - attributes.bonusxpcode='4000(1-2)/ 3800(3)/ 3600(5)/ 3400(7)/ 3200(9)/ 3000(11)/ 2800(13)/ 2600(15)/ 2400(17)/ 2200(19)/ 2000(21+)'; - }else if(npcinputfile.bonusxp=='L'){ - attributes.bonusxpcode='5000(1-2)/ 4750(3)/ 4500(5)/ 4250(7)/ 4000(9)/ 3750(11)/ 3500(13)/ 3250(15)/ 3000(17)/ 2750(19)/ 2500(21+)'; - }else { - attributes.bonusxpcode=' --(1-2)/ --(3)/ --(5)/ --(7)/ --(9)/ --(11)/ --(13)/ --(15)/ --(17)/ --(19)/ --(21+)'; - } - } - if(npcinputfile.outlook!=null){ - if(npcinputfile.outlook=='-'){ - attributes.outlookcode='---'; - }else if(npcinputfile.outlook=='---'){ - attributes.outlookcode='---'; - }else if(npcinputfile.outlook=='Aggres'){ - attributes.outlookcode='Aggressive and will attack if provoked or hungry.'; - }else if(npcinputfile.outlook=='Agress'){ - attributes.outlookcode='Aggressive and will attack if provoked or hungry.'; - }else if(npcinputfile.outlook=='Agress.'){ - attributes.outlookcode='Aggressive and will attack if provoked or hungry.'; - }else if(npcinputfile.outlook=='Aggres.'){ - attributes.outlookcode='Aggressive and will attack if provoked or hungry.'; - }else if(npcinputfile.outlook=='Aloof'){ - attributes.outlookcode='Ignores other creatures unless interfered with or attacked.'; - }else if(npcinputfile.outlook=='Altru'){ - attributes.outlookcode='Altruistic, has an unselfish regard for the interests of others, often to the extent of risking own safety.'; - }else if(npcinputfile.outlook=='Altru.'){ - attributes.outlookcode='Altruistic, has an unselfish regard for the interests of others, often to the extent of risking own safety.'; - }else if(npcinputfile.outlook=='Belig'){ - attributes.outlookcode='Belligerent, often attacks without provocation.'; - }else if(npcinputfile.outlook=='Belig.'){ - attributes.outlookcode='Belligerent, often attacks without provocation.'; - }else if(npcinputfile.outlook=='Bellig'){ - attributes.outlookcode='Belligerent, often attacks without provocation.'; - }else if(npcinputfile.outlook=='Bellig.'){ - attributes.outlookcode='Belligerent, often attacks without provocation.'; - }else if(npcinputfile.outlook=='Berserk'){ - attributes.outlookcode='Attacks closest living creature until it is destroyed.'; - }else if(npcinputfile.outlook=='Carefree'){ - attributes.outlookcode='Does not believe danger or misfortune exists for it.'; - }else if(npcinputfile.outlook=='Cruel'){ - attributes.outlookcode='Not only hostile, but delights in death, pain, and suffering.'; - }else if(npcinputfile.outlook=='Domin'){ - attributes.outlookcode='Desires power, attempts to control or dominate other creatures.'; - }else if(npcinputfile.outlook=='Domin.'){ - attributes.outlookcode='Desires power, attempts to control or dominate other creatures.'; - }else if(npcinputfile.outlook=='Good'){ - attributes.outlookcode='Opposed to those who are evil(cruel, hostile, belligerent, etc); supportive of those who are also good.'; - }else if(npcinputfile.outlook=='Greedy'){ - attributes.outlookcode='Will attack or attempt to steal from other creatures if risk does not seem too high.'; - }else if(npcinputfile.outlook=='Hostile'){ - attributes.outlookcode='Normally attacks other creatures on sight.'; - }else if(npcinputfile.outlook=='Hungry'){ - attributes.outlookcode='If hungry, will attack anything edible; otherwise normal.'; - }else if(npcinputfile.outlook=='Inquis'){ - attributes.outlookcode='Inquisitive and curious; will approach and examine unusual situations.'; - }else if(npcinputfile.outlook=='Inquis.'){ - attributes.outlookcode='Inquisitive and curious; will approach and examine unusual situations.'; - }else if(npcinputfile.outlook=='Jumpy'){ - attributes.outlookcode='Normally bolts at any sign of other creatures.'; - }else if(npcinputfile.outlook=='Mission'){ - attributes.outlookcode='Created with a specific purpose or mission.'; - }else if(npcinputfile.outlook=='Normal'){ - attributes.outlookcode='Watches and is wary of other creatures; will sometimes attack if hungry.'; - }else if(npcinputfile.outlook=='Passive'){ - attributes.outlookcode='Ignores the presence of other creatures unless threatened.'; - }else if(npcinputfile.outlook=='Playful'){ - attributes.outlookcode='Mischievous but playful; will attempt to play with or play pranks on other creatures.'; - }else if(npcinputfile.outlook=='Protect'){ - attributes.outlookcode='Protective of a thing, place, other creature, etc.'; - }else if(npcinputfile.outlook=='Timid'){ - attributes.outlookcode='Skittish around other creatures, runs at the slightest hint of danger.'; - }else if(npcinputfile.outlook=='Varies'){ - attributes.outlookcode='Varies by individual.'; - }else if(npcinputfile.outlook=='Special'){ - attributes.outlookcode='See description.'; - }else { - attributes.outlookcode='Unknown'; - } - } - if(npcinputfile.iq!=null){ - if(npcinputfile.iq=='NO'){ - attributes.iqcode='None; Animal Instincts'; - }else if(npcinputfile.iq=='VL'){ - attributes.iqcode='Very Low; Re/Me=1-5'; - }else if(npcinputfile.iq=='LO'){ - attributes.iqcode='Low; Re/Me=3-12'; - }else if(npcinputfile.iq=='LI'){ - attributes.iqcode='Little; Re/Me=7-25'; - }else if(npcinputfile.iq=='IN'){ - attributes.iqcode='Inferior; Re/Me=13-40'; - }else if(npcinputfile.iq=='MD'){ - attributes.iqcode='Mediocre; Re/Me=23-50'; - }else if(npcinputfile.iq=='AV'){ - attributes.iqcode='Average; Re/Me=35-65'; - }else if(npcinputfile.iq=='AA'){ - attributes.iqcode='Above Average; Re/Me=50-77'; - }else if(npcinputfile.iq=='SU'){ - attributes.iqcode='Superior; Re/Me=60-86'; - }else if(npcinputfile.iq=='HI'){ - attributes.iqcode='High; Re/Me=80-98'; - }else if(npcinputfile.iq=='VH'){ - attributes.iqcode='Very High; Re/Me=94-99'; - }else if(npcinputfile.iq=='EX'){ - attributes.iqcode='Exceptional; Re/Me=100-102'; - }else if(npcinputfile.iq=='*'){ - attributes.iqcode='*'; - }else { - attributes.iqcode='Unknown'; - } - } - if(npcinputfile.habitat!=null){ - if(npcinputfile.habitat.includes('-')){ - attributes.habitat1code='1'; - }else if(npcinputfile.habitat.includes('ø')){ - attributes.habitat2code='1'; - }else if(npcinputfile.habitat.includes('(')){ - attributes.habitat3code='1'; - attributes.habitat4code='1'; - attributes.habitat5code='1'; - attributes.habitat6code='1'; - attributes.habitat7code='1'; - attributes.habitat8code='1'; - attributes.habitat9code='1'; - attributes.habitat10code='1'; - attributes.habitat11code='1'; - attributes.habitat12code='1'; - state='0'; - }else { - state='1'; - } - if(npcinputfile.habitat.includes('a')) - attributes.habitat5code=state; - if(npcinputfile.habitat.includes('c')) - attributes.habitat11code=state; - if(npcinputfile.habitat.includes('f')) - attributes.habitat12code=state; - if(npcinputfile.habitat.includes('h')) - attributes.habitat3code=state; - if(npcinputfile.habitat.includes('k')) - attributes.habitat9code=state; - if(npcinputfile.habitat.includes('m')) - attributes.habitat7code=state; - if(npcinputfile.habitat.includes('n')) - attributes.habitat4code=state; - if(npcinputfile.habitat.includes('s')) - attributes.habitat8code=state; - if(npcinputfile.habitat.includes('t')) - attributes.habitat10code=state; - if(npcinputfile.habitat.includes('w')) - attributes.habitat6code=state; - } - if(npcinputfile.specialfeatures!=null){ - if(npcinputfile.specialfeatures.includes('-')){ - attributes.spfeatures1code='1'; - }else if(npcinputfile.specialfeatures.includes('ø')){ - attributes.spfeatures2code='1'; - }else if(npcinputfile.specialfeatures.includes('(')){ - attributes.spfeatures3code='1'; - attributes.spfeatures4code='1'; - attributes.spfeatures5code='1'; - attributes.spfeatures6code='1'; - attributes.spfeatures7code='1'; - attributes.spfeatures8code='1'; - attributes.spfeatures9code='1'; - attributes.spfeatures10code='1'; - attributes.spfeatures11code='1'; - attributes.spfeatures12code='1'; - state='0'; - }else { - state='1'; - } - if(npcinputfile.specialfeatures.includes('E')) - attributes.spfeatures3code=state; - if(npcinputfile.specialfeatures.includes('K')) - attributes.spfeatures4code=state; - if(npcinputfile.specialfeatures.includes('N')) - attributes.spfeatures5code=state; - if(npcinputfile.specialfeatures.includes('V')) - attributes.spfeatures6code=state; - if(npcinputfile.specialfeatures.includes('X')) - attributes.spfeatures7code=state; - if(npcinputfile.specialfeatures.includes('Y')) - attributes.spfeatures8code=state; - if(npcinputfile.specialfeatures.includes('†')) - attributes.spfeatures9code=state; - if(npcinputfile.specialfeatures.includes('@')) - attributes.spfeatures10code=state; - if(npcinputfile.specialfeatures.includes('§')) - attributes.spfeatures11code=state; - if(npcinputfile.specialfeatures.includes('#')) - attributes.spfeatures12code=state; - } - if(npcinputfile.watersources!=null){ - if(npcinputfile.watersources.includes('-')){ - attributes.watersources1code='1'; - }else if(npcinputfile.watersources.includes('ø')){ - attributes.watersources2code='1'; - }else if(npcinputfile.watersources.includes('(')){ - attributes.watersources3code='1'; - attributes.watersources4code='1'; - attributes.watersources5code='1'; - attributes.watersources6code='1'; - attributes.watersources7code='1'; - attributes.watersources8code='1'; - attributes.watersources9code='1'; - attributes.watersources10code='1'; - attributes.watersources11code='1'; - attributes.watersources12code='1'; - state='0'; - }else { - state='1'; - } - if(npcinputfile.watersources.includes('B')) - attributes.watersources3code=state; - if(npcinputfile.watersources.includes('F')) - attributes.watersources4code=state; - if(npcinputfile.watersources.includes('G')) - attributes.watersources5code=state; - if(npcinputfile.watersources.includes('I')) - attributes.watersources6code=state; - if(npcinputfile.watersources.includes('L')) - attributes.watersources7code=state; - if(npcinputfile.watersources.includes('M')) - attributes.watersources8code=state; - if(npcinputfile.watersources.includes('O')) - attributes.watersources9code=state; - if(npcinputfile.watersources.includes('Q')) - attributes.watersources10code=state; - if(npcinputfile.watersources.includes('S')) - attributes.watersources11code=state; - if(npcinputfile.watersources.includes('Z')) - attributes.watersources12code=state; - } - if(npcinputfile.terrain!=null){ - if(npcinputfile.terrain.includes('-')){ - attributes.terrain1code='1'; - }else if(npcinputfile.terrain.includes('ø')){ - attributes.terrain2code='1'; - }else if(npcinputfile.terrain.includes('(')){ - attributes.terrain3code='1'; - attributes.terrain4code='1'; - attributes.terrain5code='1'; - attributes.terrain6code='1'; - state='0'; - }else { - state='1'; - } - if(npcinputfile.terrain.includes('A')) - attributes.terrain3code=state; - if(npcinputfile.terrain.includes('R')) - attributes.terrain4code=state; - if(npcinputfile.terrain.includes('U')) - attributes.terrain5code=state; - if(npcinputfile.terrain.includes('W')) - attributes.terrain6code=state; - } - if(npcinputfile.vegetation!=null){ - if(npcinputfile.vegetation.includes('-')){ - attributes.vegetation1code='1'; - }else if(npcinputfile.vegetation.includes('ø')){ - attributes.vegetation2code='1'; - }else if(npcinputfile.vegetation.includes('(')){ - attributes.vegetation3code='1'; - attributes.vegetation4code='1'; - attributes.vegetation5code='1'; - attributes.vegetation6code='1'; - attributes.vegetation7code='1'; - attributes.vegetation8code='1'; - state='0'; - }else { - state='1'; - } - if(npcinputfile.vegetation.includes('C')) - attributes.vegetation3code=state; - if(npcinputfile.vegetation.includes('D')) - attributes.vegetation4code=state; - if(npcinputfile.vegetation.includes('H')) - attributes.vegetation5code=state; - if(npcinputfile.vegetation.includes('J')) - attributes.vegetation6code=state; - if(npcinputfile.vegetation.includes('P')) - attributes.vegetation7code=state; - if(npcinputfile.vegetation.includes('T')) - attributes.vegetation8code=state; - } - if(npcinputfile.frequency!=null){ - if(npcinputfile.frequency=='1'){ - attributes.frequencycode='Hunting modifier=+30; Frequency Occurring=100%'; - }else if(npcinputfile.frequency=='2'){ - attributes.frequencycode='Hunting modifier=+20; Frequency Occurring=90%'; - }else if(npcinputfile.frequency=='3'){ - attributes.frequencycode='Hunting modifier=+10; Frequency Occurring=75%'; - }else if(npcinputfile.frequency=='4'){ - attributes.frequencycode='Hunting modifier=+0; Frequency Occurring=50%'; - }else if(npcinputfile.frequency=='5'){ - attributes.frequencycode='Hunting modifier=-10; Frequency Occurring=40%'; - }else if(npcinputfile.frequency=='6'){ - attributes.frequencycode='Hunting modifier=-20; Frequency Occurring=30%'; - }else if(npcinputfile.frequency=='7'){ - attributes.frequencycode='Hunting modifier=-30; Frequency Occurring=20%'; - }else if(npcinputfile.frequency=='8'){ - attributes.frequencycode='Hunting modifier=-50; Frequency Occurring=9%'; - }else if(npcinputfile.frequency=='9'){ - attributes.frequencycode='Hunting modifier=-70; Frequency Occurring=4%'; - }else { - attributes.frequencycode='Unknown'; - } - } - attributes.frequency=npcinputfile.frequency; - if(npcinputfile.size!=null) - attributes.npcsize=npcinputfile.size; - if(npcinputfile.basemove!=null) - attributes.npcbmmr=npcinputfile.basemove; - if(npcinputfile.maxpace!=null){ - if(npcinputfile.maxpace=='Walk'){ - attributes.npcmaxpace='1'; - }else if(npcinputfile.maxpace=='Jog'){ - attributes.npcmaxpace='1.5'; - }else if(npcinputfile.maxpace=='Run'){ - attributes.npcmaxpace='2'; - }else if(npcinputfile.maxpace=='Spt'){ - attributes.npcmaxpace='3'; - }else if(npcinputfile.maxpace=='FSpt'){ - attributes.npcmaxpace='4'; - }else if(npcinputfile.maxpace=='Dash'){ - attributes.npcmaxpace='5'; - }else if(npcinputfile.maxpace=='Var'){ - attributes.npcmaxpace='0 [varies]'; - }else { - attributes.npcmaxpace='Unknown'; - } - } - if(npcinputfile.mmbonus!=null) - attributes.npcmmbonus=npcinputfile.mmbonus; - if(npcinputfile.ms!=null){ - if(npcinputfile.ms=='IN'){ - attributes.npcms='-25'; - }else if(npcinputfile.ms=='CR'){ - attributes.npcms='-20'; - }else if(npcinputfile.ms=='VS'){ - attributes.npcms='-10'; - }else if(npcinputfile.ms=='SL'){ - attributes.npcms='0'; - }else if(npcinputfile.ms=='MD'){ - attributes.npcms='10'; - }else if(npcinputfile.ms=='MF'){ - attributes.npcms='20'; - }else if(npcinputfile.ms=='FA'){ - attributes.npcms='30'; - }else if(npcinputfile.ms=='VF'){ - attributes.npcms='40'; - }else if(npcinputfile.ms=='BF'){ - attributes.npcms='50'; - }else { - attributes.npcms='0.5'; - } - } - if(npcinputfile.aq!=null){ - if(npcinputfile.aq=='IN'){ - attributes.npcaq='-16'; - }else if(npcinputfile.aq=='CR'){ - attributes.npcaq='-12'; - }else if(npcinputfile.aq=='VS'){ - attributes.npcaq='-8'; - }else if(npcinputfile.aq=='SL'){ - attributes.npcaq='-4'; - }else if(npcinputfile.aq=='MD'){ - attributes.npcaq='0'; - }else if(npcinputfile.aq=='MF'){ - attributes.npcaq='4'; - }else if(npcinputfile.aq=='FA'){ - attributes.npcaq='8'; - }else if(npcinputfile.aq=='VF'){ - attributes.npcaq='12'; - }else if(npcinputfile.aq=='BF'){ - attributes.npcaq='16'; - }else { - attributes.npcaq='0.5'; - } - } - if(npcinputfile.hits!=null){ - attributes.npchitpoints=npcinputfile.hits; - attributes.npchitpoints_max=npcinputfile.hits; - } - if(npcinputfile.hitcode!=null){ - if(npcinputfile.hitcode=='A'){ - attributes.npcbasehitscode='1'; - } else if(npcinputfile.hitcode=='B'){ - attributes.npcbasehitscode='2'; - } else if(npcinputfile.hitcode=='C'){ - attributes.npcbasehitscode='3'; - } else if(npcinputfile.hitcode=='D'){ - attributes.npcbasehitscode='4'; - } else if(npcinputfile.hitcode=='E'){ - attributes.npcbasehitscode='5'; - } else if(npcinputfile.hitcode=='F'){ - attributes.npcbasehitscode='6'; - } else if(npcinputfile.hitcode=='G'){ - attributes.npcbasehitscode='7'; - } else if(npcinputfile.hitcode=='H'){ - attributes.npcbasehitscode='8'; - } else { - attributes.npcbasehitscode='0'; - } - } - if(npcinputfile.crit!=null){ - if(npcinputfile.crit=='I'){ - attributes.npccritscode1='Decrease crit severity by 1 (A mod by -20; B becomes A, etc.).'; - } else if(npcinputfile.crit=='II'){ - attributes.npccritscode1='Decrease crit severity by 2 (A mod by -50; B by -20; C becomes A, etc).'; - } else if(npcinputfile.crit=='LA'){ - attributes.npccritscode1='Use Large Creature Critical Strike Table.'; - } else if(npcinputfile.crit=='SL'){ - attributes.npccritscode1='Use Super Large Creature Critical Strike Table.'; - } else if(npcinputfile.crit=='-'){ - attributes.npccritscode1='Normal crits.'; - } else { - attributes.npccritscode1='Normal crits.'; - } - } - if(npcinputfile.critcode!=null){ - if(npcinputfile.critcode=='-'){ - attributes.npccritscode2='---'; - } else if(npcinputfile.critcode=='@'){ - attributes.npccritscode2='Stun results do not affect creature.'; - } else if(npcinputfile.critcode=='#'){ - attributes.npccritscode2='Stun results and bleeders do not affect creature.'; - } else { - attributes.npccritscode2='---'; - } - } - if(npcinputfile.at!=null) - attributes.npcat=npcinputfile.at; - if(npcinputfile.db!=null) - attributes.npcdb=npcinputfile.db; - if(npcinputfile.othercombatinformation!=null) - attributes.npcspecialdefences=npcinputfile.othercombatinformation; - // <<<<<<<<<<<<<<<<<<<<<<<<<<< Attack Parsing Stuff >>>>>>>>>>>>>>>>>>>>>>>>>>> - if(npcinputfile.attack!=null) // old attack field - attributes.npcatts=npcinputfile.attack; - if(npcinputfile.attack1name!=null) - attributes.npcattack1name=npcinputfile.attack1name; - if(npcinputfile.attack1ob!=null) - attributes.npcattack1bonus=npcinputfile.attack1ob; - if(npcinputfile.attack1perc!=null) - attributes.npcattack1percent=npcinputfile.attack1perc; - if(npcinputfile.attack1type!=null){ - if(npcinputfile.attack1type=='Melee'){ - attributes.npcattack1select='npcmelee'; - attributes.npcattack1type='[[@{npcattack1rolltype} +@{npcattack1attackcalc}]]'; - attributes.npcattack1rolltype='1d100!>@{oeuproll}cf<@{npcattack1fumble}'; - attributes.npcattack1attackcalc='@{npcattack1bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]-(100-?{% Activity used on attack|100})[% Action]'; - } else if(npcinputfile.attack1type=='Ranged'){ - attributes.npcattack1select='npcranged'; - attributes.npcattack1type='[[@{npcattack1rolltype} +@{npcattack1attackcalc}]]'; - attributes.npcattack1rolltype='1d100!>@{oeuproll}cf<@{npcattack1fumble}'; - attributes.npcattack1attackcalc='@{npcattack1bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]+?{Range Modification|0}[Range]-@{dbmisspenworn}[Missile Penalty for arm covering]-(60-?{% Activity used on attack|60})[% Action]'; - } else if(npcinputfile.attack1type=='Basic Spell'){ - attributes.npcattack1select='npcbasic'; - attributes.npcattack1type='[[@{npcattack1rolltype} +@{npcattack1attackcalc}]]'; - attributes.npcattack1rolltype='1d100cf<2cs>96'; - attributes.npcattack1attackcalc='@{npcattack1bonus}[List Ranks]+?{Special Item Bonus?|0}+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}'; - } else if(npcinputfile.attack1type=='Directed Spell'){ - attributes.npcattack1select='npcdirected'; - attributes.npcattack1type='[[@{npcattack1rolltype} +@{npcattack1attackcalc}]]'; - attributes.npcattack1rolltype='1d100!>@{oeuproll}cf<2cs=100'; - attributes.npcattack1attackcalc='@{npcattack1bonus}Att Bonus]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]'; - } else if(npcinputfile.attack1type=='Area Spell'){ - attributes.npcattack1select='npcarea'; - attributes.npcattack1type='[[@{npcattack1rolltype} +@{npcattack1attackcalc}]]'; - attributes.npcattack1rolltype='1d100cf<4cs>96'; - attributes.npcattack1attackcalc='@{npcattack1bonus}[List Ranks]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]+20*?{Center point of spell?(1=yes)|0}[Spell Center]'; - } else { - attributes.npcattack1select='none'; - } - } - if(npcinputfile.attack2name!=null) - attributes.npcattack2name=npcinputfile.attack2name; - if(npcinputfile.attack2ob!=null) - attributes.npcattack2bonus=npcinputfile.attack2ob; - if(npcinputfile.attack2perc!=null) - attributes.npcattack2percent=npcinputfile.attack2perc; - if(npcinputfile.attack2type!=null){ - if(npcinputfile.attack2type=='Melee'){ - attributes.npcattack2select='npcmelee'; - attributes.npcattack2type='[[@{npcattack2rolltype} +@{npcattack2attackcalc}]]'; - attributes.npcattack2rolltype='1d100!>@{oeuproll}cf<@{npcattack2fumble}'; - attributes.npcattack2attackcalc='@{npcattack2bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]-(100-?{% Activity used on attack|100})[% Action]'; - } else if(npcinputfile.attack2type=='Ranged'){ - attributes.npcattack2select='npcranged'; - attributes.npcattack2type='[[@{npcattack2rolltype} +@{npcattack2attackcalc}]]'; - attributes.npcattack2rolltype='1d100!>@{oeuproll}cf<@{npcattack2fumble}'; - attributes.npcattack2attackcalc='@{npcattack2bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]+?{Range Modification|0}[Range]-@{dbmisspenworn}[Missile Penalty for arm covering]-(60-?{% Activity used on attack|60})[% Action]'; - } else if(npcinputfile.attack2type=='Basic Spell'){ - attributes.npcattack2select='npcbasic'; - attributes.npcattack2type='[[@{npcattack2rolltype} +@{npcattack2attackcalc}]]'; - attributes.npcattack2rolltype='1d100cf<2cs>96'; - attributes.npcattack2attackcalc='@{npcattack2bonus}[List Ranks]+?{Special Item Bonus?|0}+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}'; - } else if(npcinputfile.attack2type=='Directed Spell'){ - attributes.npcattack2select='npcdirected'; - attributes.npcattack2type='[[@{npcattack2rolltype} +@{npcattack2attackcalc}]]'; - attributes.npcattack2rolltype='1d100!>@{oeuproll}cf<2cs=100'; - attributes.npcattack2attackcalc='@{npcattack2bonus}Att Bonus]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]'; - } else if(npcinputfile.attack2type=='Area Spell'){ - attributes.npcattack2select='npcarea'; - attributes.npcattack2type='[[@{npcattack2rolltype} +@{npcattack2attackcalc}]]'; - attributes.npcattack2rolltype='1d100cf<4cs>96'; - attributes.npcattack2attackcalc='@{npcattack2bonus}[List Ranks]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]+20*?{Center point of spell?(1=yes)|0}[Spell Center]'; - } else { - attributes.npcattack2select='none'; - } - } - if(npcinputfile.attack3name!=null) - attributes.npcattack3name=npcinputfile.attack3name; - if(npcinputfile.attack3ob!=null) - attributes.npcattack3bonus=npcinputfile.attack3ob; - if(npcinputfile.attack3perc!=null) - attributes.npcattack3percent=npcinputfile.attack3perc; - if(npcinputfile.attack3type!=null){ - if(npcinputfile.attack3type=='Melee'){ - attributes.npcattack3select='npcmelee'; - attributes.npcattack3type='[[@{npcattack3rolltype} +@{npcattack3attackcalc}]]'; - attributes.npcattack3rolltype='1d100!>@{oeuproll}cf<@{npcattack3fumble}'; - attributes.npcattack3attackcalc='@{npcattack3bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]-(100-?{% Activity used on attack|100})[% Action]'; - } else if(npcinputfile.attack3type=='Ranged'){ - attributes.npcattack3select='npcranged'; - attributes.npcattack3type='[[@{npcattack3rolltype} +@{npcattack3attackcalc}]]'; - attributes.npcattack3rolltype='1d100!>@{oeuproll}cf<@{npcattack3fumble}'; - attributes.npcattack3attackcalc='@{npcattack3bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]+?{Range Modification|0}[Range]-@{dbmisspenworn}[Missile Penalty for arm covering]-(60-?{% Activity used on attack|60})[% Action]'; - } else if(npcinputfile.attack3type=='Basic Spell'){ - attributes.npcattack3select='npcbasic'; - attributes.npcattack3type='[[@{npcattack3rolltype} +@{npcattack3attackcalc}]]'; - attributes.npcattack3rolltype='1d100cf<2cs>96'; - attributes.npcattack3attackcalc='@{npcattack3bonus}[List Ranks]+?{Special Item Bonus?|0}+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}'; - } else if(npcinputfile.attack3type=='Directed Spell'){ - attributes.npcattack3select='npcdirected'; - attributes.npcattack3type='[[@{npcattack3rolltype} +@{npcattack3attackcalc}]]'; - attributes.npcattack3rolltype='1d100!>@{oeuproll}cf<2cs=100'; - attributes.npcattack3attackcalc='@{npcattack3bonus}Att Bonus]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]'; - } else if(npcinputfile.attack3type=='Area Spell'){ - attributes.npcattack3select='npcarea'; - attributes.npcattack3type='[[@{npcattack3rolltype} +@{npcattack3attackcalc}]]'; - attributes.npcattack3rolltype='1d100cf<4cs>96'; - attributes.npcattack3attackcalc='@{npcattack3bonus}[List Ranks]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]+20*?{Center point of spell?(1=yes)|0}[Spell Center]'; - } else { - attributes.npcattack3select='none'; - } - } - if(npcinputfile.attack4name!=null) - attributes.npcattack4name=npcinputfile.attack4name; - if(npcinputfile.attack4ob!=null) - attributes.npcattack4bonus=npcinputfile.attack4ob; - if(npcinputfile.attack4perc!=null) - attributes.npcattack4percent=npcinputfile.attack4perc; - if(npcinputfile.attack4type!=null){ - if(npcinputfile.attack4type=='Melee'){ - attributes.npcattack4select='npcmelee'; - attributes.npcattack4type='[[@{npcattack4rolltype} +@{npcattack4attackcalc}]]'; - attributes.npcattack4rolltype='1d100!>@{oeuproll}cf<@{npcattack4fumble}'; - attributes.npcattack4attackcalc='@{npcattack4bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]-(100-?{% Activity used on attack|100})[% Action]'; - } else if(npcinputfile.attack4type=='Ranged'){ - attributes.npcattack4select='npcranged'; - attributes.npcattack4type='[[@{npcattack4rolltype} +@{npcattack4attackcalc}]]'; - attributes.npcattack4rolltype='1d100!>@{oeuproll}cf<@{npcattack4fumble}'; - attributes.npcattack4attackcalc='@{npcattack4bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]+?{Range Modification|0}[Range]-@{dbmisspenworn}[Missile Penalty for arm covering]-(60-?{% Activity used on attack|60})[% Action]'; - } else if(npcinputfile.attack4type=='Basic Spell'){ - attributes.npcattack4select='npcbasic'; - attributes.npcattack4type='[[@{npcattack4rolltype} +@{npcattack4attackcalc}]]'; - attributes.npcattack4rolltype='1d100cf<2cs>96'; - attributes.npcattack4attackcalc='@{npcattack4bonus}[List Ranks]+?{Special Item Bonus?|0}+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}'; - } else if(npcinputfile.attack4type=='Directed Spell'){ - attributes.npcattack4select='npcdirected'; - attributes.npcattack4type='[[@{npcattack4rolltype} +@{npcattack4attackcalc}]]'; - attributes.npcattack4rolltype='1d100!>@{oeuproll}cf<2cs=100'; - attributes.npcattack4attackcalc='@{npcattack4bonus}Att Bonus]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]'; - } else if(npcinputfile.attack4type=='Area Spell'){ - attributes.npcattack4select='npcarea'; - attributes.npcattack4type='[[@{npcattack4rolltype} +@{npcattack4attackcalc}]]'; - attributes.npcattack4rolltype='1d100cf<4cs>96'; - attributes.npcattack4attackcalc='@{npcattack4bonus}[List Ranks]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]+20*?{Center point of spell?(1=yes)|0}[Spell Center]'; - } else { - attributes.npcattack4select='none'; - } - } - if(npcinputfile.attack5name!=null) - attributes.npcattack5name=npcinputfile.attack5name; - if(npcinputfile.attack5ob!=null) - attributes.npcattack5bonus=npcinputfile.attack5ob; - if(npcinputfile.attack5perc!=null) - attributes.npcattack5percent=npcinputfile.attack5perc; - if(npcinputfile.attack5type!=null){ - if(npcinputfile.attack5type=='Melee'){ - attributes.npcattack5select='npcmelee'; - attributes.npcattack5type='[[@{npcattack5rolltype} +@{npcattack5attackcalc}]]'; - attributes.npcattack5rolltype='1d100!>@{oeuproll}cf<@{npcattack5fumble}'; - attributes.npcattack5attackcalc='@{npcattack5bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]-(100-?{% Activity used on attack|100})[% Action]'; - } else if(npcinputfile.attack5type=='Ranged'){ - attributes.npcattack5select='npcranged'; - attributes.npcattack5type='[[@{npcattack5rolltype} +@{npcattack5attackcalc}]]'; - attributes.npcattack5rolltype='1d100!>@{oeuproll}cf<@{npcattack5fumble}'; - attributes.npcattack5attackcalc='@{npcattack5bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]+?{Range Modification|0}[Range]-@{dbmisspenworn}[Missile Penalty for arm covering]-(60-?{% Activity used on attack|60})[% Action]'; - } else if(npcinputfile.attack5type=='Basic Spell'){ - attributes.npcattack5select='npcbasic'; - attributes.npcattack5type='[[@{npcattack5rolltype} +@{npcattack5attackcalc}]]'; - attributes.npcattack5rolltype='1d100cf<2cs>96'; - attributes.npcattack5attackcalc='@{npcattack5bonus}[List Ranks]+?{Special Item Bonus?|0}+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}'; - } else if(npcinputfile.attack5type=='Directed Spell'){ - attributes.npcattack5select='npcdirected'; - attributes.npcattack5type='[[@{npcattack5rolltype} +@{npcattack5attackcalc}]]'; - attributes.npcattack5rolltype='1d100!>@{oeuproll}cf<2cs=100'; - attributes.npcattack5attackcalc='@{npcattack5bonus}Att Bonus]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]'; - } else if(npcinputfile.attack5type=='Area Spell'){ - attributes.npcattack5select='npcarea'; - attributes.npcattack5type='[[@{npcattack5rolltype} +@{npcattack5attackcalc}]]'; - attributes.npcattack5rolltype='1d100cf<4cs>96'; - attributes.npcattack5attackcalc='@{npcattack5bonus}[List Ranks]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]+20*?{Center point of spell?(1=yes)|0}[Spell Center]'; - } else { - attributes.npcattack5select='none'; - } - } - if(npcinputfile.attack6name!=null) - attributes.npcattack6name=npcinputfile.attack6name; - if(npcinputfile.attack6ob!=null) - attributes.npcattack6bonus=npcinputfile.attack6ob; - if(npcinputfile.attack6perc!=null) - attributes.npcattack6percent=npcinputfile.attack6perc; - if(npcinputfile.attack6type!=null){ - if(npcinputfile.attack6type=='Melee'){ - attributes.npcattack6select='npcmelee'; - attributes.npcattack6type='[[@{npcattack6rolltype} +@{npcattack6attackcalc}]]'; - attributes.npcattack6rolltype='1d100!>@{oeuproll}cf<@{npcattack6fumble}'; - attributes.npcattack6attackcalc='@{npcattack6bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]-(100-?{% Activity used on attack|100})[% Action]'; - } else if(npcinputfile.attack6type=='Ranged'){ - attributes.npcattack6select='npcranged'; - attributes.npcattack6type='[[@{npcattack6rolltype} +@{npcattack6attackcalc}]]'; - attributes.npcattack6rolltype='1d100!>@{oeuproll}cf<@{npcattack6fumble}'; - attributes.npcattack6attackcalc='@{npcattack6bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]+?{Range Modification|0}[Range]-@{dbmisspenworn}[Missile Penalty for arm covering]-(60-?{% Activity used on attack|60})[% Action]'; - } else if(npcinputfile.attack6type=='Basic Spell'){ - attributes.npcattack6select='npcbasic'; - attributes.npcattack6type='[[@{npcattack6rolltype} +@{npcattack6attackcalc}]]'; - attributes.npcattack6rolltype='1d100cf<2cs>96'; - attributes.npcattack6attackcalc='@{npcattack6bonus}[List Ranks]+?{Special Item Bonus?|0}+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}'; - } else if(npcinputfile.attack6type=='Directed Spell'){ - attributes.npcattack6select='npcdirected'; - attributes.npcattack6type='[[@{npcattack6rolltype} +@{npcattack6attackcalc}]]'; - attributes.npcattack6rolltype='1d100!>@{oeuproll}cf<2cs=100'; - attributes.npcattack6attackcalc='@{npcattack6bonus}Att Bonus]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]'; - } else if(npcinputfile.attack6type=='Area Spell'){ - attributes.npcattack6select='npcarea'; - attributes.npcattack6type='[[@{npcattack6rolltype} +@{npcattack6attackcalc}]]'; - attributes.npcattack6rolltype='1d100cf<4cs>96'; - attributes.npcattack6attackcalc='@{npcattack6bonus}[List Ranks]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]+20*?{Center point of spell?(1=yes)|0}[Spell Center]'; - } else { - attributes.npcattack6select='none'; - } - } - if(npcinputfile.attack7name!=null) - attributes.npcattack7name=npcinputfile.attack7name; - if(npcinputfile.attack7ob!=null) - attributes.npcattack7bonus=npcinputfile.attack7ob; - if(npcinputfile.attack7perc!=null) - attributes.npcattack7percent=npcinputfile.attack7perc; - if(npcinputfile.attack7type!=null){ - if(npcinputfile.attack7type=='Melee'){ - attributes.npcattack7select='npcmelee'; - attributes.npcattack7type='[[@{npcattack7rolltype} +@{npcattack7attackcalc}]]'; - attributes.npcattack7rolltype='1d100!>@{oeuproll}cf<@{npcattack7fumble}'; - attributes.npcattack7attackcalc='@{npcattack7bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]-(100-?{% Activity used on attack|100})[% Action]'; - } else if(npcinputfile.attack7type=='Ranged'){ - attributes.npcattack7select='npcranged'; - attributes.npcattack7type='[[@{npcattack7rolltype} +@{npcattack7attackcalc}]]'; - attributes.npcattack7rolltype='1d100!>@{oeuproll}cf<@{npcattack7fumble}'; - attributes.npcattack7attackcalc='@{npcattack7bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]+?{Range Modification|0}[Range]-@{dbmisspenworn}[Missile Penalty for arm covering]-(60-?{% Activity used on attack|60})[% Action]'; - } else if(npcinputfile.attack7type=='Basic Spell'){ - attributes.npcattack7select='npcbasic'; - attributes.npcattack7type='[[@{npcattack7rolltype} +@{npcattack7attackcalc}]]'; - attributes.npcattack7rolltype='1d100cf<2cs>96'; - attributes.npcattack7attackcalc='@{npcattack7bonus}[List Ranks]+?{Special Item Bonus?|0}+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}'; - } else if(npcinputfile.attack7type=='Directed Spell'){ - attributes.npcattack7select='npcdirected'; - attributes.npcattack7type='[[@{npcattack7rolltype} +@{npcattack7attackcalc}]]'; - attributes.npcattack7rolltype='1d100!>@{oeuproll}cf<2cs=100'; - attributes.npcattack7attackcalc='@{npcattack7bonus}Att Bonus]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]'; - } else if(npcinputfile.attack7type=='Area Spell'){ - attributes.npcattack7select='npcarea'; - attributes.npcattack7type='[[@{npcattack7rolltype} +@{npcattack7attackcalc}]]'; - attributes.npcattack7rolltype='1d100cf<4cs>96'; - attributes.npcattack7attackcalc='@{npcattack7bonus}[List Ranks]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]+20*?{Center point of spell?(1=yes)|0}[Spell Center]'; - } else { - attributes.npcattack7select='none'; - } - } - if(npcinputfile.attack8name!=null) - attributes.npcattack8name=npcinputfile.attack8name; - if(npcinputfile.attack8ob!=null) - attributes.npcattack8bonus=npcinputfile.attack8ob; - if(npcinputfile.attack8perc!=null) - attributes.npcattack8percent=npcinputfile.attack8perc; - if(npcinputfile.attack8type!=null){ - if(npcinputfile.attack8type=='Melee'){ - attributes.npcattack8select='npcmelee'; - attributes.npcattack8type='[[@{npcattack8rolltype} +@{npcattack8attackcalc}]]'; - attributes.npcattack8rolltype='1d100!>@{oeuproll}cf<@{npcattack8fumble}'; - attributes.npcattack8attackcalc='@{npcattack8bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]-(100-?{% Activity used on attack|100})[% Action]'; - } else if(npcinputfile.attack8type=='Ranged'){ - attributes.npcattack8select='npcranged'; - attributes.npcattack8type='[[@{npcattack8rolltype} +@{npcattack8attackcalc}]]'; - attributes.npcattack8rolltype='1d100!>@{oeuproll}cf<@{npcattack8fumble}'; - attributes.npcattack8attackcalc='@{npcattack8bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]+?{Range Modification|0}[Range]-@{dbmisspenworn}[Missile Penalty for arm covering]-(60-?{% Activity used on attack|60})[% Action]'; - } else if(npcinputfile.attack8type=='Basic Spell'){ - attributes.npcattack8select='npcbasic'; - attributes.npcattack8type='[[@{npcattack8rolltype} +@{npcattack8attackcalc}]]'; - attributes.npcattack8rolltype='1d100cf<2cs>96'; - attributes.npcattack8attackcalc='@{npcattack8bonus}[List Ranks]+?{Special Item Bonus?|0}+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}'; - } else if(npcinputfile.attack8type=='Directed Spell'){ - attributes.npcattack8select='npcdirected'; - attributes.npcattack8type='[[@{npcattack8rolltype} +@{npcattack8attackcalc}]]'; - attributes.npcattack8rolltype='1d100!>@{oeuproll}cf<2cs=100'; - attributes.npcattack8attackcalc='@{npcattack8bonus}Att Bonus]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]'; - } else if(npcinputfile.attack8type=='Area Spell'){ - attributes.npcattack8select='npcarea'; - attributes.npcattack8type='[[@{npcattack8rolltype} +@{npcattack8attackcalc}]]'; - attributes.npcattack8rolltype='1d100cf<4cs>96'; - attributes.npcattack8attackcalc='@{npcattack8bonus}[List Ranks]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]+20*?{Center point of spell?(1=yes)|0}[Spell Center]'; - } else { - attributes.npcattack8select='none'; - } - } - - if(npcinputfile.creature!=null){ - attributes.npcname=npcinputfile.creature; - attributes.character_name=npcinputfile.creature; - } - - attributes.npcimportcheckbox='0'; - attributes.npcinput=''; - }catch(err){ - goodcode=false; - error='Error with Character Info'; - } - try{ - setAttrs(attributes); - }catch(err){ - setAttrs({ - npcinput:'Error setting Attributes', - npcimportcheckbox:'0', - warningcheckbox:'0' - }); - } - }else{ - setAttrs({ - npcinput:'Error: invalid Structure', - npcimportcheckbox:'0' //, <-- last item should not have a comma - // warningcheckbox:"0" - }); - } - } - }); -}); - - -