diff --git a/ADnD_2E_Revised/2ESheet.html b/ADnD_2E_Revised/2ESheet.html index 763d2acafd..d6057bf4dd 100644 --- a/ADnD_2E_Revised/2ESheet.html +++ b/ADnD_2E_Revised/2ESheet.html @@ -19,12 +19,12 @@
  • Added Lorloveim's Creeping Shadow from Tome of Magic
  • Added Sheet Setting to enable the rearranged Priest Spheres from the Player's Option: Spells & Magic book
  • Added Sheet Setting to enable the rearranged Wizard Schools from the Player's Option: Spells & Magic book
  • Reworked weapons autofill to support different version of weapons, to accommodate differences between the PO: Combat & Tactics and other books. @@ -22445,7 +22445,7 @@ - + @@ -22453,151 +22453,151 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -32105,1534 +32105,1786 @@ weaponProficiencies['Wood/bone armor'] = { const nonweaponProficiencies = {}; //#region Player's Handbook -nonweaponProficiencies['Agriculture'] = { +nonweaponProficiencies['Agriculture'] = []; +nonweaponProficiencies['Agriculture'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Animal Handling'] = { +nonweaponProficiencies['Animal Handling'] = []; +nonweaponProficiencies['Animal Handling'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': -1, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Animal Training'] = { +nonweaponProficiencies['Animal Training'] = []; +nonweaponProficiencies['Animal Training'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': 0, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Artistic Ability'] = { +nonweaponProficiencies['Artistic Ability'] = []; +nonweaponProficiencies['Artistic Ability'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': 0, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Blacksmithing'] = { +nonweaponProficiencies['Blacksmithing'] = []; +nonweaponProficiencies['Blacksmithing'].push({ 'slots': 1, 'abilityScore': '@{Strength}', 'modifier': 0, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Brewing'] = { +nonweaponProficiencies['Brewing'] = []; +nonweaponProficiencies['Brewing'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Carpentry'] = { +nonweaponProficiencies['Carpentry'] = []; +nonweaponProficiencies['Carpentry'].push({ 'slots': 1, 'abilityScore': '@{Strength}', 'modifier': 0, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Cobbling'] = { +nonweaponProficiencies['Cobbling'] = []; +nonweaponProficiencies['Cobbling'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': 0, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Cooking'] = { +nonweaponProficiencies['Cooking'] = []; +nonweaponProficiencies['Cooking'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Dancing'] = { +nonweaponProficiencies['Dancing'] = []; +nonweaponProficiencies['Dancing'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': 0, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Direction Sense'] = { +nonweaponProficiencies['Direction Sense'] = []; +nonweaponProficiencies['Direction Sense'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': +1, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Etiquette'] = { +nonweaponProficiencies['Etiquette'] = []; +nonweaponProficiencies['Etiquette'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': 0, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Fire-building'] = { +nonweaponProficiencies['Fire-building'] = []; +nonweaponProficiencies['Fire-building'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': -1, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Fishing'] = { +nonweaponProficiencies['Fishing'] = []; +nonweaponProficiencies['Fishing'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': -1, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Heraldry'] = { +nonweaponProficiencies['Heraldry'] = []; +nonweaponProficiencies['Heraldry'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Languages, Modern'] = { +nonweaponProficiencies['Languages, Modern'] = []; +nonweaponProficiencies['Languages, Modern'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Leatherworking'] = { +nonweaponProficiencies['Leatherworking'] = []; +nonweaponProficiencies['Leatherworking'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Mining'] = { +nonweaponProficiencies['Mining'] = []; +nonweaponProficiencies['Mining'].push({ 'slots': 2, 'abilityScore': '@{Wisdom}', 'modifier': -3, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Pottery'] = { +nonweaponProficiencies['Pottery'] = []; +nonweaponProficiencies['Pottery'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': -2, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Riding, Airborne'] = { +nonweaponProficiencies['Riding, Airborne'] = []; +nonweaponProficiencies['Riding, Airborne'].push({ 'slots': 2, 'abilityScore': '@{Wisdom}', 'modifier': -2, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Riding, Land-based'] = { +nonweaponProficiencies['Riding, Land-based'] = []; +nonweaponProficiencies['Riding, Land-based'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': +3, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Rope Use'] = { +nonweaponProficiencies['Rope Use'] = []; +nonweaponProficiencies['Rope Use'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': 0, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Seamanship'] = { +nonweaponProficiencies['Seamanship'] = []; +nonweaponProficiencies['Seamanship'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': +1, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Seamstress/Tailor'] = { +nonweaponProficiencies['Seamstress/Tailor'] = []; +nonweaponProficiencies['Seamstress/Tailor'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': -1, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Singing'] = { +nonweaponProficiencies['Singing'] = []; +nonweaponProficiencies['Singing'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': 0, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Stonemasonry'] = { +nonweaponProficiencies['Stonemasonry'] = []; +nonweaponProficiencies['Stonemasonry'].push({ 'slots': 1, 'abilityScore': '@{Strength}', 'modifier': -2, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Swimming'] = { +nonweaponProficiencies['Swimming'] = []; +nonweaponProficiencies['Swimming'].push({ 'slots': 1, 'abilityScore': '@{Strength}', 'modifier': 0, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Weather Sense'] = { +nonweaponProficiencies['Weather Sense'] = []; +nonweaponProficiencies['Weather Sense'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': -1, 'classes': '', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); -nonweaponProficiencies['Weaving'] = { +nonweaponProficiencies['Weaving'] = []; +nonweaponProficiencies['Weaving'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -1, 'classes': '', - 'book': 'PHB' -}; -nonweaponProficiencies['Ancient History'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Ancient History'] = []; +nonweaponProficiencies['Ancient History'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -1, 'classes': 'Priest/Rogue/Wizard', - 'book': 'PHB' -}; -nonweaponProficiencies['Animal Lore'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Animal Lore'] = []; +nonweaponProficiencies['Animal Lore'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Warrior', - 'book': 'PHB' -}; -nonweaponProficiencies['Appraising'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Appraising'] = []; +nonweaponProficiencies['Appraising'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Rogue', - 'book': 'PHB' -}; -nonweaponProficiencies['Armorer'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Armorer'] = []; +nonweaponProficiencies['Armorer'].push({ 'slots': 2, 'abilityScore': '@{Intelligence}', 'modifier': -2, 'classes': 'Warrior', - 'book': 'PHB' -}; -nonweaponProficiencies['Astrology'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Astrology'] = []; +nonweaponProficiencies['Astrology'].push({ 'slots': 2, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Priest/Wizard', - 'book': 'PHB' -}; -nonweaponProficiencies['Blind-fighting'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Blind-fighting'] = []; +nonweaponProficiencies['Blind-fighting'].push({ 'slots': 2, 'abilityScore': '@{NA}', 'modifier': 'NA', 'classes': 'Rogue/Warrior', - 'book': 'PHB' -}; -nonweaponProficiencies['Bowyer/Fletcher'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Bowyer/Fletcher'] = []; +nonweaponProficiencies['Bowyer/Fletcher'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': -1, 'classes': 'Warrior', - 'book': 'PHB' -}; -nonweaponProficiencies['Charioteering'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Charioteering'] = []; +nonweaponProficiencies['Charioteering'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': +2, 'classes': 'Warrior', - 'book': 'PHB' -}; -nonweaponProficiencies['Disguise'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Disguise'] = []; +nonweaponProficiencies['Disguise'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': -1, 'classes': 'Rogue', - 'book': 'PHB' -}; -nonweaponProficiencies['Endurance'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Endurance'] = []; +nonweaponProficiencies['Endurance'].push({ 'slots': 2, 'abilityScore': '@{Constitution}', 'modifier': 0, 'classes': 'Warrior', - 'book': 'PHB' -}; -nonweaponProficiencies['Engineering'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Engineering'] = []; +nonweaponProficiencies['Engineering'].push({ 'slots': 2, 'abilityScore': '@{Intelligence}', 'modifier': -3, 'classes': 'Priest/Wizard', - 'book': 'PHB' -}; -nonweaponProficiencies['Forgery'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Forgery'] = []; +nonweaponProficiencies['Forgery'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': -1, 'classes': 'Rogue', - 'book': 'PHB' -}; -nonweaponProficiencies['Gaming'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Gaming'] = []; +nonweaponProficiencies['Gaming'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': 0, 'classes': 'Rogue/Warrior', - 'book': 'PHB' -}; -nonweaponProficiencies['Gem-Cutting'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Gem-Cutting'] = []; +nonweaponProficiencies['Gem-Cutting'].push({ 'slots': 2, 'abilityScore': '@{Dexterity}', 'modifier': -2, 'classes': 'Rogue/Wizard', - 'book': 'PHB' -}; -nonweaponProficiencies['Healing'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Healing'] = []; +nonweaponProficiencies['Healing'].push({ 'slots': 2, 'abilityScore': '@{Wisdom}', 'modifier': -2, 'classes': 'Priest', - 'book': 'PHB' -}; -nonweaponProficiencies['Herbalism'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Herbalism'] = []; +nonweaponProficiencies['Herbalism'].push({ 'slots': 2, 'abilityScore': '@{Intelligence}', 'modifier': -2, 'classes': 'Priest/Wizard', - 'book': 'PHB' -}; -nonweaponProficiencies['Hunting'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Hunting'] = []; +nonweaponProficiencies['Hunting'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': -1, 'classes': 'Warrior', - 'book': 'PHB' -}; -nonweaponProficiencies['Juggling'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Juggling'] = []; +nonweaponProficiencies['Juggling'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': -1, 'classes': 'Rogue', - 'book': 'PHB' -}; -nonweaponProficiencies['Jumping'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Jumping'] = []; +nonweaponProficiencies['Jumping'].push({ 'slots': 1, 'abilityScore': '@{Strength}', 'modifier': 0, 'classes': 'Rogue', - 'book': 'PHB' -}; -nonweaponProficiencies['Languages, Ancient'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Languages, Ancient'] = []; +nonweaponProficiencies['Languages, Ancient'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Priest/Wizard', - 'book': 'PHB' -}; -nonweaponProficiencies['Local History'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Local History'] = []; +nonweaponProficiencies['Local History'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': 0, 'classes': 'Priest/Rogue', - 'book': 'PHB' -}; -nonweaponProficiencies['Mountaineering'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Mountaineering'] = []; +nonweaponProficiencies['Mountaineering'].push({ 'slots': 1, 'abilityScore': 'NA', 'modifier': 'NA', 'classes': 'Warrior', - 'book': 'PHB' -}; -nonweaponProficiencies['Musical Instrument'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Musical Instrument'] = []; +nonweaponProficiencies['Musical Instrument'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': -1, 'classes': 'Priest/Rogue', - 'book': 'PHB' -}; -nonweaponProficiencies['Navigation'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Navigation'] = []; +nonweaponProficiencies['Navigation'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -2, 'classes': 'Priest/Warrior/Wizard', - 'book': 'PHB' -}; -nonweaponProficiencies['Reading Lips'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Reading Lips'] = []; +nonweaponProficiencies['Reading Lips'].push({ 'slots': 2, 'abilityScore': '@{Intelligence}', 'modifier': -2, 'classes': 'Rogue', - 'book': 'PHB' -}; -nonweaponProficiencies['Reading/Writing'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Reading/Writing'] = []; +nonweaponProficiencies['Reading/Writing'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': +1, 'classes': 'Priest/Wizard', - 'book': 'PHB' -}; -nonweaponProficiencies['Religion'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Religion'] = []; +nonweaponProficiencies['Religion'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': 0, 'classes': 'Priest/Wizard', - 'book': 'PHB' -}; -nonweaponProficiencies['Running'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Running'] = []; +nonweaponProficiencies['Running'].push({ 'slots': 1, 'abilityScore': '@{Constitution}', 'modifier': -6, 'classes': 'Warrior', - 'book': 'PHB' -}; -nonweaponProficiencies['Set-Snares'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Set Snares'] = []; +nonweaponProficiencies['Set Snares'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': -1, 'classes': 'Rogue/Warrior', - 'book': 'PHB' -}; -nonweaponProficiencies['Spellcraft'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Spellcraft'] = []; +nonweaponProficiencies['Spellcraft'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -2, 'classes': 'Priest/Wizard', - 'book': 'PHB' -}; -nonweaponProficiencies['Survival'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Survival'] = []; +nonweaponProficiencies['Survival'].push({ 'slots': 2, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Warrior', - 'book': 'PHB' -}; -nonweaponProficiencies['Tightrope Walking'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Tightrope Walking'] = []; +nonweaponProficiencies['Tightrope Walking'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': 0, 'classes': 'Rogue', - 'book': 'PHB' -}; -nonweaponProficiencies['Tracking'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Tracking'] = []; +nonweaponProficiencies['Tracking'].push({ 'slots': 2, 'abilityScore': '@{Wisdom}', 'modifier': 0, 'classes': 'Warrior', - 'book': 'PHB' -}; -nonweaponProficiencies['Tumbling'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Tumbling'] = []; +nonweaponProficiencies['Tumbling'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': 0, 'classes': 'Rogue', - 'book': 'PHB' -}; -nonweaponProficiencies['Ventriloquism'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Ventriloquism'] = []; +nonweaponProficiencies['Ventriloquism'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -2, 'classes': 'Rogue', - 'book': 'PHB' -}; -nonweaponProficiencies['Weaponsmithing'] = { + 'book': ['PHB'] +}); +nonweaponProficiencies['Weaponsmithing'] = []; +nonweaponProficiencies['Weaponsmithing'].push({ 'slots': 3, 'abilityScore': '@{Intelligence}', 'modifier': -3, 'classes': 'Warrior', - 'book': 'PHB' -}; + 'book': ['PHB'] +}); //#endregion //#region The Complete Thief's Handbook -nonweaponProficiencies['Alertness'] = { +nonweaponProficiencies['Alertness'] = []; +nonweaponProficiencies['Alertness'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': +1, 'classes': '', - 'book': 'The Complete Thief\'s Handbook' -}; -nonweaponProficiencies['Animal Noise'] = { + 'book': ['The Complete Thief\'s Handbook','The Complete Book of Humanoids','The Complete Ranger\'s Handbook','The Complete Barbarian\'s Handbook'] +}); +nonweaponProficiencies['Animal Noise'] = []; +nonweaponProficiencies['Animal Noise'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': -1, 'classes': '', - 'book': 'The Complete Thief\'s Handbook' -}; -nonweaponProficiencies['Begging'] = { + 'book': ['The Complete Thief\'s Handbook','The Complete Book of Humanoids'] +}); +nonweaponProficiencies['Begging'] = []; +nonweaponProficiencies['Begging'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', - 'modifier': '', + 'modifier': '?{Current Locale?|Uninhabited/Wilderness,-99|Countryside,-7|Hamlet/Village,-5|Town,-0,City,0}', 'classes': '', - 'book': 'The Complete Thief\'s Handbook' -}; -nonweaponProficiencies['Boating'] = { + 'book': ['The Complete Thief\'s Handbook','The Complete Book of Humanoids'] +}); +nonweaponProficiencies['Boating'] = []; +nonweaponProficiencies['Boating'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': +1, 'classes': '', - 'book': 'The Complete Thief\'s Handbook' -}; -nonweaponProficiencies['Fast-Talking'] = { + 'book': ['The Complete Thief\'s Handbook','The Complete Ranger\'s Handbook','The Complete Barbarian\'s Handbook'] +}); +nonweaponProficiencies['Fast-Talking'] = []; +nonweaponProficiencies['Fast-Talking'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': '', 'classes': '', - 'book': 'The Complete Thief\'s Handbook' -}; -nonweaponProficiencies['Fortune Telling'] = { + 'book': ['The Complete Thief\'s Handbook','The Complete Book of Humanoids'] +}); +nonweaponProficiencies['Fortune Telling'] = []; +nonweaponProficiencies['Fortune Telling'].push({ 'slots': 2, 'abilityScore': '@{Charisma}', 'modifier': +2, 'classes': '', - 'book': 'The Complete Thief\'s Handbook' -}; -nonweaponProficiencies['Information Gathering'] = { + 'book': ['The Complete Thief\'s Handbook','The Complete Book of Humanoids'] +}); +nonweaponProficiencies['Information Gathering'] = []; +nonweaponProficiencies['Information Gathering'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': '', 'classes': '', - 'book': 'The Complete Thief\'s Handbook' -}; -nonweaponProficiencies['Intimidation'] = { + 'book': ['The Complete Thief\'s Handbook','The Complete Book of Humanoids','The Complete Ninja\'s Handbook'] +}); +nonweaponProficiencies['Intimidation'] = []; +nonweaponProficiencies['Intimidation'].push({ 'slots': 1, - 'abilityScore': '', + 'abilityScore': '?{Intimidation with?|@{Strength}|@{Charisma}}', 'modifier': '', 'classes': '', - 'book': 'The Complete Thief\'s Handbook' -}; -nonweaponProficiencies['Locksmithing'] = { + 'book': ['The Complete Thief\'s Handbook','The Complete Book of Dwarves','The Complete Book of Humanoids'] +}); +nonweaponProficiencies['Locksmithing'] = []; +nonweaponProficiencies['Locksmithing'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': 0, 'classes': '', - 'book': 'The Complete Thief\'s Handbook' -}; -nonweaponProficiencies['Looting'] = { + 'book': ['The Complete Thief\'s Handbook'] +}); +nonweaponProficiencies['Looting'] = []; +nonweaponProficiencies['Looting'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': 0, 'classes': '', - 'book': 'The Complete Thief\'s Handbook' -}; -nonweaponProficiencies['Observation'] = { + 'book': ['The Complete Thief\'s Handbook','The Complete Book of Humanoids'] +}); +nonweaponProficiencies['Observation'] = []; +nonweaponProficiencies['Observation'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': '', - 'book': 'The Complete Thief\'s Handbook' -}; -nonweaponProficiencies['Trailing'] = { + 'book': ['The Complete Thief\'s Handbook','The Complete Book of Humanoids','The Complete Ninja\'s Handbook','Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Trailing'] = []; +nonweaponProficiencies['Trailing'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': '', 'classes': '', - 'book': 'The Complete Thief\'s Handbook' -}; -nonweaponProficiencies['Voice Mimicry'] = { + 'book': ['The Complete Thief\'s Handbook'] +}); +nonweaponProficiencies['Voice Mimicry'] = []; +nonweaponProficiencies['Voice Mimicry'].push({ 'slots': 2, 'abilityScore': '@{Charisma}', 'modifier': '', 'classes': '', - 'book': 'The Complete Thief\'s Handbook' -}; + 'book': ['The Complete Thief\'s Handbook','The Complete Book of Humanoids','The Complete Ninja\'s Handbook'] +}); //#endregion //#region The Complete Book of Dwarves -nonweaponProficiencies['Appraising (Dwarf)'] = { +nonweaponProficiencies['Appraising (Dwarf)'] = []; +nonweaponProficiencies['Appraising (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': +3, 'classes': '', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Dwarf Runes'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Dwarf Runes'] = []; +nonweaponProficiencies['Dwarf Runes'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': +2, 'classes': '', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Dwarf Runes (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Dwarf Runes (Dwarf)'] = []; +nonweaponProficiencies['Dwarf Runes (Dwarf)'].push({ 'slots': 0, 'abilityScore': '@{Intelligence}', 'modifier': +2, 'classes': '', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Endurance (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Endurance (Dwarf)'] = []; +nonweaponProficiencies['Endurance (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Constitution}', 'modifier': 0, 'classes': '', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Fungi Recognition'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Fungi Recognition'] = []; +nonweaponProficiencies['Fungi Recognition'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': +3, 'classes': '', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Local Dwarf History'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Local Dwarf History'] = []; +nonweaponProficiencies['Local Dwarf History'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': +2, 'classes': '', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Navigation, Underground'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Navigation, Underground'] = []; +nonweaponProficiencies['Navigation, Underground'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': '', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Riding, Land-Based (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Riding, Land-Based (Dwarf)'] = []; +nonweaponProficiencies['Riding, Land-Based (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': -2, 'classes': '', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Sign Language'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Sign Language'] = []; +nonweaponProficiencies['Sign Language'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': +2, 'classes': '', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Signalling'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Signalling'] = []; +nonweaponProficiencies['Signalling'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': +2, 'classes': '', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Singing (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Singing (Dwarf)'] = []; +nonweaponProficiencies['Singing (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': +2, 'classes': '', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Slow Respiration'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Slow Respiration'] = []; +nonweaponProficiencies['Slow Respiration'].push({ 'slots': 1, 'abilityScore': '@{NA}', 'modifier': 'NA', 'classes': '', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Sound Analysis'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Sound Analysis'] = []; +nonweaponProficiencies['Sound Analysis'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': 0, 'classes': '', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Survival, Underground'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Survival, Underground'] = []; +nonweaponProficiencies['Survival, Underground'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': '', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Armorer (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Armorer (Dwarf)'] = []; +nonweaponProficiencies['Armorer (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Crafts', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Blacksmithing (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Blacksmithing (Dwarf)'] = []; +nonweaponProficiencies['Blacksmithing (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Strength}', 'modifier': +1, 'classes': 'Crafts', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Bowyer/Fletcher (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Bowyer/Fletcher (Dwarf)'] = []; +nonweaponProficiencies['Bowyer/Fletcher (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': 0, 'classes': 'Crafts', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Brewing (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Brewing (Dwarf)'] = []; +nonweaponProficiencies['Brewing (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': +1, 'classes': 'Crafts', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Engineering (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Engineering (Dwarf)'] = []; +nonweaponProficiencies['Engineering (Dwarf)'].push({ 'slots': 2, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Crafts', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Gem Cutting (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Gem Cutting (Dwarf)'] = []; +nonweaponProficiencies['Gem Cutting (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': 0, 'classes': 'Crafts', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Herbalism (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Herbalism (Dwarf)'] = []; +nonweaponProficiencies['Herbalism (Dwarf)'].push({ 'slots': 2, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Crafts', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Locksmithing (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Locksmithing (Dwarf)'] = []; +nonweaponProficiencies['Locksmithing (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': +1, 'classes': 'Crafts', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Mining (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Mining (Dwarf)'] = []; +nonweaponProficiencies['Mining (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': 0, 'classes': 'Crafts', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Pottery (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Pottery (Dwarf)'] = []; +nonweaponProficiencies['Pottery (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': -3, 'classes': 'Crafts', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Seamstress/Tailor (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Seamstress/Tailor (Dwarf)'] = []; +nonweaponProficiencies['Seamstress/Tailor (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': -2, 'classes': 'Crafts', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Smelting'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Smelting'] = []; +nonweaponProficiencies['Smelting'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Crafts', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Stonemasonry (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Stonemasonry (Dwarf)'] = []; +nonweaponProficiencies['Stonemasonry (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Strength}', 'modifier': 0, 'classes': 'Crafts', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Weaponsmithing (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Weaponsmithing (Dwarf)'] = []; +nonweaponProficiencies['Weaponsmithing (Dwarf)'].push({ 'slots': 2, 'abilityScore': '@{Intelligence}', 'modifier': -1, 'classes': 'Crafts', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Weaving (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Weaving (Dwarf)'] = []; +nonweaponProficiencies['Weaving (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -2, 'classes': 'Crafts', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Ancient History (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Ancient History (Dwarf)'] = []; +nonweaponProficiencies['Ancient History (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Priest', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Blind-fighting (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Blind-fighting (Dwarf)'] = []; +nonweaponProficiencies['Blind-fighting (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{NA}', 'modifier': 'NA', 'classes': 'Warrior/Thief', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Disguise (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Disguise (Dwarf)'] = []; +nonweaponProficiencies['Disguise (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': -2, 'classes': 'Thief', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Forgery (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Forgery (Dwarf)'] = []; +nonweaponProficiencies['Forgery (Dwarf)'].push({ 'slots': 2, 'abilityScore': '@{Dexterity}', 'modifier': -1, 'classes': 'Thief', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Hunting (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Hunting (Dwarf)'] = []; +nonweaponProficiencies['Hunting (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': '-2', 'classes': 'Warrior', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Juggling (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Juggling (Dwarf)'] = []; +nonweaponProficiencies['Juggling (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': -2, 'classes': 'Thief', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Lip Reading (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Lip Reading (Dwarf)'] = []; +nonweaponProficiencies['Lip Reading (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Thief', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Musical Instrument (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Musical Instrument (Dwarf)'] = []; +nonweaponProficiencies['Musical Instrument (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': -2, 'classes': 'Thief/Priest', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Pest Control'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Pest Control'] = []; +nonweaponProficiencies['Pest Control'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': 0, 'classes': 'Thief', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Survival (Hill, Mountain)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Survival (Hill, Mountain)'] = []; +nonweaponProficiencies['Survival (Hill, Mountain)'].push({ 'slots': 1, 'abilityScore': '@{NA}', 'modifier': 'NA', 'classes': 'Warrior', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Boating (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Boating (Dwarf)'] = []; +nonweaponProficiencies['Boating (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': 0, 'classes': 'Special Background', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Boatwright'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Boatwright'] = []; +nonweaponProficiencies['Boatwright'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -2, 'classes': 'Special Background', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Navigation (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Navigation (Dwarf)'] = []; +nonweaponProficiencies['Navigation (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -3, 'classes': 'Special Background', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Swimming (Dwarf)'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Swimming (Dwarf)'] = []; +nonweaponProficiencies['Swimming (Dwarf)'].push({ 'slots': 1, 'abilityScore': '@{Strength}', 'modifier': -1, 'classes': 'Special Background', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Grade or Slope in Passage'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Grade or Slope in Passage'] = []; +nonweaponProficiencies['Grade or Slope in Passage'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': +4, 'classes': '(Optional) Dwarven Detection', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['New Tunnel/Passage Construction'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['New Tunnel/Passage Construction'] = []; +nonweaponProficiencies['New Tunnel/Passage Construction'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': +4, 'classes': '(Optional) Dwarven Detection', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Sliding/Shifting Walls or Rooms'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Sliding/Shifting Walls or Rooms'] = []; +nonweaponProficiencies['Sliding/Shifting Walls or Rooms'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': +2, 'classes': '(Optional) Dwarven Detection', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Stonework Traps, Pits, and Deadfalls'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Stonework Traps, Pits, and Deadfalls'] = []; +nonweaponProficiencies['Stonework Traps, Pits, and Deadfalls'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': 0, 'classes': '(Optional) Dwarven Detection', - 'book': 'The Complete Book of Dwarves' -}; -nonweaponProficiencies['Approximate Depth Underground'] = { + 'book': ['The Complete Book of Dwarves'] +}); +nonweaponProficiencies['Approximate Depth Underground'] = []; +nonweaponProficiencies['Approximate Depth Underground'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': 0, 'classes': '(Optional) Dwarven Detection', - 'book': 'The Complete Book of Dwarves' -}; + 'book': ['The Complete Book of Dwarves'] +}); //#endregion //#region The Complete Bard's Handbook -nonweaponProficiencies['Acting'] = { +nonweaponProficiencies['Acting'] = []; +nonweaponProficiencies['Acting'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': -1, 'classes': '', - 'book': 'The Complete Bard\'s Handbook' -}; -nonweaponProficiencies['Chanting'] = { + 'book': ['The Complete Bard\'s Handbook','The Complete Book of Humanoids','The Complete Ninja\'s Handbook'] +}); +nonweaponProficiencies['Chanting'] = []; +nonweaponProficiencies['Chanting'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': +2, 'classes': '', - 'book': 'The Complete Bard\'s Handbook' -}; -nonweaponProficiencies['Craft Instrument'] = { + 'book': ['The Complete Bard\'s Handbook','The Complete Book of Humanoids'] +}); +nonweaponProficiencies['Craft Instrument'] = []; +nonweaponProficiencies['Craft Instrument'].push({ 'slots': 2, 'abilityScore': '@{Dexterity}', 'modifier': -2, 'classes': '', - 'book': 'The Complete Bard\'s Handbook' -}; -nonweaponProficiencies['Crowd Working'] = { + 'book': ['The Complete Bard\'s Handbook','The Complete Book of Humanoids'] +}); +nonweaponProficiencies['Crowd Working'] = []; +nonweaponProficiencies['Crowd Working'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': 0, 'classes': '', - 'book': 'The Complete Bard\'s Handbook' -}; -nonweaponProficiencies['Poetry'] = { + 'book': ['The Complete Bard\'s Handbook'] +}); +nonweaponProficiencies['Poetry'] = []; +nonweaponProficiencies['Poetry'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -2, 'classes': '', - 'book': 'The Complete Bard\'s Handbook' -}; -nonweaponProficiencies['Whistling/Humming'] = { + 'book': ['The Complete Bard\'s Handbook','The Complete Book of Humanoids','The Complete Paladin\'s Handbook'] +}); +nonweaponProficiencies['Whistling/Humming'] = []; +nonweaponProficiencies['Whistling/Humming'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': +2, 'classes': '', - 'book': 'The Complete Bard\'s Handbook' -}; + 'book': ['The Complete Bard\'s Handbook','The Complete Book of Humanoids'] +}); //#endregion //#region The Complete Book of Humanoids -nonweaponProficiencies['Cheesemaking'] = { +nonweaponProficiencies['Cheesemaking'] = []; +nonweaponProficiencies['Cheesemaking'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': '', - 'book': 'The Complete Book of Humanoids' -}; -nonweaponProficiencies['Danger Sense'] = { + 'book': ['The Complete Book of Humanoids'] +}); +nonweaponProficiencies['Danger Sense'] = []; +nonweaponProficiencies['Danger Sense'].push({ 'slots': 2, 'abilityScore': '@{Wisdom}', 'modifier': +1, 'classes': '', - 'book': 'The Complete Book of Humanoids' -}; -nonweaponProficiencies['Drinking'] = { + 'book': ['The Complete Book of Humanoids','The Complete Barbarian\'s Handbook'] +}); +nonweaponProficiencies['Drinking'] = []; +nonweaponProficiencies['Drinking'].push({ 'slots': 1, 'abilityScore': '@{Constitution}', 'modifier': 0, 'classes': '', - 'book': 'The Complete Book of Humanoids' -}; -nonweaponProficiencies['Eating'] = { + 'book': ['The Complete Book of Humanoids'] +}); +nonweaponProficiencies['Eating'] = []; +nonweaponProficiencies['Eating'].push({ 'slots': 1, 'abilityScore': '@{Constitution}', 'modifier': 0, 'classes': '', - 'book': 'The Complete Book of Humanoids' -}; -nonweaponProficiencies['Hiding'] = { + 'book': ['The Complete Book of Humanoids'] +}); +nonweaponProficiencies['Hiding'] = []; +nonweaponProficiencies['Hiding'].push({ 'slots': 2, 'abilityScore': '@{Intelligence}', 'modifier': -1, 'classes': '', - 'book': 'The Complete Book of Humanoids' -}; -nonweaponProficiencies['Winemaking'] = { + 'book': ['The Complete Book of Humanoids','The Complete Barbarian\'s Handbook'] +}); +nonweaponProficiencies['Winemaking'] = []; +nonweaponProficiencies['Winemaking'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': '', - 'book': 'The Complete Book of Humanoids' -}; -nonweaponProficiencies['Close-quarter Fighting'] = { + 'book': ['The Complete Book of Humanoids'] +}); +nonweaponProficiencies['Close-quarter Fighting'] = []; +nonweaponProficiencies['Close-quarter Fighting'].push({ 'slots': 2, 'abilityScore': '@{Dexterity}', 'modifier': 0, 'classes': 'Warrior/Rogue', - 'book': 'The Complete Book of Humanoids' -}; -nonweaponProficiencies['Natural Fighting'] = { + 'book': ['The Complete Book of Humanoids'] +}); +nonweaponProficiencies['Natural Fighting'] = []; +nonweaponProficiencies['Natural Fighting'].push({ 'slots': 2, 'abilityScore': '@{Strength}', 'modifier': +1, 'classes': 'Warrior', - 'book': 'The Complete Book of Humanoids' -}; -nonweaponProficiencies['Wild Fighting'] = { + 'book': ['The Complete Book of Humanoids'] +}); +nonweaponProficiencies['Wild Fighting'] = []; +nonweaponProficiencies['Wild Fighting'].push({ 'slots': 2, 'abilityScore': '@{Constitution}', 'modifier': 0, 'classes': 'Warrior', - 'book': 'The Complete Book of Humanoids' -}; + 'book': ['The Complete Book of Humanoids','The Complete Barbarian\'s Handbook'] +}); //#endregion //#region The Complete Ranger's Handbook -nonweaponProficiencies['Cartography'] = { +nonweaponProficiencies['Cartography'] = []; +nonweaponProficiencies['Cartography'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': 0, 'classes': '', - 'book': 'The Complete Ranger\'s Handbook' -}; -nonweaponProficiencies['Distance Sense'] = { + 'book': ['The Complete Ranger\'s Handbook'] +}); +nonweaponProficiencies['Distance Sense'] = []; +nonweaponProficiencies['Distance Sense'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': 0, 'classes': '', - 'book': 'The Complete Ranger\'s Handbook' -}; -nonweaponProficiencies['Falconry'] = { + 'book': ['The Complete Ranger\'s Handbook'] +}); +nonweaponProficiencies['Falconry'] = []; +nonweaponProficiencies['Falconry'].push({ 'slots': 1, - 'abilityScore': '@{Intelligence}', - 'modifier': -2, + 'abilityScore': '@{Wisdom}', + 'modifier': -1, 'classes': '', - 'book': 'The Complete Ranger\'s Handbook' -}; -nonweaponProficiencies['Persuasion'] = { + 'book': ['The Complete Ranger\'s Handbook'] +}); +nonweaponProficiencies['Persuasion'] = []; +nonweaponProficiencies['Persuasion'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': 0, 'classes': '', - 'book': 'The Complete Ranger\'s Handbook' -}; -nonweaponProficiencies['Riding, Sea-based'] = { + 'book': ['The Complete Ranger\'s Handbook'] +}); +nonweaponProficiencies['Riding, Sea-based'] = []; +nonweaponProficiencies['Riding, Sea-based'].push({ 'slots': 2, 'abilityScore': '@{Dexterity}', 'modifier': -2, 'classes': '', - 'book': 'The Complete Ranger\'s Handbook' -}; -nonweaponProficiencies['Signaling'] = { + 'book': ['The Complete Ranger\'s Handbook'] +}); +nonweaponProficiencies['Signaling'] = []; +nonweaponProficiencies['Signaling'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -2, 'classes': '', - 'book': 'The Complete Ranger\'s Handbook' -}; -nonweaponProficiencies['Camouflage'] = { + 'book': ['The Complete Ranger\'s Handbook','The Complete Barbarian\'s Handbook'] +}); +nonweaponProficiencies['Camouflage'] = []; +nonweaponProficiencies['Camouflage'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': 0, 'classes': 'Fighter/Rogue', - 'book': 'The Complete Ranger\'s Handbook' -}; -nonweaponProficiencies['Foraging'] = { + 'book': ['The Complete Ranger\'s Handbook'] +}); +nonweaponProficiencies['Foraging'] = []; +nonweaponProficiencies['Foraging'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -2, 'classes': 'Warrior/Rogue', - 'book': 'The Complete Ranger\'s Handbook' -}; -nonweaponProficiencies['Spelunking'] = { + 'book': ['The Complete Ranger\'s Handbook','The Complete Barbarian\'s Handbook'] +}); +nonweaponProficiencies['Spelunking'] = []; +nonweaponProficiencies['Spelunking'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -2, 'classes': 'Warrior', - 'book': 'The Complete Ranger\'s Handbook' -}; -nonweaponProficiencies['Trail Marking'] = { + 'book': ['The Complete Ranger\'s Handbook'] +}); +nonweaponProficiencies['Trail Marking'] = []; +nonweaponProficiencies['Trail Marking'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': 0, 'classes': 'Warrior', - 'book': 'The Complete Ranger\'s Handbook' -}; -nonweaponProficiencies['Trail Signs'] = { + 'book': ['The Complete Ranger\'s Handbook'] +}); +nonweaponProficiencies['Trail Signs'] = []; +nonweaponProficiencies['Trail Signs'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -1, 'classes': 'Warrior/Rogue', - 'book': 'The Complete Ranger\'s Handbook' -}; -nonweaponProficiencies['Veterinary Healing'] = { + 'book': ['The Complete Ranger\'s Handbook'] +}); +nonweaponProficiencies['Veterinary Healing'] = []; +nonweaponProficiencies['Veterinary Healing'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': -3, 'classes': 'Priest', - 'book': 'The Complete Ranger\'s Handbook' -}; -nonweaponProficiencies['Weaponsmithing, Crude'] = { + 'book': ['The Complete Ranger\'s Handbook'] +}); +nonweaponProficiencies['Weaponsmithing, Crude'] = []; +nonweaponProficiencies['Weaponsmithing, Crude'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': -3, 'classes': 'Warrior', - 'book': 'The Complete Ranger\'s Handbook' -}; + 'book': ['The Complete Ranger\'s Handbook','The Complete Barbarian\'s Handbook'] +}); //#endregion //#region The Complete Paladin's Handbook -nonweaponProficiencies['Bureaucracy'] = { +nonweaponProficiencies['Bureaucracy'] = []; +nonweaponProficiencies['Bureaucracy'].push({ 'slots': 2, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Priest/Rogue', - 'book': 'The Complete Paladin\'s Handbook' -}; -nonweaponProficiencies['Diagnostics'] = { + 'book': ['The Complete Paladin\'s Handbook','Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Diagnostics'] = []; +nonweaponProficiencies['Diagnostics'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': -1, 'classes': 'Priest', - 'book': 'The Complete Paladin\'s Handbook' -}; -nonweaponProficiencies['Jousting'] = { + 'book': ['The Complete Paladin\'s Handbook'] +}); +nonweaponProficiencies['Jousting'] = []; +nonweaponProficiencies['Jousting'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': +2, 'classes': 'Warrior', - 'book': 'The Complete Paladin\'s Handbook' -}; -nonweaponProficiencies['Law'] = { + 'book': ['The Complete Paladin\'s Handbook'] +}); +nonweaponProficiencies['Law'] = []; +nonweaponProficiencies['Law'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': 0, 'classes': 'Warrior/Priest', - 'book': 'The Complete Paladin\'s Handbook' -}; -nonweaponProficiencies['Oratory'] = { + 'book': ['The Complete Paladin\'s Handbook'] +}); +nonweaponProficiencies['Oratory'] = []; +nonweaponProficiencies['Oratory'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': 0, 'classes': 'Warrior/Priest', - 'book': 'The Complete Paladin\'s Handbook' -}; + 'book': ['The Complete Paladin\'s Handbook'] +}); //#endregion //#region The Complete Barbarian's Handbook -nonweaponProficiencies['Clothesmaking, Crude'] = { +nonweaponProficiencies['Clothesmaking, Crude'] = []; +nonweaponProficiencies['Clothesmaking, Crude'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -1, 'classes': '', - 'book': 'The Complete Barbarian\'s Handbook' -}; -nonweaponProficiencies['Animal Rending'] = { + 'book': ['The Complete Barbarian\'s Handbook'] +}); +nonweaponProficiencies['Animal Rending'] = []; +nonweaponProficiencies['Animal Rending'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': +2, 'classes': 'Warrior', - 'book': 'The Complete Barbarian\'s Handbook' -}; -nonweaponProficiencies['Armorer, Crude'] = { + 'book': ['The Complete Barbarian\'s Handbook'] +}); +nonweaponProficiencies['Armorer, Crude'] = []; +nonweaponProficiencies['Armorer, Crude'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -1, 'classes': 'Warrior', - 'book': 'The Complete Barbarian\'s Handbook' -}; -nonweaponProficiencies['Bartering'] = { + 'book': ['The Complete Barbarian\'s Handbook'] +}); +nonweaponProficiencies['Bartering'] = []; +nonweaponProficiencies['Bartering'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -2, 'classes': 'Rogue', - 'book': 'The Complete Barbarian\'s Handbook' -}; -nonweaponProficiencies['Bowyer/Fletcher, Crude'] = { + 'book': ['The Complete Barbarian\'s Handbook'] +}); +nonweaponProficiencies['Bowyer/Fletcher, Crude'] = []; +nonweaponProficiencies['Bowyer/Fletcher, Crude'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': 0, 'classes': 'Warrior', - 'book': 'The Complete Barbarian\'s Handbook' -}; -nonweaponProficiencies['Horde Summoning'] = { + 'book': ['The Complete Barbarian\'s Handbook'] +}); +nonweaponProficiencies['Horde Summoning'] = []; +nonweaponProficiencies['Horde Summoning'].push({ 'slots': 2, 'abilityScore': '@{Charisma}', 'modifier': 0, 'classes': 'Warrior', - 'book': 'The Complete Barbarian\'s Handbook' -}; -nonweaponProficiencies['Leadership'] = { + 'book': ['The Complete Barbarian\'s Handbook'] +}); +nonweaponProficiencies['Leadership'] = []; +nonweaponProficiencies['Leadership'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': 0, 'classes': 'Warrior', - 'book': 'The Complete Barbarian\'s Handbook' -}; -nonweaponProficiencies['Light Sleeping'] = { + 'book': ['The Complete Barbarian\'s Handbook'] +}); +nonweaponProficiencies['Light Sleeping'] = []; +nonweaponProficiencies['Light Sleeping'].push({ 'slots': 1, 'abilityScore': '@{Constitution}', 'modifier': -1, 'classes': 'Warrior', - 'book': 'The Complete Barbarian\'s Handbook' -}; -nonweaponProficiencies['Soothsaying'] = { + 'book': ['The Complete Barbarian\'s Handbook'] +}); +nonweaponProficiencies['Sign Language'].push({ + 'slots': 1, + 'abilityScore': '@{Charisma}', + 'modifier': 0, + 'classes': '', + 'book': ['The Complete Barbarian\'s Handbook'] +}); +nonweaponProficiencies['Set Snares'].push({ + 'slots': 1, + 'abilityScore': '@{Intelligence}', + 'modifier': -1, + 'classes': 'Fighter', + 'book': ['The Complete Barbarian\'s Handbook'] +}); +nonweaponProficiencies['Soothsaying'] = []; +nonweaponProficiencies['Soothsaying'].push({ 'slots': 2, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Priest', - 'book': 'The Complete Barbarian\'s Handbook' -}; -nonweaponProficiencies['Weapon Improvisation'] = { + 'book': ['The Complete Barbarian\'s Handbook'] +}); +nonweaponProficiencies['Weapon Improvisation'] = []; +nonweaponProficiencies['Weapon Improvisation'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': -1, 'classes': 'Warrior', - 'book': 'The Complete Barbarian\'s Handbook' -}; + 'book': ['The Complete Barbarian\'s Handbook'] +}); //#endregion //#region The Complete Book of Necromancers -nonweaponProficiencies['Anatomy'] = { +nonweaponProficiencies['Anatomy'] = []; +nonweaponProficiencies['Anatomy'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': '', - 'book': 'The Complete Book of Necromancers' -}; -nonweaponProficiencies['Necrology'] = { + 'book': ['The Complete Book of Necromancers'] +}); +nonweaponProficiencies['Necrology'] = []; +nonweaponProficiencies['Necrology'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': 0, 'classes': '', - 'book': 'The Complete Book of Necromancers' -}; -nonweaponProficiencies['Netherworld Knowledge'] = { + 'book': ['The Complete Book of Necromancers'] +}); +nonweaponProficiencies['Netherworld Knowledge'] = []; +nonweaponProficiencies['Netherworld Knowledge'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': -3, 'classes': '', - 'book': 'The Complete Book of Necromancers' -}; -nonweaponProficiencies['Spirit Lore'] = { + 'book': ['The Complete Book of Necromancers'] +}); +nonweaponProficiencies['Spirit Lore'] = []; +nonweaponProficiencies['Spirit Lore'].push({ 'slots': 2, 'abilityScore': '@{Charisma}', 'modifier': -4, 'classes': '', - 'book': 'The Complete Book of Necromancers' -}; -nonweaponProficiencies['Venom Handling'] = { + 'book': ['The Complete Book of Necromancers'] +}); +nonweaponProficiencies['Venom Handling'] = []; +nonweaponProficiencies['Venom Handling'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': -2, 'classes': '', - 'book': 'The Complete Book of Necromancers' -}; + 'book': ['The Complete Book of Necromancers'] +}); //#endregion //#region The Complete Ninja's Handbook -nonweaponProficiencies['City Familiarity'] = { +nonweaponProficiencies['City Familiarity'] = []; +nonweaponProficiencies['City Familiarity'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': '', - 'book': 'The Complete Ninja\'s Handbook' -}; -nonweaponProficiencies['Style Analysis'] = { + 'book': ['The Complete Ninja\'s Handbook'] +}); +nonweaponProficiencies['Style Analysis'] = []; +nonweaponProficiencies['Style Analysis'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -1, 'classes': 'Warrior', - 'book': 'The Complete Ninja\'s Handbook' -}; -nonweaponProficiencies['Assimilation'] = { + 'book': ['The Complete Ninja\'s Handbook'] +}); +nonweaponProficiencies['Assimilation'] = []; +nonweaponProficiencies['Assimilation'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Rogue', - 'book': 'The Complete Ninja\'s Handbook' -}; -nonweaponProficiencies['Detect Signing'] = { + 'book': ['The Complete Ninja\'s Handbook'] +}); +nonweaponProficiencies['Detect Signing'] = []; +nonweaponProficiencies['Detect Signing'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': +1, 'classes': 'Rogue', - 'book': 'The Complete Ninja\'s Handbook' -}; -nonweaponProficiencies['Enamor'] = { + 'book': ['The Complete Ninja\'s Handbook'] +}); +nonweaponProficiencies['Enamor'] = []; +nonweaponProficiencies['Enamor'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': -2, 'classes': 'Rogue', - 'book': 'The Complete Ninja\'s Handbook' -}; -nonweaponProficiencies['Escape'] = { + 'book': ['The Complete Ninja\'s Handbook'] +}); +nonweaponProficiencies['Escape'] = []; +nonweaponProficiencies['Escape'].push({ 'slots': 2, 'abilityScore': '@{Dexterity}', 'modifier': 0, 'classes': 'Rogue', - 'book': 'The Complete Ninja\'s Handbook' -}; -nonweaponProficiencies['Feign/Detect Sleep'] = { + 'book': ['The Complete Ninja\'s Handbook'] +}); +nonweaponProficiencies['Feign/Detect Sleep'] = []; +nonweaponProficiencies['Feign/Detect Sleep'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Rogue', - 'book': 'The Complete Ninja\'s Handbook' -}; -nonweaponProficiencies['Giant Kite Flying'] = { + 'book': ['The Complete Ninja\'s Handbook'] +}); +nonweaponProficiencies['Giant Kite Flying'] = []; +nonweaponProficiencies['Giant Kite Flying'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': -3, 'classes': 'Rogue', - 'book': 'The Complete Ninja\'s Handbook' -}; -nonweaponProficiencies['Hold Breath'] = { + 'book': ['The Complete Ninja\'s Handbook'] +}); +nonweaponProficiencies['Hold Breath'] = []; +nonweaponProficiencies['Hold Breath'].push({ 'slots': 1, 'abilityScore': '@{Constitution}', 'modifier': 0, 'classes': 'Rogue', - 'book': 'The Complete Ninja\'s Handbook' -}; -nonweaponProficiencies['Night Vision'] = { + 'book': ['The Complete Ninja\'s Handbook'] +}); +nonweaponProficiencies['Night Vision'] = []; +nonweaponProficiencies['Night Vision'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': -2, 'classes': 'Rogue', - 'book': 'The Complete Ninja\'s Handbook' -}; -nonweaponProficiencies['Toxicology'] = { + 'book': ['The Complete Ninja\'s Handbook'] +}); +nonweaponProficiencies['Toxicology'] = []; +nonweaponProficiencies['Toxicology'].push({ 'slots': 2, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Rogue', - 'book': 'The Complete Ninja\'s Handbook' -}; -nonweaponProficiencies['Quick Study'] = { + 'book': ['The Complete Ninja\'s Handbook'] +}); +nonweaponProficiencies['Quick Study'] = []; +nonweaponProficiencies['Quick Study'].push({ 'slots': 2, 'abilityScore': '', 'modifier': -3, 'classes': 'Rogue', - 'book': 'The Complete Ninja\'s Handbook' -}; -nonweaponProficiencies['Underclass'] = { + 'book': ['The Complete Ninja\'s Handbook'] +}); +nonweaponProficiencies['Underclass'] = []; +nonweaponProficiencies['Underclass'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': 0, 'classes': 'Rogue', - 'book': 'The Complete Ninja\'s Handbook' -}; -nonweaponProficiencies['Water Walking'] = { + 'book': ['The Complete Ninja\'s Handbook'] +}); +nonweaponProficiencies['Water Walking'] = []; +nonweaponProficiencies['Water Walking'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': -1, 'classes': 'Rogue', - 'book': 'The Complete Ninja\'s Handbook' -}; + 'book': ['The Complete Ninja\'s Handbook'] +}); //#endregion //#region Player's Option: Spells & Magic -nonweaponProficiencies['Alchemy'] = { +nonweaponProficiencies['Alchemy'] = []; +nonweaponProficiencies['Alchemy'].push({ 'slots': 2, 'abilityScore': '@{Intelligence}', 'modifier': -3, 'classes': 'Wizard', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Arcanology'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Anatomy'].push({ + 'slots': 2, + 'abilityScore': '@{Intelligence}', + 'modifier': -2, + 'classes': '', + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Arcanology'] = []; +nonweaponProficiencies['Arcanology'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -3, 'classes': 'Wizard', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Bookbinding'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Bookbinding'] = []; +nonweaponProficiencies['Bookbinding'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Priest/Wizard', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Concentration'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Concentration'] = []; +nonweaponProficiencies['Concentration'].push({ 'slots': 2, 'abilityScore': '@{Wisdom}', 'modifier': -2, 'classes': 'Wizard', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Dowsing'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Dowsing'] = []; +nonweaponProficiencies['Dowsing'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': -3, 'classes': 'Wizard', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Glassblowing'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Glassblowing'] = []; +nonweaponProficiencies['Glassblowing'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': 0, 'classes': 'Wizard', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Hypnotism'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Hypnotism'] = []; +nonweaponProficiencies['Hypnotism'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': -2, 'classes': 'Wizard', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Mental Resistance'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Mental Resistance'] = []; +nonweaponProficiencies['Mental Resistance'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': -1, 'classes': 'Wizard', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Omen Reading'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Omen Reading'] = []; +nonweaponProficiencies['Omen Reading'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': -2, 'classes': 'Priest/Wizard', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Papermaking'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Papermaking'] = []; +nonweaponProficiencies['Papermaking'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Priest/Wizard', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Prestidigitation'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Prestidigitation'] = []; +nonweaponProficiencies['Prestidigitation'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': -1, 'classes': 'Wizard', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Research'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Research'] = []; +nonweaponProficiencies['Research'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': 0, 'classes': 'Wizard', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Sage Knowledge'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Sage Knowledge'] = []; +nonweaponProficiencies['Sage Knowledge'].push({ 'slots': 2, 'abilityScore': '@{Intelligence}', 'modifier': -2, 'classes': 'Priest/Wizard', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Scribe'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Scribe'] = []; +nonweaponProficiencies['Scribe'].push({ 'slots': 1, 'abilityScore': '@{Dexterity}', 'modifier': +1, 'classes': 'Priest/Wizard', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Tactics of Magic'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Tactics of Magic'] = []; +nonweaponProficiencies['Tactics of Magic'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -1, 'classes': 'Wizard', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Thaumaturgy'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Thaumaturgy'] = []; +nonweaponProficiencies['Thaumaturgy'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -2, 'classes': 'Wizard', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Administration'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Administration'] = []; +nonweaponProficiencies['Administration'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': +1, 'classes': 'Priest', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Alms'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Alms'] = []; +nonweaponProficiencies['Alms'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': 0, 'classes': 'Priest', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Ceremony'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Ceremony'] = []; +nonweaponProficiencies['Ceremony'].push({ 'slots': 1, 'abilityScore': '@{Wisdom}', 'modifier': 0, 'classes': 'Priest', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Diplomacy'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Diplomacy'] = []; +nonweaponProficiencies['Diplomacy'].push({ 'slots': 1, 'abilityScore': '@{Charisma}', 'modifier': -1, 'classes': 'Priest', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Investigation'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Investigation'] = []; +nonweaponProficiencies['Investigation'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -2, 'classes': 'Priest', - 'book': 'Player\'s Option: Spells & Magic' -}; -nonweaponProficiencies['Undead Lore'] = { + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Law'].push({ + 'slots': 1, + 'abilityScore': '@{Intelligence}', + 'modifier': 0, + 'classes': 'Priest', + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Oratory'].push({ + 'slots': 1, + 'abilityScore': '@{Charisma}', + 'modifier': -1, + 'classes': 'Priest', + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Persuasion'].push({ + 'slots': 1, + 'abilityScore': '@{Charisma}', + 'modifier': -2, + 'classes': 'Priest', + 'book': ['Player\'s Option: Spells & Magic'] +}); +nonweaponProficiencies['Undead Lore'] = []; +nonweaponProficiencies['Undead Lore'].push({ 'slots': 1, 'abilityScore': '@{Intelligence}', 'modifier': -1, 'classes': 'Priest', - 'book': 'Player\'s Option: Spells & Magic' -}; + 'book': ['Player\'s Option: Spells & Magic'] +}); //#endregion /* ---- Wizard spells start ---- */ diff --git a/ADnD_2E_Revised/build/buildPug.js b/ADnD_2E_Revised/build/buildPug.js index 64c7983de6..be7f1e10c2 100644 --- a/ADnD_2E_Revised/build/buildPug.js +++ b/ADnD_2E_Revised/build/buildPug.js @@ -6,6 +6,42 @@ const jsFolder = path.join(sourceFolder, 'javascript'); const pugFolder = path.join(sourceFolder, 'pug'); const htmlFolder = path.join(sourceFolder, 'html', 'components'); const miscFolder = path.join(sourceFolder, 'misc'); +const booksPriority = [ + 'PHB', + 'The Complete Fighter\'s Handbook', + 'The Complete Thief\'s Handbook', + 'The Complete Priest\'s Handbook', + 'The Complete Wizard\'s Handbook', + 'Tome of Magic', + 'Arms and Equipment Guide', + 'The Complete Book of Dwarves', + 'The Complete Bard\'s Handbook', + 'The Complete Book of Elves', + 'The Complete Book of Humanoids', + 'The Complete Ranger\'s Handbook', + 'The Complete Paladin\'s Handbook', + 'The Complete Druid\'s Handbook', + 'The Complete Barbarian\'s Handbook', + 'The Complete Book of Necromancers', + 'The Complete Ninja\'s Handbook', + 'Player\'s Option: Combat & Tactics', + 'Player\'s Option: Skills & Powers', + 'Player\'s Option: Spells & Magic', +]; +function bookShorthand(books) { + return books.map(b => b.replace('The Complete', '') + .replace('Book of', '') + .replace('Handbook', '') + .replace('Player\'s Option:','') + .replace('Arms and Equipment Guide', 'A&E') + .replace('Tome of Magic','ToM') + .replace('Combat & Tactics', 'PO: C&T') + .replace('Skills & Powers', 'PO: S&P') + .replace('Spells & Magic', 'PO: S&M') + .replace('\'','') + .trim()) + .join(', ') +} console.log('---- Generating dynamicDatalists ----'); const spellsJs = ['wizardSpells.js', 'priestSpells.js']; @@ -30,15 +66,15 @@ console.log('weapons.js'); console.log('weaponProficiencies.js'); const weapons = require(path.join(jsFolder, 'weapons.js')); const weaponsProficiencies = require(path.join(jsFolder, 'weaponProficiencies.js')); -html += pug.renderFile(path.join(pugFolder, 'weaponsDatalists.pug'), {pretty: true, data: weapons, proficiencies: weaponsProficiencies}); - -const nonWeaponProfs = require(path.join(jsFolder, 'nonweaponProficiencies.js')); -const nonWeaponProfTable = pug.renderFile(path.join(pugFolder, 'nonweaponProficienciesOverview.pug'), {pretty: true, data: nonWeaponProfs}); -fs.writeFileSync(path.join(miscFolder, 'nonweapon-proficiencies-overview.html'), nonWeaponProfTable); - +html += pug.renderFile(path.join(pugFolder, 'weaponsDatalists.pug'), {pretty: true, data: weapons, proficiencies: weaponsProficiencies, booksPriority: booksPriority, bookShorthand: bookShorthand}); let weaponTable = pug.renderFile(path.join(pugFolder, 'weaponsOverview.pug'), {pretty: true, data: weapons}); fs.writeFileSync(path.join(miscFolder, 'weapons-overview.html'), weaponTable); +const nonWeaponProfs = require(path.join(jsFolder, 'nonweaponProficiencies.js')); +html += pug.renderFile(path.join(pugFolder, 'nonweaponProficienciesDatalist.pug'), {pretty: true, data: nonWeaponProfs, booksPriority: booksPriority, bookShorthand: bookShorthand}) +const nonWeaponProfTable = pug.renderFile(path.join(pugFolder, 'nonweaponProficienciesOverview.pug'), {pretty: true, data: nonWeaponProfs}); +fs.writeFileSync(path.join(miscFolder, 'nonweapon-proficiencies-overview.html'), nonWeaponProfTable); + const simpleDatalists = [ ['players-option-talents.js','talents'], ['players-option-traits.js','traits'], diff --git a/ADnD_2E_Revised/html/components/dynamicDatalists.html b/ADnD_2E_Revised/html/components/dynamicDatalists.html index 68faed5f18..17b4cbdf68 100644 --- a/ADnD_2E_Revised/html/components/dynamicDatalists.html +++ b/ADnD_2E_Revised/html/components/dynamicDatalists.html @@ -3130,7 +3130,7 @@ - + @@ -3138,151 +3138,151 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ADnD_2E_Revised/pug/nonweaponProficienciesDatalist.pug b/ADnD_2E_Revised/pug/nonweaponProficienciesDatalist.pug new file mode 100644 index 0000000000..2c10e09c0d --- /dev/null +++ b/ADnD_2E_Revised/pug/nonweaponProficienciesDatalist.pug @@ -0,0 +1,15 @@ +- let processedNonweaponProficiencies = new Set() +datalist(id='nonweapon-proficiencies') + each book in booksPriority + each nonweaponProficiencyList, name in data + - let classes = nonweaponProficiencyList.map(n => n.classes).filter(Boolean).filter((v, i, a) => a.indexOf(v) === i).join('/') + each nonweaponProficiency in nonweaponProficiencyList + if (!nonweaponProficiency.book.includes(book)) + - continue; + if processedNonweaponProficiencies.has(name.toLowerCase()) + - continue + - processedNonweaponProficiencies.add(name.toLowerCase()) + if (!nonweaponProficiency.book.includes('PHB')) + - books = 'Books: ' + bookShorthand(nonweaponProficiencyList.flatMap(w => w.book)) + - classes += (classes ? ', ' : '') + books + option(value=name)= classes \ No newline at end of file diff --git a/ADnD_2E_Revised/pug/weaponsDatalists.pug b/ADnD_2E_Revised/pug/weaponsDatalists.pug index 7fd308ecd5..62083eb5c7 100644 --- a/ADnD_2E_Revised/pug/weaponsDatalists.pug +++ b/ADnD_2E_Revised/pug/weaponsDatalists.pug @@ -1,7 +1,3 @@ -- const booksPriority = ['PHB','The Complete Fighter\'s Handbook','The Complete Priest\'s Handbook','The Complete Wizard\'s Handbook','Arms and Equipment Guide','The Complete Book of Dwarves','The Complete Book of Elves','The Complete Book of Humanoids','The Complete Ranger\'s Handbook','The Complete Barbarian\'s Handbook','The Complete Ninja\'s Handbook','Player\'s Option: Combat & Tactics']; - -- function bookShorthand(books) {return books.map(b => b.replace('The Complete', '').replace('Book of', '').replace('Handbook', '').replace('Arms and Equipment Guide', 'A\&E').replace('Player\'s Option: Combat & Tactics', 'PO: C&T').replace('\'','').trim()).join(', ')} - - let processedWeapons = new Set() datalist(id='melee-weapons') each book in booksPriority @@ -13,8 +9,8 @@ datalist(id='melee-weapons') - continue; if processedWeapons.has(weapon.name.toLowerCase()) - continue - - books = 'Books: ' + bookShorthand(weaponList.filter(w => w['category'].includes('Melee')).flatMap(w => w.book)) - processedWeapons.add(weapon.name.toLowerCase()) + - books = 'Books: ' + bookShorthand(weaponList.filter(w => w['category'].includes('Melee')).flatMap(w => w.book)) - let group = weapon.group || '' - group += (group ? ', ' : '') + books option(value=weapon.name)= group @@ -45,8 +41,8 @@ datalist(id='all-weapons') - continue; if processedWeapons.has(weapon.name.toLowerCase()) - continue - - books = 'Books: ' + bookShorthand(weaponList.flatMap(w => w.book)) - processedWeapons.add(weapon.name.toLowerCase()) + - books = 'Books: ' + bookShorthand(weaponList.flatMap(w => w.book)) - let group = weapon.group || '' - group += (group ? ', ' : '') + books option(value=weapon.name)= group