1 line
28 KiB
JavaScript
1 line
28 KiB
JavaScript
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)} |