townsquare/js/app.89587300.js

2 lines
42 KiB
JavaScript

(function(e){function t(t){for(var a,s,n=t[0],l=t[1],h=t[2],u=0,m=[];u<n.length;u++)s=n[u],Object.prototype.hasOwnProperty.call(o,s)&&o[s]&&m.push(o[s][0]),o[s]=0;for(a in l)Object.prototype.hasOwnProperty.call(l,a)&&(e[a]=l[a]);d&&d(t);while(m.length)m.shift()();return r.push.apply(r,h||[]),i()}function i(){for(var e,t=0;t<r.length;t++){for(var i=r[t],a=!0,n=1;n<i.length;n++){var l=i[n];0!==o[l]&&(a=!1)}a&&(r.splice(t--,1),e=s(s.s=i[0]))}return e}var a={},o={app:0},r=[];function s(t){if(a[t])return a[t].exports;var i=a[t]={i:t,l:!1,exports:{}};return e[t].call(i.exports,i,i.exports,s),i.l=!0,i.exports}s.m=e,s.c=a,s.d=function(e,t,i){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},s.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(s.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)s.d(i,a,function(t){return e[t]}.bind(null,a));return i},s.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="/townsquare/";var n=window["webpackJsonp"]=window["webpackJsonp"]||[],l=n.push.bind(n);n.push=t,n=n.slice();for(var h=0;h<n.length;h++)t(n[h]);var d=l;r.push(["56d7","chunk-vendors"]),i()})({"0025":function(e,t,i){},"00c0":function(e){e.exports=JSON.parse('[{"id":"tb","name":"Trouble Brewing","hasTravelers":true,"description":"Clouds roll in over Ravenswood Bluff, engulfing this sleepy town and its superstitious inhabitants in foreboding shadow. Freshly-washed clothes dance eerily on lines strung between cottages. Chimneys cough plumes of smoke into the air. Exotic scents waft through cracks in windows and under doors, as hidden cauldrons lay bubbling. An unusually warm Autumn breeze wraps around vine-covered walls and whispers ominously to those brave enough to walk the cobbled streets.\\n\\nAnxious mothers call their children home from play, as thunder begins to clap on the horizon. If you listen more closely, however, noises stranger still can be heard echoing from the neighbouring forest. Under the watchful eye of a looming monastery, silhouetted figures skip from doorway to doorway. Those who can read the signs know there is... Trouble Brewing.","level":"Beginner","roles":[]},{"id":"bmr","name":"Bad Moon Rising","hasTravelers":true,"description":"The sun is swallowed by a jagged horizon as another winter\'s day surrenders to the night. Flecks of orange and red decay into deeper browns, the forest transforming in silent anticipation of the coming snow.\\n\\nRavenous wolves howl from the bowels of a rocky crevasse beyond the town borders, sending birds scattering from their cozy rooks. Travelers hurry into the inn, seeking shelter from the gathering chill. They warm themselves with hot tea, sweet strains of music and hearty ale, unaware that strange and nefarious eyes stalk them from the ruins of this once great city.\\n\\nTonight, even the livestock know there is a... Bad Moon Rising.","level":"Intermediate","roles":[]},{"id":"snv","name":"Sects & Violets","hasTravelers":true,"description":"Vibrant spring gives way to a warm and inviting summer. Flowers of every description blossom as far as the eye can see, tenderly nurtured in public gardens and window boxes overlooking the lavish promenade. Birds sing, artists paint and philosophers ponder life\'s greatest mysteries inside a bustling tavern as a circus pitches its endearingly ragged tent on the edge of town.\\n\\nAs the townsfolk bask in frivolity and mischief, indulging themselves in fine entertainment and even finer wine, dark and clandestine forces are assembling. Witches and cults lurk in majestic ruins on the fringes of the community, hosting secret meetings in underground caves and malevolently plotting the downfall of Ravenswood Bluff and its revelers.\\n\\nThe time is ripe for... Sects & Violets.","level":"Intermediate","roles":[]},{"id":"luf","name":"Laissez un Faire","hasTravelers":false,"description":"","level":"Veteran","roles":["balloonist","savant","amnesiac","fisherman","artist","cannibal","mutant","lunatic","widow","goblin","leviathan"]}]')},"1a66":function(e,t,i){},2197:function(e,t,i){},"30db":function(e,t,i){"use strict";var a=i("0025"),o=i.n(a);o.a},3636:function(e,t,i){"use strict";var a=i("d4b2"),o=i.n(a);o.a},"56d7":function(e,t,i){"use strict";i.r(t);var a=i("2b0e"),o=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"app",tabindex:"-1"},on:{keyup:e.keyup}},[i("TownInfo",{attrs:{players:e.players,edition:e.edition}}),i("TownSquare",{attrs:{"is-public":e.isPublic,players:e.players,roles:e.roles,zoom:e.zoom}}),i("Modal",{directives:[{name:"show",rawName:"v-show",value:e.isEditionModalOpen,expression:"isEditionModalOpen"}],staticClass:"editions",on:{close:function(t){e.isEditionModalOpen=!1}}},[i("h2",[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)+" ")])})),0)]),i("RoleSelectionModal",{attrs:{players:e.players,roles:e.roles,"is-open":e.isRoleModalOpen},on:{close:function(t){e.isRoleModalOpen=!1}}}),i("div",{staticClass:"controls"},[i("font-awesome-icon",{attrs:{icon:"cogs"},on:{click:function(t){e.isControlOpen=!e.isControlOpen}}}),e.isControlOpen?i("ul",[i("li",{on:{click:e.togglePublic}},[e._v("Toggle "),i("em",[e._v("G")]),e._v("rimoire")]),i("li",[e._v(" Size "),i("font-awesome-icon",{attrs:{icon:"search-minus"},on:{click:function(t){e.zoom-=.1}}}),e._v(" "+e._s(Math.round(100*e.zoom))+"% "),i("font-awesome-icon",{attrs:{icon:"search-plus"},on:{click:function(t){e.zoom+=.1}}})],1),e.players.length<20?i("li",{on:{click:e.addPlayer}},[i("em",[e._v("A")]),e._v("dd Player ")]):e._e(),e.players.length>2?i("li",{on:{click:e.randomizeSeatings}},[i("em",[e._v("R")]),e._v("andomize Seatings ")]):e._e(),e.players.length?i("li",{on:{click:e.clearPlayers}},[e._v(" Clear Players ")]):e._e(),e.players.length?i("li",{on:{click:e.clearRoles}},[e._v(" Clear Roles ")]):e._e(),e.players.length>4?i("li",{on:{click:e.showEditionModal}},[e._v(" Select Edition ")]):e._e(),e.players.length>4?i("li",{on:{click:e.showRoleModal}},[e._v(" Select Roles ")]):e._e()]):e._e()],1)],1)},r=[],s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"square",class:{public:e.isPublic},style:{zoom:e.zoom},attrs:{id:"townsquare"}},[i("ul",{staticClass:"circle",class:["size-"+e.players.length]},e._l(e.players,(function(t,a){return i("Player",{key:a,attrs:{player:t,roles:e.roles,"is-public":e.isPublic},on:{"add-reminder":e.openReminderModal,"set-role":e.openRoleModal,"remove-player":e.removePlayer}})})),1),i("Modal",{directives:[{name:"show",rawName:"v-show",value:e.availableReminders.length&&e.selectedPlayer,expression:"availableReminders.length && selectedPlayer"}],on:{close:e.closeModal}},[i("h2",[e._v("Choose a reminder token:")]),i("ul",{staticClass:"reminders"},e._l(e.availableReminders,(function(t){return i("li",{key:t.role+" "+t.name,staticClass:"reminder",class:[t.role],on:{click:function(i){return e.addReminder(t)}}},[e._v(" "+e._s(t.name)+" ")])})),0)]),i("Modal",{directives:[{name:"show",rawName:"v-show",value:e.availableRoles.length&&e.selectedPlayer,expression:"availableRoles.length && selectedPlayer"}],on:{close:e.closeModal}},[i("h2",[e._v("Choose a new role:")]),i("ul",{staticClass:"tokens"},e._l(e.availableRoles,(function(t){return i("li",{key:t.id,class:[t.team],on:{click:function(i){return e.setRole(t)}}},[i("Token",{attrs:{role:t}})],1)})),0)])],1)},n=[],l=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("li",[i("div",{staticClass:"player",class:{dead:e.player.hasDied,"no-vote":e.player.hasVoted,traveler:e.player.role&&"traveler"===e.player.role.team}},[i("div",{staticClass:"shroud",on:{click:function(t){return e.toggleStatus()}}}),i("div",{staticClass:"life",on:{click:function(t){return e.toggleStatus()}}}),i("Token",{attrs:{role:e.player.role},on:{"set-role":e.setRole}}),e.player.role.ability?i("div",{staticClass:"ability"},[e._v(" "+e._s(e.player.role.ability)+" ")]):e._e(),i("div",{staticClass:"name",on:{click:e.changeName}},[e._v(" "+e._s(e.player.name)+" "),i("span",{staticClass:"remove",on:{click:function(t){return t.stopPropagation(),e.$emit("remove-player",e.player)}}},[i("font-awesome-icon",{attrs:{icon:"times-circle"}})],1)])],1),e.player.reminders?e._l(e.player.reminders,(function(t){return i("div",{key:t.role+" "+t.name,staticClass:"reminder",class:[t.role],on:{click:function(i){return e.removeReminder(t)}}},[e._v(" "+e._s(t.name)+" ")])})):e._e(),i("div",{staticClass:"reminder add",on:{click:function(t){return e.$emit("add-reminder",e.player)}}})],2)},h=[],d=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"token",class:[e.role.id],on:{click:e.setRole}},[e.role.firstNight?i("span",{staticClass:"leaf-left"}):e._e(),e.role.otherNight?i("span",{staticClass:"leaf-right"}):e._e(),e.role.reminders&&e.role.reminders.length?i("span",{class:["leaf-top"+e.role.reminders.length]}):e._e(),e.role.setup?i("span",{staticClass:"leaf-orange"}):e._e(),i("div",[e._v(e._s(e.role.name))])])},u=[],m={name:"Token",props:{role:{type:Object,required:!0}},data(){return{}},methods:{setRole(){this.$emit("set-role")}}},c=m,f=(i("cdf0"),i("2877")),y=Object(f["a"])(c,d,u,!1,null,"7b8b347a",null),p=y.exports,g={components:{Token:p},props:{player:{type:Object,required:!0},roles:{type:Map,required:!0},isPublic:{type:Boolean,required:!0}},data(){return{}},methods:{toggleStatus(){this.isPublic?this.player.hasDied?this.player.hasVoted?(this.$set(this.player,"hasVoted",!1),this.$set(this.player,"hasDied",!1)):this.$set(this.player,"hasVoted",!0):this.$set(this.player,"hasDied",!0):this.$set(this.player,"hasDied",!this.player.hasDied)},setRole(){this.$emit("set-role",this.player)},changeName(){const e=prompt("Player name",this.player.name);this.player.name=e||this.player.name},removeReminder(e){this.player.reminders.splice(this.player.reminders.indexOf(e),1)}}},b=g,v=(i("74c9"),Object(f["a"])(b,l,h,!1,null,null,null)),w=v.exports,k=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)])])},N=[],_={methods:{close(){this.$emit("close")}}},O=_,E=(i("30db"),Object(f["a"])(O,k,N,!1,null,null,null)),D=E.exports,P={components:{Token:p,Modal:D,Player:w},props:{isPublic:{type:Boolean,required:!0},players:{type:Array,required:!0},roles:{type:Map,required:!0},zoom:{type:Number,required:!0}},data(){return{selectedPlayer:!1,availableReminders:[],availableRoles:[]}},methods:{openReminderModal(e){this.availableRoles=[],this.availableReminders=[],this.selectedPlayer=e,this.roles.forEach(e=>{this.players.some(t=>t.role.id===e.id)&&(this.availableReminders=[...this.availableReminders,...e.reminders.map(t=>({role:e.id,name:t}))])}),this.availableReminders.push({role:"good",name:"Good"}),this.availableReminders.push({role:"evil",name:"Evil"})},openRoleModal(e){this.availableRoles=[],this.availableReminders=[],this.selectedPlayer=e,this.roles.forEach(t=>{t.id!==e.role.id&&this.availableRoles.push(t)}),this.availableRoles.push({})},addReminder(e){this.selectedPlayer.reminders.push(e),this.closeModal()},setRole(e){this.selectedPlayer.role=e,this.closeModal()},closeModal(){this.selectedPlayer=!1},removePlayer(e){confirm(`Do you really want to remove ${e.name}?`)&&this.players.splice(this.players.indexOf(e),1)}}},M=P,S=(i("3636"),Object(f["a"])(M,s,n,!1,null,null,null)),C=S.exports,R=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ul",{staticClass:"info"},[i("li",{staticClass:"edition",class:["edition-"+e.edition]}),e.players.length-e.teams.traveler<5?i("li",[e._v("Please add more players!")]):e._e(),i("li",[e._v(" "+e._s(e.players.length)+" "),i("font-awesome-icon",{staticClass:"players",attrs:{icon:"users"}}),e._v(" "+e._s(e.teams.alive)+" "),i("font-awesome-icon",{staticClass:"alive",attrs:{icon:"heartbeat"}}),e._v(" "+e._s(e.teams.votes)+" "),i("font-awesome-icon",{staticClass:"votes",attrs:{icon:"vote-yea"}})],1),e.players.length-e.teams.traveler>=5?i("li",[e._v(" "+e._s(e.teams.townsfolk)+" "),i("font-awesome-icon",{staticClass:"townsfolk",attrs:{icon:"user-friends"}}),e._v(" "+e._s(e.teams.outsider)+" "),i("font-awesome-icon",{staticClass:"outsider",attrs:{icon:e.teams.outsider>1?"user-friends":"user"}}),e._v(" "+e._s(e.teams.minion)+" "),i("font-awesome-icon",{staticClass:"minion",attrs:{icon:e.teams.minion>1?"user-friends":"user"}}),e._v(" "+e._s(e.teams.demon)+" "),i("font-awesome-icon",{staticClass:"demon",attrs:{icon:e.teams.demon>1?"user-friends":"user"}}),e.teams.traveler?[e._v(" "+e._s(e.teams.traveler)+" "),i("font-awesome-icon",{staticClass:"traveler",attrs:{icon:e.teams.traveler>1?"user-friends":"user"}})]:e._e()],2):e._e()])},x=[],T=i("634a"),I={props:{players:{type:Array,required:!0},edition:{type:String,required:!0}},computed:{teams:function(){const e=Math.min(this.players.filter(e=>"traveler"!==e.role.team).length,15),t=this.players.filter(e=>!0!==e.hasDied).length;return{...T[e-5],traveler:this.players.length-e,alive:t,votes:t+this.players.filter(e=>!0===e.hasDied&&!0!==e.hasVoted).length}}}},A=I,j=(i("8d43"),Object(f["a"])(A,R,x,!1,null,null,null)),z=j.exports,B=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("Modal",{directives:[{name:"show",rawName:"v-show",value:e.isOpen,expression:"isOpen"}],staticClass:"roles",on:{close:function(t){return e.close()}}},[i("h2",[e._v("Select the roles for "+e._s(e.nontravelerPlayers)+" players:")]),e._l(e.roleSelection,(function(t,a){return i("ul",{key:a,staticClass:"tokens"},[i("li",{staticClass:"count",class:[a]},[e._v(" "+e._s(t.filter((function(e){return e.selected})).length)+" / "+e._s(e.game[e.nontravelerPlayers-5][a])+" ")]),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)})),i("div",{staticClass:"button",attrs:{disabled:e.selectedRoles>e.nontravelerPlayers||!e.selectedRoles},on:{click:function(t){return e.assignRoles()}}},[e._v(" Assign "+e._s(e.selectedRoles)+" roles randomly ")])],2)},Y=[];const $=e=>e[Math.floor(Math.random()*e.length)];var q={components:{Token:p,Modal:D},props:{players:{type:Array,required:!0},roles:{type:Map,required:!0},isOpen:{type:Boolean,required:!0}},data:function(){return{roleSelection:{},game:T}},computed:{nontravelerPlayers:function(){return Math.min(this.players.filter(({role:e})=>e&&"traveler"!==e.team).length,15)},selectedRoles:function(){return Object.values(this.roleSelection).map(e=>e.filter(e=>e.selected).length).reduce((e,t)=>e+t,0)}},methods:{close(){this.$emit("close")},showRoleSelectionModal(){this.roleSelection={},this.roles.forEach(e=>{this.roleSelection[e.team]||this.$set(this.roleSelection,e.team,[]),this.roleSelection[e.team].push(e),this.$set(e,"selected",!1)}),delete this.roleSelection["traveler"];const e=Math.max(5,this.nontravelerPlayers),t=this.game[e-5];Object.keys(t).forEach(e=>{for(let i=0;i<t[e];i++){const t=this.roleSelection[e].filter(e=>!0!==e.selected);t.length&&($(t).selected=!0)}})},assignRoles(){const e=Object.values(this.roleSelection).map(e=>e.filter(e=>e.selected)).reduce((e,t)=>[...e,...t],[]).map(e=>[Math.random(),e]).sort((e,t)=>e[0]-t[0]).map(e=>e[1]);this.players.forEach(t=>{"traveler"!==t.role.team&&e.length&&(t.role=e.pop())}),this.close()}},watch:{isOpen(e){e&&this.showRoleSelectionModal()}}},G=q,U=(i("81b8"),Object(f["a"])(G,B,Y,!1,null,null,null)),V=U.exports,J=i("b1d9"),F=i("00c0"),W={components:{TownSquare:C,TownInfo:z,Modal:D,RoleSelectionModal:V},data:function(){return{editions:F,isPublic:!0,isControlOpen:!1,isEditionModalOpen:!1,isRoleModalOpen:!1,players:[],roles:this.getRolesByEdition(),edition:"tb",zoom:1}},methods:{togglePublic(){this.isPublic=!this.isPublic,this.isControlOpen=!1},addPlayer(){const e=prompt("Player name");e&&this.players.push({name:e,role:{},reminders:[]})},randomizeSeatings(){this.isPublic=!1,this.isControlOpen=!1,confirm("Are you sure you want to randomize seatings?")&&(this.players=this.players.map(e=>[Math.random(),e]).sort((e,t)=>e[0]-t[0]).map(e=>e[1]))},clearPlayers(){this.isControlOpen=!1,confirm("Are you sure you want to remove all players?")&&(this.players=[])},clearRoles(){this.isControlOpen=!1,confirm("Are you sure you want to remove all player roles?")&&this.players.forEach(e=>{e.role={},e.reminders=[]})},getRolesByEdition(e="tb"){const t=F.find(({id:t})=>t===e);return new Map(J.filter(i=>i.edition===e||t.roles.includes(i.id)).sort((e,t)=>t.team.localeCompare(e.team)).map(e=>[e.id,e]))},showEditionModal(){this.isEditionModalOpen=!0,this.isPublic=!1,this.isControlOpen=!1},setEdition(e){this.edition=e,this.isEditionModalOpen=!1},showRoleModal(){this.isRoleModalOpen=!0,this.isPublic=!1,this.isControlOpen=!1},keyup({key:e}){switch(e){case"g":this.togglePublic();break;case"a":this.addPlayer();break;case"r":this.randomizeSeatings();break}}},mounted(){void 0!==localStorage.isPublic&&(this.isPublic=JSON.parse(localStorage.isPublic)),localStorage.edition&&(this.edition=localStorage.edition,this.roles=this.getRolesByEdition(this.edition)),localStorage.players&&(this.players=JSON.parse(localStorage.players).map(e=>({...e,role:this.roles.get(e.role)||{}})))},watch:{players:{handler(e){localStorage.players=JSON.stringify(e.map(e=>({...e,role:e.role.id||{}})))},deep:!0},edition(e){localStorage.edition=e,this.roles=this.getRolesByEdition(e)},isPublic(e){localStorage.isPublic=JSON.stringify(e)}}},L=W,H=(i("5c0b"),Object(f["a"])(L,o,r,!1,null,null,null)),K=H.exports,Z=i("ecee"),Q=i("c074"),X=i("ad3d");Z["c"].add(Q["h"],Q["b"],Q["i"],Q["g"],Q["f"],Q["e"],Q["a"],Q["c"],Q["d"]),a["a"].component("font-awesome-icon",X["a"]),a["a"].config.productionTip=!1,new a["a"]({render:e=>e(K)}).$mount("#app")},"5c0b":function(e,t,i){"use strict";var a=i("9c0c"),o=i.n(a);o.a},"634a":function(e){e.exports=JSON.parse('[{"townsfolk":3,"outsider":0,"minion":1,"demon":1},{"townsfolk":3,"outsider":1,"minion":1,"demon":1},{"townsfolk":5,"outsider":0,"minion":1,"demon":1},{"townsfolk":5,"outsider":1,"minion":1,"demon":1},{"townsfolk":5,"outsider":2,"minion":1,"demon":1},{"townsfolk":7,"outsider":0,"minion":2,"demon":1},{"townsfolk":7,"outsider":1,"minion":2,"demon":1},{"townsfolk":7,"outsider":2,"minion":2,"demon":1},{"townsfolk":9,"outsider":0,"minion":3,"demon":1},{"townsfolk":9,"outsider":1,"minion":3,"demon":1},{"townsfolk":9,"outsider":2,"minion":3,"demon":1}]')},"74c9":function(e,t,i){"use strict";var a=i("9fd8"),o=i.n(a);o.a},"7a65":function(e,t,i){},"81b8":function(e,t,i){"use strict";var a=i("2197"),o=i.n(a);o.a},"8d43":function(e,t,i){"use strict";var a=i("7a65"),o=i.n(a);o.a},"9c0c":function(e,t,i){},"9fd8":function(e,t,i){},b1d9:function(e){e.exports=JSON.parse('[{"id":"washerwoman","name":"Washerwoman","edition":"tb","team":"townsfolk","firstNight":true,"otherNight":false,"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":true,"otherNight":false,"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":true,"otherNight":false,"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":true,"otherNight":false,"reminders":[],"setup":false,"ability":"You start knowing how many pairs of evil players there are."},{"id":"empath","name":"Empath","edition":"tb","team":"townsfolk","firstNight":true,"otherNight":true,"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":true,"otherNight":true,"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":false,"otherNight":true,"reminders":["Executed"],"setup":false,"ability":"Each night*, you learn which character died by execution today."},{"id":"monk","name":"Monk","edition":"tb","team":"townsfolk","firstNight":false,"otherNight":true,"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":false,"otherNight":true,"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":false,"otherNight":false,"reminders":[],"setup":false,"ability":"If only 3 players live & no execution occurs, your team wins. If you die at night, another player might die instead."},{"id":"slayer","name":"Slayer","edition":"tb","team":"townsfolk","firstNight":false,"otherNight":false,"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":false,"otherNight":false,"reminders":[],"setup":false,"ability":"You are safe from the Demon."},{"id":"virgin","name":"Virgin","edition":"tb","team":"townsfolk","firstNight":false,"otherNight":false,"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":true,"otherNight":true,"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":false,"otherNight":false,"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":false,"otherNight":false,"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":false,"otherNight":false,"reminders":[],"setup":false,"ability":"If you die by execution, your team loses."},{"id":"baron","name":"Baron","edition":"tb","team":"minion","firstNight":false,"otherNight":false,"reminders":[],"setup":true,"ability":"There are extra Outsiders in play. [+2 Outsiders]"},{"id":"poisoner","name":"Poisoner","edition":"tb","team":"minion","firstNight":true,"otherNight":true,"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":true,"otherNight":true,"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":false,"otherNight":true,"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":false,"otherNight":true,"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":true,"otherNight":true,"reminders":["Grandchild"],"setup":false,"name":"Grandmother","team":"townsfolk","ability":"You start knowing a good player & character. If the Demon kills them, you die too."},{"id":"sailor","edition":"bmr","firstNight":true,"otherNight":true,"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":true,"otherNight":true,"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":false,"otherNight":true,"reminders":["Chosen"],"setup":false,"name":"Exorcist","team":"townsfolk","ability":"Each night*, choose a player (not the same as last night): the Demon, if chosen, learns who you are & does not act tonight."},{"id":"innkeeper","edition":"bmr","firstNight":false,"otherNight":true,"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":false,"otherNight":true,"reminders":["Die"],"setup":false,"name":"Gambler","team":"townsfolk","ability":"Each night*, choose a player & guess their character: if you guess wrong, you die."},{"id":"gossip","edition":"bmr","firstNight":false,"otherNight":true,"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":true,"otherNight":true,"reminders":["Drunk 1","Drunk 2","Drunk 3","Used"],"setup":false,"name":"Courtier","team":"townsfolk","ability":"Once per game, at night, choose a character: they are drunk for 3 nights & 3 days."},{"id":"professor","edition":"bmr","firstNight":false,"otherNight":true,"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":false,"otherNight":true,"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":false,"otherNight":false,"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":false,"otherNight":false,"reminders":[],"setup":false,"name":"Pacifist","team":"townsfolk","ability":"Executed good players might not die."},{"id":"fool","edition":"bmr","firstNight":false,"otherNight":false,"reminders":["Used"],"setup":false,"name":"Fool","team":"townsfolk","ability":"The first time you die, you don\'t."},{"id":"tinker","edition":"bmr","firstNight":false,"otherNight":true,"reminders":["Die"],"setup":false,"name":"Tinker","team":"outsider","ability":"You might die at any time."},{"id":"moonchild","edition":"bmr","firstNight":false,"otherNight":true,"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":true,"otherNight":true,"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":true,"otherNight":true,"reminders":["Attack 1","Attack 2","Attack 3","Decoy"],"setup":false,"name":"Lunatic","team":"outsider","ability":"You think you are a Demon, but your abilities malfunction. The Demon knows who you are & who you attack."},{"id":"godfather","edition":"bmr","firstNight":true,"otherNight":true,"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":true,"otherNight":true,"reminders":["Survives execution"],"setup":false,"name":"Devils 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":false,"otherNight":true,"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":false,"otherNight":false,"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":false,"otherNight":true,"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":false,"otherNight":true,"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":true,"otherNight":true,"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":false,"otherNight":true,"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":true,"otherNight":false,"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":true,"otherNight":true,"reminders":[],"setup":false,"name":"Dreamer","team":"townsfolk","ability":"Each night, choose a player (not yourself): you learn 1 good & 1 evil character, 1 of which is correct."},{"id":"snakecharmer","edition":"snv","firstNight":true,"otherNight":true,"reminders":["Poisoned"],"setup":false,"name":"Snake Charmer","team":"townsfolk","ability":"Each night, choose an alive player: a chosen Demon swaps characters & alignments with you & is then poisoned."},{"id":"mathematician","edition":"snv","firstNight":true,"otherNight":true,"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":false,"otherNight":true,"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":false,"otherNight":true,"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":false,"otherNight":true,"reminders":[],"setup":false,"name":"Oracle","team":"townsfolk","ability":"Each night*, you learn how many dead players are evil."},{"id":"savant","edition":"snv","firstNight":false,"otherNight":false,"reminders":[],"setup":false,"name":"Savant","team":"townsfolk","ability":"Each day, you may visit the Storyteller to learn 2 things in private: 1 is true & 1 is false."},{"id":"seamstress","edition":"snv","firstNight":true,"otherNight":true,"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":true,"otherNight":true,"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":false,"otherNight":false,"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":false,"otherNight":true,"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":false,"otherNight":true,"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":false,"otherNight":false,"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":false,"otherNight":true,"reminders":["Drunk"],"setup":false,"name":"Sweetheart","team":"outsider","ability":"If you die, 1 player is drunk from now on."},{"id":"barber","edition":"snv","firstNight":false,"otherNight":true,"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":false,"otherNight":false,"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":true,"otherNight":false,"reminders":["Twin"],"setup":false,"name":"Evil Twin","team":"minion","ability":"You & an opposing player know each other. If the good player is executed, evil wins. Good can\'t win if you both live."},{"id":"witch","edition":"snv","firstNight":true,"otherNight":true,"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":true,"otherNight":true,"reminders":["Mad"],"setup":false,"name":"Cerenovus","team":"minion","ability":"Each night, choose a player & a good character: they are \\"mad\\" they are this character tomorrow, or might be executed."},{"id":"pithag","edition":"snv","firstNight":false,"otherNight":true,"reminders":[],"setup":false,"name":"Pit Hag","team":"minion","ability":"Each night*, choose a player & a character they become (if not-in-play). If a Demon is made, deaths tonight are arbitrary."},{"id":"fanggu","edition":"snv","firstNight":false,"otherNight":true,"reminders":["Die"],"setup":true,"name":"Fang Gu","team":"demon","ability":"Each night*, choose a player: they die. The 1st Outsider chosen becomes an evil Fang Gu & you die instead. [+1 Outsider]"},{"id":"vigormortis","edition":"snv","firstNight":false,"otherNight":true,"reminders":["Die","Poisoned","Ability active"],"setup":true,"name":"Vigormortis","team":"demon","ability":"Each night*, choose a player: they die. Minions you kill keep their ability & poison 1 Townsfolk neighbor. [-1 Outsider]."},{"id":"nodashii","edition":"snv","firstNight":false,"otherNight":true,"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":false,"otherNight":true,"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":false,"otherNight":false,"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":false,"otherNight":false,"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":false,"otherNight":false,"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":true,"otherNight":true,"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":true,"otherNight":true,"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":true,"otherNight":false,"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":false,"otherNight":false,"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":false,"otherNight":false,"reminders":[],"setup":false,"name":"Voudon","team":"traveler","ability":"Only you & the dead can vote. They don\'t need a vote token to do so. A 50% majority is not required."},{"id":"judge","edition":"bmr","firstNight":false,"otherNight":false,"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":false,"otherNight":false,"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":false,"otherNight":false,"reminders":[],"setup":false,"name":"Butcher","team":"traveler","ability":"Each day, after the 1st execution, you nominate again."},{"id":"bonecollector","edition":"snv","firstNight":false,"otherNight":true,"reminders":["Used","Ability active"],"setup":false,"name":"Bone Collector","team":"traveler","ability":"Once per game, at night, choose a dead player: they regain their ability until dusk."},{"id":"harlot","edition":"snv","firstNight":false,"otherNight":true,"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":true,"otherNight":true,"reminders":["Ability x2","Healthy & Sober"],"setup":false,"name":"Barista","team":"traveler","ability":"Each night, until dusk, 1) a player becomes sober, healthy & gets true info, or 2) their ability works twice. They learn which."},{"id":"deviant","edition":"snv","firstNight":false,"otherNight":false,"reminders":[],"setup":false,"name":"Deviant","team":"traveler","ability":"If you were funny today, you can not be exiled."},{"id":"balloonist","edition":"","firstNight":true,"otherNight":true,"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":false,"otherNight":false,"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":false,"otherNight":true,"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":false,"otherNight":false,"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":false,"otherNight":false,"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":true,"otherNight":false,"reminders":["Poisoned","Knowing"],"setup":false,"name":"Widow","team":"minion","ability":"On your 1st night, look at the Grimoire & choose a player: they are poisoned. 1 good player knows a Widow is in play."},{"id":"leviathan","edition":"","firstNight":false,"otherNight":false,"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."}]')},cdf0:function(e,t,i){"use strict";var a=i("1a66"),o=i.n(a);o.a},d4b2:function(e,t,i){}});
//# sourceMappingURL=app.89587300.js.map