@@ -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"
- });
- }
- }
- });
-});
-
-
-