Blood on the Clocktower Town Square
\ No newline at end of file
+Blood on the Clocktower Town Square
\ No newline at end of file
diff --git a/js/app.7b720de5.js b/js/app.7b720de5.js
new file mode 100644
index 0000000..e880a8c
--- /dev/null
+++ b/js/app.7b720de5.js
@@ -0,0 +1,2 @@
+(function(e){function t(t){for(var r,n,a=t[0],l=t[1],h=t[2],m=0,c=[];m2?i("li",{on:{click:e.randomizeSeatings}},[i("em",[e._v("R")]),e._v("andomize Seatings ")]):e._e(),e.players.length?i("li",{on:{click:e.clearPlayers}},[e._v(" Clear Players ")]):e._e(),e.players.length?i("li",{on:{click:e.clearRoles}},[e._v(" Clear Roles ")]):e._e(),e.players.length>4?i("li",{on:{click:e.showEditionModal}},[e._v(" Select Edition ")]):e._e(),e.players.length>4?i("li",{on:{click:e.showRoleModal}},[e._v(" Select Roles ")]):e._e()]):e._e()],1)],1)},s=[],n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"square",class:{public:e.isPublic},style:{zoom:e.zoom},attrs:{id:"townsquare"}},[i("ul",{staticClass:"circle",class:["size-"+e.players.length]},e._l(e.players,(function(t,r){return i("Player",{key:r,attrs:{player:t,roles:e.roles,"is-public":e.isPublic,zoom:e.zoom},on:{"add-reminder":e.openReminderModal,"set-role":e.openRoleModal,"remove-player":e.removePlayer,screenshot:function(t){return e.$emit("screenshot",t)}}})})),1),e.players.length>6?i("div",{ref:"bluffs",staticClass:"bluffs"},[i("h3",[e._v("Demon bluffs")]),i("font-awesome-icon",{attrs:{icon:"camera"},on:{click:function(t){return t.stopPropagation(),e.takeScreenshot(t)}}}),i("ul",[i("li",{on:{click:function(t){return e.openRoleModal(e.bluffs[0])}}},[i("Token",{attrs:{role:e.bluffs[0].role}})],1),i("li",{on:{click:function(t){return e.openRoleModal(e.bluffs[1])}}},[i("Token",{attrs:{role:e.bluffs[1].role}})],1),i("li",{on:{click:function(t){return e.openRoleModal(e.bluffs[2])}}},[i("Token",{attrs:{role:e.bluffs[2].role}})],1)])],1):e._e(),i("Modal",{directives:[{name:"show",rawName:"v-show",value:e.availableReminders.length&&e.selectedPlayer,expression:"availableReminders.length && selectedPlayer"}],on:{close:e.closeModal}},[i("h3",[e._v("Choose a reminder token:")]),i("ul",{staticClass:"reminders"},e._l(e.availableReminders,(function(t){return i("li",{key:t.role+" "+t.name,staticClass:"reminder",class:[t.role],on:{click:function(i){return e.addReminder(t)}}},[e._v(" "+e._s(t.name)+" ")])})),0)]),i("Modal",{directives:[{name:"show",rawName:"v-show",value:e.availableRoles.length&&e.selectedPlayer,expression:"availableRoles.length && selectedPlayer"}],on:{close:e.closeModal}},[i("h3",[e._v("Choose a new role:")]),i("ul",{staticClass:"tokens"},e._l(e.availableRoles,(function(t){return i("li",{key:t.id,class:[t.team],on:{click:function(i){return e.setRole(t)}}},[i("Token",{attrs:{role:t}})],1)})),0)])],1)},a=[],l=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("li",[i("div",{ref:"player",staticClass:"player",class:{dead:e.player.hasDied,"no-vote":e.player.hasVoted,traveler:e.player.role&&"traveler"===e.player.role.team}},[i("div",{staticClass:"shroud",on:{click:function(t){return e.toggleStatus()}}}),i("div",{staticClass:"life",on:{click:function(t){return e.toggleStatus()}}}),e.player.firstNight?i("div",{staticClass:"night first"},[i("em",[e._v(e._s(e.player.firstNight)+".")]),i("span",[e._v(e._s(e.player.role.firstNightReminder))])]):e._e(),e.player.otherNight?i("div",{staticClass:"night other"},[i("em",[e._v(e._s(e.player.otherNight)+".")]),i("span",[e._v(e._s(e.player.role.otherNightReminder))])]):e._e(),i("Token",{attrs:{role:e.player.role},on:{"set-role":e.setRole}}),i("div",{staticClass:"name",on:{click:e.changeName}},[i("span",{staticClass:"screenshot",on:{click:function(t){return t.stopPropagation(),e.takeScreenshot(t)}}},[i("font-awesome-icon",{attrs:{icon:"camera"}})],1),i("span",{staticClass:"name"},[e._v(" "+e._s(e.player.name)+" ")]),i("span",{staticClass:"remove",on:{click:function(t){return t.stopPropagation(),e.$emit("remove-player",e.player)}}},[i("font-awesome-icon",{attrs:{icon:"times-circle"}})],1)])],1),e.player.reminders?e._l(e.player.reminders,(function(t){return i("div",{key:t.role+" "+t.name,staticClass:"reminder",class:[t.role],on:{click:function(i){return e.removeReminder(t)}}},[e._v(" "+e._s(t.name)+" ")])})):e._e(),i("div",{staticClass:"reminder add",on:{click:function(t){return e.$emit("add-reminder",e.player)}}})],2)},h=[],d=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"token",class:[e.role.id],on:{click:e.setRole}},[e.role.firstNight?i("span",{staticClass:"leaf-left"}):e._e(),e.role.otherNight?i("span",{staticClass:"leaf-right"}):e._e(),e.role.reminders&&e.role.reminders.length?i("span",{class:["leaf-top"+e.role.reminders.length]}):e._e(),e.role.setup?i("span",{staticClass:"leaf-orange"}):e._e(),i("div",{staticClass:"name"},[e._v(e._s(e.role.name))]),e.role.ability?i("div",{staticClass:"ability"},[e._v(" "+e._s(e.role.ability)+" ")]):e._e()])},m=[],c={name:"Token",props:{role:{type:Object,required:!0}},data(){return{}},methods:{setRole(){this.$emit("set-role")}}},u=c,g=(i("8c9c"),i("2877")),f=Object(g["a"])(u,d,m,!1,null,"eb60a182",null),y=f.exports,p={components:{Token:y},props:{player:{type:Object,required:!0},roles:{type:Map,required:!0},isPublic:{type:Boolean,required:!0},zoom:{type:Number,required:!0}},data(){return{}},methods:{takeScreenshot(){const{width:e,height:t,x:i,y:r}=this.$refs.player.getBoundingClientRect();this.$emit("screenshot",{width:e*this.zoom,height:t*this.zoom,x:i*this.zoom,y:r*this.zoom})},toggleStatus(){this.isPublic?this.player.hasDied?this.player.hasVoted?(this.$set(this.player,"hasVoted",!1),this.$set(this.player,"hasDied",!1)):this.$set(this.player,"hasVoted",!0):this.$set(this.player,"hasDied",!0):this.$set(this.player,"hasDied",!this.player.hasDied)},setRole(){this.$emit("set-role",this.player)},changeName(){const e=prompt("Player name",this.player.name);this.player.name=e||this.player.name},removeReminder(e){this.player.reminders.splice(this.player.reminders.indexOf(e),1)}}},N=p,b=(i("74c9"),Object(g["a"])(N,l,h,!1,null,null,null)),v=b.exports,R=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"modal-fade"}},[i("div",{staticClass:"modal-backdrop",on:{click:e.close}},[i("div",{staticClass:"modal",attrs:{role:"dialog","aria-labelledby":"modalTitle","aria-describedby":"modalDescription"},on:{click:function(e){e.stopPropagation()}}},[i("font-awesome-icon",{staticClass:"close",attrs:{icon:"times-circle"},on:{click:e.close}}),e._t("default")],2)])])},w=[],k={methods:{close(){this.$emit("close")}}},_=k,S=(i("30db"),Object(g["a"])(_,R,w,!1,null,null,null)),O=S.exports,E={components:{Token:y,Modal:O,Player:v},props:{isPublic:{type:Boolean,required:!0},players:{type:Array,required:!0},roles:{type:Map,required:!0},zoom:{type:Number,required:!0}},data(){return{selectedPlayer:!1,availableReminders:[],availableRoles:[],bluffs:Array(3).fill({}).map(()=>({role:{}}))}},methods:{takeScreenshot(){const{width:e,height:t,x:i,y:r}=this.$refs.bluffs.getBoundingClientRect();this.$emit("screenshot",{width:e,height:t,x:i,y:r})},openReminderModal(e){this.availableRoles=[],this.availableReminders=[],this.selectedPlayer=e,this.roles.forEach(e=>{this.players.some(t=>t.role.id===e.id)&&(this.availableReminders=[...this.availableReminders,...e.reminders.map(t=>({role:e.id,name:t}))])}),this.availableReminders.push({role:"good",name:"Good"}),this.availableReminders.push({role:"evil",name:"Evil"})},openRoleModal(e){this.availableRoles=[],this.availableReminders=[],this.selectedPlayer=e,this.roles.forEach(t=>{e.role&&t.id!==e.role.id&&this.availableRoles.push(t)}),this.availableRoles.push({})},addReminder(e){this.selectedPlayer.reminders.push(e),this.closeModal()},setRole(e){this.selectedPlayer.role=e,this.closeModal()},closeModal(){this.selectedPlayer=!1},removePlayer(e){confirm(`Do you really want to remove ${e.name}?`)&&this.players.splice(this.players.indexOf(e),1)}}},C=E,D=(i("3636"),Object(g["a"])(C,n,a,!1,null,null,null)),P=D.exports,M=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ul",{staticClass:"info"},[i("li",{staticClass:"edition",class:["edition-"+e.edition]}),e.players.length-e.teams.traveler<5?i("li",[e._v("Please add more players!")]):e._e(),i("li",[e._v(" "+e._s(e.players.length)+" "),i("font-awesome-icon",{staticClass:"players",attrs:{icon:"users"}}),e._v(" "+e._s(e.teams.alive)+" "),i("font-awesome-icon",{staticClass:"alive",attrs:{icon:"heartbeat"}}),e._v(" "+e._s(e.teams.votes)+" "),i("font-awesome-icon",{staticClass:"votes",attrs:{icon:"vote-yea"}})],1),e.players.length-e.teams.traveler>=5?i("li",[e._v(" "+e._s(e.teams.townsfolk)+" "),i("font-awesome-icon",{staticClass:"townsfolk",attrs:{icon:"user-friends"}}),e._v(" "+e._s(e.teams.outsider)+" "),i("font-awesome-icon",{staticClass:"outsider",attrs:{icon:e.teams.outsider>1?"user-friends":"user"}}),e._v(" "+e._s(e.teams.minion)+" "),i("font-awesome-icon",{staticClass:"minion",attrs:{icon:e.teams.minion>1?"user-friends":"user"}}),e._v(" "+e._s(e.teams.demon)+" "),i("font-awesome-icon",{staticClass:"demon",attrs:{icon:e.teams.demon>1?"user-friends":"user"}}),e.teams.traveler?[e._v(" "+e._s(e.teams.traveler)+" "),i("font-awesome-icon",{staticClass:"traveler",attrs:{icon:e.teams.traveler>1?"user-friends":"user"}})]:e._e()],2):e._e()])},x=[],T=i("634a"),I={props:{players:{type:Array,required:!0},edition:{type:String,required:!0}},computed:{teams:function(){const e=Math.min(this.players.filter(e=>"traveler"!==e.role.team).length,15),t=this.players.filter(e=>!0!==e.hasDied).length;return{...T[e-5],traveler:this.players.length-e,alive:t,votes:t+this.players.filter(e=>!0===e.hasDied&&!0!==e.hasVoted).length}}}},A=I,z=(i("8d43"),Object(g["a"])(A,M,x,!1,null,null,null)),$=z.exports,j=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("Modal",{directives:[{name:"show",rawName:"v-show",value:e.isOpen,expression:"isOpen"}],staticClass:"roles",on:{close:function(t){return e.close()}}},[i("h3",[e._v("Select the roles for "+e._s(e.nontravelerPlayers)+" players:")]),e._l(e.roleSelection,(function(t,r){return i("ul",{key:r,staticClass:"tokens"},[i("li",{staticClass:"count",class:[r]},[e._v(" "+e._s(t.filter((function(e){return e.selected})).length)+" / "+e._s(e.game[e.nontravelerPlayers-5][r])+" ")]),e._l(t,(function(e){return i("li",{key:e.id,class:[e.team,e.selected?"selected":""],on:{click:function(t){e.selected=!e.selected}}},[i("Token",{attrs:{role:e}})],1)}))],2)})),e.hasSelectedSetupRoles?i("div",{staticClass:"warning"},[e._v(" Warning: there are roles selected that modify the game setup! The randomizer does not account for these roles. ")]):e._e(),i("div",{staticClass:"button-group"},[i("div",{staticClass:"button",class:{disabled:e.selectedRoles>e.nontravelerPlayers||!e.selectedRoles},on:{click:e.assignRoles}},[e._v(" Assign "+e._s(e.selectedRoles)+" roles randomly ")]),i("div",{staticClass:"button",on:{click:e.selectRandomRoles}},[e._v(" Randomize roles ")])])],2)},B=[];const Y=e=>e[Math.floor(Math.random()*e.length)];var q={components:{Token:y,Modal:O},props:{players:{type:Array,required:!0},roles:{type:Map,required:!0},isOpen:{type:Boolean,required:!0}},data:function(){return{roleSelection:{},game:T}},computed:{nontravelerPlayers:function(){return Math.min(this.players.filter(({role:e})=>e&&"traveler"!==e.team).length,15)},selectedRoles:function(){return Object.values(this.roleSelection).map(e=>e.filter(e=>e.selected).length).reduce((e,t)=>e+t,0)},hasSelectedSetupRoles:function(){return Object.values(this.roleSelection).some(e=>e.some(e=>e.selected&&e.setup))}},methods:{close(){this.$emit("close")},selectRandomRoles(){this.roleSelection={},this.roles.forEach(e=>{this.roleSelection[e.team]||this.$set(this.roleSelection,e.team,[]),this.roleSelection[e.team].push(e),this.$set(e,"selected",!1)}),delete this.roleSelection["traveler"];const e=Math.max(5,this.nontravelerPlayers),t=this.game[e-5];Object.keys(t).forEach(e=>{for(let i=0;i!0!==e.selected);t.length&&(Y(t).selected=!0)}})},assignRoles(){if(this.selectedRoles<=this.nontravelerPlayers&&this.selectedRoles){const e=Object.values(this.roleSelection).map(e=>e.filter(e=>e.selected)).reduce((e,t)=>[...e,...t],[]).map(e=>[Math.random(),e]).sort((e,t)=>e[0]-t[0]).map(e=>e[1]);this.players.forEach(t=>{"traveler"!==t.role.team&&e.length&&(t.role=e.pop())}),this.close()}}},mounted:function(){Object.keys(this.roleSelection).length||this.selectRandomRoles()},watch:{roles(){this.selectRandomRoles()}}},G=q,U=(i("81b8"),Object(g["a"])(G,j,B,!1,null,null,null)),V=U.exports,W=i("b1d9"),J=i("00c0"),F=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"screenshot"}},[i("video",{ref:"video",attrs:{autoplay:""}}),i("canvas",{ref:"canvas"})])},H=[],L={data:function(){return{stream:null}},methods:{async capture({x:e,y:t,width:i,height:r}){const o=this.$refs.canvas,s=this.$refs.video;if(!this.stream||!this.stream.active){alert("Please select to stream the current browser tab to get the appropriate screenshots");try{this.stream=await navigator.mediaDevices.getDisplayMedia({video:{cursor:"never"},audio:!1})}catch(n){this.$emit("error",n)}}this.stream&&this.stream.active&&(s.srcObject=this.stream,s.play(),setTimeout(()=>{const a=o.getContext("2d");o.setAttribute("width",i||s.videoWidth),o.setAttribute("height",r||s.videoHeight),a.drawImage(s,e||0,t||0,i||s.videoWidth,r||s.videoHeight,0,0,i||s.videoWidth,r||s.videoHeight),o.toBlob(e=>{try{const t=new ClipboardItem({"image/png":e});navigator.clipboard.write([t]),this.$emit("success")}catch(n){this.$emit("error",n)}})},100))}}},K=L,Z=(i("9ded"),Object(g["a"])(K,F,H,!1,null,"54d26403",null)),Q=Z.exports,X={components:{Screenshot:Q,TownSquare:P,TownInfo:$,Modal:O,RoleSelectionModal:V},data:function(){return{editions:J,isPublic:!0,isControlOpen:!1,isEditionModalOpen:!1,isRoleModalOpen:!1,isScreenshotSuccess:!1,isScreenshot:!1,players:[],roles:this.getRolesByEdition(),edition:"tb",zoom:1}},methods:{takeScreenshot(e={}){this.isControlOpen=!1,this.isScreenshotSuccess=!1,this.isScreenshot=!0,this.$refs.screenshot.capture(e)},onScreenshot(e=!1){this.isScreenshotSuccess=e,this.isScreenshot=!1},togglePublic(){this.isPublic=!this.isPublic,this.isControlOpen=!1},addPlayer(){const e=prompt("Player name");e&&this.players.push({name:e,role:{},reminders:[]})},randomizeSeatings(){this.isPublic=!1,this.isControlOpen=!1,confirm("Are you sure you want to randomize seatings?")&&(this.players=this.players.map(e=>[Math.random(),e]).sort((e,t)=>e[0]-t[0]).map(e=>e[1]))},clearPlayers(){this.isControlOpen=!1,confirm("Are you sure you want to remove all players?")&&(this.players=[])},clearRoles(){this.isControlOpen=!1,confirm("Are you sure you want to remove all player roles?")&&this.players.forEach(e=>{e.role={},e.reminders=[]})},getRolesByEdition(e="tb"){const t=J.find(({id:t})=>t===e);return new Map(W.filter(i=>i.edition===e||t.roles.includes(i.id)).sort((e,t)=>t.team.localeCompare(e.team)).map(e=>[e.id,e]))},showEditionModal(){this.isEditionModalOpen=!0,this.isPublic=!1,this.isControlOpen=!1},setEdition(e){this.edition=e,this.isEditionModalOpen=!1},showRoleModal(){this.isRoleModalOpen=!0,this.isPublic=!1,this.isControlOpen=!1},keyup({key:e}){switch(e){case"g":this.togglePublic();break;case"a":this.addPlayer();break;case"r":this.randomizeSeatings();break}}},mounted(){void 0!==localStorage.isPublic&&(this.isPublic=JSON.parse(localStorage.isPublic)),localStorage.edition&&(this.edition=localStorage.edition,this.roles=this.getRolesByEdition(this.edition)),localStorage.players&&(this.players=JSON.parse(localStorage.players).map(e=>({...e,role:this.roles.get(e.role)||{}})))},watch:{players:{handler(e){const t=[0],i=[0];e.forEach(({role:e})=>{e.firstNight&&!t.includes(e.firstNight)&&t.push(e.firstNight),e.otherNight&&!i.includes(e.otherNight)&&i.push(e.otherNight)}),t.sort(),i.sort(),e.forEach(e=>{e.firstNight=Math.max(t.indexOf(e.role.firstNight),0),e.otherNight=Math.max(i.indexOf(e.role.otherNight),0)}),localStorage.players=JSON.stringify(e.map(e=>({...e,role:e.role.id||{}})))},deep:!0},edition(e){localStorage.edition=e,this.roles=this.getRolesByEdition(e)},isPublic(e){localStorage.isPublic=JSON.stringify(e)}}},ee=X,te=(i("5c0b"),Object(g["a"])(ee,o,s,!1,null,null,null)),ie=te.exports,re=i("ecee"),oe=i("c074"),se=i("ad3d");re["c"].add(oe["i"],oe["c"],oe["j"],oe["h"],oe["g"],oe["f"],oe["b"],oe["d"],oe["e"],oe["a"]),r["a"].component("font-awesome-icon",se["a"]),r["a"].config.productionTip=!1,new r["a"]({render:e=>e(ie)}).$mount("#app")},"5c0b":function(e,t,i){"use strict";var r=i("9c0c"),o=i.n(r);o.a},"634a":function(e){e.exports=JSON.parse('[{"townsfolk":3,"outsider":0,"minion":1,"demon":1},{"townsfolk":3,"outsider":1,"minion":1,"demon":1},{"townsfolk":5,"outsider":0,"minion":1,"demon":1},{"townsfolk":5,"outsider":1,"minion":1,"demon":1},{"townsfolk":5,"outsider":2,"minion":1,"demon":1},{"townsfolk":7,"outsider":0,"minion":2,"demon":1},{"townsfolk":7,"outsider":1,"minion":2,"demon":1},{"townsfolk":7,"outsider":2,"minion":2,"demon":1},{"townsfolk":9,"outsider":0,"minion":3,"demon":1},{"townsfolk":9,"outsider":1,"minion":3,"demon":1},{"townsfolk":9,"outsider":2,"minion":3,"demon":1}]')},"74c9":function(e,t,i){"use strict";var r=i("9fd8"),o=i.n(r);o.a},"7a65":function(e,t,i){},"81b8":function(e,t,i){"use strict";var r=i("2197"),o=i.n(r);o.a},"899d":function(e,t,i){},"8c9c":function(e,t,i){"use strict";var r=i("899d"),o=i.n(r);o.a},"8d43":function(e,t,i){"use strict";var r=i("7a65"),o=i.n(r);o.a},"9c0c":function(e,t,i){},"9ded":function(e,t,i){"use strict";var r=i("a613"),o=i.n(r);o.a},"9fd8":function(e,t,i){},a613:function(e,t,i){},b1d9:function(e){e.exports=JSON.parse('[{"id":"washerwoman","name":"Washerwoman","edition":"tb","team":"townsfolk","firstNight":15,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":["Townsfolk","Decoy"],"setup":false,"ability":"You start knowing 1 of 2 players is a particular Townsfolk."},{"id":"librarian","name":"Librarian","edition":"tb","team":"townsfolk","firstNight":16,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":["Outsider","Decoy"],"setup":false,"ability":"You start knowing that 1 of 2 players is a particular Outsider. (Or that zero are in play)"},{"id":"investigator","name":"Investigator","edition":"tb","team":"townsfolk","firstNight":17,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":["Minion","Decoy"],"setup":false,"ability":"You start knowing 1 of 2 players is a particular Minion."},{"id":"chef","name":"Chef","edition":"tb","team":"townsfolk","firstNight":18,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"ability":"You start knowing how many pairs of evil players there are."},{"id":"empath","name":"Empath","edition":"tb","team":"townsfolk","firstNight":19,"firstNightReminder":"","otherNight":37,"otherNightReminder":"","reminders":[],"setup":false,"ability":"Each night, you learn how many of your 2 alive neighbours are evil."},{"id":"fortuneteller","name":"Fortune Teller","edition":"tb","team":"townsfolk","firstNight":20,"firstNightReminder":"","otherNight":38,"otherNightReminder":"","reminders":["Decoy"],"setup":false,"ability":"Each night, choose 2 players: you learn if either is a Demon. There is 1 good player that registers falsely to you."},{"id":"undertaker","name":"Undertaker","edition":"tb","team":"townsfolk","firstNight":0,"firstNightReminder":"","otherNight":40,"otherNightReminder":"","reminders":["Executed"],"setup":false,"ability":"Each night*, you learn which character died by execution today."},{"id":"monk","name":"Monk","edition":"tb","team":"townsfolk","firstNight":0,"firstNightReminder":"","otherNight":8,"otherNightReminder":"","reminders":["Protected"],"setup":false,"ability":"Each night*, choose a player (not yourself): they are safe from the Demon tonight."},{"id":"ravenkeeper","name":"Ravenkeeper","edition":"tb","team":"townsfolk","firstNight":0,"firstNightReminder":"","otherNight":35,"otherNightReminder":"","reminders":[],"setup":false,"ability":"If you die at night, you are woken to choose a player: you learn their character."},{"id":"mayor","name":"Mayor","edition":"tb","team":"townsfolk","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"ability":"If only 3 players live & no execution occurs, your team wins. If you die at night, another player might die instead."},{"id":"slayer","name":"Slayer","edition":"tb","team":"townsfolk","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":["Used"],"setup":false,"ability":"Once per game, during the day, publicly choose a player: if they are the Demon, they die."},{"id":"soldier","name":"Soldier","edition":"tb","team":"townsfolk","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"ability":"You are safe from the Demon."},{"id":"virgin","name":"Virgin","edition":"tb","team":"townsfolk","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":["Used"],"setup":false,"ability":"The first time you are nominated, if the nominator is a Townsfolk, they are executed immediately."},{"id":"butler","name":"Butler","edition":"tb","team":"outsider","firstNight":21,"firstNightReminder":"","otherNight":39,"otherNightReminder":"","reminders":["Master"],"setup":false,"ability":"Each night, choose a player (not yourself): tomorrow, you may only vote if they are voting too."},{"id":"drunk","name":"Drunk","edition":"tb","team":"outsider","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":["Drunk"],"setup":true,"ability":"You do not know you are the Drunk. You think you are a Townsfolk, but your ability malfunctions."},{"id":"recluse","name":"Recluse","edition":"tb","team":"outsider","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"ability":"You might register as evil and as a Minion or Demon, even if dead."},{"id":"saint","name":"Saint","edition":"tb","team":"outsider","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"ability":"If you die by execution, your team loses."},{"id":"baron","name":"Baron","edition":"tb","team":"minion","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":true,"ability":"There are extra Outsiders in play. [+2 Outsiders]"},{"id":"poisoner","name":"Poisoner","edition":"tb","team":"minion","firstNight":4,"firstNightReminder":"","otherNight":3,"otherNightReminder":"","reminders":["Poisoned"],"setup":false,"ability":"Each night, choose a player: their ability malfunctions tonight and tomorrow day."},{"id":"spy","name":"Spy","edition":"tb","team":"minion","firstNight":26,"firstNightReminder":"","otherNight":47,"otherNightReminder":"","reminders":[],"setup":false,"ability":"Each night, you see the Grimoire. You might register as good and as a Townsfolk or Outsider, even if dead."},{"id":"scarletwoman","name":"Scarlet Woman","edition":"tb","team":"minion","firstNight":0,"firstNightReminder":"","otherNight":13,"otherNightReminder":"","reminders":["Demon"],"setup":false,"ability":"If there are 5 or more players alive (Travelers don\'t count) and the Demon dies, you become the Demon."},{"id":"imp","name":"Imp","edition":"tb","team":"demon","firstNight":0,"firstNightReminder":"","otherNight":18,"otherNightReminder":"","reminders":["Die"],"setup":false,"ability":"Each night*, choose a player: they die. If you kill yourself this way, a Minion becomes the Imp."},{"id":"grandmother","edition":"bmr","firstNight":22,"firstNightReminder":"","otherNight":31,"otherNightReminder":"","reminders":["Grandchild"],"setup":false,"name":"Grandmother","team":"townsfolk","ability":"You start knowing a good player & character. If the Demon kills them, you die too."},{"id":"sailor","edition":"bmr","firstNight":3,"firstNightReminder":"","otherNight":2,"otherNightReminder":"","reminders":["Drunk"],"setup":false,"name":"Sailor","team":"townsfolk","ability":"Each night, choose a player: either you or they are drunk until dusk. You can not die."},{"id":"chambermaid","edition":"bmr","firstNight":28,"firstNightReminder":"","otherNight":49,"otherNightReminder":"","reminders":[],"setup":false,"name":"Chambermaid","team":"townsfolk","ability":"Each night, choose 2 alive players (not yourself): you learn how many woke tonight due to their ability."},{"id":"exorcist","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":16,"otherNightReminder":"","reminders":["Chosen"],"setup":false,"name":"Exorcist","team":"townsfolk","ability":"Each night*, choose a player (not the same as last night): the Demon, if chosen, learns who you are & does not act tonight."},{"id":"innkeeper","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":5,"otherNightReminder":"","reminders":["Protected","Drunk"],"setup":false,"name":"Innkeeper","team":"townsfolk","ability":"Each night*, choose 2 players: they cannot die tonight, but 1 is drunk until dusk."},{"id":"gambler","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":14,"otherNightReminder":"","reminders":["Die"],"setup":false,"name":"Gambler","team":"townsfolk","ability":"Each night*, choose a player & guess their character: if you guess wrong, you die."},{"id":"gossip","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":28,"otherNightReminder":"","reminders":["Die"],"setup":false,"name":"Gossip","team":"townsfolk","ability":"Each day, you may make a public statement. Tonight, if it was true, a player dies."},{"id":"courtier","edition":"bmr","firstNight":7,"firstNightReminder":"","otherNight":6,"otherNightReminder":"","reminders":["Drunk 1","Drunk 2","Drunk 3","Used"],"setup":false,"name":"Courtier","team":"townsfolk","ability":"Once per game, at night, choose a character: they are drunk for 3 nights & 3 days."},{"id":"professor","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":34,"otherNightReminder":"","reminders":["Alive","Used"],"setup":false,"name":"Professor","team":"townsfolk","ability":"Once per game, at night*, choose a dead player. If they are a Townsfolk, they are resurrected."},{"id":"minstrel","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":1,"otherNightReminder":"","reminders":["Everyone drunk"],"setup":false,"name":"Minstrel","team":"townsfolk","ability":"If a Minion died today, all other players (except Travelers) are drunk all night, until dusk."},{"id":"tealady","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":["Protected"],"setup":false,"name":"Tea Lady","team":"townsfolk","ability":"If both your alive neighbors are good, they can not die."},{"id":"pacifist","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"name":"Pacifist","team":"townsfolk","ability":"Executed good players might not die."},{"id":"fool","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":["Used"],"setup":false,"name":"Fool","team":"townsfolk","ability":"The first time you die, you don\'t."},{"id":"tinker","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":29,"otherNightReminder":"","reminders":["Die"],"setup":false,"name":"Tinker","team":"outsider","ability":"You might die at any time."},{"id":"moonchild","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":30,"otherNightReminder":"","reminders":["Die"],"setup":false,"name":"Moonchild","team":"outsider","ability":"When you learn that you died, choose 1 alive player: if good, they die tonight."},{"id":"goon","edition":"bmr","firstNight":29,"firstNightReminder":"","otherNight":50,"otherNightReminder":"","reminders":["Drunk"],"setup":false,"name":"Goon","team":"outsider","ability":"Each night, the 1st player to choose you with their ability is drunk until dusk. You become their alignment."},{"id":"lunatic","edition":"bmr","firstNight":1,"firstNightReminder":"","otherNight":15,"otherNightReminder":"","reminders":["Attack 1","Attack 2","Attack 3","Decoy"],"setup":false,"name":"Lunatic","team":"outsider","ability":"You think you are a Demon, but your abilities malfunction. The Demon knows who you are & who you attack."},{"id":"godfather","edition":"bmr","firstNight":9,"firstNightReminder":"","otherNight":32,"otherNightReminder":"","reminders":["Died today","Die"],"setup":true,"name":"Godfather","team":"minion","ability":"You start knowing which Outsiders are in-play. If 1 died today, choose a player tonight: they die. [-1 or +1 Outsider]"},{"id":"devilsadvocate","edition":"bmr","firstNight":10,"firstNightReminder":"","otherNight":9,"otherNightReminder":"","reminders":["Survives execution"],"setup":false,"name":"Devil\'s Advocate","team":"minion","ability":"Each night, choose a living player (not the same as last night): if executed tomorrow, they do not die."},{"id":"assassin","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":26,"otherNightReminder":"","reminders":["Die","Used"],"setup":false,"name":"Assassin","team":"minion","ability":"Once per game, at night*, choose a player: they die, even if for some reason they could not."},{"id":"mastermind","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"name":"Mastermind","team":"minion","ability":"If the Demon dies by execution, play for 1 more day. If a player is then executed, their team loses."},{"id":"po","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":21,"otherNightReminder":"","reminders":["Die 1","Die 2","Die 3","Attack x3"],"setup":false,"name":"Po","team":"demon","ability":"Each night*, you may choose a player: they die. If you chose no-one last night, choose 3 players tonight."},{"id":"zombuul","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":19,"otherNightReminder":"","reminders":["No death today","Die"],"setup":false,"name":"Zombuul","team":"demon","ability":"Each night*, if no-one died today, choose a player: they die. The 1st time you die, you live but register as dead."},{"id":"pukka","edition":"bmr","firstNight":14,"firstNightReminder":"","otherNight":17,"otherNightReminder":"","reminders":["Poisoned","Die"],"setup":false,"name":"Pukka","team":"demon","ability":"Each night, choose a player: they are poisoned until tomorrow night, then die. You act on the 1st night."},{"id":"shabaloth","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":20,"otherNightReminder":"","reminders":["Die 1","Die 2","Alive"],"setup":false,"name":"Shabaloth","team":"demon","ability":"Each night*, choose 2 players: they die. A dead player you chose last night might be regurgitated."},{"id":"clockmaker","edition":"snv","firstNight":23,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"name":"Clockmaker","team":"townsfolk","ability":"You start knowing how many steps from the Demon to its nearest Minion."},{"id":"dreamer","edition":"snv","firstNight":24,"firstNightReminder":"","otherNight":41,"otherNightReminder":"","reminders":[],"setup":false,"name":"Dreamer","team":"townsfolk","ability":"Each night, choose a player (not yourself): you learn 1 good & 1 evil character, 1 of which is correct."},{"id":"snakecharmer","edition":"snv","firstNight":8,"firstNightReminder":"","otherNight":7,"otherNightReminder":"","reminders":["Poisoned"],"setup":false,"name":"Snake Charmer","team":"townsfolk","ability":"Each night, choose an alive player: a chosen Demon swaps characters & alignments with you & is then poisoned."},{"id":"mathematician","edition":"snv","firstNight":27,"firstNightReminder":"","otherNight":48,"otherNightReminder":"","reminders":["Abnormal effect"],"setup":false,"name":"Mathematician","team":"townsfolk","ability":"Each night, you learn how many players\' abilities worked abnormally (since dawn) due to another character\'s ability."},{"id":"flowergirl","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":43,"otherNightReminder":"","reminders":["Demon did vote","Demon did not vote"],"setup":false,"name":"Flowergirl","team":"townsfolk","ability":"Each night*, you learn if the Demon voted today."},{"id":"towncrier","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":44,"otherNightReminder":"","reminders":["No Minion nominated","Minion nominated"],"setup":false,"name":"Town Crier","team":"townsfolk","ability":"Each night*, you learn if a Minion nominated today."},{"id":"oracle","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":45,"otherNightReminder":"","reminders":[],"setup":false,"name":"Oracle","team":"townsfolk","ability":"Each night*, you learn how many dead players are evil."},{"id":"savant","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"name":"Savant","team":"townsfolk","ability":"Each day, you may visit the Storyteller to learn 2 things in private: 1 is true & 1 is false."},{"id":"seamstress","edition":"snv","firstNight":25,"firstNightReminder":"","otherNight":42,"otherNightReminder":"","reminders":["Used"],"setup":false,"name":"Seamstress","team":"townsfolk","ability":"Once per game, at night, choose 2 players (not yourself): you learn if they are the same alignment."},{"id":"philosopher","edition":"snv","firstNight":2,"firstNightReminder":"","otherNight":1.5,"otherNightReminder":"","reminders":["Used","Drunk"],"setup":false,"name":"Philosopher","team":"townsfolk","ability":"Once per game, at night, choose a good character: become them. If you duplicate an in-play character, they are drunk."},{"id":"artist","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":["Used"],"setup":false,"name":"Artist","team":"townsfolk","ability":"Once per game, during the day, privately ask the Storyteller any yes/no question."},{"id":"juggler","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":46,"otherNightReminder":"","reminders":["Correct"],"setup":false,"name":"Juggler","team":"townsfolk","ability":"On your 1st day, publicly guess up to 5 player\'s characters. That night, you learn how many you got correct."},{"id":"sage","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":36,"otherNightReminder":"","reminders":[],"setup":false,"name":"Sage","team":"townsfolk","ability":"If the Demon kills you, you learn that it is 1 of 2 players."},{"id":"mutant","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"name":"Mutant","team":"outsider","ability":"If you are \\"mad\\" about being an Outsider, you might be executed."},{"id":"sweetheart","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":33,"otherNightReminder":"","reminders":["Drunk"],"setup":false,"name":"Sweetheart","team":"outsider","ability":"If you die, 1 player is drunk from now on."},{"id":"barber","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":27,"otherNightReminder":"","reminders":["Swap"],"setup":false,"name":"Barber","team":"outsider","ability":"If you die, tonight the Demon may choose 2 players to swap characters."},{"id":"klutz","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"name":"Klutz","team":"outsider","ability":"When you learn that you died, publicly choose 1 alive good player: if they are evil, your team loses."},{"id":"eviltwin","edition":"snv","firstNight":11,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":["Twin"],"setup":false,"name":"Evil Twin","team":"minion","ability":"You & an opposing player know each other. If the good player is executed, evil wins. Good can\'t win if you both live."},{"id":"witch","edition":"snv","firstNight":12,"firstNightReminder":"","otherNight":10,"otherNightReminder":"","reminders":["Cursed"],"setup":false,"name":"Witch","team":"minion","ability":"Each night, choose a player: if they nominate tomorrow, they die. If just 3 players live, you lose this ability."},{"id":"cerenovus","edition":"snv","firstNight":13,"firstNightReminder":"","otherNight":11,"otherNightReminder":"","reminders":["Mad"],"setup":false,"name":"Cerenovus","team":"minion","ability":"Each night, choose a player & a good character: they are \\"mad\\" they are this character tomorrow, or might be executed."},{"id":"pithag","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":12,"otherNightReminder":"","reminders":[],"setup":false,"name":"Pit Hag","team":"minion","ability":"Each night*, choose a player & a character they become (if not-in-play). If a Demon is made, deaths tonight are arbitrary."},{"id":"fanggu","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":22,"otherNightReminder":"","reminders":["Die"],"setup":true,"name":"Fang Gu","team":"demon","ability":"Each night*, choose a player: they die. The 1st Outsider chosen becomes an evil Fang Gu & you die instead. [+1 Outsider]"},{"id":"vigormortis","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":25,"otherNightReminder":"","reminders":["Die","Poisoned","Ability active"],"setup":true,"name":"Vigormortis","team":"demon","ability":"Each night*, choose a player: they die. Minions you kill keep their ability & poison 1 Townsfolk neighbor. [-1 Outsider]."},{"id":"nodashii","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":23,"otherNightReminder":"","reminders":["Die","Poisoned"],"setup":false,"name":"No Dashii","team":"demon","ability":"Each night*, choose a player: they die. Your 2 Townsfolk neighbors are poisoned."},{"id":"vortox","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":24,"otherNightReminder":"","reminders":["Die"],"setup":false,"name":"Vortox","team":"demon","ability":"Each night*, choose a player: they die. Good abilities yield false information. Each day, if no-one was executed, evil wins."},{"id":"scapegoat","edition":"tb","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"name":"Scapegoat","team":"traveler","ability":"If a player of your alignment is executed, you might be executed instead."},{"id":"gunslinger","edition":"tb","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"name":"Gunslinger","team":"traveler","ability":"Each day, after the 1st vote has been tallied, you may choose a player that voted: they die."},{"id":"beggar","edition":"tb","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"name":"Beggar","team":"traveler","ability":"You must use a vote token to vote. Dead players may choose to give you theirs. If so, you learn their alignment."},{"id":"bureaucrat","edition":"tb","firstNight":1,"firstNightReminder":"","otherNight":1,"otherNightReminder":"","reminders":["Vote x3"],"setup":false,"name":"Bureaucrat","team":"traveler","ability":"Each night, choose a player (not yourself): their vote counts as 3 votes tomorrow."},{"id":"thief","edition":"tb","firstNight":1,"firstNightReminder":"","otherNight":1,"otherNightReminder":"","reminders":["Negative vote"],"setup":false,"name":"Thief","team":"traveler","ability":"Each night, choose a player (not yourself): their vote counts negatively tomorrow."},{"id":"apprentice","edition":"bmr","firstNight":1,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":["Apprentice ability"],"setup":false,"name":"Apprentice","team":"traveler","ability":"On your 1st night, you gain a Townsfolk ability (if good), or a Minion ability (if evil)."},{"id":"matron","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"name":"Matron","team":"traveler","ability":"Each day, you may choose up to 3 pairs of players to swap seats. Players may not leave their seats to talk in private."},{"id":"voudon","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"name":"Voudon","team":"traveler","ability":"Only you & the dead can vote. They don\'t need a vote token to do so. A 50% majority is not required."},{"id":"judge","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":["Used"],"setup":false,"name":"Judge","team":"traveler","ability":"Once per game, if another player nominated, you may choose to force the current execution to pass or fail."},{"id":"bishop","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":["Nominate Good","Nominate Evil"],"setup":false,"name":"Bishop","team":"traveler","ability":"Only the Storyteller can nominate. At least 1 opposite player must be nominated each day."},{"id":"butcher","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"name":"Butcher","team":"traveler","ability":"Each day, after the 1st execution, you nominate again."},{"id":"bonecollector","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":1,"otherNightReminder":"","reminders":["Used","Ability active"],"setup":false,"name":"Bone Collector","team":"traveler","ability":"Once per game, at night, choose a dead player: they regain their ability until dusk."},{"id":"harlot","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":1,"otherNightReminder":"","reminders":["Die"],"setup":false,"name":"Harlot","team":"traveler","ability":"Each night*, choose a living player: if they agree, you learn their character, but you both might die."},{"id":"barista","edition":"snv","firstNight":1,"firstNightReminder":"","otherNight":1,"otherNightReminder":"","reminders":["Ability x2","Healthy & Sober"],"setup":false,"name":"Barista","team":"traveler","ability":"Each night, until dusk, 1) a player becomes sober, healthy & gets true info, or 2) their ability works twice. They learn which."},{"id":"deviant","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"name":"Deviant","team":"traveler","ability":"If you were funny today, you can not be exiled."},{"id":"balloonist","edition":"","firstNight":24,"firstNightReminder":"","otherNight":44,"otherNightReminder":"","reminders":["Seen"],"setup":true,"name":"Balloonist","team":"townsfolk","ability":"Each night, you learn 1 player of each character type, until there are no more types to learn. [+1 Outsider]"},{"id":"amnesiac","edition":"","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":[],"setup":false,"name":"Amnesiac","team":"townsfolk","ability":"You do not know what your ability is. Each day, privately guess what it is: you learn how accurate you are."},{"id":"cannibal","edition":"","firstNight":0,"firstNightReminder":"","otherNight":43,"otherNightReminder":"","reminders":["Ability gained","Poisoned"],"setup":false,"name":"Cannibal","team":"townsfolk","ability":"You have the ability of the recently killed executee. If they are evil, you are poisoned until a good player dies this way."},{"id":"fisherman","edition":"","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":["Used"],"setup":false,"name":"Fisherman","team":"townsfolk","ability":"Once per game, during the day, visit the Storyteller for some advice to help you win."},{"id":"goblin","edition":"","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":["Claimed today"],"setup":false,"name":"Goblin","team":"minion","ability":"When nominated, you may publicly claim to be the Goblin: if you are executed that day, your team wins."},{"id":"widow","edition":"","firstNight":26,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":["Poisoned","Knowing"],"setup":false,"name":"Widow","team":"minion","ability":"On your 1st night, look at the Grimoire & choose a player: they are poisoned. 1 good player knows a Widow is in play."},{"id":"leviathan","edition":"","firstNight":0,"firstNightReminder":"","otherNight":0,"otherNightReminder":"","reminders":["Good executed","Day 1","Day 2","Day 3","Day 4","Day 5"],"setup":false,"name":"Leviathan","team":"demon","ability":"All players know you are in play. After 5 days, evil wins. If more than 1 good player is executed, evil wins."}]')},d4b2:function(e,t,i){}});
+//# sourceMappingURL=app.7b720de5.js.map
\ No newline at end of file
diff --git a/js/app.7b720de5.js.map b/js/app.7b720de5.js.map
new file mode 100644
index 0000000..301f774
--- /dev/null
+++ b/js/app.7b720de5.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/Modal.vue?1f08","webpack:///./src/components/TownSquare.vue?b88a","webpack:///./src/App.vue?8b09","webpack:///./src/components/TownSquare.vue?bbe9","webpack:///./src/components/Player.vue?1039","webpack:///./src/components/Token.vue?3be5","webpack:///src/components/Token.vue","webpack:///./src/components/Token.vue?ca97","webpack:///./src/components/Token.vue","webpack:///src/components/Player.vue","webpack:///./src/components/Player.vue?1369","webpack:///./src/components/Player.vue","webpack:///./src/components/Modal.vue?c402","webpack:///src/components/Modal.vue","webpack:///./src/components/Modal.vue?0f3c","webpack:///./src/components/Modal.vue","webpack:///src/components/TownSquare.vue","webpack:///./src/components/TownSquare.vue?335a","webpack:///./src/components/TownSquare.vue","webpack:///./src/components/TownInfo.vue?d015","webpack:///src/components/TownInfo.vue","webpack:///./src/components/TownInfo.vue?6260","webpack:///./src/components/TownInfo.vue","webpack:///./src/components/RoleSelectionModal.vue?45be","webpack:///src/components/RoleSelectionModal.vue","webpack:///./src/components/RoleSelectionModal.vue?415e","webpack:///./src/components/RoleSelectionModal.vue","webpack:///./src/components/Screenshot.vue?20b8","webpack:///src/components/Screenshot.vue","webpack:///./src/components/Screenshot.vue?82cf","webpack:///./src/components/Screenshot.vue","webpack:///src/App.vue","webpack:///./src/App.vue?b65f","webpack:///./src/App.vue","webpack:///./src/main.js","webpack:///./src/App.vue?6ee5","webpack:///./src/components/Player.vue?6d3c","webpack:///./src/components/RoleSelectionModal.vue?d998","webpack:///./src/components/Token.vue?a5ff","webpack:///./src/components/TownInfo.vue?ca37","webpack:///./src/components/Screenshot.vue?ec8d"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","render","_vm","this","_h","$createElement","_c","_self","class","screenshot","isScreenshot","attrs","on","keyup","players","edition","isPublic","roles","zoom","takeScreenshot","directives","rawName","expression","staticClass","$event","isEditionModalOpen","_v","_l","id","setEdition","_s","isRoleModalOpen","ref","onScreenshot","success","isScreenshotSuccess","isControlOpen","togglePublic","Math","round","addPlayer","_e","randomizeSeatings","clearPlayers","clearRoles","showEditionModal","showRoleModal","staticRenderFns","public","style","player","index","openReminderModal","openRoleModal","removePlayer","$emit","stopPropagation","bluffs","role","availableReminders","selectedPlayer","closeModal","reminder","addReminder","availableRoles","team","setRole","dead","hasDied","hasVoted","traveler","toggleStatus","firstNight","firstNightReminder","otherNight","otherNightReminder","changeName","removeReminder","reminders","ability","props","type","required","methods","component","components","Token","Map","Boolean","Number","width","height","x","y","$refs","getBoundingClientRect","$set","prompt","indexOf","close","_t","Modal","Player","Array","fill","map","forEach","some","confirm","teams","alive","votes","townsfolk","outsider","minion","demon","String","computed","nontravelers","min","filter","game","nontravelerPlayers","teamRoles","selected","disabled","selectedRoles","assignRoles","selectRandomRoles","randomElement","arr","floor","random","isOpen","roleSelection","values","reduce","a","b","hasSelectedSetupRoles","setup","playerCount","max","composition","keys","available","sort","pop","mounted","watch","stream","canvas","video","active","alert","navigator","mediaDevices","getDisplayMedia","cursor","audio","err","srcObject","play","setTimeout","context","getContext","setAttribute","videoWidth","videoHeight","drawImage","toBlob","blob","item","ClipboardItem","clipboard","write","Screenshot","TownSquare","TownInfo","RoleSelectionModal","editions","getRolesByEdition","dimensions","capture","selectedEdition","find","includes","localeCompare","undefined","localStorage","JSON","parse","newPlayers","stringify","deep","newEdition","newIsPublic","add","config","productionTip","h","App","$mount"],"mappings":"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","file":"js/app.7b720de5.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/townsquare/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([\"56d7\",\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Modal.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Modal.vue?vue&type=style&index=0&lang=scss&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownSquare.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownSquare.vue?vue&type=style&index=0&lang=scss&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:{ screenshot: _vm.isScreenshot },attrs:{\"id\":\"app\",\"tabindex\":\"-1\"},on:{\"keyup\":_vm.keyup}},[_c('TownInfo',{attrs:{\"players\":_vm.players,\"edition\":_vm.edition}}),_c('TownSquare',{attrs:{\"is-public\":_vm.isPublic,\"players\":_vm.players,\"roles\":_vm.roles,\"zoom\":_vm.zoom},on:{\"screenshot\":_vm.takeScreenshot}}),_c('Modal',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isEditionModalOpen),expression:\"isEditionModalOpen\"}],staticClass:\"editions\",on:{\"close\":function($event){_vm.isEditionModalOpen = false}}},[_c('h3',[_vm._v(\"Select an edition:\")]),_c('ul',{staticClass:\"editions\"},_vm._l((_vm.editions),function(edition){return _c('li',{key:edition.id,staticClass:\"edition\",class:['edition-' + edition.id],on:{\"click\":function($event){return _vm.setEdition(edition.id)}}},[_vm._v(\" \"+_vm._s(edition.name)+\" \")])}),0)]),_c('RoleSelectionModal',{attrs:{\"players\":_vm.players,\"roles\":_vm.roles,\"is-open\":_vm.isRoleModalOpen},on:{\"close\":function($event){_vm.isRoleModalOpen = false}}}),_c('Screenshot',{ref:\"screenshot\",on:{\"success\":function($event){return _vm.onScreenshot(true)},\"error\":function($event){return _vm.onScreenshot(false)}}}),_c('div',{staticClass:\"controls\"},[_c('font-awesome-icon',{class:{ success: _vm.isScreenshotSuccess },attrs:{\"icon\":\"camera\"},on:{\"click\":function($event){return _vm.takeScreenshot()}}}),_c('font-awesome-icon',{attrs:{\"icon\":\"cog\"},on:{\"click\":function($event){_vm.isControlOpen = !_vm.isControlOpen}}}),(_vm.isControlOpen)?_c('ul',[_c('li',{on:{\"click\":_vm.togglePublic}},[_vm._v(\"Toggle \"),_c('em',[_vm._v(\"G\")]),_vm._v(\"rimoire\")]),_c('li',[_vm._v(\" Size \"),_c('font-awesome-icon',{attrs:{\"icon\":\"search-minus\"},on:{\"click\":function($event){_vm.zoom -= 0.1}}}),_vm._v(\" \"+_vm._s(Math.round(_vm.zoom * 100))+\"% \"),_c('font-awesome-icon',{attrs:{\"icon\":\"search-plus\"},on:{\"click\":function($event){_vm.zoom += 0.1}}})],1),(_vm.players.length < 20)?_c('li',{on:{\"click\":_vm.addPlayer}},[_c('em',[_vm._v(\"A\")]),_vm._v(\"dd Player \")]):_vm._e(),(_vm.players.length > 2)?_c('li',{on:{\"click\":_vm.randomizeSeatings}},[_c('em',[_vm._v(\"R\")]),_vm._v(\"andomize Seatings \")]):_vm._e(),(_vm.players.length)?_c('li',{on:{\"click\":_vm.clearPlayers}},[_vm._v(\" Clear Players \")]):_vm._e(),(_vm.players.length)?_c('li',{on:{\"click\":_vm.clearRoles}},[_vm._v(\" Clear Roles \")]):_vm._e(),(_vm.players.length > 4)?_c('li',{on:{\"click\":_vm.showEditionModal}},[_vm._v(\" Select Edition \")]):_vm._e(),(_vm.players.length > 4)?_c('li',{on:{\"click\":_vm.showRoleModal}},[_vm._v(\" Select Roles \")]):_vm._e()]):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"square\",class:{ public: _vm.isPublic },style:({ zoom: _vm.zoom }),attrs:{\"id\":\"townsquare\"}},[_c('ul',{staticClass:\"circle\",class:['size-' + _vm.players.length]},_vm._l((_vm.players),function(player,index){return _c('Player',{key:index,attrs:{\"player\":player,\"roles\":_vm.roles,\"is-public\":_vm.isPublic,\"zoom\":_vm.zoom},on:{\"add-reminder\":_vm.openReminderModal,\"set-role\":_vm.openRoleModal,\"remove-player\":_vm.removePlayer,\"screenshot\":function($event){return _vm.$emit('screenshot', $event)}}})}),1),(_vm.players.length > 6)?_c('div',{ref:\"bluffs\",staticClass:\"bluffs\"},[_c('h3',[_vm._v(\"Demon bluffs\")]),_c('font-awesome-icon',{attrs:{\"icon\":\"camera\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.takeScreenshot($event)}}}),_c('ul',[_c('li',{on:{\"click\":function($event){return _vm.openRoleModal(_vm.bluffs[0])}}},[_c('Token',{attrs:{\"role\":_vm.bluffs[0].role}})],1),_c('li',{on:{\"click\":function($event){return _vm.openRoleModal(_vm.bluffs[1])}}},[_c('Token',{attrs:{\"role\":_vm.bluffs[1].role}})],1),_c('li',{on:{\"click\":function($event){return _vm.openRoleModal(_vm.bluffs[2])}}},[_c('Token',{attrs:{\"role\":_vm.bluffs[2].role}})],1)])],1):_vm._e(),_c('Modal',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.availableReminders.length && _vm.selectedPlayer),expression:\"availableReminders.length && selectedPlayer\"}],on:{\"close\":_vm.closeModal}},[_c('h3',[_vm._v(\"Choose a reminder token:\")]),_c('ul',{staticClass:\"reminders\"},_vm._l((_vm.availableReminders),function(reminder){return _c('li',{key:reminder.role + ' ' + reminder.name,staticClass:\"reminder\",class:[reminder.role],on:{\"click\":function($event){return _vm.addReminder(reminder)}}},[_vm._v(\" \"+_vm._s(reminder.name)+\" \")])}),0)]),_c('Modal',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.availableRoles.length && _vm.selectedPlayer),expression:\"availableRoles.length && selectedPlayer\"}],on:{\"close\":_vm.closeModal}},[_c('h3',[_vm._v(\"Choose a new role:\")]),_c('ul',{staticClass:\"tokens\"},_vm._l((_vm.availableRoles),function(role){return _c('li',{key:role.id,class:[role.team],on:{\"click\":function($event){return _vm.setRole(role)}}},[_c('Token',{attrs:{\"role\":role}})],1)}),0)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',[_c('div',{ref:\"player\",staticClass:\"player\",class:{\n dead: _vm.player.hasDied,\n 'no-vote': _vm.player.hasVoted,\n traveler: _vm.player.role && _vm.player.role.team === 'traveler'\n }},[_c('div',{staticClass:\"shroud\",on:{\"click\":function($event){return _vm.toggleStatus()}}}),_c('div',{staticClass:\"life\",on:{\"click\":function($event){return _vm.toggleStatus()}}}),(_vm.player.firstNight)?_c('div',{staticClass:\"night first\"},[_c('em',[_vm._v(_vm._s(_vm.player.firstNight)+\".\")]),_c('span',[_vm._v(_vm._s(_vm.player.role.firstNightReminder))])]):_vm._e(),(_vm.player.otherNight)?_c('div',{staticClass:\"night other\"},[_c('em',[_vm._v(_vm._s(_vm.player.otherNight)+\".\")]),_c('span',[_vm._v(_vm._s(_vm.player.role.otherNightReminder))])]):_vm._e(),_c('Token',{attrs:{\"role\":_vm.player.role},on:{\"set-role\":_vm.setRole}}),_c('div',{staticClass:\"name\",on:{\"click\":_vm.changeName}},[_c('span',{staticClass:\"screenshot\",on:{\"click\":function($event){$event.stopPropagation();return _vm.takeScreenshot($event)}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"camera\"}})],1),_c('span',{staticClass:\"name\"},[_vm._v(\" \"+_vm._s(_vm.player.name)+\" \")]),_c('span',{staticClass:\"remove\",on:{\"click\":function($event){$event.stopPropagation();return _vm.$emit('remove-player', _vm.player)}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"times-circle\"}})],1)])],1),(_vm.player.reminders)?_vm._l((_vm.player.reminders),function(reminder){return _c('div',{key:reminder.role + ' ' + reminder.name,staticClass:\"reminder\",class:[reminder.role],on:{\"click\":function($event){return _vm.removeReminder(reminder)}}},[_vm._v(\" \"+_vm._s(reminder.name)+\" \")])}):_vm._e(),_c('div',{staticClass:\"reminder add\",on:{\"click\":function($event){return _vm.$emit('add-reminder', _vm.player)}}})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"token\",class:[_vm.role.id],on:{\"click\":_vm.setRole}},[(_vm.role.firstNight)?_c('span',{staticClass:\"leaf-left\"}):_vm._e(),(_vm.role.otherNight)?_c('span',{staticClass:\"leaf-right\"}):_vm._e(),(_vm.role.reminders && _vm.role.reminders.length)?_c('span',{class:['leaf-top' + _vm.role.reminders.length]}):_vm._e(),(_vm.role.setup)?_c('span',{staticClass:\"leaf-orange\"}):_vm._e(),_c('div',{staticClass:\"name\"},[_vm._v(_vm._s(_vm.role.name))]),(_vm.role.ability)?_c('div',{staticClass:\"ability\"},[_vm._v(\" \"+_vm._s(_vm.role.ability)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n
\n \n \n \n \n
{{ role.name }}
\n
\n {{ role.ability }}\n
\n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Token.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Token.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Token.vue?vue&type=template&id=eb60a182&scoped=true&\"\nimport script from \"./Token.vue?vue&type=script&lang=js&\"\nexport * from \"./Token.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Token.vue?vue&type=style&index=0&id=eb60a182&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"eb60a182\",\n null\n \n)\n\nexport default component.exports","\n
\n \n\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoleSelectionModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoleSelectionModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RoleSelectionModal.vue?vue&type=template&id=734de2cf&\"\nimport script from \"./RoleSelectionModal.vue?vue&type=script&lang=js&\"\nexport * from \"./RoleSelectionModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RoleSelectionModal.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"screenshot\"}},[_c('video',{ref:\"video\",attrs:{\"autoplay\":\"\"}}),_c('canvas',{ref:\"canvas\"})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n
\n \n \n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Screenshot.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Screenshot.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Screenshot.vue?vue&type=template&id=54d26403&scoped=true&\"\nimport script from \"./Screenshot.vue?vue&type=script&lang=js&\"\nexport * from \"./Screenshot.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Screenshot.vue?vue&type=style&index=0&id=54d26403&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"54d26403\",\n null\n \n)\n\nexport default component.exports","\n
\n \n \n\n \n
Select an edition:
\n
\n
\n {{ edition.name }}\n
\n
\n \n\n \n\n \n\n
\n \n \n
\n
Toggle Grimoire
\n
\n Size\n \n {{ Math.round(zoom * 100) }}%\n \n
\n
\n Add Player\n
\n
2\">\n Randomize Seatings\n
\n
\n Clear Players\n
\n
\n Clear Roles\n
\n
4\">\n Select Edition\n
\n
4\">\n Select Roles\n
\n
\n
\n
\n\n\n\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=2847fd82&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from \"vue\";\nimport App from \"./App\";\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\nimport {\n faUsers,\n faHeartbeat,\n faVoteYea,\n faUserFriends,\n faUser,\n faTimesCircle,\n faCog,\n faSearchMinus,\n faSearchPlus,\n faCamera\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/vue-fontawesome\";\n\nlibrary.add(\n faUsers,\n faHeartbeat,\n faVoteYea,\n faUserFriends,\n faUser,\n faTimesCircle,\n faCog,\n faSearchMinus,\n faSearchPlus,\n faCamera\n);\n\nVue.component(\"font-awesome-icon\", FontAwesomeIcon);\n\nVue.config.productionTip = false;\n\nnew Vue({\n render: h => h(App)\n}).$mount(\"#app\");\n","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Player.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Player.vue?vue&type=style&index=0&lang=scss&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoleSelectionModal.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoleSelectionModal.vue?vue&type=style&index=0&lang=scss&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Token.vue?vue&type=style&index=0&id=eb60a182&scoped=true&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Token.vue?vue&type=style&index=0&id=eb60a182&scoped=true&lang=scss&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownInfo.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownInfo.vue?vue&type=style&index=0&lang=scss&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Screenshot.vue?vue&type=style&index=0&id=54d26403&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Screenshot.vue?vue&type=style&index=0&id=54d26403&scoped=true&lang=css&\""],"sourceRoot":""}
\ No newline at end of file