Files
roll20-character-sheets-tester/Miseries & Misfortunes/html/8_sheetworkers.js
T

1 line
28 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
function activateCombatModal(t){const o={show_combat_modal:1};return o["repeating_arms_"+t+"_arm_trigger"]=0,o.combat_roll_mod=0,getAttrs(["repeating_arms_"+t+"_arm"],e=>{o.combat_attack=e["repeating_arms_"+t+"_arm"],setAttrs(o,{silent:!0},()=>updateCombatModal())}),!0}function updateCombatModal(){return getAttrs(["combat_attack","combat_distance","combat_roll_mod","strength_mod","dexterity_mod","melee_to_hit_mod","musketry_to_hit_mod","combat_opponent_tn","melee_damage_mod","combat_shot"],e=>{const{combat_attack:t,combat_roll_mod:o,strength_mod:n,dexterity_mod:a,melee_to_hit_mod:i,musketry_to_hit_mod:r,combat_opponent_tn:l,melee_damage_mod:s,combat_shot:d}=e;let{combat_distance:_}=e;const m=weapons[t],{damage:c,name:g,type:p}=m,u="ranged"===p?roll_table.musketry:roll_table.melee;"melee"===p?_="melee":"melee"===_&&(_="short");const h="melee"===p?{}:m.range[_],b="melee"===p?n:a;var y="melee"===p?i:r,f="melee"===p?s:0;const k=parseInt(b,10)||0,v=parseInt(f,10)||0,w=parseInt(y,10)||0,A=parseInt(o,10)||0;var C=k+w+A;const M=I(),q=function(){if("melee"!==_)return"";var e=k+v,t=e<0?"":"+";return 0!==e?t+e:""}();e=c+q+" HP",f=I();const S=function(){let e=0;e="melee"===_?l:"shot"===d?h.shot:h.tough_shot;return e}();e={combat_roll_base_mod:b||0,combat_roll_base_type:u.mod.substring(0,3),combat_roll_lifepath_mod:y||0,combat_roll_mod_display:C,combat_roll_opponent_ability:"melee"===_?"DEFENSE":"",combat_distance:_,combat_short:"melee"===p?" ":" - "+m.range.short.distance,combat_medium:"melee"===p?" ":" - "+m.range.medium.distance,combat_long:"melee"===p?" ":" - "+m.range.long.distance,combat_initiative:m.initiative,combat_rank:function(){if(0===m.rank)return"any";if(1===m.rank)return"1";if(2===m.rank)return"1, 2";if(3===m.rank)return"1, 2, 3"}(),roll_name:g.toUpperCase(),roll_die:"d20",roll_tn:parseInt(S,10),roll_tn_display:S,roll_damage:f,roll_damage_display:e,roll_final:function(){var e="20n"===S,t=e?"":"+"+M;let o="&{template:attack}";o+=" {{roll=[[@{roll_die}"+t+"]]}}",e||(o+=" {{mod=[["+M+"]]}}");e?o+=" {{crit_none=true}}":"melee"===_?(e=b+w+A+20,o+=" {{crit_exact=true}} {{roll_max=[["+e+"]]}}"):o+=" {{crit_greater=true}}";return o+=function(){var e=" {{combat_damage=[["+c+q+"]]}}";return e}(),o+=" {{combat_distance="+_.charAt(0).toUpperCase()+_.slice(1)+"}}",o+=" {{roll_tn=[[@{roll_tn}]]}} {{roll_tn_display=[[@{roll_tn_display}]]}} {{die_type=@{roll_die}}} {{roll_name=@{roll_name}}} {{character_name=@{character_name}}}",o}()};return setAttrs(e,{silent:!0}),!0;function I(){let e=b+"["+u.mod+" mod]";return w&&!isNaN(w)&&0!==w&&(e=e+"+"+w+"[lifepath mod]"),A&&!isNaN(A)&&0!==A&&(e=e+"+"+A+"[other mod]"),e}}),!0}function closeCombatModal(){setAttrs({show_combat_modal:0,roll_mod:0},{silent:!0})}function activateRollModal(e){const t=getTrimmedAttribute(e);var o=roll_table[t];const n={show_roll_modal:1};return n.roll_name=o.name||t.toUpperCase(),n[e]=0,n.roll_mod=0,n.roll_type=o.type,"d20"===o.type?getAttrs([t],e=>{n.roll_die="d20",n.roll_die_base="d20",n.roll_tn=e[t],n.roll_tn_base=e[t],n.roll_tn_display=e[t],n.roll_final="&{template:skill} {{roll=[[@{roll_die}]]}} {{roll_tn=[[@{roll_tn_display}]]}} {{mod=[[@{roll_mod}]]}} {{die_type=@{roll_die}}} {{roll_name=@{roll_name}}} {{character_name=@{character_name}}}",setAttrs(n,{silent:!0})}):"skill"===o.type?getAttrs([t],e=>{e=e[t];n.roll_die=roll_step_die[e],n.roll_die_base=roll_step_die[e],n.roll_tn=roll_step_tn[e],n.roll_tn_base=roll_step_tn[e],n.roll_tn_display=roll_step_tn[e],n.roll_final="&{template:skill} {{roll=[[@{roll_die}]]}} {{roll_tn=[[@{roll_tn_display}]]}} {{mod=[[@{roll_mod}]]}} {{die_type=@{roll_die}}} {{roll_name=@{roll_name}}} {{character_name=@{character_name}}}",setAttrs(n,{silent:!0})}):"save"===o.type?getAttrs([t],e=>{n.roll_die="d20",n.roll_die_base="d20",n.roll_tn=e[t],n.roll_tn_base=e[t],n.roll_tn_display=e[t],n.roll_final="&{template:save} {{roll=[[@{roll_die}+@{roll_mod}[MOD]]]}} {{roll_tn=[[@{roll_tn_display}]]}} {{mod=[[@{roll_mod}]]}} {{die_type=@{roll_die}}} {{roll_name=@{roll_name}}} {{character_name=@{character_name}}}",setAttrs(n,{silent:!0})}):console.log("ERROR: ROLL MODAL SKILL DATA NOT FOUND"),!0}function closeRollModal(){setAttrs({show_roll_modal:0,roll_mod:0},{silent:!0})}function activateRepeatingRollModal(e){const t=e.split("_"),o=[t[0],t[1],t[2]].join("_"),n={show_roll_modal:1,roll_type:"skill"};return n[e]=0,n.roll_mod=0,getAttrs([o+"_skill_name",o+"_skill"],e=>{var t=e[o+"_skill"];return n.roll_name=e[o+"_skill_name"].toUpperCase(),n.roll_die=roll_step_die[t],n.roll_die_base=roll_step_die[t],n.roll_tn=roll_step_tn[t],n.roll_tn_base=roll_step_tn[t],n.roll_tn_display=roll_step_tn[t],n.roll_final="&{template:skill} {{roll=[[@{roll_die}]]}} {{roll_tn=[[@{roll_tn_display}]]}} {{mod=[[@{roll_mod}]]}} {{die_type=@{roll_die}}} {{roll_name=@{roll_name}}} {{character_name=@{character_name}}}",setAttrs(n,{silent:!0}),!0}),!0}function updateRollModal(){getAttrs(["roll_tn_base","roll_type","roll_mod","roll_die_base","tn_mod"],e=>{var{roll_tn_base:t,roll_type:o,roll_mod:n,roll_die_base:a,tn_mod:e}=e;const i={};t=parseInt(t,10),n=parseInt(n,10)||0,e=parseInt(e,10)||0;return"d20"===o?i.roll_tn_display=t+n:"skill"===o&&(n=boundStepValue(convert_tn_to_step(t,a)+n),i.roll_tn_display=roll_step_tn[n]+e,i.roll_die=roll_step_die[n]),setAttrs(i,{silent:!0}),!0})}function convert_tn_to_step(e,t){return 1===e&&"d10"===t?0:7===e?6:9===e?7:11===e?8:19===e?9:e}function activateWitsModal(e){var t=getTrimmedAttribute(e);const o={show_wits_modal:1};return o[e]=0,o.wits_roll_mod=0,o.roll_type=t,o.wits_distance="voice"===t?"speaking":"press",setAttrs(o,{silent:!0},()=>updateWitsModal()),!0}function updateWitsModal(){return getAttrs(["wits_attack","wits_distance","roll_type","wits_roll_mod","charisma_mod","intelligence_mod","voice_to_hit_mod","press_to_hit_mod","wits_opponent_tn","press_damage_mod","voice_damage_mod"],e=>{const{wits_attack:t,wits_distance:o,roll_type:n,wits_roll_mod:a,charisma_mod:i,intelligence_mod:r,voice_to_hit_mod:l,press_to_hit_mod:s,wits_opponent_tn:d,press_damage_mod:_,voice_damage_mod:m}=e,c=roll_table[n],g=wits_attacks[t],p=g[o],u="press"===o?r:i;var h="press"===o?s:l,b="press"===o?_:m,y=o.charAt(0).toUpperCase()+o.slice(1);const f=parseInt(u,10)||0,k=parseInt(b,10)||0,v=parseInt(h,10)||0,w=parseInt(a,10)||0;var A,C,M=f+v+w;const q=P(),S=(A=f+k,C=A<0?"":"+",0!==A?C+A:""),[I,R]=p.dmg.split("; ");e=function(){let e=I+S+" Will";R&&(e=e+" & "+R+S+" Reputation");return e}(),b=P();const D="intimate"===o?d:p.tn;e={wits_roll_base_mod:u||0,wits_roll_base_type:c.mod.substring(0,3),wits_roll_lifepath_mod:h||0,wits_roll_mod_display:M,wits_roll_opponent_ability:"intimate"===o?p.tn.toUpperCase():"",combat_distance:y,roll_name:g.name.toUpperCase(),roll_die:"d20",roll_tn:parseInt(D,10),roll_tn_display:D,roll_rof:g.rof,roll_damage:b,roll_damage_display:e,roll_final:function(){var e="20n"===D,t=e?"":q;let o="&{template:attack}";o+=" {{roll=[[@{roll_die}"+t+"]]}}",e||(o+=" {{mod=[["+q+"]]}}");return o+=e?" {{crit_none=true}}":" {{crit_greater=true}}",o+=function(){let e=" {{will_damage=[["+I+S+"]]}}";R&&(e=e+" {{reputation_damage=[["+R+S+"]]}}");return e}(),o+=" {{combat_distance=@{combat_distance}}} {{roll_tn=[[@{roll_tn}]]}} {{roll_tn_display=[[@{roll_tn_display}]]}} {{die_type=@{roll_die}}} {{roll_name=@{roll_name}}} {{character_name=@{character_name}}}",o}()};return setAttrs(e,{silent:!0}),!0;function P(){let e=u+"["+c.mod+" mod]";return v&&!isNaN(v)&&0!==v&&(e=e+"+"+v+"[lifepath mod]"),w&&!isNaN(w)&&0!==w&&(e=e+"+"+w+"[other mod]"),e}}),!0}function closeWitsModal(){setAttrs({show_wits_modal:0,roll_mod:0},{silent:!0})}function incrementRepeatingSkill(e){const t=e.sourceAttribute.split("_"),n=t[3],a=[t[0],t[1],t[2]].join("_");return getAttrs([a+"_skill"],e=>{const t=parseInt(e[a+"_skill"],10),o={};e=boundStepValue("up"===n?t+1:t-1);return o[a+"_skill"]=e,o[a+"_skill_tn"]=roll_step_tn[e],setAttrs(o,{silent:!0}),!0}),!0}function incrementSkill(e){const[i,r]=e.sourceAttribute.split("_");getAttrs([r],e=>{const t=parseInt(e[r],10),o={};var n,a,e=(n="up"===i?t+1:t-1,a=!(!(a=roll_table[r])||!a.canGoAboveD20),a=boundStepValue(n,a));o[r]=e,o[r+"_tn"]=roll_step_tn[e],setAttrs(o,{silent:!0})})}function updateArm(e,t){e=weapons[e];update={},update["repeating_arms_"+t+"_arm_name"]=e.name,update["repeating_arms_"+t+"_arm_damage"]=e.damage,update["repeating_arms_"+t+"_arm_initiative"]=e.initiative,setAttrs(update,{silent:!0})}function updateCombatArmor(e){var{newValue:e}=e;combat_armor_die="0d0",combat_armor_ablative=0,"helmet_gorget"===e?(combat_armor_die="1d3",combat_armor_ablative=5):"helmet_breastplate"===e?(combat_armor_die="1d3",combat_armor_ablative=4):"breastplate"===e?(combat_armor_die="1d3",combat_armor_ablative=3):"mail"===e?(combat_armor_die="1d2",combat_armor_ablative=4):"buff"===e?(combat_armor_die="1d1",combat_armor_ablative=10):"helmet"===e&&(combat_armor_die="1d1",combat_armor_ablative=1),update={combat_armor_die:combat_armor_die,combat_armor_ablative:combat_armor_ablative},setAttrs(update,{silent:!0})}function updateCombatStat(o){var e=o.split("_")[0];const n=o.slice(0,-4),a=roll_table[e].mod+"_mod";getAttrs([a,o],e=>{const t={};t[n]=parseInt(e[o],10)+parseInt(e[a],10),setAttrs(t,{silent:!0})})}function updateDefense(){getAttrs(["strength_mod","dexterity_mod","attack_defense_mod","defend_defense_mod"],e=>{var{strength_mod:t,dexterity_mod:o,attack_defense_mod:n,defend_defense_mod:e}=e,e={attack_defense:parseInt(t,10)+parseInt(n,10),defend_defense:parseInt(o,10)+parseInt(e,10)};setAttrs(e,{silent:!0})})}function updateLifepathTable(e){var{newValue:e}=e,e=lifepath_table[e];if(!e||!e.name)return console.log("No lifepath data found"),!1;const o={lifepath_display:e.name},n={...e};return delete n.name,n[7]||(n[7]={1:0,2:0,3:0,4:0,5:0,6:0,condition:""}),function(){for(var[e,t]of Object.entries(n))!function(e,t){o["lp_"+e+"_1"]=t[1],o["lp_"+e+"_2"]=t[2],o["lp_"+e+"_3"]=t[3],o["lp_"+e+"_4"]=t[4],o["lp_"+e+"_5"]=t[5],o["lp_"+e+"_6"]=t[6],o["condition"+e]=t.condition}(e,t),function(e){o["cb_"+e+"_1"]=0,o["cb_"+e+"_2"]=0,o["cb_"+e+"_3"]=0,o["cb_"+e+"_4"]=0,o["cb_"+e+"_5"]=0,o["cb_"+e+"_6"]=0}(e)}(),setAttrs(o,{silent:!0}),!0}function updateModifier(e){const t={};var o=e.sourceAttribute,e=mod_table[e.newValue]||0;t[o+"_mod"]=e,setAttrs(t,{silent:!0}),"charisma"===o&&(updateCombatStat("voice_to_hit_mod"),updateCombatStat("voice_damage_mod")),"intelligence"===o&&(updateCombatStat("press_to_hit_mod"),updateCombatStat("press_damage_mod")),"strength"===o&&(updateCombatStat("melee_to_hit_mod"),updateCombatStat("melee_damage_mod"),updateDefense()),"dexterity"===o&&(updateCombatStat("musketry_to_hit_mod"),updateCombatStat("musketry_damage_mod"),updateDefense())}function updateReputationArmor(e){var{newValue:e}=e;reputation_armor_die="0d0",reputation_armor_ablative=0,"highest"===e?(reputation_armor_die="1d3",reputation_armor_ablative=5):"second"===e?(reputation_armor_die="1d2",reputation_armor_ablative=3):"lowest"===e&&(reputation_armor_ablative=1),update={reputation_armor_die:reputation_armor_die,reputation_armor_ablative:reputation_armor_ablative},setAttrs(update,{silent:!0})}on("change:trigger_strength change:trigger_intelligence change:trigger_wisdom change:trigger_dexterity change:trigger_constitution change:trigger_charisma change:trigger_nationality change:trigger_religion change:trigger_politics change:trigger_poison_plague change:trigger_terror change:trigger_chance change:trigger_artillery change:trigger_break change:trigger_improvise change:trigger_listen change:trigger_parley change:trigger_sang-froid change:trigger_search change:trigger_sneak change:trigger_traverse change:trigger_wealth",e=>{activateRollModal(e.sourceAttribute),closeWitsModal(),closeCombatModal()}),on("change:repeating_lifepath-skills:trigger_skill change:repeating_language-skills:trigger_skill",e=>{activateRepeatingRollModal(e.sourceAttribute),closeWitsModal(),closeCombatModal()}),on("change:close_modal",e=>{closeRollModal(),closeWitsModal(),closeCombatModal()}),on("change:strength change:intelligence change:wisdom change:dexterity change:constitution change:charisma",e=>{updateModifier(e)}),on("change:roll_mod change:tn_mod",()=>{updateRollModal()}),on("change:down_nationality change:down_religion change:down_politics change:up_nationality change:up_religion change:up_politics change:up_break change:up_improvise change:up_listen change:up_parley change:up_sang-froid change:up_search change:up_sneak change:up_traverse change:up_wealth change:down_break change:down_improvise change:down_listen change:down_parley change:down_sang-froid change:down_search change:down_sneak change:down_traverse change:down_wealth",e=>{incrementSkill(e)}),on("change:repeating_lifepath-skills:up_skill change:repeating_lifepath-skills:down_skill change:repeating_language-skills:up_skill change:repeating_language-skills:down_skill",e=>{incrementRepeatingSkill(e)}),on("change:trigger_voice change:trigger_press",e=>{activateWitsModal(e.sourceAttribute),closeRollModal(),closeCombatModal()}),on("change:wits_attack change:wits_distance change:wits_roll_mod change:wits_opponent_tn",e=>{updateWitsModal()}),on("change:voice_to_hit_mod change:voice_damage_mod change:press_to_hit_mod change:press_damage_mod change:melee_to_hit_mod change:melee_damage_mod change:musketry_to_hit_mod change:musketry_damage_mod",e=>{updateCombatStat(e.sourceAttribute)}),on("change:defend_defense_mod change:attack_defense_mod",()=>{updateDefense()}),on("change:repeating_arms:arm",e=>{var t=e.sourceAttribute.split("_")[2];updateArm(e.newValue,t)}),on("change:repeating_arms:arm_trigger",e=>{activateCombatModal(e.sourceAttribute.split("_")[2]),closeRollModal(),closeWitsModal()}),on("change:combat_attack change:combat_distance change:combat_roll_mod change:combat_opponent_tn change:combat_shot",()=>{updateCombatModal()}),on("change:trigger_melee",()=>{var e={show_combat_modal:1,combat_attack:"fist",trigger_melee:0,combat_roll_mod:combat_roll_mod=0};setAttrs(e,{silent:!0},()=>updateCombatModal())}),on("change:trigger_musketry",()=>{var e={show_combat_modal:1,combat_attack:"pistol",trigger_musketry:0,combat_roll_mod:combat_roll_mod=0};setAttrs(e,{silent:!0},()=>updateCombatModal())}),on("change:reputation_armor",e=>{updateReputationArmor(e)}),on("change:combat_armor",e=>{updateCombatArmor(e)}),on("change:lifepath",e=>{updateLifepathTable(e)});const lifepath_table={americain:{name:"Américain",1:{condition:"Work an honest trade for fair pay.",1:1,2:1,3:1,4:0,5:0,6:0},2:{condition:"Reconnect with an estranged family member.",1:0,2:0,3:1,4:0,5:1,6:0},3:{condition:"Honor your word when duplicity would be easier",1:0,2:1,3:0,4:1,5:0,6:1},4:{condition:"Avenge yourself on those who defamed you, hurt you, or stole from you.",1:1,2:0,3:1,4:0,5:1,6:0},5:{condition:"Adopt a new nation as your home.",1:0,2:0,3:0,4:0,5:1,6:0},6:{condition:"Overthrow one who would enslave others.",1:0,2:0,3:0,4:0,5:0,6:1}},clerk:{name:"Clerk",1:{condition:"Accurately copy an important document.",1:1,2:1,3:0,4:0,5:0,6:0},2:{condition:"Deface or alter a document while copying it.",1:1,2:1,3:1,4:0,5:0,6:0},3:{condition:"Keep record of an important event.",1:1,2:1,3:1,4:1,5:0,6:0},4:{condition:"Draw up a contract document.",1:0,2:1,3:1,4:1,5:1,6:0},5:{condition:"Maintain a set of quality inks and quills, despite poverty and adversity.",1:0,2:1,3:1,4:1,5:1,6:0},6:{condition:"Write a novel opinion and distribute it to your colleagues.",1:0,2:0,3:1,4:1,5:1,6:1}},explorer:{name:"Explorer",1:{condition:"Journey to a new place outside of your home country.",1:1,2:0,3:1,4:1,5:1,6:0},2:{condition:"Return home with something or someone rare, precious, unique or new.",1:1,2:1,3:1,4:0,5:0,6:0},3:{condition:"Learn a new language.",1:0,2:1,3:0,4:1,5:0,6:0},4:{condition:"Outwit a wily adversary.",1:0,2:0,3:1,4:0,5:1,6:0},5:{condition:"Push on into the unknown when everyone else would turn back.",1:0,2:0,3:1,4:0,5:1,6:0},6:{condition:"Claim a place or people for your sovereign.",1:0,2:0,3:0,4:1,5:1,6:1},7:{condition:"Conduct a daring overland trek or dangerous sea voyage.",1:0,2:0,3:0,4:0,5:1,6:1}},factotum:{name:"Factotum",1:{condition:"Make an important delivery for your master.",1:1,2:1,3:1,4:1,5:1,6:0},2:{condition:"Discreetly relay a vital message for your master.",1:0,2:1,3:1,4:1,5:1,6:1},3:{condition:"Knock down a ruffian who insults your master.",1:0,2:0,3:1,4:1,5:1,6:0},4:{condition:"Take a blow or the blame for your master.",1:0,2:0,3:0,4:1,5:1,6:1},5:{condition:"Alleviate your master of an odious burden.",1:0,2:0,3:0,4:0,5:1,6:1}},filou:{name:"Filou",1:{condition:"Swindle someone because they’re too dumb to keep what they have.",1:1,2:1,3:1,4:1,5:1,6:1},2:{condition:"Rob someone by force.",1:1,2:1,3:1,4:0,5:0,6:0},3:{condition:"Pick a fancy pocket simply because it’s there.",1:0,2:1,3:1,4:1,5:0,6:0},4:{condition:"Pick a lock guarding something secret, famous or uniquely precious.",1:0,2:0,3:1,4:1,5:0,6:0},5:{condition:"Pass off counterfeit money or forged papers as legitimate.",1:0,2:0,3:0,4:0,5:1,6:1},6:{condition:"Escape from justice for your crimes.",1:0,2:0,3:0,4:0,5:1,6:1}},gamine:{name:"Gamine",1:{condition:"Steal something valuable.",1:1,2:1,3:1,4:0,5:0,6:0},2:{condition:"Steal something important to someone just because you can.",1:0,2:1,3:1,4:1,5:0,6:0},3:{condition:"Clamber onto or into a place no one else would think to go.",1:0,2:0,3:1,4:1,5:0,6:0},4:{condition:"Make an improbable escape.",1:0,2:0,3:1,4:1,5:1,6:0},5:{condition:"Feign innocence or meekness to escape punishment for your crimes or to exact revenge on a rival.",1:0,2:1,3:1,4:0,5:1,6:0},6:{condition:"Be adopted by a powerful patron or kindly ally.",1:0,2:0,3:0,4:0,5:0,6:1}},jesuit:{name:"Jesuit",1:{condition:"Pray in your hour of need.",1:1,2:1,3:1,4:1,5:1,6:1},2:{condition:"Grant mercy or clemency to your enemies.",1:1,2:1,3:1,4:0,5:0,6:0},3:{condition:"Educate another into the Mysteries of the Faith.",1:0,2:1,3:1,4:1,5:1,6:1},4:{condition:"Convert another to Catholicism.",1:0,2:0,3:1,4:1,5:1,6:1},5:{condition:"Be relied upon for a great mission by the Father General.",1:0,2:0,3:0,4:1,5:1,6:1},6:{condition:"Found a new mission or Catholic community.",1:0,2:0,3:0,4:0,5:1,6:1},7:{condition:"Advise the powerful in how to walk the most Catholic path.",1:0,2:0,3:0,4:0,5:1,6:1}},merchant:{name:"Merchant",1:{condition:"Profit from trade.",1:1,2:2,3:3,4:0,5:0,6:0},2:{condition:"Open a new market for your business or drive your rival out of an existing market.",1:0,2:1,3:1,4:1,5:0,6:0},3:{condition:"Discover or create a new commodity.",1:0,2:0,3:1,4:1,5:1,6:0},4:{condition:"Found a company or have your own business fail and go into debt.",1:0,2:0,3:1,4:1,5:1,6:0},5:{condition:"Drive a rival out of business.",1:0,2:0,3:0,4:1,5:1,6:1},6:{condition:"Secure a monopoly through official license.",1:0,2:0,3:0,4:0,5:1,6:1}},musketeer:{name:"Musketeer",1:{condition:"Defend the honor of the Musketeers.",1:1,2:1,3:1,4:0,5:0,6:0},2:{condition:"Make your name heard to the king.",1:0,2:1,3:1,4:1,5:1,6:1},3:{condition:"Impress the Lieutenant-Captain of the Musketeers.",1:1,2:0,3:0,4:0,5:1,6:1},4:{condition:"Defend the honor of the queen.",1:1,2:1,3:0,4:0,5:1,6:1},5:{condition:"Defend your honor in a duel to the death.",1:1,2:0,3:1,4:0,5:1,6:0},6:{condition:"Charge at the van of a battle.",1:1,2:1,3:1,4:1,5:0,6:0}},occultist:{name:"Occultist",1:{condition:"Acquire a new libram, grimoire or spell.",1:1,2:1,3:1,4:1,5:0,6:0},2:{condition:"Discover a hidden meaning, secret or code in the text of the Bible.",1:0,2:1,3:0,4:1,5:0,6:1},3:{condition:"Bargain with a demon for personal gain.",1:0,2:0,3:1,4:1,5:1,6:1},4:{condition:"Demand a demon protect the innocent.",1:0,2:0,3:0,4:1,5:1,6:1},5:{condition:"Bind an angel to a mundane task.",1:0,2:0,3:0,4:1,5:1,6:1},6:{condition:"Bind an angel to serve good and stop an unjust act.",1:0,2:0,3:0,4:0,5:1,6:1}},officer:{name:"Officer",1:{condition:"Purchase or earn a promotion in rank (charge).",1:1,2:1,3:1,4:1,5:1,6:1},2:{condition:"Host a sumptuous meal for your fellow officers on campaign.",1:0,2:1,3:1,4:1,5:1,6:1},3:{condition:"Defend your honor in a duel.",1:0,2:1,3:1,4:0,5:0,6:0},4:{condition:"Engage in a battle and lead from the front.",1:1,2:1,3:1,4:1,5:0,6:0},5:{condition:"Win a battle.",1:0,2:0,3:0,4:1,5:1,6:0},6:{condition:"Form a new regiment and sell your charges.",1:0,2:0,3:0,4:0,5:0,6:1}},passeur:{name:"Passeur",1:{condition:"Avoid paying your taxes.",1:1,2:1,3:1,4:0,5:0,6:0},2:{condition:"Smuggle contraband into the city.",1:0,2:1,3:1,4:1,5:0,6:0},3:{condition:"Keep your boat in good repair.",1:0,2:0,3:1,4:1,5:1,6:0},4:{condition:"Smuggle a person in trouble out of the city.",1:0,2:0,3:1,4:1,5:1,6:0},5:{condition:"Skim some of the take for yourself.",1:0,2:0,3:0,4:1,5:1,6:1},6:{condition:"Bribe the night watch, customs post or intendant.",1:0,2:0,3:0,4:0,5:1,6:1}},petty_noble:{name:"Petty Noble",1:{condition:"Gain the favor of a powerful member of court.",1:1,2:0,3:1,4:0,5:1,6:0},2:{condition:"Fight a duel to defend your reputation.",1:1,2:0,3:1,4:0,5:1,6:0},3:{condition:"Increase your title or rank.",1:0,2:0,3:1,4:0,5:1,6:0},4:{condition:"Gain a royal or official office.",1:0,2:1,3:0,4:1,5:0,6:1},5:{condition:"Come fashionably dressed to a ball or fêtê.",1:0,2:1,3:0,4:1,5:0,6:1},6:{condition:"Gain a grant of land.",1:0,2:0,3:0,4:1,5:0,6:1}},philosopher:{name:"Philosopher",1:{condition:"Find or invent a new chymistry recipe.",1:1,2:1,3:0,4:1,5:0,6:1},2:{condition:"Discover and read a new Latin or Greek text",1:1,2:1,3:1,4:1,5:1,6:0},3:{condition:"Using chymistry in an unintended way",1:0,2:1,3:0,4:1,5:0,6:1},4:{condition:"Write a novel opinion on a scientific subject",1:0,2:0,3:1,4:0,5:1,6:1},5:{condition:"Connect two apparently unrelated phenomena into one hypothesis",1:0,2:0,3:0,4:1,5:1,6:1},6:{condition:"Trace a lineage from scientific fact to divine.",1:0,2:0,3:0,4:0,5:1,6:1}},sailor:{name:"Sailor",1:{condition:"Get drunk in a new port.",1:1,2:1,3:1,4:1,5:1,6:1},2:{condition:"Visit new seas or coasts.",1:1,2:1,3:1,4:1,5:1,6:1},3:{condition:"Cross the equator.",1:0,2:0,3:0,4:1,5:1,6:1},4:{condition:"Overhaul or outrace a ship of the same rating or an ostensibly faster ship.",1:0,2:0,3:0,4:0,5:1,6:1},5:{condition:"Score a critical hit as gun crew in a battle.",1:0,2:1,3:0,4:1,5:0,6:0},6:{condition:"Get lashed for a disciplinary infraction.",1:0,2:0,3:1,4:0,5:0,6:0}},soldier:{name:"Soldier",1:{condition:"Stand your ground under heavy musket fire or an artillery barrage.",1:1,2:1,3:1,4:0,5:0,6:0},2:{condition:"Defeat an opponent of greater skill or strength.",1:1,2:1,3:1,4:0,5:0,6:0},3:{condition:"Break into and steal valuables or stores of food despite the protests of the owner.",1:0,2:1,3:1,4:1,5:0,6:0},4:{condition:"Protect your mate in battle.",1:0,2:1,3:1,4:1,5:1,6:0},5:{condition:"Keep a fine hat, fancy cloak or silken blouse.",1:0,2:0,3:1,4:1,5:1,6:0},6:{condition:"Show mercy to a worthy opponent.",1:0,2:0,3:0,4:1,5:1,6:1},7:{condition:"Purchase a promotion.",1:0,2:0,3:0,4:0,5:1,6:1}}},mod_table={3:-3,4:-2,5:-2,6:-1,7:-1,8:-1,9:0,10:0,11:0,12:0,13:1,14:1,15:1,16:2,17:2,18:3},roll_step_die={0:"d10",1:"d6",2:"d6",3:"d6",4:"d6",5:"d6",6:"d8",7:"d10",8:"d12",9:"d20",10:"d100",11:"d100",12:"d100",13:"d100"},roll_step_tn={0:1,1:1,2:2,3:3,4:4,5:5,6:7,7:9,8:11,9:19,10:96,11:97,12:98,13:99},roll_table={strength:{type:"d20"},intelligence:{type:"d20"},wisdom:{type:"d20"},dexterity:{type:"d20"},constitution:{type:"d20"},charisma:{type:"d20"},nationality:{type:"skill"},religion:{type:"skill"},politics:{type:"skill"},poison_plague:{type:"save",name:"POISON & PLAGUE"},terror:{type:"save"},chance:{type:"save"},artillery:{type:"save"},voice:{type:"wits",mod:"charisma"},press:{type:"wits",mod:"intelligence"},melee:{type:"combat",mod:"strength"},musketry:{type:"combat",mod:"dexterity"},break:{type:"skill"},improvise:{type:"skill"},listen:{type:"skill"},parley:{type:"skill"},"sang-froid":{type:"skill"},search:{type:"skill"},sneak:{type:"skill"},traverse:{type:"skill"},wealth:{type:"skill",canGoAboveD20:!0}},weapons={cudgel:{name:"Cudgel",type:"melee",damage:"1d4",rank:1,initiative:"15th"},cutlass:{name:"Cutlass",type:"melee",damage:"1d6",rank:1,initiative:"14th"},fist:{name:"Fist",type:"melee",damage:"1d2",rank:1,initiative:"17th"},grenade:{name:"Grenade",type:"ranged",damage:"1d8",rank:0,initiative:"18th",range:{short:{distance:"5sq",shot:14,tough_shot:18},medium:{distance:"10sq",shot:16,tough_shot:20},long:{distance:"20sq",shot:18,tough_shot:"20n"}}},halberd:{name:"Halberd",type:"melee",damage:"1d6",rank:2,initiative:"7th"},harquebus:{name:"Harquebus",type:"ranged",damage:"1d6",rank:2,initiative:"2nd",range:{short:{distance:"50sq",shot:12,tough_shot:15},medium:{distance:"200sq",shot:15,tough_shot:19},long:{distance:"400sq",shot:17,tough_shot:"20n"}}},long_sword:{name:"Long Sword",type:"melee",damage:"1d8",rank:1,initiative:"10th"},musket:{name:"Musket",type:"ranged",damage:"2d4",rank:2,initiative:"4th",range:{short:{distance:"20sq",shot:12,tough_shot:16},medium:{distance:"100sq",shot:16,tough_shot:19},long:{distance:"200sq",shot:18,tough_shot:"20n"}}},mousqueton_ball:{name:"Mousqueton(ball)",type:"ranged",damage:"1d6+1",rank:2,initiative:"2nd",range:{short:{distance:"10sq",shot:14,tough_shot:16},medium:{distance:"50sq",shot:16,tough_shot:20},long:{distance:"100sq",shot:20,tough_shot:"20n"}}},mousqueton_shot:{name:"Mousqueton(shot)",type:"ranged",damage:"1d6+1",rank:2,initiative:"2nd",range:{short:{distance:"5sq",shot:10,tough_shot:15},medium:{distance:"10sq",shot:15,tough_shot:17},long:{distance:"20sq",shot:18,tough_shot:20}}},pike:{name:"Pike",type:"melee",damage:"1d6",rank:3,initiative:"6th"},poignard:{name:"Poignard",type:"melee",damage:"1d3",rank:1,initiative:"12th"},pistol:{name:"Pistol",type:"ranged",damage:"1d4",rank:2,initiative:"1st",range:{short:{distance:"5sq",shot:13,tough_shot:17},medium:{distance:"20sq",shot:15,tough_shot:19},long:{distance:"30sq",shot:17,tough_shot:"20n"}}},plug_bayonet:{name:"Plug Bayonet",type:"melee",damage:"1d4",rank:2,initiative:"8th"},rapier:{name:"Rapier",type:"melee",damage:"1d4",rank:1,initiative:"9th"},rifle:{name:"Rifle",type:"ranged",damage:"1d8",rank:2,initiative:"3rd",range:{short:{distance:"50sq",shot:12,tough_shot:14},medium:{distance:"200sq",shot:14,tough_shot:18},long:{distance:"400sq",shot:16,tough_shot:20}}},saber:{name:"Saber",type:"melee",damage:"2d3",rank:1,initiative:"11th"},thrown_knife:{name:"Thrown Knife",type:"ranged",damage:"1d3",rank:1,initiative:"16th",range:{short:{distance:"5sq",shot:13,tough_shot:17},medium:{distance:"10sq",shot:15,tough_shot:19},long:{distance:"20sq",shot:17,tough_shot:"20n"}}}},wits_attacks={accuse:{intimate:{tn:"Intelligence",dmg:"1d6"},speaking:{tn:12,dmg:"2d4"},shouting:{tn:16,dmg:"1d4"},press:{tn:12,dmg:"2d6; 1d6"},rof:"1 every 3 rounds",name:"Accuse"},beg_pardon:{intimate:{tn:"Charisma",dmg:"1d6"},speaking:{tn:9,dmg:"1d4"},shouting:{tn:18,dmg:"1d2"},press:{tn:16,dmg:"1d4"},rof:"1 every other round",name:"Beg Pardon"},bribe:{intimate:{tn:"Wisdom",dmg:"1d4"},speaking:{tn:14,dmg:"1d3"},shouting:{tn:19,dmg:"1d2"},press:{tn:20,dmg:"1d6"},rof:"Once per combat",name:"Bribe"},confess:{intimate:{tn:"Wisdom",dmg:"2d4"},speaking:{tn:14,dmg:"1d6"},shouting:{tn:20,dmg:"1d3"},press:{tn:16,dmg:"1d6; 1d8"},rof:"Once per combat",name:"Confess"},educate:{intimate:{tn:"Intelligence",dmg:"2d3"},speaking:{tn:16,dmg:"1d6"},shouting:{tn:"20n",dmg:"1d2"},press:{tn:18,dmg:"1d3"},rof:"1 every other round",name:"Educate"},flatter:{intimate:{tn:"Wisdom",dmg:"1d6"},speaking:{tn:13,dmg:"1d4"},shouting:{tn:18,dmg:"1d2"},press:{tn:14,dmg:"1d4"},rof:"Once per round",name:"Flatter"},implore:{intimate:{tn:"Wisdom",dmg:"2d3"},speaking:{tn:15,dmg:"1d6"},shouting:{tn:20,dmg:"1d2"},press:{tn:"20n",dmg:"1d8"},rof:"Once per round",name:"Implore"},insult:{intimate:{tn:"Intelligence",dmg:"1d4; 1d2-1"},speaking:{tn:11,dmg:"1d8; 1d2"},shouting:{tn:16,dmg:"1d6; 1d3"},press:{tn:9,dmg:"1d6; 1d6"},rof:"1 every other round",name:"Insult"},poison:{intimate:{tn:"Intelligence",dmg:"1d8"},speaking:{tn:15,dmg:"1d6"},shouting:{tn:20,dmg:"1d2"},press:{tn:10,dmg:"1d6; 1d6+1"},rof:"1 every other round",name:"Poison"},seduce:{intimate:{tn:"Charisma",dmg:"2d4"},speaking:{tn:14,dmg:"1d4"},shouting:{tn:19,dmg:"1d2"},press:{tn:"20n",dmg:"1d2"},rof:"1 every other round",name:"Seduce"},shame:{intimate:{tn:"Wisdom",dmg:"1d4"},speaking:{tn:12,dmg:"2d4"},shouting:{tn:17,dmg:"1d10"},press:{tn:16,dmg:"1d4; 1d6"},rof:"Once per round",name:"Shame"},threaten:{intimate:{tn:"Intelligence",dmg:"1d8+1"},speaking:{tn:15,dmg:"1d6"},shouting:{tn:20,dmg:"1d4"},press:{tn:15,dmg:"1d6"},rof:"1 every other round",name:"Threaten"}};function boundStepValue(e,t){return e<0&&(e=0),t?13<e&&(e=13):9<e&&(e=9),e}function getTrimmedAttribute(e){return e.substring(8)}