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.ca275e5d.js b/js/app.ca275e5d.js
new file mode 100644
index 0000000..57234b3
--- /dev/null
+++ b/js/app.ca275e5d.js
@@ -0,0 +1,2 @@
+(function(e){function t(t){for(var o,a,n=t[0],l=t[1],h=t[2],d=0,m=[];d{this._socket=null,this._store.commit("session/setSessionId",""),clearInterval(this._pingTimer),this._pingTimer=null}}_send(e,t){this._socket&&1===this._socket.readyState&&this._socket.send(JSON.stringify([e,t]))}_onOpen(){this._isSpectator?this._send("req","gs"):this.sendGamestate(),this._ping()}_ping(){this._send("ping",[this._isSpectator,this._store.state.session.playerId]),this._handlePing(),clearTimeout(this._pingTimer),this._pingTimer=setTimeout(this._ping.bind(this),this._pingInterval)}_handleMessage({data:e}){let t,i;try{[t,i]=JSON.parse(e)}catch(o){console.log("unsupported socket message",e)}switch(t){case"req":"gs"===i&&this.sendGamestate();break;case"gs":this._updateGamestate(i);break;case"player":this._updatePlayer(i);break;case"claim":this._updateSeat(i);break;case"ping":this._handlePing(i);break;case"nomination":this._store.commit("session/nomination",i);break;case"vote":this._handleVote(i);break;case"lock":this._store.commit("session/lockVote",i);break;case"bye":this._handleBye(i);break}}connect(e){this._store.state.session.playerId||this._store.commit("session/setPlayerId",Math.random().toString(36).substr(2)),this._store.commit("session/setPlayerCount",0),this._isSpectator=this._store.state.session.isSpectator,this._open(e)}disconnect(){this._store.commit("session/setPlayerCount",0),this._socket&&(this._send("bye",this._store.state.session.playerId),this._socket.close(),this._socket=null)}sendGamestate(){this._isSpectator||(this._gamestate=this._store.state.players.players.map(e=>({name:e.name,id:e.id,isDead:e.isDead,isVoteless:e.isVoteless,...e.role&&"traveler"===e.role.team?{role:{id:e.role.id,team:"traveler",name:e.role.name}}:{}})),this._send("gs",{gamestate:this._gamestate,edition:this._store.state.edition,nomination:this._store.state.session.nomination}))}_updateGamestate({gamestate:e,edition:t,nomination:i}){if(!this._isSpectator)return;this._store.commit("setEdition",t),this._store.commit("session/nomination",i);const o=this._store.state.players.players;if(o.lengthe.length)for(let s=o.length;s>e.length;s--)this._store.commit("players/remove",s-1);e.forEach((e,t)=>{const i=o[t],{role:s}=e;["name","id","isDead","isVoteless"].forEach(t=>{const o=e[t];i[t]!==o&&this._store.commit("players/update",{player:i,property:t,value:o})}),s&&i.role.id!==s.id?this._store.commit("players/update",{player:i,property:"role",value:s}):s||"traveler"!==i.role.team||this._store.commit("players/update",{player:i,property:"role",value:{}})})}sendPlayer({player:e,property:t,value:i}){if(this._isSpectator||"reminders"===t)return;const o=this._store.state.players.players.indexOf(e);"role"===t?i.team&&"traveler"===i.team?(this._gamestate[o].role={id:e.role.id,team:"traveler",name:e.role.name},this._send("player",{index:o,property:t,value:this._gamestate[o].role})):this._gamestate[o].role&&(delete this._gamestate[o].role,this._send("player",{index:o,property:t,value:{}})):this._send("player",{index:o,property:t,value:i})}_updatePlayer({index:e,property:t,value:i}){const o=this._store.state.players.players[e];o&&("role"===t&&"traveler"!==i.team&&"traveler"===o.role.team?this._store.commit("players/update",{player:o,property:"role",value:{}}):this._store.commit("players/update",{player:o,property:t,value:i}))}_handlePing([e,t]=[]){const i=(new Date).getTime();t&&(this._players[t]=i,this._isSpectator||e||alert("Another storyteller joined the session!"));for(let o in this._players)i-this._players[o]>2*this._pingInterval&&delete this._players[o];this._store.state.players.players.forEach(e=>{this._isSpectator||!e.id||this._players[e.id]||this._store.commit("players/update",{player:e,property:"id",value:""})}),this._store.commit("session/setPlayerCount",Object.keys(this._players).length)}_handleBye(e){delete this._players[e],this._store.commit("session/setPlayerCount",Object.keys(this._players).length)}claimSeat(e){this._isSpectator&&this._store.state.players.players.length>e&&this._send("claim",[e,this._store.state.session.playerId])}_updateSeat([e,t]){if(this._isSpectator)return;const i="id",o=this._store.state.players.players,s=o.findIndex(({id:e})=>e===t);if(s>=0&&s!==e&&this._store.commit("players/update",{player:o[s],property:i,value:""}),e>=0){const s=o[e];if(!s)return;this._store.commit("players/update",{player:s,property:i,value:t})}this._handlePing([!0,t])}nomination(e){if(this._isSpectator)return;const t=this._store.state.players.players;(!e||t.length>e[0]&&t.length>e[1])&&this._send("nomination",e)}vote([e]){if(!this._isSpectator)return;const t=this._store.state.players.players[e];this._store.state.session.playerId===t.id&&this._send("vote",[e,this._store.state.session.votes[e]])}_handleVote(e){const t=this._store.state.players.players[e[0]];this._store.state.session.playerId!==t.id&&this._store.commit("session/vote",e)}lockVote(){this._isSpectator||this._send("lock",this._store.state.session.lockedVote)}}e.exports=e=>{const t=new i(e);e.subscribe(({type:e,payload:i})=>{switch(e){case"session/setSessionId":i?t.connect(i):(window.location.hash="",t.disconnect());break;case"session/claimSeat":t.claimSeat(i);break;case"session/nomination":t.nomination(i);break;case"session/vote":t.vote(i);break;case"session/lockVote":t.lockVote();break;case"players/set":case"players/swap":case"players/move":case"players/clear":case"players/remove":case"players/add":case"setEdition":t.sendGamestate();break;case"players/update":t.sendPlayer(i);break}});const[o,s]=window.location.hash.substr(1).split("/");"play"===o&&(e.commit("session/setSpectator",!0),e.commit("session/setSessionId",s))}},"1e83":function(e,t,i){e.exports=i.p+"img/chef.d4e7f9a6.png"},"20ca":function(e,t,i){e.exports=i.p+"img/zombuul.ec71a259.png"},"223c":function(e,t,i){e.exports=i.p+"img/sailor.631521c2.png"},"22c9":function(e,t,i){e.exports=i.p+"img/widow.ec8d8cb0.png"},"23b1":function(e,t,i){e.exports=i.p+"img/bonecollector.846af8c8.png"},"24d3":function(e,t,i){e.exports=i.p+"img/baron.9ce9bd3b.png"},"25f6":function(e,t,i){e.exports=i.p+"img/bureaucrat.88ec372a.png"},"2b04":function(e,t,i){e.exports=i.p+"img/leviathan.dfbff6e8.png"},"2b15":function(e,t,i){"use strict";var o=i("eeb1"),s=i.n(o);s.a},"2cd0":function(e,t,i){e.exports=i.p+"img/artist.f89690cd.png"},"30b6":function(e,t,i){e.exports=i.p+"img/sage.5afc100d.png"},"327a":function(e,t,i){e.exports=i.p+"img/scapegoat.8bd95c23.png"},"34c9":function(e,t,i){},3603:function(e,t,i){e.exports=i.p+"img/philosopher.92032c70.png"},3636:function(e,t,i){"use strict";var o=i("d4b2"),s=i.n(o);s.a},"37dd":function(e,t,i){e.exports=i.p+"img/butcher.e0b672b7.png"},"38a5":function(e,t,i){e.exports=i.p+"img/towncrier.18a4377b.png"},"3a43":function(e,t,i){e.exports=i.p+"img/vortox.6add3a3a.png"},"3b65":function(e,t,i){e.exports=i.p+"img/deviant.e8a761ae.png"},"3e70":function(e,t,i){e.exports=i.p+"img/imp.cd0fa5b8.png"},"3f65":function(e,t,i){e.exports=i.p+"img/moonchild.6c84161e.png"},"3f8f":function(e,t,i){"use strict";var o=i("557b"),s=i.n(o);s.a},4021:function(e,t,i){e.exports=i.p+"img/snakecharmer.e512cc1e.png"},"43e8":function(e,t,i){e.exports=i.p+"img/fortuneteller.4396927c.png"},4720:function(e,t,i){e.exports=i.p+"img/fool.a730aab3.png"},4969:function(e,t,i){},"4bea":function(e,t,i){e.exports=i.p+"img/apprentice.b7055345.png"},"4c31":function(e,t,i){"use strict";var o=i("34c9"),s=i.n(o);s.a},"4d73":function(e,t,i){e.exports=i.p+"img/librarian.6fd7f267.png"},"4e76":function(e,t,i){e.exports=i.p+"img/soldier.451de0df.png"},"4efd":function(e,t,i){e.exports=i.p+"img/minstrel.1647382d.png"},5072:function(e,t,i){e.exports=i.p+"img/exorcist.8c0f5cac.png"},"557b":function(e,t,i){},"559e":function(e,t,i){e.exports=i.p+"img/harlot.1a418200.png"},"55aa":function(e,t,i){e.exports=i.p+"img/goon.719106f2.png"},"56d7":function(e,t,i){"use strict";i.r(t);var o=i("2b0e"),s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:{screenshot:e.grimoire.isScreenshot},style:{backgroundImage:e.grimoire.background?"url('"+e.grimoire.background+"')":""},attrs:{id:"app",tabindex:"-1"},on:{keyup:e.keyup}},[i("transition",{attrs:{name:"zoom"}},[e.players.length?e._e():i("Intro"),e.players.length&&!e.session.nomination?i("TownInfo"):e._e(),e.session.nomination?i("Vote"):e._e()],1),i("TownSquare",{on:{screenshot:e.takeScreenshot}}),i("Menu",{ref:"menu"}),i("EditionModal"),i("RolesModal"),i("ReferenceModal"),i("Gradients")],1)},r=[],a=i("2f62"),n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"square",class:{public:e.grimoire.isPublic,spectator:e.session.isSpectator,vote:e.session.nomination},style:{zoom:e.grimoire.zoom},attrs:{id:"townsquare"}},[i("ul",{staticClass:"circle",class:["size-"+e.players.length]},e._l(e.players,(function(t,o){return i("Player",{key:o,class:{from:Math.max(e.swap,e.move,e.nominate)===o,swap:e.swap>-1,move:e.move>-1,nominate:e.nominate>-1},attrs:{player:t},on:{screenshot:function(t){return e.$emit("screenshot",t)},trigger:function(t){return e.handleTrigger(o,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",e._l(e.bluffs,(function(t){return i("li",{key:t,on:{click:function(i){return e.openRoleModal(-1*t)}}},[i("Token",{attrs:{role:e.grimoire.bluffs[t-1]}})],1)})),0)],1):e._e(),i("ReminderModal",{attrs:{"player-index":e.selectedPlayer}}),i("RoleModal",{attrs:{"player-index":e.selectedPlayer}})],1)},l=[],h=function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("li",[o("div",{ref:"player",staticClass:"player",class:[{dead:e.player.isDead,"no-vote":e.player.isVoteless,you:e.player.id===e.session.playerId,"vote-yes":e.session.votes[e.index],"vote-lock":e.voteLocked},e.player.role.team]},[o("div",{staticClass:"shroud",on:{click:function(t){return e.toggleStatus()}}}),o("div",{staticClass:"life",on:{click:function(t){return e.toggleStatus()}}}),e.nightOrder.get(e.player).first&&e.grimoire.isNightOrder?o("div",{staticClass:"night first"},[o("em",[e._v(e._s(e.nightOrder.get(e.player).first)+".")]),e.player.role.firstNightReminder?o("span",[e._v(e._s(e._f("handleEmojis")(e.player.role.firstNightReminder)))]):e._e()]):e._e(),e.nightOrder.get(e.player).other&&e.grimoire.isNightOrder?o("div",{staticClass:"night other"},[o("em",[e._v(e._s(e.nightOrder.get(e.player).other)+".")]),e.player.role.otherNightReminder?o("span",[e._v(e._s(e._f("handleEmojis")(e.player.role.otherNightReminder)))]):e._e()]):e._e(),o("Token",{attrs:{role:e.player.role},on:{"set-role":function(t){return e.$emit("trigger",["openRoleModal"])}}}),o("font-awesome-icon",{staticClass:"vote",attrs:{icon:"skull",title:"Voted YES"},on:{click:function(t){return e.vote()}}}),o("font-awesome-icon",{staticClass:"vote",attrs:{icon:"times",title:"Voted NO"},on:{click:function(t){return e.vote()}}}),o("font-awesome-icon",{staticClass:"cancel",attrs:{icon:"times-circle",title:"Cancel"},on:{click:function(t){return e.cancel()}}}),o("font-awesome-icon",{staticClass:"swap",attrs:{icon:"exchange-alt",title:"Swap seats with this player"},on:{click:function(t){return e.swapPlayer(e.player)}}}),o("font-awesome-icon",{staticClass:"move",attrs:{icon:"redo-alt",title:"Move player to this seat"},on:{click:function(t){return e.movePlayer(e.player)}}}),o("font-awesome-icon",{staticClass:"nominate",attrs:{icon:"hand-point-right",title:"Nominate this player"},on:{click:function(t){return e.nominatePlayer(e.player)}}}),e.player.id?o("font-awesome-icon",{staticClass:"seat",attrs:{icon:"chair"}}):e._e(),e.player.isDead&&!e.player.isVoteless?o("font-awesome-icon",{staticClass:"has-vote",attrs:{icon:"vote-yea",title:"Ghost vote"},on:{click:function(t){return e.updatePlayer("isVoteless",!0)}}}):e._e(),o("div",{staticClass:"name",class:{active:e.isMenuOpen},on:{click:function(t){e.isMenuOpen=!e.isMenuOpen}}},[e._v(" "+e._s(e.player.name)+" ")]),o("transition",{attrs:{name:"fold"}},[e.isMenuOpen?o("ul",{staticClass:"menu"},[e.session.isSpectator?e._e():[o("li",{on:{click:e.changeName}},[o("font-awesome-icon",{attrs:{icon:"user-edit"}}),e._v("Rename ")],1),e.session.nomination?e._e():o("li",{on:{click:function(t){return e.nominatePlayer()}}},[o("font-awesome-icon",{attrs:{icon:"hand-point-right"}}),e._v(" Nomination ")],1),o("li",{on:{click:function(t){return e.movePlayer()}}},[o("font-awesome-icon",{attrs:{icon:"redo-alt"}}),e._v(" Move player ")],1),o("li",{on:{click:function(t){return e.swapPlayer()}}},[o("font-awesome-icon",{attrs:{icon:"exchange-alt"}}),e._v(" Swap seats ")],1),o("li",{on:{click:e.takeScreenshot}},[o("font-awesome-icon",{attrs:{icon:"camera"}}),e._v(" Screenshot ")],1),o("li",{on:{click:function(t){return e.$emit("trigger",["removePlayer"])}}},[o("font-awesome-icon",{attrs:{icon:"times-circle"}}),e._v(" Remove ")],1)],e.session.isSpectator?o("li",{on:{click:e.claimSeat}},[o("font-awesome-icon",{attrs:{icon:"chair"}}),e.player.id!==e.session.playerId?[e._v(" Claim seat ")]:[e._v(" Vacate seat ")]],2):e._e()],2):e._e()])],1),e.player.reminders?e._l(e.player.reminders,(function(t){return o("div",{key:t.role+" "+t.name,staticClass:"reminder",class:[t.role],on:{click:function(i){return e.removeReminder(t)}}},[o("span",{staticClass:"icon",style:{backgroundImage:"url("+i("61b0")("./"+t.role+".png")+")"}}),e._v(" "+e._s(t.name)+" ")])})):e._e(),o("div",{staticClass:"reminder add",on:{click:function(t){return e.$emit("trigger",["openReminderModal"])}}},[o("span",{staticClass:"icon"})])],2)},c=[],d=function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("div",{staticClass:"token",class:[e.role.id],on:{click:e.setRole}},[e.role.id?o("span",{staticClass:"icon",style:{backgroundImage:"url("+i("61b0")("./"+e.role.id+".png")+")"}}):e._e(),e.role.firstNight?o("span",{staticClass:"leaf-left"}):e._e(),e.role.otherNight?o("span",{staticClass:"leaf-right"}):e._e(),e.role.reminders&&e.role.reminders.length?o("span",{class:["leaf-top"+e.role.reminders.length]}):e._e(),e.role.setup?o("span",{staticClass:"leaf-orange"}):e._e(),o("svg",{staticClass:"name",attrs:{viewBox:"0 0 150 150"}},[o("path",{attrs:{d:"M 13 75 C 13 160, 138 160, 138 75",id:"curve",fill:"transparent"}}),o("text",{staticClass:"label",attrs:{width:"150",x:"66.6%","text-anchor":"middle","font-size":e._f("nameToFontSize")(e.role.name)}},[o("textPath",{attrs:{"xlink:href":"#curve"}},[e._v(" "+e._s(e.role.name)+" ")])])]),o("div",{staticClass:"edition",class:["edition-"+e.role.edition,e.role.team]}),e.role.ability?o("div",{staticClass:"ability"},[e._v(" "+e._s(e.role.ability)+" ")]):e._e()])},m=[],p={name:"Token",props:{role:{type:Object,default:()=>({})}},data(){return{}},filters:{nameToFontSize:e=>e&&e.length>10?"20px":"24px"},methods:{setRole(){this.$emit("set-role")}}},u=p,g=(i("bcd0"),i("2877")),f=Object(g["a"])(u,d,m,!1,null,"77841dfe",null),y=f.exports,b={components:{Token:y},props:{player:{type:Object,required:!0}},computed:{...Object(a["d"])("players",["players"]),...Object(a["d"])(["grimoire","session"]),...Object(a["b"])({nightOrder:"players/nightOrder"}),index:function(){return this.players.indexOf(this.player)},voteLocked:function(){const e=this.session,t=this.players.length;if(!e.nomination)return!1;const i=(this.index-1+t-e.nomination[1])%t;return ie.replace(/:([^: ]+?):/g,"").replace(/ •/g,"\n•")},methods:{takeScreenshot(){const{width:e,height:t,x:i,y:o}=this.$refs.player.getBoundingClientRect();this.$emit("screenshot",{width:e,height:t,x:i,y:o}),this.isMenuOpen=!1},toggleStatus(){this.grimoire.isPublic?this.player.isDead?this.player.isVoteless?(this.updatePlayer("isVoteless",!1),this.updatePlayer("isDead",!1)):this.updatePlayer("isVoteless",!0):this.updatePlayer("isDead",!0):(this.updatePlayer("isDead",!this.player.isDead),this.player.isVoteless&&this.updatePlayer("isVoteless",!1))},changeName(){if(this.session.isSpectator)return;const e=prompt("Player name",this.player.name)||this.player.name;this.updatePlayer("name",e),this.isMenuOpen=!1},removeReminder(e){const t=[...this.player.reminders];t.splice(this.player.reminders.indexOf(e),1),this.updatePlayer("reminders",t)},updatePlayer(e,t){this.session.isSpectator&&"reminders"!==e||this.$store.commit("players/update",{player:this.player,property:e,value:t})},swapPlayer(e){this.isMenuOpen=!1,this.$emit("trigger",["swapPlayer",e])},movePlayer(e){this.isMenuOpen=!1,this.$emit("trigger",["movePlayer",e])},nominatePlayer(e){this.isMenuOpen=!1,this.$emit("trigger",["nominatePlayer",e])},cancel(){this.$emit("trigger",["cancel"])},claimSeat(){this.isMenuOpen=!1,this.$emit("trigger",["claimSeat"])},vote(){this.player.id===this.session.playerId&&this.$store.commit("session/vote",[this.index])}}},v=b,k=(i("74c9"),Object(g["a"])(v,h,c,!1,null,null,null)),w=k.exports,N=function(){var e=this,t=e.$createElement,o=e._self._c||t;return e.players[e.playerIndex]?o("Modal",{directives:[{name:"show",rawName:"v-show",value:e.modals.reminder&&e.availableReminders.length,expression:"modals.reminder && availableReminders.length"}],on:{close:function(t){return e.toggleModal("reminder")}}},[o("h3",[e._v("Choose a reminder token:")]),o("ul",{staticClass:"reminders"},e._l(e.availableReminders,(function(t){return o("li",{key:t.role+" "+t.name,staticClass:"reminder",class:[t.role],on:{click:function(i){return e.addReminder(t)}}},[o("span",{staticClass:"icon",style:{backgroundImage:"url("+i("61b0")("./"+t.role+".png")+")"}}),e._v(" "+e._s(t.name)+" ")])})),0)]):e._e()},_=[],S=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)])])},R=[],x={methods:{close(){this.$emit("close")}}},T=x,C=(i("8781"),Object(g["a"])(T,S,R,!1,null,null,null)),I=C.exports,O={components:{Modal:I},props:["playerIndex"],computed:{availableReminders(){let e=[];const t=this.$store.state.players.players;return this.$store.state.roles.forEach(i=>{t.some(e=>e.role.id===i.id)&&(e=[...e,...i.reminders.map(e=>({role:i.id,name:e}))])}),e.push({role:"good",name:"Good"}),e.push({role:"evil",name:"Evil"}),e.push({role:"custom",name:"Custom note"}),e},...Object(a["d"])(["modals"]),...Object(a["d"])("players",["players"])},methods:{addReminder(e){const t=this.$store.state.players.players[this.playerIndex];let i;if("custom"===e.role){const e=prompt("Add a custom reminder note");if(!e)return;i=[...t.reminders,{role:"custom",name:e}]}else i=[...t.reminders,e];this.$store.commit("players/update",{player:t,property:"reminders",value:i}),this.$store.commit("toggleModal","reminder")},...Object(a["c"])(["toggleModal"])}},P=O,M=(i("a8cc"),Object(g["a"])(P,N,_,!1,null,"c8602356",null)),D=M.exports,E=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("Modal",{directives:[{name:"show",rawName:"v-show",value:e.modals.role&&e.availableRoles.length,expression:"modals.role && availableRoles.length"}],on:{close:function(t){return e.toggleModal("role")}}},[i("h3",[e._v(" Choose a new character for "+e._s(e.playerIndex>=0&&e.players.length?e.players[e.playerIndex].name:"bluffing")+" ")]),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)])},$=[],j={components:{Token:y,Modal:I},props:["playerIndex"],computed:{availableRoles(){const e=[],t=this.$store.state.players.players;return this.$store.state.roles.forEach(i=>{(this.playerIndex>=0||this.playerIndex<0&&!t.some(e=>e.role.id===i.id))&&e.push(i)}),e.push({}),e},...Object(a["d"])(["modals","roles","session"]),...Object(a["d"])("players",["players"])},methods:{setRole(e){if(this.playerIndex<0)this.$store.commit("setBluff",{index:-1*this.playerIndex-1,role:e});else{if(this.session.isSpectator&&"traveler"===e.team)return;const t=this.$store.state.players.players[this.playerIndex];this.$store.commit("players/update",{player:t,property:"role",value:e})}this.$store.commit("toggleModal","role")},...Object(a["c"])(["toggleModal"])}},A=j,B=(i("4c31"),Object(g["a"])(A,E,$,!1,null,"06abb511",null)),G=B.exports,V={components:{Player:w,Token:y,RoleModal:G,ReminderModal:D},computed:{...Object(a["d"])(["grimoire","roles","session"]),...Object(a["d"])("players",["players"])},data(){return{selectedPlayer:0,bluffs:3,swap:-1,move:-1,nominate:-1}},methods:{takeScreenshot(){const{width:e,height:t,x:i,y:o}=this.$refs.bluffs.getBoundingClientRect();this.$emit("screenshot",{width:e,height:t,x:i,y:o})},handleTrigger(e,[t,i]){"function"===typeof this[t]&&this[t](e,i)},claimSeat(e){this.session.isSpectator&&(this.session.playerId===this.players[e].id?this.$store.commit("session/claimSeat",-1):this.$store.commit("session/claimSeat",e))},openReminderModal(e){this.selectedPlayer=e,this.$store.commit("toggleModal","reminder")},openRoleModal(e){const t=this.players[e];this.session.isSpectator&&t&&"traveler"===t.role.team||(this.selectedPlayer=e,this.$store.commit("toggleModal","role"))},removePlayer(e){this.session.isSpectator||confirm(`Do you really want to remove ${this.players[e].name}?`)&&this.$store.commit("players/remove",e)},swapPlayer(e,t){void 0===t?(this.cancel(),this.swap=e):(this.$store.commit("players/swap",[this.swap,this.players.indexOf(t)]),this.cancel())},movePlayer(e,t){void 0===t?(this.cancel(),this.move=e):(this.$store.commit("players/move",[this.move,this.players.indexOf(t)]),this.cancel())},nominatePlayer(e,t){void 0===t?(this.cancel(),e!==this.nominate&&(this.nominate=e)):(this.$store.commit("session/nomination",[this.nominate,this.players.indexOf(t)]),this.cancel())},cancel(){this.move=-1,this.swap=-1,this.nominate=-1}}},W=V,Y=(i("3636"),Object(g["a"])(W,n,l,!1,null,null,null)),U=Y.exports,z=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()])},L=[],q=i("634a"),F={computed:{teams:function(){const{players:e}=this.$store.state.players,t=this.$store.getters["players/nonTravelers"],i=e.filter(e=>!0!==e.isDead).length;return{...q[t-5],traveler:e.length-t,alive:i,votes:i+e.filter(e=>!0===e.isDead&&!0!==e.isVoteless).length}},...Object(a["d"])(["edition"]),...Object(a["d"])("players",["players"])}},J=F,H=(i("66f6"),Object(g["a"])(J,z,L,!1,null,"2e511c0c",null)),Z=H.exports,K=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"controls"}},[i("Screenshot",{ref:"screenshot"}),e.session.sessionId?i("span",{staticClass:"session",class:{spectator:e.session.isSpectator},attrs:{title:"You're currently in a live game with "+e.session.playerCount+" other players!"},on:{click:e.leaveSession}},[i("font-awesome-icon",{attrs:{icon:"broadcast-tower"}}),e._v(" "+e._s(e.session.playerCount)+" ")],1):e._e(),i("span",{staticClass:"camera"},[i("font-awesome-icon",{class:{success:e.grimoire.isScreenshotSuccess},attrs:{icon:"camera",title:"Take a screenshot"},on:{click:function(t){return e.takeScreenshot()}}})],1),i("div",{staticClass:"menu",class:{open:e.grimoire.isMenuOpen}},[i("font-awesome-icon",{attrs:{icon:"cog"},on:{click:e.toggleMenu}}),i("ul",[i("li",{staticClass:"tabs",class:e.tab},[i("font-awesome-icon",{attrs:{icon:"book-open"},on:{click:function(t){e.tab="grimoire"}}}),i("font-awesome-icon",{attrs:{icon:"broadcast-tower"},on:{click:function(t){e.tab="session"}}}),e.session.isSpectator?e._e():i("font-awesome-icon",{attrs:{icon:"users"},on:{click:function(t){e.tab="players"}}}),i("font-awesome-icon",{attrs:{icon:"theater-masks"},on:{click:function(t){e.tab="characters"}}}),i("font-awesome-icon",{attrs:{icon:"question"},on:{click:function(t){e.tab="help"}}})],1),"grimoire"===e.tab?[i("li",{staticClass:"headline"},[e._v("Grimoire")]),e.players.length?i("li",{on:{click:e.toggleGrimoire}},[i("em",[e._v("[G]")]),e.grimoire.isPublic?e._e():[e._v("Hide")],e.grimoire.isPublic?[e._v("Show")]:e._e()],2):e._e(),e.players.length?i("li",{on:{click:e.toggleNightOrder}},[i("em",[i("font-awesome-icon",{attrs:{icon:["fas",e.grimoire.isNightOrder?"check-square":"square"]}})],1),e._v(" Night order ")]):e._e(),e.players.length?i("li",[i("em",[i("font-awesome-icon",{attrs:{icon:"search-minus"},on:{click:function(t){return e.updateZoom(-.1)}}}),e._v(" "+e._s(Math.round(100*e.grimoire.zoom))+"% "),i("font-awesome-icon",{attrs:{icon:"search-plus"},on:{click:function(t){return e.updateZoom(.1)}}})],1),e._v(" Zoom ")]):e._e(),i("li",{on:{click:e.setBackground}},[i("em",[i("font-awesome-icon",{attrs:{icon:"image"}})],1),e._v(" Background image ")])]:e._e(),"session"===e.tab?[e.session.sessionId?i("li",{staticClass:"headline"},[e._v(" "+e._s(e.session.isSpectator?"Playing":"Hosting")+" ")]):i("li",{staticClass:"headline"},[e._v(" Live Session ")]),e.session.sessionId?e._e():i("li",{on:{click:e.hostSession}},[i("em",[e._v("[H]")]),e._v(" Host (Storyteller) ")]),e.session.sessionId?e._e():i("li",{on:{click:e.joinSession}},[i("em",[e._v("[J]")]),e._v(" Join (Player) ")]),e.session.sessionId?i("li",{on:{click:e.copySessionUrl}},[i("em",[i("font-awesome-icon",{attrs:{icon:"copy"}})],1),e._v(" Copy player link ")]):e._e(),e.session.sessionId?i("li",{on:{click:e.leaveSession}},[i("em",[e._v(e._s(e.session.sessionId))]),e._v(" Leave Session ")]):e._e()]:e._e(),"players"!==e.tab||e.session.isSpectator?e._e():[i("li",{staticClass:"headline"},[e._v("Players")]),e.players.length<20?i("li",{on:{click:e.addPlayer}},[i("em",[e._v("[A]")]),e._v(" Add ")]):e._e(),e.players.length>2?i("li",{on:{click:e.randomizeSeatings}},[i("em",[i("font-awesome-icon",{attrs:{icon:"dice"}})],1),e._v(" Randomize ")]):e._e(),e.players.length?i("li",{on:{click:e.clearPlayers}},[i("em",[i("font-awesome-icon",{attrs:{icon:"trash-alt"}})],1),e._v(" Remove all ")]):e._e()],"characters"===e.tab?[i("li",{staticClass:"headline"},[e._v("Characters")]),e.session.isSpectator?e._e():i("li",{on:{click:function(t){return e.toggleModal("edition")}}},[i("em",[e._v("[E]")]),e._v(" Select Edition ")]),!e.session.isSpectator&&e.players.length>4?i("li",{on:{click:function(t){return e.toggleModal("roles")}}},[i("em",[e._v("[C]")]),e._v(" Choose & Assign ")]):e._e(),e.players.length?i("li",{on:{click:e.clearRoles}},[i("em",[i("font-awesome-icon",{attrs:{icon:"trash-alt"}})],1),e._v(" Remove all ")]):e._e()]:e._e(),"help"===e.tab?[i("li",{staticClass:"headline"},[e._v("Help")]),i("li",{on:{click:function(t){return e.toggleModal("reference")}}},[i("em",[e._v("[R]")]),e._v(" Reference Sheet ")]),i("li",[i("a",{attrs:{href:"https://discord.gg/tkWDny6",target:"_blank"}},[i("em",[i("font-awesome-icon",{attrs:{icon:["fab","discord"]}})],1),e._v(" Join Discord ")])]),i("li",[i("a",{attrs:{href:"https://github.com/bra1n/townsquare",target:"_blank"}},[i("em",[i("font-awesome-icon",{attrs:{icon:["fab","github"]}})],1),e._v(" Source code ")])])]:e._e()],2)],1)],1)},Q=[],X=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"})])},ee=[],te={data:function(){return{stream:null}},methods:{async capture({x:e=0,y:t=0,width:i=0,height:o=0}){const s=this.$refs.canvas,r=this.$refs.video,a=this.$store.state.grimoire.zoom;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.$store.commit("updateScreenshot",!1)}}this.stream&&this.stream.active&&(r.srcObject=this.stream,r.play(),setTimeout(()=>{const l=s.getContext("2d");s.setAttribute("width",i*a||r.videoWidth),s.setAttribute("height",o*a||r.videoHeight),l.drawImage(r,e*a||0,t*a||0,i*a||r.videoWidth,o*a||r.videoHeight,0,0,i*a||r.videoWidth,o*a||r.videoHeight),s.toBlob(e=>{try{const t=new ClipboardItem({"image/png":e});navigator.clipboard.write([t]),this.$store.commit("updateScreenshot",!0)}catch(n){this.$store.commit("updateScreenshot",!1)}})},100))}}},ie=te,oe=(i("c7e5"),Object(g["a"])(ie,X,ee,!1,null,"e449adba",null)),se=oe.exports,re={components:{Screenshot:se},computed:{...Object(a["d"])(["grimoire","session"]),...Object(a["d"])("players",["players"])},data(){return{tab:"grimoire"}},methods:{takeScreenshot(e={}){this.$store.commit("updateScreenshot"),this.$refs.screenshot.capture(e)},setBackground(){const e=prompt("Enter custom background URL");(e||""===e)&&this.$store.commit("setBackground",e)},hostSession(){const e=prompt("Enter a channel number / name for your session",Math.round(1e4*Math.random()));e&&(this.$store.commit("session/setSpectator",!1),this.$store.commit("session/setSessionId",e.replace(/[^0-9a-z]/g,"").substr(0,5)),this.copySessionUrl())},copySessionUrl(){navigator.permissions.query({name:"clipboard-write"}).then(({state:e})=>{if("granted"===e||"prompt"===e){const e=window.location.href.split("#")[0],t=e+"#play/"+this.session.sessionId;navigator.clipboard.writeText(t)}})},joinSession(){const e=prompt("Enter the channel number / name of the session you want to join");e&&(this.$store.commit("session/setSpectator",!0),this.$store.commit("session/setSessionId",e.replace(/[^0-9a-z]/g,"").substr(0,5)))},leaveSession(){confirm("Are you sure you want to leave the active live game?")&&(this.$store.commit("session/setSpectator",!1),this.$store.commit("session/setSessionId",""))},addPlayer(){if(this.session.isSpectator)return;const e=prompt("Player name");e&&this.$store.commit("players/add",e)},randomizeSeatings(){this.session.isSpectator||confirm("Are you sure you want to randomize seatings?")&&this.$store.dispatch("players/randomize")},clearPlayers(){this.session.isSpectator||confirm("Are you sure you want to remove all players?")&&(this.$store.commit("players/clear"),this.$store.commit("setBluff"))},clearRoles(){confirm("Are you sure you want to remove all player roles?")&&(this.$store.dispatch("players/clearRoles"),this.$store.commit("setBluff"))},...Object(a["c"])(["toggleGrimoire","toggleMenu","toggleNightOrder","updateScreenshot","updateZoom","toggleModal"])}},ae=re,ne=(i("9c50"),Object(g["a"])(ae,K,Q,!1,null,"da4c44be",null)),le=ne.exports,he=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.nonTravelers>=5?i("Modal",{directives:[{name:"show",rawName:"v-show",value:e.modals.roles,expression:"modals.roles"}],staticClass:"roles",on:{close:function(t){return e.toggleModal("roles")}}},[i("h3",[e._v("Select the characters for "+e._s(e.nonTravelers)+" players:")]),e._l(e.roleSelection,(function(t,o){return i("ul",{key:o,staticClass:"tokens"},[i("li",{staticClass:"count",class:[o]},[e._v(" "+e._s(t.filter((function(e){return e.selected})).length)+" / "+e._s(e.game[e.nonTravelers-5][o])+" ")]),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 characters selected that modify the game setup! The randomizer does not account for these characters. ")]):e._e(),i("div",{staticClass:"button-group"},[i("div",{staticClass:"button",class:{disabled:e.selectedRoles>e.nonTravelers||!e.selectedRoles},on:{click:e.assignRoles}},[i("font-awesome-icon",{attrs:{icon:"people-arrows"}}),e._v(" Assign "+e._s(e.selectedRoles)+" characters randomly ")],1),i("div",{staticClass:"button",on:{click:e.selectRandomRoles}},[i("font-awesome-icon",{attrs:{icon:"random"}}),e._v(" Shuffle characters ")],1)])],2):e._e()},ce=[];const de=e=>e[Math.floor(Math.random()*e.length)];var me={components:{Token:y,Modal:I},data:function(){return{roleSelection:{},game:q}},computed:{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))},...Object(a["d"])(["roles","modals"]),...Object(a["d"])("players",["players"]),...Object(a["b"])({nonTravelers:"players/nonTravelers"})},methods:{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.nonTravelers),t=this.game[e-5];Object.keys(t).forEach(e=>{for(let i=0;i!0!==e.selected);t.length&&(de(t).selected=!0)}})},assignRoles(){if(this.selectedRoles<=this.nonTravelers&&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=>{if("traveler"!==t.role.team&&e.length){const i=e.pop();this.$store.commit("players/update",{player:t,property:"role",value:i})}}),this.$store.commit("toggleModal","roles")}},...Object(a["c"])(["toggleModal"])},mounted:function(){Object.keys(this.roleSelection).length||this.selectRandomRoles()},watch:{roles(){this.selectRandomRoles()}}},pe=me,ue=(i("bd02"),Object(g["a"])(pe,he,ce,!1,null,"56f09202",null)),ge=ue.exports,fe=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("Modal",{directives:[{name:"show",rawName:"v-show",value:e.modals.edition,expression:"modals.edition"}],staticClass:"editions",on:{close:function(t){return e.toggleModal("edition")}}},[e.isCustom?i("div",{staticClass:"custom"},[i("h3",[e._v("Upload a custom script")]),e._v(" To play with a custom script, you need to select the characters you want to play with in the official "),i("a",{attrs:{href:"https://bloodontheclocktower.com/script-tool/",target:"_blank"}},[e._v("Script Tool")]),e._v(' and then upload the generated "custom-list.json" either directly here or provide a URL to such a hosted JSON file.'),i("br"),i("h3",[e._v("Some custom Teensyville scripts:")]),i("ul",{staticClass:"scripts"},e._l(e.scripts,(function(t,o){return i("li",{key:o,on:{click:function(i){return e.handleURL(t[1])}}},[e._v(" "+e._s(t[0])+" ")])})),0),i("input",{ref:"upload",attrs:{type:"file",accept:"application/json"},on:{change:e.handleUpload}}),i("div",{staticClass:"button-group"},[i("div",{staticClass:"button",on:{click:e.openUpload}},[i("font-awesome-icon",{attrs:{icon:"file-upload"}}),e._v(" Upload JSON ")],1),i("div",{staticClass:"button",on:{click:e.promptURL}},[i("font-awesome-icon",{attrs:{icon:"link"}}),e._v(" Enter URL ")],1),i("div",{staticClass:"button",on:{click:function(t){e.isCustom=!1}}},[i("font-awesome-icon",{attrs:{icon:"undo"}}),e._v(" Back ")],1)])]):i("div",[i("h3",[e._v("Select an edition:")]),i("ul",{staticClass:"editions"},[e._l(e.editions,(function(t){return i("li",{key:t.id,staticClass:"edition",class:["edition-"+t.id],on:{click:function(i){return e.setEdition(t.id)}}},[e._v(" "+e._s(t.name)+" ")])})),i("li",{staticClass:"edition edition-custom",on:{click:function(t){e.isCustom=!0}}},[e._v(" Custom Script ")])],2)])])},ye=[],be=i("00c0"),ve={components:{Modal:I},data:function(){return{editions:be,isCustom:!1,scripts:[["On Thin Ice","https://gist.githubusercontent.com/bra1n/8dacd9f2abc6f428331ea1213ab153f5/raw/9758aff4b59965dc7a094db549d950be5a26b571/custom-script.json"],["Race To The Bottom","https://gist.githubusercontent.com/bra1n/63e1354cb3dc9d4032bcd0623dc48888/raw/5be4df8386ec61e3a98c32be77f8cac3f8414379/custom-script.json"],["Frankenstein's Mayor by Ted","https://gist.githubusercontent.com/bra1n/32c52b422cc01b934a4291eeb81dbcee/raw/3ca5a043c41141ac40667dc15097deb327263268/Frankensteins_Mayor_by_Ted.json"],["Vigormortis High School","https://gist.githubusercontent.com/bra1n/1f65bd4a999524719d5dabe98c3c2d27/raw/f28d3268846c182b2078888122003c6f95c6b2cf/VigormortisHighSchool.json"]]}},computed:Object(a["d"])(["modals"]),methods:{openUpload(){this.$refs.upload.click()},handleUpload(){const e=this.$refs.upload.files[0];if(e&&e.size){const t=new FileReader;t.addEventListener("load",()=>{this.parseScript(JSON.parse(t.result))}),t.readAsText(e)}},promptURL(){const e=prompt("Enter URL to a custom-script.json file");e&&this.handleURL(e)},async handleURL(e){const t=await fetch(e);if(t&&t.json){const e=await t.json();this.parseScript(e)}},parseScript(e){if(!e||!e.length)return;const t=e.map(({id:e})=>e.replace(/[^a-z]/g,""));this.$store.commit("setRoles",t),this.$store.commit("setEdition","custom"),this.isCustom=!1},...Object(a["c"])(["toggleModal","setEdition"])}},ke=ve,we=(i("cdff"),Object(g["a"])(ke,fe,ye,!1,null,"78e871b6",null)),Ne=we.exports,_e=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"intro"},[i("img",{attrs:{src:"static/apple-icon.png",alt:""}}),e._v(" Welcome to the (unofficial) "),i("b",[e._v(" Virtual Blood on the Clocktower Town Square")]),e._v("!"),i("br"),e._v(" Please add more players through the "),i("span",{staticClass:"button",on:{click:e.toggleMenu}},[i("font-awesome-icon",{attrs:{icon:"cog"}}),e._v(" Menu ")],1),e._v(" on the top right or by pressing "),i("b",[e._v("[A]")]),e._v("."),i("br"),e._v(" This project is free and open source and can be found on "),i("a",{attrs:{href:"https://github.com/bra1n/townsquare",target:"_blank"}},[e._v("GitHub")]),e._v(". ")])},Se=[],Re={methods:Object(a["c"])(["toggleMenu"])},xe=Re,Te=(i("a285"),Object(g["a"])(xe,_e,Se,!1,null,"1ab9b794",null)),Ce=Te.exports,Ie=function(){var e=this,t=e.$createElement,o=e._self._c||t;return e.roles.size?o("Modal",{directives:[{name:"show",rawName:"v-show",value:e.modals.reference,expression:"modals.reference"}],staticClass:"characters",on:{close:function(t){return e.toggleModal("reference")}}},[o("h3",[e._v(e._s(e.editionName)+" Character Reference")]),o("ul",{staticClass:"legend"},[o("li",[o("span",{staticClass:"name"},[e._v("Name")]),o("span",{staticClass:"icon"},[e._v("Icon")]),o("span",{staticClass:"ability"},[e._v("Ability")]),Object.keys(e.playersByRole).length?o("span",{staticClass:"player"},[e._v(" Player ")]):e._e()])]),e._l(e.rolesGrouped,(function(t,s){return o("div",{key:s,class:[s]},[o("h4",[e._v(e._s(s))]),o("ul",e._l(t,(function(t){return o("li",{key:t.id,class:[s]},[o("span",{staticClass:"name"},[e._v(e._s(t.name))]),t.id?o("span",{staticClass:"icon",style:{backgroundImage:"url("+i("61b0")("./"+t.id+".png")+")"}}):e._e(),o("span",{staticClass:"ability"},[e._v(e._s(t.ability))]),Object.keys(e.playersByRole).length?o("span",{staticClass:"player"},[e._v(e._s(e.playersByRole[t.id]?e.playersByRole[t.id].join(", "):""))]):e._e()])})),0)])}))],2):e._e()},Oe=[],Pe={components:{Modal:I},data:function(){return{roleSelection:{}}},computed:{editionName:function(){const e=be.find(({id:e})=>e===this.edition);return e?e.name:"Custom script"},rolesGrouped:function(){const e={};return this.roles.forEach(t=>{e[t.team]||(e[t.team]=[]),e[t.team].push(t)}),delete e["traveler"],e},playersByRole:function(){const e={};return this.players.forEach(({name:t,role:i})=>{i&&i.id&&"traveler"!==i.team&&(e[i.id]||(e[i.id]=[]),e[i.id].push(t))}),e},...Object(a["d"])(["roles","modals","edition"]),...Object(a["d"])("players",["players"])},methods:{...Object(a["c"])(["toggleModal"])}},Me=Pe,De=(i("f88a"),Object(g["a"])(Me,Ie,Oe,!1,null,"0184478c",null)),Ee=De.exports,$e=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"vote"}},[i("div",{staticClass:"arrows"},[i("span",{staticClass:"nominee",style:e.nomineeStyle}),i("span",{staticClass:"nominator",style:e.nominatorStyle})]),i("div",{staticClass:"overlay"},[i("em",{staticClass:"blue"},[e._v(e._s(e.nominator.name))]),e._v(" nominated "),i("em",[e._v(e._s(e.nominee.name))]),e._v("! "),i("br"),"traveler"!==e.nominee.role.team?[i("em",{staticClass:"blue"},[e._v(e._s(Math.ceil(e.alive/2))+" votes")]),e._v(" required to "),i("em",[e._v("execute")]),e._v(". ")]:[i("em",[e._v(e._s(Math.ceil(e.players.length/2))+" votes")]),e._v(" required to "),i("em",[e._v("exile")]),e._v(". ")],e.session.isSpectator?e.canVote?i("div",{staticClass:"button-group"},[i("div",{staticClass:"button vote-no",on:{click:function(t){return e.vote(!1)}}},[e._v("Vote NO")]),i("div",{staticClass:"button vote-yes",on:{click:function(t){return e.vote(!0)}}},[e._v("Vote YES")])]):e.player?e._e():i("div",[e._v(" Please claim a seat to vote. ")]):i("div",{staticClass:"button-group"},[e.session.lockedVote?i("div",{staticClass:"button",on:{click:e.stop}},[e._v(" Reset Vote ")]):i("div",{staticClass:"button",on:{click:e.start}},[e._v(" Start Vote ")]),i("div",{staticClass:"button",on:{click:e.finish}},[e._v("Finish")])])],2)])},je=[],Ae={computed:{...Object(a["d"])("players",["players"]),...Object(a["d"])(["session"]),...Object(a["b"])({alive:"players/alive"}),nominator:function(){return this.players[this.session.nomination[0]]},nominatorStyle:function(){const e=this.players.length,t=this.session.nomination[0];return{transform:`rotate(${Math.round(t/e*360)}deg)`}},nominee:function(){return this.players[this.session.nomination[1]]},nomineeStyle:function(){const e=this.players.length,t=this.session.nomination[1],i=this.session.lockedVote,o=360*(t+Math.min(i,e))/e;return{transform:`rotate(${Math.round(o)}deg)`}},player:function(){return this.players.find(e=>e.id===this.session.playerId)},canVote:function(){if(!this.player)return!1;if(this.player.isVoteless&&"traveler"!==this.nominee.role.team)return!1;const e=this.session,t=this.players.length,i=this.players.indexOf(this.player),o=(i-1+t-e.nomination[1])%t;return o>=e.lockedVote-1}},methods:{start(){this.$store.commit("session/lockVote"),this.voteTimer=setInterval(()=>{this.$store.commit("session/lockVote"),this.session.lockedVote>this.players.length&&clearInterval(this.voteTimer)},3e3)},stop(){this.$store.commit("session/lockVote",0),clearInterval(this.voteTimer)},finish(){this.$store.commit("session/nomination",!1)},vote(e){if(!this.canVote)return!1;const t=this.players.findIndex(e=>e.id===this.session.playerId);t>=0&&!!this.session.votes[t]!==e&&this.$store.commit("session/vote",[t,e])}}},Be=Ae,Ge=(i("2b15"),Object(g["a"])(Be,$e,je,!1,null,"47b09fc5",null)),Ve=Ge.exports,We=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"gradients"}},e._l(e.gradients,(function(e,t){return i("svg",{key:t,attrs:{width:"0",height:"0"}},[i("linearGradient",{attrs:{id:e[0],x1:"50%",y1:"100%",x2:"50%",y2:"0%"}},[i("stop",{style:{"stop-color":e[2],"stop-opacity":1},attrs:{offset:"0%"}}),i("stop",{style:{"stop-color":e[1],"stop-opacity":1},attrs:{offset:"100%"}})],1)],1)})),0)},Ye=[],Ue={data(){return{gradients:[["demon","#ce0100","#000"],["townsfolk","#1f65ff","#000"],["default","#4E4E4E","#000"]]}}},ze=Ue,Le=(i("3f8f"),Object(g["a"])(ze,We,Ye,!1,null,"1e202a64",null)),qe=Le.exports,Fe={components:{Vote:Ve,ReferenceModal:Ee,Intro:Ce,TownInfo:Z,TownSquare:U,Menu:le,EditionModal:Ne,RolesModal:ge,Gradients:qe},computed:{...Object(a["d"])(["grimoire","session"]),...Object(a["d"])("players",["players"])},methods:{takeScreenshot(e){this.$refs.menu.takeScreenshot(e)},keyup({key:e}){switch(e.toLocaleLowerCase()){case"g":this.$store.commit("toggleGrimoire");break;case"a":this.$refs.menu.addPlayer();break;case"h":this.$refs.menu.hostSession();break;case"j":this.$refs.menu.joinSession();break;case"r":this.$store.commit("toggleModal","reference");break;case"e":if(this.session.isSpectator)return;this.$store.commit("toggleModal","edition");break;case"c":if(this.session.isSpectator)return;this.$store.commit("toggleModal","roles");break;case"escape":this.$store.commit("toggleModal")}}}},Je=Fe,He=(i("5c0b"),Object(g["a"])(Je,s,r,!1,null,null,null)),Ze=He.exports,Ke=i("dfb1"),Qe=i.n(Ke),Xe=i("1e0d"),et=i.n(Xe);const tt={name:"",id:"",role:{},reminders:[],isVoteless:!1,isDead:!1},it=()=>({players:[]}),ot={alive({players:e}){return e.filter(e=>!e.isDead).length},nonTravelers({players:e}){const t=e.filter(e=>"traveler"!==e.role.team);return Math.min(t.length,15)},nightOrder({players: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((e,t)=>e-t),i.sort((e,t)=>e-t);const o=new Map;return e.forEach(e=>{const s=Math.max(t.indexOf(e.role.firstNight),0),r=Math.max(i.indexOf(e.role.otherNight),0);o.set(e,{first:s,other:r})}),o}},st={randomize({state:e,commit:t}){const i=e.players.map(e=>[Math.random(),e]).sort((e,t)=>e[0]-t[0]).map(e=>e[1]);t("set",i)},clearRoles({state:e,commit:t,rootState:i}){let o;o=i.session.isSpectator?e.players.map(e=>("traveler"!==e.role.team&&(e.role={}),e.reminders=[],e)):e.players.map(({name:e,id:t})=>({...tt,name:e,id:t})),t("set",o)}},rt={clear(e){e.players=[]},set(e,t=[]){e.players=t},update(e,{player:t,property:i,value:o}){const s=e.players.indexOf(t);s>=0&&(e.players[s][i]=o)},add(e,t){e.players.push({...tt,name:t})},remove(e,t){e.players.splice(t,1)},swap(e,[t,i]){[e.players[t],e.players[i]]=[e.players[i],e.players[t]]},move(e,[t,i]){e.players.splice(i,0,e.players.splice(t,1)[0])}};var at={namespaced:!0,state:it,getters:ot,actions:st,mutations:rt};const nt=()=>({sessionId:"",isSpectator:!1,playerCount:0,playerId:"",claimedSeat:-1,nomination:!1,votes:[],lockedVote:0}),lt={},ht={},ct={setSessionId(e,t){e.sessionId=t},setPlayerId(e,t){e.playerId=t},setSpectator(e,t){e.isSpectator=t},setPlayerCount(e,t){e.playerCount=t},claimSeat(e,t){e.claimedSeat=t},nomination(e,t){e.nomination=t,e.votes=[],e.lockedVote=0},vote(e,[t,i]){e.nomination&&(e.votes=[...e.votes],e.votes[t]=void 0===i?!e.votes[t]:i)},lockVote(e,t){e.lockedVote=void 0!==t?t:e.lockedVote+1}};var dt={namespaced:!0,state:nt,getters:lt,actions:ht,mutations:ct},mt=i("b1d9");o["a"].use(a["a"]);const pt=(e="tb")=>{const t=be.find(({id:t})=>t===e)||be[0];return new Map(mt.filter(i=>i.edition===e||t.roles.includes(i.id)).sort((e,t)=>t.team.localeCompare(e.team)).map(e=>[e.id,e]))};var ut=new a["a"].Store({modules:{players:at,session:dt},state:{grimoire:{isNightOrder:!0,isPublic:!0,isMenuOpen:!1,isScreenshot:!1,isScreenshotSuccess:!1,zoom:1,background:"",bluffs:[]},modals:{reference:!1,edition:!1,roles:!1,role:!1,reminder:!1},edition:"tb",roles:pt()},mutations:{toggleMenu({grimoire:e}){e.isMenuOpen=!e.isMenuOpen},toggleGrimoire({grimoire:e},t){e.isPublic=!0===t||!1===t?t:!e.isPublic,document.title="Blood on the Clocktower "+(e.isPublic?"Town Square":"Grimoire")},toggleNightOrder({grimoire:e}){e.isNightOrder=!e.isNightOrder},updateZoom({grimoire:e},t=0){e.zoom+=t},setBackground({grimoire:e},t){e.background=t},setBluff({grimoire:e},{index:t,role:i}={}){void 0!==t?e.bluffs.splice(t,1,i):e.bluffs=[]},toggleModal({modals:e},t){t&&(e[t]=!e[t]);for(let i in e)i!==t&&(e[i]=!1)},updateScreenshot({grimoire:e},t){!0!==t&&!1!==t?(e.isScreenshotSuccess=!1,e.isScreenshot=!0):(e.isScreenshotSuccess=t,e.isScreenshot=!1)},setRoles(e,t){e.roles=new Map(mt.filter(e=>t.includes(e.id)).sort((e,t)=>t.team.localeCompare(e.team)).map(e=>[e.id,e]))},setEdition(e,t){e.edition=t,e.modals.edition=!1,"custom"!==t&&(e.roles=pt(t))}},plugins:[Qe.a,et.a]}),gt=i("ecee"),ft=i("c074"),yt=i("f2d1"),bt=i("ad3d");const vt=["BookOpen","BroadcastTower","Camera","Chair","CheckSquare","Cog","Copy","Dice","ExchangeAlt","FileUpload","HandPointRight","Heartbeat","Image","Link","PeopleArrows","Question","Random","RedoAlt","SearchMinus","SearchPlus","Skull","Square","TheaterMasks","Times","TimesCircle","TrashAlt","Undo","User","UserEdit","UserFriends","Users","VoteYea"],kt=["Github","Discord"];gt["c"].add(...vt.map(e=>ft["a"]["fa"+e]),...kt.map(e=>yt["a"]["fa"+e])),o["a"].component("font-awesome-icon",bt["a"]),o["a"].config.productionTip=!1,new o["a"]({render:e=>e(Ze),store:ut}).$mount("#app")},"5bd9":function(e,t,i){e.exports=i.p+"img/cannibal.e2bfb541.png"},"5c0b":function(e,t,i){"use strict";var o=i("9c0c"),s=i.n(o);s.a},"5c8e":function(e,t,i){e.exports=i.p+"img/goblin.7ebbd9ad.png"},"5cf2":function(e,t,i){e.exports=i.p+"img/x.fbca4d75.png"},"5e1c":function(e,t,i){},"5ffc":function(e,t,i){},"61b0":function(e,t,i){var o={"./amnesiac.png":"043b","./apprentice.png":"4bea","./artist.png":"2cd0","./assassin.png":"9187","./balloonist.png":"65db","./barber.png":"fcc6","./barista.png":"027a","./baron.png":"24d3","./beggar.png":"cfcc","./bishop.png":"8030","./bonecollector.png":"23b1","./bureaucrat.png":"25f6","./butcher.png":"37dd","./butler.png":"64fe","./cannibal.png":"5bd9","./cerenovus.png":"0436","./chambermaid.png":"125e","./chef.png":"1e83","./clockmaker.png":"f93f","./courtier.png":"ee02","./custom.png":"fd83","./deviant.png":"3b65","./devilsadvocate.png":"cd8b","./dreamer.png":"71b8","./drunk.png":"d97d","./empath.png":"bb7a","./evil.png":"c24f","./eviltwin.png":"e014","./exorcist.png":"5072","./fanggu.png":"6ac0","./fisherman.png":"c5db","./flowergirl.png":"66ae","./fool.png":"4720","./fortuneteller.png":"43e8","./gambler.png":"dce6","./goblin.png":"5c8e","./godfather.png":"99d0","./good.png":"667e","./goon.png":"55aa","./gossip.png":"cadc","./grandmother.png":"c9f5","./gunslinger.png":"ee92","./harlot.png":"559e","./imp.png":"3e70","./innkeeper.png":"663c","./investigator.png":"b570","./judge.png":"f09b","./juggler.png":"65ab","./klutz.png":"adfc","./leviathan.png":"2b04","./librarian.png":"4d73","./lunatic.png":"0b61","./mastermind.png":"f834","./mathematician.png":"8888","./matron.png":"b1cb","./mayor.png":"b223","./minstrel.png":"4efd","./monk.png":"6741","./moonchild.png":"3f65","./mutant.png":"17ad","./nodashii.png":"68a4","./oracle.png":"0c12","./pacifist.png":"fff1","./philosopher.png":"3603","./pithag.png":"7f07","./plus.png":"160b","./po.png":"c73a","./poisoner.png":"f282","./professor.png":"b30c","./pukka.png":"a6a2","./ravenkeeper.png":"0c59","./recluse.png":"177d","./sage.png":"30b6","./sailor.png":"223c","./saint.png":"6936","./savant.png":"d715","./scapegoat.png":"327a","./scarletwoman.png":"f322","./seamstress.png":"ac7c","./shabaloth.png":"0b29","./slayer.png":"d62b","./snakecharmer.png":"4021","./soldier.png":"4e76","./spy.png":"ec1e","./sweetheart.png":"f1e5","./tealady.png":"ba9b","./thief.png":"9ce3","./tinker.png":"9f7e","./towncrier.png":"38a5","./undertaker.png":"0e20","./vigormortis.png":"f4bd","./virgin.png":"eff4","./vortox.png":"3a43","./voudon.png":"a710","./washerwoman.png":"013f","./widow.png":"22c9","./witch.png":"f558","./x.png":"5cf2","./zombuul.png":"20ca"};function s(e){var t=r(e);return i(t)}function r(e){if(!i.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}s.keys=function(){return Object.keys(o)},s.resolve=r,e.exports=s,s.id="61b0"},"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}]')},"64fe":function(e,t,i){e.exports=i.p+"img/butler.3763fa3d.png"},"65ab":function(e,t,i){e.exports=i.p+"img/juggler.7cc6d089.png"},"65db":function(e,t,i){e.exports=i.p+"img/balloonist.3d6e31f8.png"},"663c":function(e,t,i){e.exports=i.p+"img/innkeeper.8b0b87f1.png"},"667e":function(e,t,i){e.exports=i.p+"img/good.9b3436c8.png"},"66ae":function(e,t,i){e.exports=i.p+"img/flowergirl.4ee69cb5.png"},"66f6":function(e,t,i){"use strict";var o=i("cdc9"),s=i.n(o);s.a},6741:function(e,t,i){e.exports=i.p+"img/monk.a6f2667a.png"},"68a4":function(e,t,i){e.exports=i.p+"img/nodashii.5c943357.png"},6936:function(e,t,i){e.exports=i.p+"img/saint.f81db252.png"},"6ac0":function(e,t,i){e.exports=i.p+"img/fanggu.cb4e346c.png"},"6b1e":function(e,t,i){},"6bc1":function(e,t,i){},"71b8":function(e,t,i){e.exports=i.p+"img/dreamer.ab7f2328.png"},"74c9":function(e,t,i){"use strict";var o=i("9fd8"),s=i.n(o);s.a},"7f07":function(e,t,i){e.exports=i.p+"img/pithag.adc1ce12.png"},8030:function(e,t,i){e.exports=i.p+"img/bishop.dec14fdc.png"},8781:function(e,t,i){"use strict";var o=i("6b1e"),s=i.n(o);s.a},8888:function(e,t,i){e.exports=i.p+"img/mathematician.31142ad1.png"},9187:function(e,t,i){e.exports=i.p+"img/assassin.db54a5ff.png"},"99d0":function(e,t,i){e.exports=i.p+"img/godfather.2febcd81.png"},"9c0c":function(e,t,i){},"9c50":function(e,t,i){"use strict";var o=i("c003"),s=i.n(o);s.a},"9ce3":function(e,t,i){e.exports=i.p+"img/thief.60ce8845.png"},"9f7e":function(e,t,i){e.exports=i.p+"img/tinker.669b5612.png"},"9fd8":function(e,t,i){},a285:function(e,t,i){"use strict";var o=i("ebb6"),s=i.n(o);s.a},a6a2:function(e,t,i){e.exports=i.p+"img/pukka.cbbc2d26.png"},a710:function(e,t,i){e.exports=i.p+"img/voudon.2b1f0492.png"},a8cc:function(e,t,i){"use strict";var o=i("ddf7"),s=i.n(o);s.a},ac7c:function(e,t,i){e.exports=i.p+"img/seamstress.05f0eb74.png"},adfc:function(e,t,i){e.exports=i.p+"img/klutz.c7e784cd.png"},b1cb:function(e,t,i){e.exports=i.p+"img/matron.ffb17746.png"},b1d9:function(e){e.exports=JSON.parse('[{"id":"washerwoman","name":"Washerwoman","edition":"tb","team":"townsfolk","firstNight":15,"firstNightReminder":":eye: Show the character token of a Townsfolk in play. Point to two players, one of which is that character. :eye-slash:","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":":eye: Show the character token of a Outsider in play. Point to two players, one of which is that character. :eye-slash:","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":":eye: Show the character token of a Minion in play. Point to two players, one of which is that character. :eye-slash:","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":":eye: Show the finger signal (0, 1, 2, …) for the number of pairs of neighbouring evil players. :eye-slash:","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":":eye: Show the finger signal (0, 1, 2) for the number of evil alive neighbours of the Empath. :eye-slash:","otherNight":37,"otherNightReminder":":eye: Show the finger signal (0, 1, 2) for the number of evil neighbours. :eye-slash:","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":":eye: The Fortune Teller points to two players. Give the head signal (nod yes, shake no) for whether one of those players is the Demon. :eye-slash:","otherNight":38,"otherNightReminder":":eye: The Fortune Teller points to two players. Show the head signal (nod “yes”, shake “no”) for whether one of those players is the Demon. :eye-slash:","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":":question-circle: If a player was executed today: :eye: Show that player’s character token. :eye-slash:","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":"The previously protected player is no longer protected. :plus-circle: :eye: The Monk points to a player not themself. :eye-slash: Mark that player “Protected”. :plus-circle:","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":":question-circle: If the Ravenkeeper died tonight: :eye: The Ravenkeeper points to a player. Show that player’s character token. :eye-slash:","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 and 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":":eye: The Butler points to a player. :eye-slash: Mark that player as “Master”. :plus-circle:","otherNight":39,"otherNightReminder":":eye: The Butler points to a player. :eye-slash: Mark that player as “Master”. :plus-circle:","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":":eye: The Poisoner points to a player. :eye-slash: That player is poisoned. :plus-circle:","otherNight":3,"otherNightReminder":"The previously poisoned player is no longer poisoned. :plus-circle: :eye: The Poisoner points to a player. :eye-slash: That player is poisoned. :plus-circle:","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":":eye: Show the Grimoire to the Spy for as long as they need. :eye-slash:","otherNight":47,"otherNightReminder":":eye: Show the Grimoire to the Spy for as long as they need. :eye-slash:","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":":question-circle: If the Scarlet Woman became the Demon today: :eye: Show the “You are” card, then the demon token. :eye-slash:","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":":eye: The Imp points to a player. :eye-slash: That player dies. :plus-circle: If the Imp chose themself: • Replace the character of 1 alive minion with a spare Imp token. :plus-circle: • :eye: Wake the new Imp. Show the “You are” card, then the Imp token. :eye-slash:","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":"Show the marked character token. Point to the marked player.","otherNight":31,"otherNightReminder":"If the Grandmother’s grandchild was killed by the Demon tonight: • The Grandmother dies.","reminders":["Grandchild"],"setup":false,"name":"Grandmother","team":"townsfolk","ability":"You start knowing a good player and character. If the Demon kills them, you die too."},{"id":"sailor","edition":"bmr","firstNight":3,"firstNightReminder":"The Sailor points to a living player. Either the Sailor, or the chosen player, is drunk.","otherNight":2,"otherNightReminder":"The previously drunk player is no longer drunk. The Sailor points to a living player. Either the Sailor, or the chosen player, is drunk.","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":"The Chambermaid points to two players. Show the number signal (0, 1, 2, …) for how many of those players wake tonight for their ability.","otherNight":49,"otherNightReminder":"The Chambermaid points to two players. Show the number signal (0, 1, 2) for how many of those players wake tonight for their ability.","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":"The Exorcist points to a player, different from the previous night. If that player is the Demon: • Wake the Demon. Show the Exorcist token. Point to the Exorcist. • The Demon does not act tonight.","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 and does not act tonight."},{"id":"innkeeper","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":5,"otherNightReminder":"The previously protected and drunk players lose those markers. The Innkeeper points to two players. Those players are protected. One is drunk.","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":"The Gambler points to a player, and a character on their sheet. If incorrect, the Gambler dies.","reminders":["Die"],"setup":false,"name":"Gambler","team":"townsfolk","ability":"Each night*, choose a player and guess their character: if you guess wrong, you die."},{"id":"gossip","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":28,"otherNightReminder":"If the Gossip’s public statement was true: • Choose a player not protected from dying tonight. That player dies.","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":"The Courier either shows a “no” head signal, or points to a character on the sheet. If the Courtier used their ability : If that character is in play, that player is drunk.","otherNight":6,"otherNightReminder":"Reduce the remaining number of days the marked player is poisoned. If the Courtier has not yet used their ability: • The Courier either shows a “no” head signal, or points to a character on the sheet. • If the Courtier used their ability : If that character is in play, that player is drunk.","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 and 3 days."},{"id":"professor","edition":"bmr","firstNight":0,"firstNightReminder":"","otherNight":34,"otherNightReminder":"If the Professor has not used their ability: • The Professor either shows the “no” head signal, or points to a player. • If that player is a Townsfolk, they are now alive.","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":"Remove the “Everyone drunk” marker. If a Minion died today: All players but the Minstrel are drunk. Place the “Everyone drunk” marker.","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":"The Tinker might die.","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":"If the Moonchild used their ability to target a player today: • If that player is good, they die.","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":"If a player used their character ability to choose the Goon: • The Goon becomes that player’s alignment. • Show the “You are” card. Show the hand signal (thumb-up “good”, thumb-down “evil”) for the Goon’s current alignment.","otherNight":50,"otherNightReminder":"If a player used their character ability to choose the Goon: • The Goon becomes that player’s alignment. • Show the “You are” card, then the hand signal (thumb-up “good”, thumb-down “evil”) for the Goon’s current alignment.","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":"If 7 or more players: Show the Lunatic a number of arbitrary “Minion“, players equal to the number of Minions in play. Show 3 character tokens of arbitrary Good characters. If the token received by the Lunatic is a Demon that would wake tonight: • Allow the Lunatic to do the Demon actions. Place their “attack” markers. Wake the Demon. Show the Demon’s real character token. Show them the Lunatic player. • If the Lunatic attacked players: Show the real demon each marked player. Remove any Lunatic “attack” markers.","otherNight":15,"otherNightReminder":"Allow the Lunatic to do the actions of the Demon. Place their “attack” markers. If the Lunatic selected players: Wake the Demon. Show the “attack” marker, then point to each marked player. Remove any Lunatic “attack” markers.","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 and who you attack."},{"id":"godfather","edition":"bmr","firstNight":9,"firstNightReminder":"Show each of the Outsider tokens in play.","otherNight":32,"otherNightReminder":"If an Outsider died today: • The Godfather points to a player. That player dies.","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":"The Devil’s Advocate points to a living player. That player survives execution tomorrow.","otherNight":9,"otherNightReminder":"The Devil’s Advocate points to a living player, different from the previous night. That player survives execution tomorrow.","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":"If the Assassin has not yet used their ability: • The Assassin either shows the “no” head signal, or points to a player. That player dies.","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":"If the Po chose no-one the previous night : The Po points to three players . Otherwise: The Po either shows the “no” head signal , or points to a player . The marked players (if any) die.","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":"If no-one died during the day: • The Zombuul points to a player. That player dies.","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":"The Pukka points to a player. That player is poisoned.","otherNight":17,"otherNightReminder":"The poisoned player dies. The Pukka points to a player. That player is poisoned.","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":"One player that the Shabaloth chose the previous night might come alive. The Shabaloth points to two players. Those players die.","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":"Show the hand signal for the number (1, 2, 3, etc.) of places from Demon to closest Minion.","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":"The Dreamer points to a player. Show two character tokens, one of which is that player’s character, the other of which is of opposite alignment to that character.","otherNight":41,"otherNightReminder":"The Dreamer points to a player. Show 1 good and 1 evil character token; one of these is correct.","reminders":[],"setup":false,"name":"Dreamer","team":"townsfolk","ability":"Each night, choose a player (not yourself): you learn 1 good and 1 evil character, 1 of which is correct."},{"id":"snakecharmer","edition":"snv","firstNight":8,"firstNightReminder":"The Snake Charmer points to a player. If that player is the Demon: • Swap the Snake Charmer and Demon character tokens. • Wake the new Demon. Show the “You are” card, then the thumb-down “evil” sign. Show the “You are” card, then the Demon token. • The new Snake Charmer is poisoned . Wake the new Snake Charmer. Show the “You are” card, then the thumb-up “good” sign. Show the “You are” card, then the Snake Charmer token.","otherNight":7,"otherNightReminder":"The Snake Charmer points to a player. If that player is the Demon: • Swap the Snake Charmer and Demon character tokens. Wake the new Demon. Show the “You are” card, then the thumb-down “evil” sign. Show the “You are” card, then the Demon token. • The new Snake Charmer is poisoned . Wake the new Snake Charmer. Show the “You are” card, then the thumb-up “good” sign. Show the “You are” card, then the Snake Charmer token.","reminders":["Poisoned"],"setup":false,"name":"Snake Charmer","team":"townsfolk","ability":"Each night, choose an alive player: a chosen Demon swaps characters and alignments with you and is then poisoned."},{"id":"mathematician","edition":"snv","firstNight":27,"firstNightReminder":"Show the hand signal for the number (0, 1, 2, etc.) of “Abnormal Effect” markers. Remove markers","otherNight":48,"otherNightReminder":"Show the hand signal for the number (0, 1, 2, etc.) of “Abnormal Effect” markers. Remove markers.","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":"Place the “Demon did not vote” marker.","otherNight":43,"otherNightReminder":"Show the head signal (nod “yes”, shake “no”) for whether the Demon voted today. Place the “Demon did not vote” marker (remove “Demon voted”, if any).","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":"Place the “Minions did not nominate” marker.","otherNight":44,"otherNightReminder":"Show the head signal (nod “yes”, shake “no”) for whether any Minion nominated today. Place the “Minions did not nominate” marker (remove “Minion nominated”, if any).","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":"Show the hand signal for the number (0, 1, 2, etc.) of dead evil players.","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 and 1 is false."},{"id":"seamstress","edition":"snv","firstNight":25,"firstNightReminder":"The Seamstress either shows a “no” head signal, or points to two other players. If the Seamstress chose two players , nod “yes” or shake “no” for whether they are of same alignment.","otherNight":42,"otherNightReminder":"If the Seamstress has not yet used their ability: • The Seamstress either shows a “no” head signal, or points to two other players. • If the Seamstress chose players , nod “yes” or shake “no” for whether they are of same alignment.","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":"The Philosopher either shows a “no” head signal, or points to a good character on their sheet. If they chose a character: Swap the out-of-play character token with the Philosopher token. Or, if the character is in play, that player is drunk and the Philosopher is now that character .","otherNight":1.5,"otherNightReminder":"If the Philosopher has not yet used their ability: • The Philosopher either shows a “no” head signal, or points to a good character on their sheet. • If they chose a character: Swap the out-of-play character token with the Philosopher token. Or, if the character is in play, that player is drunk and the Philosopher is now that character .","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":"If today was the Juggler’s first day: • Show the hand signal for the number (0, 1, 2, etc.) of “Correct” markers. Remove markers.","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":"If the Sage was killed by a Demon: • Point to two players, one of which is that Demon.","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":"If the Barber died today : • Wake the Demon. Show the “This character selected you” card, then Barber token. • The Demon either shows a “no” head signal, or points to 2 players. If they chose players: ◦ Swap the character tokens. Wake each player. Show “You are”, then their character token.","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":"Wake the Evil Twin and their twin. Confirm that they have acknowledged each other. Point to the Evil Twin. Show their Evil Twin token to the twin player. Point to the twin. Show their character token to the Evil Twin player.","otherNight":0,"otherNightReminder":"","reminders":["Twin"],"setup":false,"name":"Evil Twin","team":"minion","ability":"You and 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":"The Witch points to a player. That player is cursed for the next day.","otherNight":10,"otherNightReminder":"The Witch points to a player. That player is cursed for the next day.","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":"The Cerenovus points to a player, then to a character on their sheet. That player should “be mad about” being that character. Wake that player. Show the “This character selected you” card, then the Cerenovus token. Show the “mad about being” marker, then that character token.","otherNight":11,"otherNightReminder":"The Cerenovus points to a player, then to a character on their sheet. That player should “be mad about” being that character. . Wake that player. Show the “This character selected you” card, then the Cerenovus token. Show the “mad about being” marker, then that character token.","reminders":["Mad"],"setup":false,"name":"Cerenovus","team":"minion","ability":"Each night, choose a player and 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 and 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":"The Fang Gu points to a player. That player dies . Or, if that player was an Outsider: • The Fang Gu dies instead of the chosen player. The chosen player is now an evil Fang Gu. • Wake the new Fang Gu. Show the “You are” card, then the Fang Gu token. Show the “You are” card, then the thumb-down “evil” hand sign.","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 and you die instead. [+1 Outsider]"},{"id":"vigormortis","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":25,"otherNightReminder":"The Vigormortis points to a player. That player dies. If a Minion, they keep their ability and one of their Townsfolk neighbours is poisoned .","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 and poison 1 Townsfolk neighbor. [-1 Outsider]."},{"id":"nodashii","edition":"snv","firstNight":0,"firstNightReminder":"","otherNight":23,"otherNightReminder":"The No Dashii points to a player. That player dies.","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":"The Vortox points to a player. That player dies.","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":"The Bureaucrat points to a player. Put the Bureaucrat\'s “Vote x3” reminder by the chosen player\'s character token.","otherNight":1,"otherNightReminder":"The Bureaucrat points to a player. Put the Bureaucrat\'s “Vote x3” reminder by the chosen player\'s character token.","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":"The Thief points to a player. Put the Thief\'s “Negative vote” reminder by the chosen player\'s character token.","otherNight":1,"otherNightReminder":"The Thief points to a player. Put the Thief\'s “Negative vote” reminder by the chosen player\'s character token.","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":"Show the Apprentice the \\"You are\\" info token, then a Townsfolk or Minion token. In the Grimoire, replace the Apprentice token with that character token, and put the Apprentice\'s \\"Apprentice ability\\" reminder by that character token.","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 and 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":"The Bone Collector either shake their head no or point at any dead player. If they pointed at any dead player, put the Bone Collector\'s \\"Has Ability\\" reminder by the chosen player\'s character token. (They may need to be woken tonight to use it.)","reminders":["Used","Has Ability"],"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":"The Harlot points at any player. Then, put the Harlot to sleep. Wake the chosen player, show them the \\"This character selected you\\" token, then the Harlot token. That player either nods their head yes or shakes their head no. If they nodded their head yes, wake the Harlot and show them the chosen player\'s character token. Then, you may decide that both players die.","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":"Each night, put the Barista\'s \\"Sober and Healthy\\" reminder or their \\"Acts Twice\\" reminder by any character token. Wake that character’s player and show them the “This player selected you” info token, then the Barista token, then one finger (to show they are sober and healthy) or two fingers (to show they act twice).","otherNight":1,"otherNightReminder":"Each night, put the Barista\'s \\"Sober and Healthy\\" reminder or their \\"Acts Twice\\" reminder by any character token. Wake that character’s player and show them the “This player selected you” info token, then the Barista token, then one finger (to show they are sober and healthy) or two fingers (to show they act twice).","reminders":["Acts Twice","Sober and Healthy"],"setup":false,"name":"Barista","team":"traveler","ability":"Each night, until dusk, 1) a player becomes sober, healthy and 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":"Choose a character type. Point to a player whose character is of that type. Place the Balloonist\'s \\"Seen\\" reminder next to that character.","otherNight":44,"otherNightReminder":"Choose a character type you have not chosen yet. Point to a player whose character is of that type, if there are any. Place the Balloonist\'s \\"Seen\\" reminder next to that character.","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":20,"firstNightReminder":"Decide the Amnesiac\'s entire ability. If the Amnesiac\'s ability causes them to wake tonight: Wake the Amnesiac and run their ability.","otherNight":20,"otherNightReminder":"If the Amnesiac\'s ability causes them to wake tonight: Wake the Amnesiac and run their ability.","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":0,"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":"Show the Grimoire to the Widow for as long as they need. The Widow points to a player. That player is poisoned. Wake a good player. Show the “These characters are in play” card, then the Widow character token.","otherNight":0,"otherNightReminder":"","reminders":["Poisoned","Knowing"],"setup":false,"name":"Widow","team":"minion","ability":"On your 1st night, look at the Grimoire and choose a player: they are poisoned. 1 good player knows a Widow is in play."},{"id":"leviathan","edition":"","firstNight":100,"firstNightReminder":"Place the Leviathan “Day 1” marker. Announce “The Leviathan is in play; this is Day 1.”.","otherNight":100,"otherNightReminder":"Place the next Leviathan “Day n” marker, where “n” is the day number. Announce “The Leviathan is in play; this is Day n.”.","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."}]')},b223:function(e,t,i){e.exports=i.p+"img/mayor.98dda8d8.png"},b30c:function(e,t,i){e.exports=i.p+"img/professor.8a5ccf04.png"},b570:function(e,t,i){e.exports=i.p+"img/investigator.13194f19.png"},ba9b:function(e,t,i){e.exports=i.p+"img/tealady.2d47353e.png"},bb7a:function(e,t,i){e.exports=i.p+"img/empath.d7a89ed7.png"},bcd0:function(e,t,i){"use strict";var o=i("5ffc"),s=i.n(o);s.a},bd02:function(e,t,i){"use strict";var o=i("4969"),s=i.n(o);s.a},c003:function(e,t,i){},c24f:function(e,t,i){e.exports=i.p+"img/evil.908a2622.png"},c31c:function(e,t,i){},c5db:function(e,t,i){e.exports=i.p+"img/fisherman.9077de7e.png"},c73a:function(e,t,i){e.exports=i.p+"img/po.4c484011.png"},c7e5:function(e,t,i){"use strict";var o=i("5e1c"),s=i.n(o);s.a},c9f5:function(e,t,i){e.exports=i.p+"img/grandmother.16001541.png"},cadc:function(e,t,i){e.exports=i.p+"img/gossip.dd8d7312.png"},cd8b:function(e,t,i){e.exports=i.p+"img/devilsadvocate.e455fea0.png"},cdc9:function(e,t,i){},cdff:function(e,t,i){"use strict";var o=i("c31c"),s=i.n(o);s.a},cfcc:function(e,t,i){e.exports=i.p+"img/beggar.b7a4fbda.png"},d4b2:function(e,t,i){},d62b:function(e,t,i){e.exports=i.p+"img/slayer.0859544b.png"},d715:function(e,t,i){e.exports=i.p+"img/savant.16bfbc30.png"},d97d:function(e,t,i){e.exports=i.p+"img/drunk.4883c5a1.png"},dce6:function(e,t,i){e.exports=i.p+"img/gambler.000b4b9b.png"},ddf7:function(e,t,i){},dfb1:function(e,t){e.exports=e=>{if(void 0!==localStorage.background&&e.commit("setBackground",localStorage.background),void 0!==localStorage.isPublic&&e.commit("toggleGrimoire",JSON.parse(localStorage.isPublic)),void 0!==localStorage.edition&&e.commit("setEdition",localStorage.edition),void 0!==localStorage.roles&&e.commit("setRoles",JSON.parse(localStorage.roles)),void 0!==localStorage.bluffs&&JSON.parse(localStorage.bluffs).forEach((t,i)=>{e.commit("setBluff",{index:i,role:e.state.roles.get(t)||{}})}),localStorage.players&&e.commit("players/set",JSON.parse(localStorage.players).map(t=>({...t,role:e.state.roles.get(t.role)||{}}))),localStorage.getItem("playerId")&&e.commit("session/setPlayerId",localStorage.getItem("playerId")),localStorage.getItem("session")){const[t,i]=JSON.parse(localStorage.getItem("session"));e.commit("session/setSpectator",t),e.commit("session/setSessionId",i)}e.subscribe(({type:e,payload:t},i)=>{switch(e){case"toggleGrimoire":localStorage.setItem("isPublic",JSON.stringify(i.grimoire.isPublic));break;case"setBackground":t?localStorage.setItem("background",t):localStorage.removeItem("background");break;case"setEdition":"custom"===t?localStorage.removeItem("edition"):(localStorage.setItem("edition",t),localStorage.removeItem("roles"));break;case"setRoles":t.length?localStorage.setItem("roles",JSON.stringify(t)):localStorage.removeItem("roles");break;case"setBluff":localStorage.setItem("bluffs",JSON.stringify(i.grimoire.bluffs.map(({id:e})=>e)));break;case"players/add":case"players/update":case"players/remove":case"players/clear":case"players/set":case"players/swap":case"players/move":i.players.players.length?localStorage.setItem("players",JSON.stringify(i.players.players.map(e=>({...e,role:e.role.id||{}})))):localStorage.removeItem("players");break;case"session/setSessionId":t?localStorage.setItem("session",JSON.stringify([i.session.isSpectator,t])):localStorage.removeItem("session");break;case"session/setPlayerId":t?localStorage.setItem("playerId",t):localStorage.removeItem("playerId");break}})}},e014:function(e,t,i){e.exports=i.p+"img/eviltwin.06a5a8b8.png"},ebb6:function(e,t,i){},ec1e:function(e,t,i){e.exports=i.p+"img/spy.b739966f.png"},ee02:function(e,t,i){e.exports=i.p+"img/courtier.345180fb.png"},ee92:function(e,t,i){e.exports=i.p+"img/gunslinger.9f84c9f2.png"},eeb1:function(e,t,i){},eff4:function(e,t,i){e.exports=i.p+"img/virgin.eaf181e8.png"},f09b:function(e,t,i){e.exports=i.p+"img/judge.79ec3877.png"},f1e5:function(e,t,i){e.exports=i.p+"img/sweetheart.ec1cef03.png"},f282:function(e,t,i){e.exports=i.p+"img/poisoner.44c80b94.png"},f322:function(e,t,i){e.exports=i.p+"img/scarletwoman.d2cdaffd.png"},f4bd:function(e,t,i){e.exports=i.p+"img/vigormortis.7716a80d.png"},f558:function(e,t,i){e.exports=i.p+"img/witch.2f895245.png"},f834:function(e,t,i){e.exports=i.p+"img/mastermind.c3ba5fbb.png"},f88a:function(e,t,i){"use strict";var o=i("6bc1"),s=i.n(o);s.a},f93f:function(e,t,i){e.exports=i.p+"img/clockmaker.41906ffc.png"},fcc6:function(e,t,i){e.exports=i.p+"img/barber.a354ad9e.png"},fd83:function(e,t,i){e.exports=i.p+"img/custom.8ff972bc.png"},fff1:function(e,t,i){e.exports=i.p+"img/pacifist.ad2d0310.png"}});
+//# sourceMappingURL=app.ca275e5d.js.map
\ No newline at end of file
diff --git a/js/app.ca275e5d.js.map b/js/app.ca275e5d.js.map
new file mode 100644
index 0000000..1f9f4cb
--- /dev/null
+++ b/js/app.ca275e5d.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/assets/icons/washerwoman.png","webpack:///./src/assets/icons/barista.png","webpack:///./src/assets/icons/cerenovus.png","webpack:///./src/assets/icons/amnesiac.png","webpack:///./src/assets/icons/shabaloth.png","webpack:///./src/assets/icons/lunatic.png","webpack:///./src/assets/icons/oracle.png","webpack:///./src/assets/icons/ravenkeeper.png","webpack:///./src/assets/icons/undertaker.png","webpack:///./src/assets/icons/chambermaid.png","webpack:///./src/assets/icons/plus.png","webpack:///./src/assets/icons/recluse.png","webpack:///./src/assets/icons/mutant.png","webpack:///./src/store/socket.js","webpack:///./src/assets/icons/chef.png","webpack:///./src/assets/icons/zombuul.png","webpack:///./src/assets/icons/sailor.png","webpack:///./src/assets/icons/widow.png","webpack:///./src/assets/icons/bonecollector.png","webpack:///./src/assets/icons/baron.png","webpack:///./src/assets/icons/bureaucrat.png","webpack:///./src/assets/icons/leviathan.png","webpack:///./src/components/Vote.vue?309a","webpack:///./src/assets/icons/artist.png","webpack:///./src/assets/icons/sage.png","webpack:///./src/assets/icons/scapegoat.png","webpack:///./src/assets/icons/philosopher.png","webpack:///./src/components/TownSquare.vue?b88a","webpack:///./src/assets/icons/butcher.png","webpack:///./src/assets/icons/towncrier.png","webpack:///./src/assets/icons/vortox.png","webpack:///./src/assets/icons/deviant.png","webpack:///./src/assets/icons/imp.png","webpack:///./src/assets/icons/moonchild.png","webpack:///./src/components/Gradients.vue?8fc3","webpack:///./src/assets/icons/snakecharmer.png","webpack:///./src/assets/icons/fortuneteller.png","webpack:///./src/assets/icons/fool.png","webpack:///./src/assets/icons/apprentice.png","webpack:///./src/components/modals/RoleModal.vue?2d9b","webpack:///./src/assets/icons/librarian.png","webpack:///./src/assets/icons/soldier.png","webpack:///./src/assets/icons/minstrel.png","webpack:///./src/assets/icons/exorcist.png","webpack:///./src/assets/icons/harlot.png","webpack:///./src/assets/icons/goon.png","webpack:///./src/App.vue?5e05","webpack:///./src/components/TownSquare.vue?eb13","webpack:///./src/components/Player.vue?5d9e","webpack:///./src/components/Token.vue?c2c7","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/modals/ReminderModal.vue?3f11","webpack:///./src/components/modals/Modal.vue?fc66","webpack:///src/components/modals/Modal.vue","webpack:///./src/components/modals/Modal.vue?a5e5","webpack:///./src/components/modals/Modal.vue","webpack:///src/components/modals/ReminderModal.vue","webpack:///./src/components/modals/ReminderModal.vue?c533","webpack:///./src/components/modals/ReminderModal.vue","webpack:///./src/components/modals/RoleModal.vue?991c","webpack:///src/components/modals/RoleModal.vue","webpack:///./src/components/modals/RoleModal.vue?15f8","webpack:///./src/components/modals/RoleModal.vue","webpack:///src/components/TownSquare.vue","webpack:///./src/components/TownSquare.vue?335a","webpack:///./src/components/TownSquare.vue","webpack:///./src/components/TownInfo.vue?db47","webpack:///src/components/TownInfo.vue","webpack:///./src/components/TownInfo.vue?6260","webpack:///./src/components/TownInfo.vue","webpack:///./src/components/Menu.vue?7125","webpack:///./src/components/Screenshot.vue?04ee","webpack:///src/components/Screenshot.vue","webpack:///./src/components/Screenshot.vue?82cf","webpack:///./src/components/Screenshot.vue","webpack:///src/components/Menu.vue","webpack:///./src/components/Menu.vue?9842","webpack:///./src/components/Menu.vue","webpack:///./src/components/modals/RolesModal.vue?3da1","webpack:///src/components/modals/RolesModal.vue","webpack:///./src/components/modals/RolesModal.vue?b003","webpack:///./src/components/modals/RolesModal.vue","webpack:///./src/components/modals/EditionModal.vue?897d","webpack:///src/components/modals/EditionModal.vue","webpack:///./src/components/modals/EditionModal.vue?d6f4","webpack:///./src/components/modals/EditionModal.vue","webpack:///./src/components/Intro.vue?d49f","webpack:///src/components/Intro.vue","webpack:///./src/components/Intro.vue?a380","webpack:///./src/components/Intro.vue","webpack:///./src/components/modals/ReferenceModal.vue?b6ee","webpack:///src/components/modals/ReferenceModal.vue","webpack:///./src/components/modals/ReferenceModal.vue?c23b","webpack:///./src/components/modals/ReferenceModal.vue","webpack:///./src/components/Vote.vue?7f4e","webpack:///src/components/Vote.vue","webpack:///./src/components/Vote.vue?2a1c","webpack:///./src/components/Vote.vue","webpack:///./src/components/Gradients.vue?bdd0","webpack:///src/components/Gradients.vue","webpack:///./src/components/Gradients.vue?d8ff","webpack:///./src/components/Gradients.vue","webpack:///src/App.vue","webpack:///./src/App.vue?b65f","webpack:///./src/App.vue","webpack:///./src/store/modules/players.js","webpack:///./src/store/modules/session.js","webpack:///./src/store/index.js","webpack:///./src/main.js","webpack:///./src/assets/icons/cannibal.png","webpack:///./src/App.vue?6ee5","webpack:///./src/assets/icons/goblin.png","webpack:///./src/assets/icons/x.png","webpack:///./src/assets/icons sync ^\\.\\/.*\\.png$","webpack:///./src/assets/icons/butler.png","webpack:///./src/assets/icons/juggler.png","webpack:///./src/assets/icons/balloonist.png","webpack:///./src/assets/icons/innkeeper.png","webpack:///./src/assets/icons/good.png","webpack:///./src/assets/icons/flowergirl.png","webpack:///./src/components/TownInfo.vue?4928","webpack:///./src/assets/icons/monk.png","webpack:///./src/assets/icons/nodashii.png","webpack:///./src/assets/icons/saint.png","webpack:///./src/assets/icons/fanggu.png","webpack:///./src/assets/icons/dreamer.png","webpack:///./src/components/Player.vue?6d3c","webpack:///./src/assets/icons/pithag.png","webpack:///./src/assets/icons/bishop.png","webpack:///./src/components/modals/Modal.vue?3563","webpack:///./src/assets/icons/mathematician.png","webpack:///./src/assets/icons/assassin.png","webpack:///./src/assets/icons/godfather.png","webpack:///./src/components/Menu.vue?fba4","webpack:///./src/assets/icons/thief.png","webpack:///./src/assets/icons/tinker.png","webpack:///./src/components/Intro.vue?efdc","webpack:///./src/assets/icons/pukka.png","webpack:///./src/assets/icons/voudon.png","webpack:///./src/components/modals/ReminderModal.vue?706c","webpack:///./src/assets/icons/seamstress.png","webpack:///./src/assets/icons/klutz.png","webpack:///./src/assets/icons/matron.png","webpack:///./src/assets/icons/mayor.png","webpack:///./src/assets/icons/professor.png","webpack:///./src/assets/icons/investigator.png","webpack:///./src/assets/icons/tealady.png","webpack:///./src/assets/icons/empath.png","webpack:///./src/components/Token.vue?0f0c","webpack:///./src/components/modals/RolesModal.vue?53f0","webpack:///./src/assets/icons/evil.png","webpack:///./src/assets/icons/fisherman.png","webpack:///./src/assets/icons/po.png","webpack:///./src/components/Screenshot.vue?d943","webpack:///./src/assets/icons/grandmother.png","webpack:///./src/assets/icons/gossip.png","webpack:///./src/assets/icons/devilsadvocate.png","webpack:///./src/components/modals/EditionModal.vue?4589","webpack:///./src/assets/icons/beggar.png","webpack:///./src/assets/icons/slayer.png","webpack:///./src/assets/icons/savant.png","webpack:///./src/assets/icons/drunk.png","webpack:///./src/assets/icons/gambler.png","webpack:///./src/store/persistence.js","webpack:///./src/assets/icons/eviltwin.png","webpack:///./src/assets/icons/spy.png","webpack:///./src/assets/icons/courtier.png","webpack:///./src/assets/icons/gunslinger.png","webpack:///./src/assets/icons/virgin.png","webpack:///./src/assets/icons/judge.png","webpack:///./src/assets/icons/sweetheart.png","webpack:///./src/assets/icons/poisoner.png","webpack:///./src/assets/icons/scarletwoman.png","webpack:///./src/assets/icons/vigormortis.png","webpack:///./src/assets/icons/witch.png","webpack:///./src/assets/icons/mastermind.png","webpack:///./src/components/modals/ReferenceModal.vue?5383","webpack:///./src/assets/icons/clockmaker.png","webpack:///./src/assets/icons/barber.png","webpack:///./src/assets/icons/custom.png","webpack:///./src/assets/icons/pacifist.png"],"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","LiveSession","store","this","_wss","_socket","_isSpectator","_gamestate","_store","_pingInterval","_pingTimer","_players","state","session","sessionId","connect","channel","disconnect","WebSocket","addEventListener","_handleMessage","onopen","_onOpen","onclose","commit","clearInterval","command","params","readyState","send","JSON","stringify","_send","sendGamestate","_ping","playerId","_handlePing","clearTimeout","setTimeout","parse","err","console","log","_updateGamestate","_updatePlayer","_updateSeat","_handleVote","_handleBye","Math","random","toString","substr","isSpectator","_open","close","players","map","player","id","isDead","isVoteless","role","team","gamestate","edition","nomination","x","forEach","index","indexOf","now","Date","getTime","alert","keys","seat","oldIndex","findIndex","votes","vote","lockedVote","subscribe","type","payload","location","hash","claimSeat","lockVote","sendPlayer","param","split","render","_vm","_h","$createElement","_c","_self","class","screenshot","grimoire","isScreenshot","style","backgroundImage","background","attrs","on","keyup","_e","takeScreenshot","ref","staticRenderFns","staticClass","public","isPublic","spectator","zoom","_l","from","max","swap","move","nominate","$event","$emit","handleTrigger","_v","stopPropagation","openRoleModal","bluffs","selectedPlayer","dead","you","voteLocked","toggleStatus","nightOrder","first","isNightOrder","_s","_f","firstNightReminder","other","otherNightReminder","cancel","swapPlayer","movePlayer","nominatePlayer","updatePlayer","active","isMenuOpen","changeName","reminder","removeReminder","setRole","reminders","ability","props","default","filters","nameToFontSize","methods","component","components","Token","required","computed","indexAdjusted","isSwap","handleEmojis","text","replace","width","height","y","$refs","getBoundingClientRect","prompt","$store","playerIndex","directives","rawName","modals","availableReminders","expression","toggleModal","addReminder","_t","Modal","roles","some","availableRoles","Player","RoleModal","ReminderModal","method","confirm","to","undefined","teams","traveler","alive","townsfolk","outsider","minion","demon","nonTravelers","getters","filter","game","leaveSession","playerCount","success","isScreenshotSuccess","open","toggleMenu","tab","toggleGrimoire","toggleNightOrder","updateZoom","round","setBackground","hostSession","joinSession","copySessionUrl","addPlayer","randomizeSeatings","clearPlayers","clearRoles","stream","canvas","video","navigator","mediaDevices","getDisplayMedia","cursor","audio","srcObject","play","context","getContext","setAttribute","videoWidth","videoHeight","drawImage","toBlob","blob","item","ClipboardItem","clipboard","write","Screenshot","dimensions","capture","permissions","query","then","url","href","link","writeText","dispatch","teamRoles","selected","disabled","selectedRoles","assignRoles","selectRandomRoles","randomElement","arr","floor","roleSelection","values","reduce","a","b","hasSelectedSetupRoles","setup","$set","composition","available","sort","pop","mounted","watch","isCustom","script","handleURL","handleUpload","openUpload","promptURL","setEdition","editions","scripts","upload","click","file","files","size","reader","FileReader","parseScript","readAsText","res","fetch","json","editionName","playersByRole","join","find","rolesGrouped","nominator","nominee","ceil","stop","start","finish","nominatorStyle","transform","nomineeStyle","lock","rotation","min","canVote","voteTimer","setInterval","gradient","gradients","Vote","ReferenceModal","Intro","TownInfo","TownSquare","Menu","EditionModal","RolesModal","Gradients","menu","toLocaleLowerCase","NEWPLAYER","firstNight","otherNight","includes","Map","set","actions","rootState","mutations","namespaced","claimedSeat","use","getRolesByEdition","selectedEdition","localeCompare","Store","reference","document","title","by","modal","status","plugins","faIcons","fabIcons","add","config","productionTip","h","App","$mount","webpackContext","req","webpackContextResolve","e","Error","code","resolve","localStorage","getItem","setItem","removeItem"],"mappings":"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","file":"js/app.ca275e5d.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","module.exports = __webpack_public_path__ + \"img/washerwoman.a0c66e53.png\";","module.exports = __webpack_public_path__ + \"img/barista.fd2bba67.png\";","module.exports = __webpack_public_path__ + \"img/cerenovus.736554ca.png\";","module.exports = __webpack_public_path__ + \"img/amnesiac.03ce8f67.png\";","module.exports = __webpack_public_path__ + \"img/shabaloth.f461dd08.png\";","module.exports = __webpack_public_path__ + \"img/lunatic.f2982146.png\";","module.exports = __webpack_public_path__ + \"img/oracle.63459162.png\";","module.exports = __webpack_public_path__ + \"img/ravenkeeper.552f1f2f.png\";","module.exports = __webpack_public_path__ + \"img/undertaker.1df72155.png\";","module.exports = __webpack_public_path__ + \"img/chambermaid.b6f002ce.png\";","module.exports = __webpack_public_path__ + \"img/plus.c11bf1ed.png\";","module.exports = __webpack_public_path__ + \"img/recluse.a6519a1d.png\";","module.exports = __webpack_public_path__ + \"img/mutant.b28a535c.png\";","class LiveSession {\n constructor(store) {\n // this._wss = \"ws://localhost:8081/\";\n this._wss = \"wss://baumgart.biz:8080/\";\n this._socket = null;\n this._isSpectator = true;\n this._gamestate = [];\n this._store = store;\n this._pingInterval = 30 * 1000; // 30 seconds between pings\n this._pingTimer = null;\n this._players = {}; // map of players connected to a session\n // reconnect to previous session\n if (this._store.state.session.sessionId) {\n this.connect(this._store.state.session.sessionId);\n }\n }\n\n /**\n * Open a new session for the passed channel.\n * @param channel\n * @private\n */\n _open(channel) {\n this.disconnect();\n this._socket = new WebSocket(this._wss + channel);\n this._socket.addEventListener(\"message\", this._handleMessage.bind(this));\n this._socket.onopen = this._onOpen.bind(this);\n this._socket.onclose = () => {\n this._socket = null;\n this._store.commit(\"session/setSessionId\", \"\");\n clearInterval(this._pingTimer);\n this._pingTimer = null;\n };\n }\n\n /**\n * Send a message through the socket.\n * @param command\n * @param params\n * @private\n */\n _send(command, params) {\n if (this._socket && this._socket.readyState === 1) {\n this._socket.send(JSON.stringify([command, params]));\n }\n }\n\n /**\n * Open event handler for socket.\n * @private\n */\n _onOpen() {\n if (this._isSpectator) {\n this._send(\"req\", \"gs\");\n } else {\n this.sendGamestate();\n }\n this._ping();\n }\n\n /**\n * Send a ping message with player ID and ST flag.\n * @private\n */\n _ping() {\n this._send(\"ping\", [this._isSpectator, this._store.state.session.playerId]);\n this._handlePing();\n clearTimeout(this._pingTimer);\n this._pingTimer = setTimeout(this._ping.bind(this), this._pingInterval);\n }\n\n /**\n * Handle an incoming socket message.\n * @param data\n * @private\n */\n _handleMessage({ data }) {\n let command, params;\n try {\n [command, params] = JSON.parse(data);\n } catch (err) {\n console.log(\"unsupported socket message\", data);\n }\n switch (command) {\n case \"req\":\n if (params === \"gs\") {\n this.sendGamestate();\n }\n break;\n case \"gs\":\n this._updateGamestate(params);\n break;\n case \"player\":\n this._updatePlayer(params);\n break;\n case \"claim\":\n this._updateSeat(params);\n break;\n case \"ping\":\n this._handlePing(params);\n break;\n case \"nomination\":\n this._store.commit(\"session/nomination\", params);\n break;\n case \"vote\":\n this._handleVote(params);\n break;\n case \"lock\":\n this._store.commit(\"session/lockVote\", params);\n break;\n case \"bye\":\n this._handleBye(params);\n break;\n }\n }\n\n /**\n * Connect to a new live session, either as host or spectator.\n * Set a unique playerId if there isn't one yet.\n * @param channel\n */\n connect(channel) {\n if (!this._store.state.session.playerId) {\n this._store.commit(\n \"session/setPlayerId\",\n Math.random()\n .toString(36)\n .substr(2)\n );\n }\n this._store.commit(\"session/setPlayerCount\", 0);\n this._isSpectator = this._store.state.session.isSpectator;\n this._open(channel);\n }\n\n /**\n * Close the current session, if any.\n */\n disconnect() {\n this._store.commit(\"session/setPlayerCount\", 0);\n if (this._socket) {\n this._send(\"bye\", this._store.state.session.playerId);\n this._socket.close();\n this._socket = null;\n }\n }\n\n /**\n * Publish the current gamestate.\n */\n sendGamestate() {\n if (this._isSpectator) return;\n this._gamestate = this._store.state.players.players.map(player => ({\n name: player.name,\n id: player.id,\n isDead: player.isDead,\n isVoteless: player.isVoteless,\n ...(player.role && player.role.team === \"traveler\"\n ? {\n role: {\n id: player.role.id,\n team: \"traveler\",\n name: player.role.name\n }\n }\n : {})\n }));\n this._send(\"gs\", {\n gamestate: this._gamestate,\n edition: this._store.state.edition,\n nomination: this._store.state.session.nomination\n });\n }\n\n /**\n * Update the gamestate based on incoming data.\n * @param gamestate\n * @param edition\n * @private\n */\n _updateGamestate({ gamestate, edition, nomination }) {\n if (!this._isSpectator) return;\n this._store.commit(\"setEdition\", edition);\n this._store.commit(\"session/nomination\", nomination);\n const players = this._store.state.players.players;\n // adjust number of players\n if (players.length < gamestate.length) {\n for (let x = players.length; x < gamestate.length; x++) {\n this._store.commit(\"players/add\", gamestate[x].name);\n }\n } else if (players.length > gamestate.length) {\n for (let x = players.length; x > gamestate.length; x--) {\n this._store.commit(\"players/remove\", x - 1);\n }\n }\n // update status for each player\n gamestate.forEach((state, x) => {\n const player = players[x];\n const { role } = state;\n // update relevant properties\n [\"name\", \"id\", \"isDead\", \"isVoteless\"].forEach(property => {\n const value = state[property];\n if (player[property] !== value) {\n this._store.commit(\"players/update\", { player, property, value });\n }\n });\n // roles are special, because of travelers\n if (role && player.role.id !== role.id) {\n this._store.commit(\"players/update\", {\n player,\n property: \"role\",\n value: role\n });\n } else if (!role && player.role.team === \"traveler\") {\n this._store.commit(\"players/update\", {\n player,\n property: \"role\",\n value: {}\n });\n }\n });\n }\n\n /**\n * Publish a player update.\n * @param player\n * @param property\n * @param value\n */\n sendPlayer({ player, property, value }) {\n if (this._isSpectator || property === \"reminders\") return;\n const index = this._store.state.players.players.indexOf(player);\n if (property === \"role\") {\n if (value.team && value.team === \"traveler\") {\n // update local gamestate to remember this player as a traveler\n this._gamestate[index].role = {\n id: player.role.id,\n team: \"traveler\",\n name: player.role.name\n };\n this._send(\"player\", {\n index,\n property,\n value: this._gamestate[index].role\n });\n } else if (this._gamestate[index].role) {\n delete this._gamestate[index].role;\n this._send(\"player\", { index, property, value: {} });\n }\n } else {\n this._send(\"player\", { index, property, value });\n }\n }\n\n /**\n * Update a player based on incoming data.\n * @param index\n * @param property\n * @param value\n * @private\n */\n _updatePlayer({ index, property, value }) {\n const player = this._store.state.players.players[index];\n if (!player) return;\n // special case where a player stops being a traveler\n if (\n property === \"role\" &&\n value.team !== \"traveler\" &&\n player.role.team === \"traveler\"\n ) {\n // reset to an unknown role\n this._store.commit(\"players/update\", {\n player,\n property: \"role\",\n value: {}\n });\n } else {\n // just update the player otherwise\n this._store.commit(\"players/update\", { player, property, value });\n }\n }\n\n /**\n * Handle a ping message by another player / storyteller\n * @param isSpectator\n * @param playerId\n * @private\n */\n _handlePing([isSpectator, playerId] = []) {\n const now = new Date().getTime();\n if (playerId) {\n this._players[playerId] = now;\n if (!this._isSpectator && !isSpectator) {\n alert(\"Another storyteller joined the session!\");\n }\n }\n // remove players that haven't sent a ping in twice the timespan\n for (let player in this._players) {\n if (now - this._players[player] > this._pingInterval * 2) {\n delete this._players[player];\n }\n }\n // remove claimed seats from players that are no longer connected\n this._store.state.players.players.forEach(player => {\n if (!this._isSpectator && player.id && !this._players[player.id]) {\n this._store.commit(\"players/update\", {\n player,\n property: \"id\",\n value: \"\"\n });\n }\n });\n this._store.commit(\n \"session/setPlayerCount\",\n Object.keys(this._players).length\n );\n }\n\n /**\n * Handle a player leaving the sessions\n * @param playerId\n * @private\n */\n _handleBye(playerId) {\n delete this._players[playerId];\n this._store.commit(\n \"session/setPlayerCount\",\n Object.keys(this._players).length\n );\n }\n\n /**\n * Claim a seat, needs to be confirmed by the Storyteller.\n * @param seat either -1 or the index of the seat claimed\n */\n claimSeat(seat) {\n if (!this._isSpectator) return;\n if (this._store.state.players.players.length > seat) {\n this._send(\"claim\", [seat, this._store.state.session.playerId]);\n }\n }\n\n /**\n * Update a player id associated with that seat.\n * @param index seat index or -1\n * @param value playerId to add / remove\n * @private\n */\n _updateSeat([index, value]) {\n if (this._isSpectator) return;\n const property = \"id\";\n const players = this._store.state.players.players;\n // remove previous seat\n const oldIndex = players.findIndex(({ id }) => id === value);\n if (oldIndex >= 0 && oldIndex !== index) {\n this._store.commit(\"players/update\", {\n player: players[oldIndex],\n property,\n value: \"\"\n });\n }\n // add playerId to new seat\n if (index >= 0) {\n const player = players[index];\n if (!player) return;\n this._store.commit(\"players/update\", { player, property, value });\n }\n // update player session list as if this was a ping\n this._handlePing([true, value]);\n }\n\n /**\n * A player nomination. ST only\n * @param nomination [nominator, nominee]\n */\n nomination(nomination) {\n if (this._isSpectator) return;\n const players = this._store.state.players.players;\n if (\n !nomination ||\n (players.length > nomination[0] && players.length > nomination[1])\n ) {\n this._send(\"nomination\", nomination);\n }\n }\n\n /**\n * Send a vote. Player only\n * @param index Seat of the player\n */\n vote([index]) {\n if (!this._isSpectator) return;\n const player = this._store.state.players.players[index];\n if (this._store.state.session.playerId === player.id) {\n // send vote only if it is your own vote\n this._send(\"vote\", [index, this._store.state.session.votes[index]]);\n }\n }\n\n /**\n * Handle an incoming vote, but not if it is for your own seat.\n * @param vote\n */\n _handleVote(vote) {\n const player = this._store.state.players.players[vote[0]];\n if (this._store.state.session.playerId !== player.id) {\n this._store.commit(\"session/vote\", vote);\n }\n }\n\n /**\n * Lock a vote. ST only\n */\n lockVote() {\n if (this._isSpectator) return;\n this._send(\"lock\", this._store.state.session.lockedVote);\n }\n}\n\nmodule.exports = store => {\n // setup\n const session = new LiveSession(store);\n\n // listen to mutations\n store.subscribe(({ type, payload }) => {\n switch (type) {\n case \"session/setSessionId\":\n if (payload) {\n session.connect(payload);\n } else {\n window.location.hash = \"\";\n session.disconnect();\n }\n break;\n case \"session/claimSeat\":\n session.claimSeat(payload);\n break;\n case \"session/nomination\":\n session.nomination(payload);\n break;\n case \"session/vote\":\n session.vote(payload);\n break;\n case \"session/lockVote\":\n session.lockVote();\n break;\n case \"players/set\":\n case \"players/swap\":\n case \"players/move\":\n case \"players/clear\":\n case \"players/remove\":\n case \"players/add\":\n case \"setEdition\":\n session.sendGamestate();\n break;\n case \"players/update\":\n session.sendPlayer(payload);\n break;\n }\n });\n\n // check for session Id in hash\n const [command, param] = window.location.hash.substr(1).split(\"/\");\n if (command === \"play\") {\n store.commit(\"session/setSpectator\", true);\n store.commit(\"session/setSessionId\", param);\n }\n};\n","module.exports = __webpack_public_path__ + \"img/chef.d4e7f9a6.png\";","module.exports = __webpack_public_path__ + \"img/zombuul.ec71a259.png\";","module.exports = __webpack_public_path__ + \"img/sailor.631521c2.png\";","module.exports = __webpack_public_path__ + \"img/widow.ec8d8cb0.png\";","module.exports = __webpack_public_path__ + \"img/bonecollector.846af8c8.png\";","module.exports = __webpack_public_path__ + \"img/baron.9ce9bd3b.png\";","module.exports = __webpack_public_path__ + \"img/bureaucrat.88ec372a.png\";","module.exports = __webpack_public_path__ + \"img/leviathan.dfbff6e8.png\";","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!./Vote.vue?vue&type=style&index=0&id=47b09fc5&lang=scss&scoped=true&\"; 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!./Vote.vue?vue&type=style&index=0&id=47b09fc5&lang=scss&scoped=true&\"","module.exports = __webpack_public_path__ + \"img/artist.f89690cd.png\";","module.exports = __webpack_public_path__ + \"img/sage.5afc100d.png\";","module.exports = __webpack_public_path__ + \"img/scapegoat.8bd95c23.png\";","module.exports = __webpack_public_path__ + \"img/philosopher.92032c70.png\";","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&\"","module.exports = __webpack_public_path__ + \"img/butcher.e0b672b7.png\";","module.exports = __webpack_public_path__ + \"img/towncrier.18a4377b.png\";","module.exports = __webpack_public_path__ + \"img/vortox.6add3a3a.png\";","module.exports = __webpack_public_path__ + \"img/deviant.e8a761ae.png\";","module.exports = __webpack_public_path__ + \"img/imp.cd0fa5b8.png\";","module.exports = __webpack_public_path__ + \"img/moonchild.6c84161e.png\";","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!./Gradients.vue?vue&type=style&index=0&id=1e202a64&lang=scss&scoped=true&\"; 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!./Gradients.vue?vue&type=style&index=0&id=1e202a64&lang=scss&scoped=true&\"","module.exports = __webpack_public_path__ + \"img/snakecharmer.e512cc1e.png\";","module.exports = __webpack_public_path__ + \"img/fortuneteller.4396927c.png\";","module.exports = __webpack_public_path__ + \"img/fool.a730aab3.png\";","module.exports = __webpack_public_path__ + \"img/apprentice.b7055345.png\";","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!./RoleModal.vue?vue&type=style&index=0&id=06abb511&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!./RoleModal.vue?vue&type=style&index=0&id=06abb511&scoped=true&lang=scss&\"","module.exports = __webpack_public_path__ + \"img/librarian.6fd7f267.png\";","module.exports = __webpack_public_path__ + \"img/soldier.451de0df.png\";","module.exports = __webpack_public_path__ + \"img/minstrel.1647382d.png\";","module.exports = __webpack_public_path__ + \"img/exorcist.8c0f5cac.png\";","module.exports = __webpack_public_path__ + \"img/harlot.1a418200.png\";","module.exports = __webpack_public_path__ + \"img/goon.719106f2.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:{ screenshot: _vm.grimoire.isScreenshot },style:({\n backgroundImage: _vm.grimoire.background\n ? (\"url('\" + (_vm.grimoire.background) + \"')\")\n : ''\n }),attrs:{\"id\":\"app\",\"tabindex\":\"-1\"},on:{\"keyup\":_vm.keyup}},[_c('transition',{attrs:{\"name\":\"zoom\"}},[(!_vm.players.length)?_c('Intro'):_vm._e(),(_vm.players.length && !_vm.session.nomination)?_c('TownInfo'):_vm._e(),(_vm.session.nomination)?_c('Vote'):_vm._e()],1),_c('TownSquare',{on:{\"screenshot\":_vm.takeScreenshot}}),_c('Menu',{ref:\"menu\"}),_c('EditionModal'),_c('RolesModal'),_c('ReferenceModal'),_c('Gradients')],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:{\n public: _vm.grimoire.isPublic,\n spectator: _vm.session.isSpectator,\n vote: _vm.session.nomination\n },style:({ zoom: _vm.grimoire.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,class:{\n from: Math.max(_vm.swap, _vm.move, _vm.nominate) === index,\n swap: _vm.swap > -1,\n move: _vm.move > -1,\n nominate: _vm.nominate > -1\n },attrs:{\"player\":player},on:{\"screenshot\":function($event){return _vm.$emit('screenshot', $event)},\"trigger\":function($event){return _vm.handleTrigger(index, $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',_vm._l((_vm.bluffs),function(index){return _c('li',{key:index,on:{\"click\":function($event){return _vm.openRoleModal(index * -1)}}},[_c('Token',{attrs:{\"role\":_vm.grimoire.bluffs[index - 1]}})],1)}),0)],1):_vm._e(),_c('ReminderModal',{attrs:{\"player-index\":_vm.selectedPlayer}}),_c('RoleModal',{attrs:{\"player-index\":_vm.selectedPlayer}})],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 {\n dead: _vm.player.isDead,\n 'no-vote': _vm.player.isVoteless,\n you: _vm.player.id === _vm.session.playerId,\n 'vote-yes': _vm.session.votes[_vm.index],\n 'vote-lock': _vm.voteLocked\n },\n _vm.player.role.team\n ]},[_c('div',{staticClass:\"shroud\",on:{\"click\":function($event){return _vm.toggleStatus()}}}),_c('div',{staticClass:\"life\",on:{\"click\":function($event){return _vm.toggleStatus()}}}),(_vm.nightOrder.get(_vm.player).first && _vm.grimoire.isNightOrder)?_c('div',{staticClass:\"night first\"},[_c('em',[_vm._v(_vm._s(_vm.nightOrder.get(_vm.player).first)+\".\")]),(_vm.player.role.firstNightReminder)?_c('span',[_vm._v(_vm._s(_vm._f(\"handleEmojis\")(_vm.player.role.firstNightReminder)))]):_vm._e()]):_vm._e(),(_vm.nightOrder.get(_vm.player).other && _vm.grimoire.isNightOrder)?_c('div',{staticClass:\"night other\"},[_c('em',[_vm._v(_vm._s(_vm.nightOrder.get(_vm.player).other)+\".\")]),(_vm.player.role.otherNightReminder)?_c('span',[_vm._v(_vm._s(_vm._f(\"handleEmojis\")(_vm.player.role.otherNightReminder)))]):_vm._e()]):_vm._e(),_c('Token',{attrs:{\"role\":_vm.player.role},on:{\"set-role\":function($event){return _vm.$emit('trigger', ['openRoleModal'])}}}),_c('font-awesome-icon',{staticClass:\"vote\",attrs:{\"icon\":\"skull\",\"title\":\"Voted YES\"},on:{\"click\":function($event){return _vm.vote()}}}),_c('font-awesome-icon',{staticClass:\"vote\",attrs:{\"icon\":\"times\",\"title\":\"Voted NO\"},on:{\"click\":function($event){return _vm.vote()}}}),_c('font-awesome-icon',{staticClass:\"cancel\",attrs:{\"icon\":\"times-circle\",\"title\":\"Cancel\"},on:{\"click\":function($event){return _vm.cancel()}}}),_c('font-awesome-icon',{staticClass:\"swap\",attrs:{\"icon\":\"exchange-alt\",\"title\":\"Swap seats with this player\"},on:{\"click\":function($event){return _vm.swapPlayer(_vm.player)}}}),_c('font-awesome-icon',{staticClass:\"move\",attrs:{\"icon\":\"redo-alt\",\"title\":\"Move player to this seat\"},on:{\"click\":function($event){return _vm.movePlayer(_vm.player)}}}),_c('font-awesome-icon',{staticClass:\"nominate\",attrs:{\"icon\":\"hand-point-right\",\"title\":\"Nominate this player\"},on:{\"click\":function($event){return _vm.nominatePlayer(_vm.player)}}}),(_vm.player.id)?_c('font-awesome-icon',{staticClass:\"seat\",attrs:{\"icon\":\"chair\"}}):_vm._e(),(_vm.player.isDead && !_vm.player.isVoteless)?_c('font-awesome-icon',{staticClass:\"has-vote\",attrs:{\"icon\":\"vote-yea\",\"title\":\"Ghost vote\"},on:{\"click\":function($event){return _vm.updatePlayer('isVoteless', true)}}}):_vm._e(),_c('div',{staticClass:\"name\",class:{ active: _vm.isMenuOpen },on:{\"click\":function($event){_vm.isMenuOpen = !_vm.isMenuOpen}}},[_vm._v(\" \"+_vm._s(_vm.player.name)+\" \")]),_c('transition',{attrs:{\"name\":\"fold\"}},[(_vm.isMenuOpen)?_c('ul',{staticClass:\"menu\"},[(!_vm.session.isSpectator)?[_c('li',{on:{\"click\":_vm.changeName}},[_c('font-awesome-icon',{attrs:{\"icon\":\"user-edit\"}}),_vm._v(\"Rename \")],1),(!_vm.session.nomination)?_c('li',{on:{\"click\":function($event){return _vm.nominatePlayer()}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"hand-point-right\"}}),_vm._v(\" Nomination \")],1):_vm._e(),_c('li',{on:{\"click\":function($event){return _vm.movePlayer()}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"redo-alt\"}}),_vm._v(\" Move player \")],1),_c('li',{on:{\"click\":function($event){return _vm.swapPlayer()}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"exchange-alt\"}}),_vm._v(\" Swap seats \")],1),_c('li',{on:{\"click\":_vm.takeScreenshot}},[_c('font-awesome-icon',{attrs:{\"icon\":\"camera\"}}),_vm._v(\" Screenshot \")],1),_c('li',{on:{\"click\":function($event){return _vm.$emit('trigger', ['removePlayer'])}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"times-circle\"}}),_vm._v(\" Remove \")],1)]:_vm._e(),(_vm.session.isSpectator)?_c('li',{on:{\"click\":_vm.claimSeat}},[_c('font-awesome-icon',{attrs:{\"icon\":\"chair\"}}),(_vm.player.id !== _vm.session.playerId)?[_vm._v(\" Claim seat \")]:[_vm._v(\" Vacate seat \")]],2):_vm._e()],2):_vm._e()])],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)}}},[_c('span',{staticClass:\"icon\",style:({\n backgroundImage: (\"url(\" + (require('../assets/icons/' +\n reminder.role +\n '.png')) + \")\")\n })}),_vm._v(\" \"+_vm._s(reminder.name)+\" \")])}):_vm._e(),_c('div',{staticClass:\"reminder add\",on:{\"click\":function($event){return _vm.$emit('trigger', ['openReminderModal'])}}},[_c('span',{staticClass:\"icon\"})])],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.id)?_c('span',{staticClass:\"icon\",style:({\n backgroundImage: (\"url(\" + (require('../assets/icons/' +\n _vm.role.id +\n '.png')) + \")\")\n })}):_vm._e(),(_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('svg',{staticClass:\"name\",attrs:{\"viewBox\":\"0 0 150 150\"}},[_c('path',{attrs:{\"d\":\"M 13 75 C 13 160, 138 160, 138 75\",\"id\":\"curve\",\"fill\":\"transparent\"}}),_c('text',{staticClass:\"label\",attrs:{\"width\":\"150\",\"x\":\"66.6%\",\"text-anchor\":\"middle\",\"font-size\":_vm._f(\"nameToFontSize\")(_vm.role.name)}},[_c('textPath',{attrs:{\"xlink:href\":\"#curve\"}},[_vm._v(\" \"+_vm._s(_vm.role.name)+\" \")])])]),_c('div',{staticClass:\"edition\",class:[(\"edition-\" + (_vm.role.edition)), _vm.role.team]}),(_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 \n \n \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=77841dfe&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=77841dfe&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 \"77841dfe\",\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!./RolesModal.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!./RolesModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RolesModal.vue?vue&type=template&id=56f09202&scoped=true&\"\nimport script from \"./RolesModal.vue?vue&type=script&lang=js&\"\nexport * from \"./RolesModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RolesModal.vue?vue&type=style&index=0&id=56f09202&lang=scss&scoped=true&\"\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 \"56f09202\",\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('Modal',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.modals.edition),expression:\"modals.edition\"}],staticClass:\"editions\",on:{\"close\":function($event){return _vm.toggleModal('edition')}}},[(!_vm.isCustom)?_c('div',[_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)+\" \")])}),_c('li',{staticClass:\"edition edition-custom\",on:{\"click\":function($event){_vm.isCustom = true}}},[_vm._v(\" Custom Script \")])],2)]):_c('div',{staticClass:\"custom\"},[_c('h3',[_vm._v(\"Upload a custom script\")]),_vm._v(\" To play with a custom script, you need to select the characters you want to play with in the official \"),_c('a',{attrs:{\"href\":\"https://bloodontheclocktower.com/script-tool/\",\"target\":\"_blank\"}},[_vm._v(\"Script Tool\")]),_vm._v(\" and then upload the generated \\\"custom-list.json\\\" either directly here or provide a URL to such a hosted JSON file.\"),_c('br'),_c('h3',[_vm._v(\"Some custom Teensyville scripts:\")]),_c('ul',{staticClass:\"scripts\"},_vm._l((_vm.scripts),function(script,index){return _c('li',{key:index,on:{\"click\":function($event){return _vm.handleURL(script[1])}}},[_vm._v(\" \"+_vm._s(script[0])+\" \")])}),0),_c('input',{ref:\"upload\",attrs:{\"type\":\"file\",\"accept\":\"application/json\"},on:{\"change\":_vm.handleUpload}}),_c('div',{staticClass:\"button-group\"},[_c('div',{staticClass:\"button\",on:{\"click\":_vm.openUpload}},[_c('font-awesome-icon',{attrs:{\"icon\":\"file-upload\"}}),_vm._v(\" Upload JSON \")],1),_c('div',{staticClass:\"button\",on:{\"click\":_vm.promptURL}},[_c('font-awesome-icon',{attrs:{\"icon\":\"link\"}}),_vm._v(\" Enter URL \")],1),_c('div',{staticClass:\"button\",on:{\"click\":function($event){_vm.isCustom = false}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"undo\"}}),_vm._v(\" Back \")],1)])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n
\n
Select an edition:
\n
\n
\n {{ edition.name }}\n
\n
\n Custom Script\n
\n
\n
\n
\n
Upload a custom script
\n To play with a custom script, you need to select the characters you want\n to play with in the official\n Script Tool\n and then upload the generated \"custom-list.json\" either directly here or\n provide a URL to such a hosted JSON file. \n
Some custom Teensyville scripts:
\n
\n
\n {{ script[0] }}\n
\n
\n \n
\n
\n Upload JSON\n
\n
\n Enter URL\n
\n
\n Back\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!./EditionModal.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!./EditionModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EditionModal.vue?vue&type=template&id=78e871b6&scoped=true&\"\nimport script from \"./EditionModal.vue?vue&type=script&lang=js&\"\nexport * from \"./EditionModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EditionModal.vue?vue&type=style&index=0&id=78e871b6&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 \"78e871b6\",\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',{staticClass:\"intro\"},[_c('img',{attrs:{\"src\":\"static/apple-icon.png\",\"alt\":\"\"}}),_vm._v(\" Welcome to the (unofficial) \"),_c('b',[_vm._v(\" Virtual Blood on the Clocktower Town Square\")]),_vm._v(\"!\"),_c('br'),_vm._v(\" Please add more players through the \"),_c('span',{staticClass:\"button\",on:{\"click\":_vm.toggleMenu}},[_c('font-awesome-icon',{attrs:{\"icon\":\"cog\"}}),_vm._v(\" Menu \")],1),_vm._v(\" on the top right or by pressing \"),_c('b',[_vm._v(\"[A]\")]),_vm._v(\".\"),_c('br'),_vm._v(\" This project is free and open source and can be found on \"),_c('a',{attrs:{\"href\":\"https://github.com/bra1n/townsquare\",\"target\":\"_blank\"}},[_vm._v(\"GitHub\")]),_vm._v(\". \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n
\n \n Welcome to the (unofficial)\n Virtual Blood on the Clocktower Town Square! \n Please add more players through the\n \n Menu\n \n on the top right or by pressing [A]. \n This project is free and open source and can be found on\n GitHub.\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!./Intro.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!./Intro.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Intro.vue?vue&type=template&id=1ab9b794&scoped=true&\"\nimport script from \"./Intro.vue?vue&type=script&lang=js&\"\nexport * from \"./Intro.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Intro.vue?vue&type=style&index=0&id=1ab9b794&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 \"1ab9b794\",\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 (_vm.roles.size)?_c('Modal',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.modals.reference),expression:\"modals.reference\"}],staticClass:\"characters\",on:{\"close\":function($event){return _vm.toggleModal('reference')}}},[_c('h3',[_vm._v(_vm._s(_vm.editionName)+\" Character Reference\")]),_c('ul',{staticClass:\"legend\"},[_c('li',[_c('span',{staticClass:\"name\"},[_vm._v(\"Name\")]),_c('span',{staticClass:\"icon\"},[_vm._v(\"Icon\")]),_c('span',{staticClass:\"ability\"},[_vm._v(\"Ability\")]),(Object.keys(_vm.playersByRole).length)?_c('span',{staticClass:\"player\"},[_vm._v(\" Player \")]):_vm._e()])]),_vm._l((_vm.rolesGrouped),function(teamRoles,team){return _c('div',{key:team,class:[team]},[_c('h4',[_vm._v(_vm._s(team))]),_c('ul',_vm._l((teamRoles),function(role){return _c('li',{key:role.id,class:[team]},[_c('span',{staticClass:\"name\"},[_vm._v(_vm._s(role.name))]),(role.id)?_c('span',{staticClass:\"icon\",style:({\n backgroundImage: (\"url(\" + (require('../../assets/icons/' +\n role.id +\n '.png')) + \")\")\n })}):_vm._e(),_c('span',{staticClass:\"ability\"},[_vm._v(_vm._s(role.ability))]),(Object.keys(_vm.playersByRole).length)?_c('span',{staticClass:\"player\"},[_vm._v(_vm._s(_vm.playersByRole[role.id] ? _vm.playersByRole[role.id].join(\", \") : \"\"))]):_vm._e()])}),0)])})],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n