From 05d8d170ec2960545744144c8164476577906dc1 Mon Sep 17 00:00:00 2001 From: Shubham Goenka Date: Sat, 25 Apr 2020 22:11:50 -0400 Subject: [PATCH] cleanup constants --- run.py | 2 + templates/public/bundle.js | 6 +- templates/src/constants.py | 65 +++++++---- templates/static/js/constants.js | 190 +++++++++++++++++-------------- 4 files changed, 158 insertions(+), 105 deletions(-) diff --git a/run.py b/run.py index 47bbfe61..3920091b 100755 --- a/run.py +++ b/run.py @@ -68,6 +68,7 @@ def confirm_player(data): socketio.emit('Role_Confirmation_Count_Updated', room=game_code, include_self=True) +# gets called when all players in the game have confirmed their roles @socketio.on('Confirmation_Finished') def confirm_player(data): game_code = data['gameCode'] @@ -80,6 +81,7 @@ def confirm_player(data): socketio.emit('Begin_Player_Turn', data, room=game_code, include_self=True) +# gets called when the timer runs out for the current player's turn @socketio.on('Player_Turn_Finish') def player_turn_finish(data): game_code = data['gameCode'] diff --git a/templates/public/bundle.js b/templates/public/bundle.js index ee141ddd..3aad065e 100644 --- a/templates/public/bundle.js +++ b/templates/public/bundle.js @@ -77,7 +77,7 @@ /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "/Users/ssuresh/Desktop/fun-night/templates/public"; +/******/ __webpack_require__.p = "/Users/shubham/repo/fun-night/templates/public"; /******/ /******/ /******/ // Load entry module and return exports @@ -6995,7 +6995,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n}); /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar WEREWOLF = 'Werewolf';\nvar VILLAGER = 'Villager';\nvar MINION = 'Minion';\nvar ROBBER = 'Robber';\nvar TROUBLEMAKER = 'Troublemaker';\nvar SEER = 'Seer';\nvar INSOMNIAC = 'Insomniac';\nvar TANNER = 'Tanner';\nvar MASON = 'Mason';\nvar DOG_WHISPERER = 'Dog Whisperer';\nvar DEVILS_ADVOCATE = 'Devil\\'s Advocate';\nvar STONER = 'Stoner';\nvar RATIONALIST = 'Rationalist';\nvar AGENT_OF_CHAOS = 'Agent of Chaos';\nvar INEXPLICABLE = 'Inexplicable';\nvar BOY_NEXTDOOR = 'Boy Nextdoor';\nvar NUT_JOB = 'Nut Job';\nvar PODCASTER = 'Podcaster';\n\nvar ALL_ROLES = [WEREWOLF, VILLAGER, MINION, ROBBER, TROUBLEMAKER, SEER, INSOMNIAC, TANNER, MASON, DOG_WHISPERER, DEVILS_ADVOCATE, STONER, RATIONALIST, AGENT_OF_CHAOS, INEXPLICABLE, BOY_NEXTDOOR, NUT_JOB, PODCASTER];\n\nvar ROLE_METADATA = {\n werewolf: {\n imageFilePath: 'werewolf.png',\n description: 'Werewolf team. Looks for other werewolves, or at a center card if there are none.'\n },\n villager: {\n imageFilePath: 'villager.png',\n description: 'Village team. No special abilities.'\n },\n minion: {\n imageFilePath: 'minion.png',\n description: 'Werewolf team. Knows all werewolves. Wins if killed or if a village team role dies. If no werewolves, behaves as a werewolf instead.'\n },\n robber: {\n imageFilePath: 'robber.png',\n description: 'Village team. Switches cards with another player and takes on new role.'\n },\n seer: {\n imageFilePath: 'seer.png',\n description: 'Village team. Inspects any other player\\'s card or two cards from the center.'\n },\n troublemaker: {\n imageFilePath: 'troublemaker.png',\n description: 'Village team. Switches cards between two other players, without looking.'\n },\n insomniac: {\n imageFilePath: 'insomniac.png',\n description: 'Village team. Observes own card at the end of the night, prior only to Inexplicable.'\n },\n tanner: {\n imageFilePath: 'tanner.png',\n description: 'Neither team. Wins if killed.'\n },\n mason: {\n imageFilePath: 'mason.png',\n description: 'Village team. Wakes up and looks for other masons.'\n },\n dogwhisperer: {\n imageFilePath: 'dogwhisperer.png',\n description: 'Village team. Knows one werewolf, but dies if that werewolf is killed. Is a werewolf if only one or no others.'\n },\n devilsadvocate: {\n imageFilePath: 'devilsadvocate.png',\n description: 'Village team. Knows all of the werewolves, but loses if voted against by all of them.'\n },\n stoner: {\n imageFilePath: 'stoner.png',\n description: 'Village team. Shuffles two other player\\'s cards, then inspects only one before placing back.'\n },\n rationalist: {\n imageFilePath: 'rationalist.png',\n description: 'Village team. Inspects a single other player\\'s card after every possible role-switch, except the Inexplicable.'\n },\n agentofchaos: {\n imageFilePath: 'agentofchaos.png',\n description: 'Switches cards with another player and takes their role. Agent of Chaos then joins opposite of new player\\'s original team.'\n },\n inexplicable: {\n imageFilePath: 'inexplicable.png',\n description: 'Village team. Flips a coin, and if heads, becomes any of most other roles and performs their action.'\n },\n boynextdoor: {\n imageFilePath: 'boynextdoor.png',\n description: 'Neither team. Wins if player to the left or right dies.'\n },\n nutjob: {\n imageFilePath: 'nutjob.png',\n description: 'Village team. Can make random guess of all werewolves before voting, but must reveal card first. Correct guess wins automatically.'\n },\n podcaster: {\n imageFilePath: 'podcaster.png',\n description: 'Village team. Can privately inspect any other player\\'s card during the day, but with strict majority approval only.'\n }\n};\n\nexports.default = {\n ALL_ROLES: ALL_ROLES,\n ROLE_METADATA: ROLE_METADATA,\n WEREWOLF: WEREWOLF,\n VILLAGER: VILLAGER,\n MINION: MINION,\n ROBBER: ROBBER,\n SEER: SEER,\n TROUBLEMAKER: TROUBLEMAKER,\n INSOMNIAC: INSOMNIAC,\n TANNER: TANNER,\n MASON: MASON,\n DOG_WHISPERER: DOG_WHISPERER,\n DEVILS_ADVOCATE: DEVILS_ADVOCATE,\n STONER: STONER,\n RATIONALIST: RATIONALIST,\n AGENT_OF_CHAOS: AGENT_OF_CHAOS,\n INEXPLICABLE: INEXPLICABLE,\n BOY_NEXTDOOR: BOY_NEXTDOOR,\n NUT_JOB: NUT_JOB,\n PODCASTER: PODCASTER\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi90ZW1wbGF0ZXMvc3RhdGljL2pzL2NvbnN0YW50cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy90ZW1wbGF0ZXMvc3RhdGljL2pzL2NvbnN0YW50cy5qcz9hOTJjIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IFdFUkVXT0xGID0gJ1dlcmV3b2xmJztcbmNvbnN0IFZJTExBR0VSID0gJ1ZpbGxhZ2VyJztcbmNvbnN0IE1JTklPTiA9ICdNaW5pb24nO1xuY29uc3QgUk9CQkVSID0gJ1JvYmJlcic7XG5jb25zdCBUUk9VQkxFTUFLRVIgPSAnVHJvdWJsZW1ha2VyJztcbmNvbnN0IFNFRVIgPSAnU2Vlcic7XG5jb25zdCBJTlNPTU5JQUMgPSAnSW5zb21uaWFjJztcbmNvbnN0IFRBTk5FUiA9ICdUYW5uZXInO1xuY29uc3QgTUFTT04gPSAnTWFzb24nO1xuY29uc3QgRE9HX1dISVNQRVJFUiA9ICdEb2cgV2hpc3BlcmVyJztcbmNvbnN0IERFVklMU19BRFZPQ0FURSA9ICdEZXZpbFxcJ3MgQWR2b2NhdGUnO1xuY29uc3QgU1RPTkVSID0gJ1N0b25lcic7XG5jb25zdCBSQVRJT05BTElTVCA9ICdSYXRpb25hbGlzdCc7XG5jb25zdCBBR0VOVF9PRl9DSEFPUyA9ICdBZ2VudCBvZiBDaGFvcyc7XG5jb25zdCBJTkVYUExJQ0FCTEUgPSAnSW5leHBsaWNhYmxlJztcbmNvbnN0IEJPWV9ORVhURE9PUiA9ICdCb3kgTmV4dGRvb3InO1xuY29uc3QgTlVUX0pPQiA9ICdOdXQgSm9iJztcbmNvbnN0IFBPRENBU1RFUiA9ICdQb2RjYXN0ZXInO1xuXG5jb25zdCBBTExfUk9MRVMgPSBbXG4gICAgV0VSRVdPTEYsIFZJTExBR0VSLCBNSU5JT04sIFJPQkJFUiwgVFJPVUJMRU1BS0VSLCBTRUVSLCBJTlNPTU5JQUMsIFRBTk5FUiwgTUFTT04sXG4gICAgRE9HX1dISVNQRVJFUiwgREVWSUxTX0FEVk9DQVRFLCBTVE9ORVIsIFJBVElPTkFMSVNULCBBR0VOVF9PRl9DSEFPUywgSU5FWFBMSUNBQkxFLFxuICAgIEJPWV9ORVhURE9PUiwgTlVUX0pPQiwgUE9EQ0FTVEVSXG5dO1xuXG5jb25zdCBST0xFX01FVEFEQVRBID0ge1xuICAgIHdlcmV3b2xmOiB7XG4gICAgICAgIGltYWdlRmlsZVBhdGg6ICd3ZXJld29sZi5wbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1dlcmV3b2xmIHRlYW0uIExvb2tzIGZvciBvdGhlciB3ZXJld29sdmVzLCBvciBhdCBhIGNlbnRlciBjYXJkIGlmIHRoZXJlIGFyZSBub25lLidcbiAgICB9LFxuICAgIHZpbGxhZ2VyOiB7XG4gICAgICAgIGltYWdlRmlsZVBhdGg6ICd2aWxsYWdlci5wbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1ZpbGxhZ2UgdGVhbS4gTm8gc3BlY2lhbCBhYmlsaXRpZXMuJ1xuICAgIH0sXG4gICAgbWluaW9uOiB7XG4gICAgICAgIGltYWdlRmlsZVBhdGg6ICdtaW5pb24ucG5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdXZXJld29sZiB0ZWFtLiBLbm93cyBhbGwgd2VyZXdvbHZlcy4gV2lucyBpZiBraWxsZWQgb3IgaWYgYSB2aWxsYWdlIHRlYW0gcm9sZSBkaWVzLiBJZiBubyB3ZXJld29sdmVzLCBiZWhhdmVzIGFzIGEgd2VyZXdvbGYgaW5zdGVhZC4nXG4gICAgfSxcbiAgICByb2JiZXI6IHtcbiAgICAgICAgaW1hZ2VGaWxlUGF0aDogJ3JvYmJlci5wbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1ZpbGxhZ2UgdGVhbS4gU3dpdGNoZXMgY2FyZHMgd2l0aCBhbm90aGVyIHBsYXllciBhbmQgdGFrZXMgb24gbmV3IHJvbGUuJ1xuICAgIH0sXG4gICAgc2Vlcjoge1xuICAgICAgICBpbWFnZUZpbGVQYXRoOiAnc2Vlci5wbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1ZpbGxhZ2UgdGVhbS4gSW5zcGVjdHMgYW55IG90aGVyIHBsYXllclxcJ3MgY2FyZCBvciB0d28gY2FyZHMgZnJvbSB0aGUgY2VudGVyLidcbiAgICB9LFxuICAgIHRyb3VibGVtYWtlcjoge1xuICAgICAgICBpbWFnZUZpbGVQYXRoOiAndHJvdWJsZW1ha2VyLnBuZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmlsbGFnZSB0ZWFtLiBTd2l0Y2hlcyBjYXJkcyBiZXR3ZWVuIHR3byBvdGhlciBwbGF5ZXJzLCB3aXRob3V0IGxvb2tpbmcuJ1xuICAgIH0sXG4gICAgaW5zb21uaWFjOiB7XG4gICAgICAgIGltYWdlRmlsZVBhdGg6ICdpbnNvbW5pYWMucG5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdWaWxsYWdlIHRlYW0uIE9ic2VydmVzIG93biBjYXJkIGF0IHRoZSBlbmQgb2YgdGhlIG5pZ2h0LCBwcmlvciBvbmx5IHRvIEluZXhwbGljYWJsZS4nXG4gICAgfSxcbiAgICB0YW5uZXI6IHtcbiAgICAgICAgaW1hZ2VGaWxlUGF0aDogJ3Rhbm5lci5wbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ05laXRoZXIgdGVhbS4gV2lucyBpZiBraWxsZWQuJ1xuICAgIH0sXG4gICAgbWFzb246IHtcbiAgICAgICAgaW1hZ2VGaWxlUGF0aDogJ21hc29uLnBuZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmlsbGFnZSB0ZWFtLiBXYWtlcyB1cCBhbmQgbG9va3MgZm9yIG90aGVyIG1hc29ucy4nXG4gICAgfSxcbiAgICBkb2d3aGlzcGVyZXI6IHtcbiAgICAgICAgaW1hZ2VGaWxlUGF0aDogJ2RvZ3doaXNwZXJlci5wbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1ZpbGxhZ2UgdGVhbS4gS25vd3Mgb25lIHdlcmV3b2xmLCBidXQgZGllcyBpZiB0aGF0IHdlcmV3b2xmIGlzIGtpbGxlZC4gSXMgYSB3ZXJld29sZiBpZiBvbmx5IG9uZSBvciBubyBvdGhlcnMuJ1xuICAgIH0sXG4gICAgZGV2aWxzYWR2b2NhdGU6IHtcbiAgICAgICAgaW1hZ2VGaWxlUGF0aDogJ2Rldmlsc2Fkdm9jYXRlLnBuZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmlsbGFnZSB0ZWFtLiBLbm93cyBhbGwgb2YgdGhlIHdlcmV3b2x2ZXMsIGJ1dCBsb3NlcyBpZiB2b3RlZCBhZ2FpbnN0IGJ5IGFsbCBvZiB0aGVtLidcbiAgICB9LFxuICAgIHN0b25lcjoge1xuICAgICAgICBpbWFnZUZpbGVQYXRoOiAnc3RvbmVyLnBuZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmlsbGFnZSB0ZWFtLiBTaHVmZmxlcyB0d28gb3RoZXIgcGxheWVyXFwncyBjYXJkcywgdGhlbiBpbnNwZWN0cyBvbmx5IG9uZSBiZWZvcmUgcGxhY2luZyBiYWNrLidcbiAgICB9LFxuICAgIHJhdGlvbmFsaXN0OiB7XG4gICAgICAgIGltYWdlRmlsZVBhdGg6ICdyYXRpb25hbGlzdC5wbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1ZpbGxhZ2UgdGVhbS4gSW5zcGVjdHMgYSBzaW5nbGUgb3RoZXIgcGxheWVyXFwncyBjYXJkIGFmdGVyIGV2ZXJ5IHBvc3NpYmxlIHJvbGUtc3dpdGNoLCBleGNlcHQgdGhlIEluZXhwbGljYWJsZS4nXG4gICAgfSxcbiAgICBhZ2VudG9mY2hhb3M6IHtcbiAgICAgICAgaW1hZ2VGaWxlUGF0aDogJ2FnZW50b2ZjaGFvcy5wbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1N3aXRjaGVzIGNhcmRzIHdpdGggYW5vdGhlciBwbGF5ZXIgYW5kIHRha2VzIHRoZWlyIHJvbGUuIEFnZW50IG9mIENoYW9zIHRoZW4gam9pbnMgb3Bwb3NpdGUgb2YgbmV3IHBsYXllclxcJ3Mgb3JpZ2luYWwgdGVhbS4nXG4gICAgfSxcbiAgICBpbmV4cGxpY2FibGU6IHtcbiAgICAgICAgaW1hZ2VGaWxlUGF0aDogJ2luZXhwbGljYWJsZS5wbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1ZpbGxhZ2UgdGVhbS4gRmxpcHMgYSBjb2luLCBhbmQgaWYgaGVhZHMsIGJlY29tZXMgYW55IG9mIG1vc3Qgb3RoZXIgcm9sZXMgYW5kIHBlcmZvcm1zIHRoZWlyIGFjdGlvbi4nXG4gICAgfSxcbiAgICBib3luZXh0ZG9vcjoge1xuICAgICAgICBpbWFnZUZpbGVQYXRoOiAnYm95bmV4dGRvb3IucG5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdOZWl0aGVyIHRlYW0uIFdpbnMgaWYgcGxheWVyIHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IGRpZXMuJ1xuICAgIH0sXG4gICAgbnV0am9iOiB7XG4gICAgICAgIGltYWdlRmlsZVBhdGg6ICdudXRqb2IucG5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdWaWxsYWdlIHRlYW0uIENhbiBtYWtlIHJhbmRvbSBndWVzcyBvZiBhbGwgd2VyZXdvbHZlcyBiZWZvcmUgdm90aW5nLCBidXQgbXVzdCByZXZlYWwgY2FyZCBmaXJzdC4gQ29ycmVjdCBndWVzcyB3aW5zIGF1dG9tYXRpY2FsbHkuJ1xuICAgIH0sXG4gICAgcG9kY2FzdGVyOiB7XG4gICAgICAgIGltYWdlRmlsZVBhdGg6ICdwb2RjYXN0ZXIucG5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdWaWxsYWdlIHRlYW0uIENhbiBwcml2YXRlbHkgaW5zcGVjdCBhbnkgb3RoZXIgcGxheWVyXFwncyBjYXJkIGR1cmluZyB0aGUgZGF5LCBidXQgd2l0aCBzdHJpY3QgbWFqb3JpdHkgYXBwcm92YWwgb25seS4nXG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIEFMTF9ST0xFUyxcbiAgICBST0xFX01FVEFEQVRBLFxuICAgIFdFUkVXT0xGLFxuICAgIFZJTExBR0VSLFxuICAgIE1JTklPTixcbiAgICBST0JCRVIsXG4gICAgU0VFUixcbiAgICBUUk9VQkxFTUFLRVIsXG4gICAgSU5TT01OSUFDLFxuICAgIFRBTk5FUixcbiAgICBNQVNPTixcbiAgICBET0dfV0hJU1BFUkVSLFxuICAgIERFVklMU19BRFZPQ0FURSxcbiAgICBTVE9ORVIsXG4gICAgUkFUSU9OQUxJU1QsXG4gICAgQUdFTlRfT0ZfQ0hBT1MsXG4gICAgSU5FWFBMSUNBQkxFLFxuICAgIEJPWV9ORVhURE9PUixcbiAgICBOVVRfSk9CLFxuICAgIFBPRENBU1RFUlxufTsiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFyRUE7QUFDQTtBQTBFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFwQkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./templates/static/js/constants.js\n"); +eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// Role names\nvar AGENT_OF_CHAOS = 'Agent of Chaos';\nvar BOY_NEXTDOOR = 'Boy Nextdoor';\nvar DEVILS_ADVOCATE = 'Devil\\'s Advocate';\nvar DOG_WHISPERER = 'Dog Whisperer';\nvar INEXPLICABLE = 'Inexplicable';\nvar INSOMNIAC = 'Insomniac';\nvar MASON = 'Mason';\nvar MINION = 'Minion';\nvar NUT_JOB = 'Nut Job';\nvar PODCASTER = 'Podcaster';\nvar RATIONALIST = 'Rationalist';\nvar ROBBER = 'Robber';\nvar SEER = 'Seer';\nvar STONER = 'Stoner';\nvar TANNER = 'Tanner';\nvar TROUBLEMAKER = 'Troublemaker';\nvar VILLAGER = 'Villager';\nvar WEREWOLF = 'Werewolf';\n\n// ALL_ROLES represents an array of all the possible roles that exist.\nvar ALL_ROLES = [AGENT_OF_CHAOS, BOY_NEXTDOOR, DEVILS_ADVOCATE, DOG_WHISPERER, INEXPLICABLE, INSOMNIAC, MASON, MINION, NUT_JOB, PODCASTER, RATIONALIST, ROBBER, SEER, STONER, TANNER, TROUBLEMAKER, VILLAGER, WEREWOLF];\n\n/*\n * ROLE_METADATA represents a dictionary of each possible role that exists to its metadata fields.\n * Available metadata:\n * - description: abridged description of the role\n * - imageFilePath: path to an image that depicts the role icon\n */\nvar ROLE_METADATA = {\n agentofchaos: {\n description: 'Switches cards with another player and takes their role. Agent of Chaos then joins opposite of new player\\'s original team.',\n imageFilePath: 'agentofchaos.png'\n },\n boynextdoor: {\n description: 'Plays for themselves. Wins if player to the left or right dies.',\n imageFilePath: 'boynextdoor.png'\n },\n devilsadvocate: {\n description: 'Village team. Knows all of the werewolves, but loses if voted against by all of them.',\n imageFilePath: 'devilsadvocate.png'\n },\n dogwhisperer: {\n description: 'Village team. Knows one werewolf, but dies if that werewolf is killed. Is a werewolf if only one or no others.',\n imageFilePath: 'dogwhisperer.png'\n },\n inexplicable: {\n description: 'Village team. Flips a coin, and if heads, becomes any of most other roles and performs their action.',\n imageFilePath: 'inexplicable.png'\n },\n insomniac: {\n description: 'Village team. Observes own card at the end of the night, prior only to Inexplicable.',\n imageFilePath: 'insomniac.png'\n },\n mason: {\n description: 'Village team. Wakes up and looks for other masons.',\n imageFilePath: 'mason.png'\n },\n minion: {\n description: 'Werewolf team. Knows all werewolves. Wins if killed or if a village team role dies. If no werewolves, behaves as a werewolf instead.',\n imageFilePath: 'minion.png'\n },\n nutjob: {\n description: 'Village team. Can make random guess of all werewolves before voting, but must reveal card first. Correct guess wins automatically.',\n imageFilePath: 'nutjob.png'\n },\n podcaster: {\n description: 'Village team. Can privately inspect any other player\\'s card during the day, but with strict majority approval only.',\n imageFilePath: 'podcaster.png'\n },\n rationalist: {\n description: 'Village team. Inspects a single other player\\'s card after every possible role-switch, except the Inexplicable.',\n imageFilePath: 'rationalist.png'\n },\n robber: {\n description: 'Village team. Switches cards with another player and takes on new role.',\n imageFilePath: 'robber.png'\n },\n seer: {\n description: 'Village team. Inspects any other player\\'s card or two cards from the center.',\n imageFilePath: 'seer.png'\n },\n stoner: {\n description: 'Village team. Shuffles two other player\\'s cards, then inspects only one before placing back.',\n imageFilePath: 'stoner.png'\n },\n tanner: {\n description: 'Plays for themselves. Wins if killed.',\n imageFilePath: 'tanner.png'\n },\n troublemaker: {\n description: 'Village team. Switches cards between two other players, without looking.',\n imageFilePath: 'troublemaker.png'\n },\n villager: {\n description: 'Village team. No special abilities.',\n imageFilePath: 'villager.png'\n },\n werewolf: {\n description: 'Werewolf team. Looks for other werewolves, or at a center card if there are none.',\n imageFilePath: 'werewolf.png'\n }\n};\n\nexports.default = {\n AGENT_OF_CHAOS: AGENT_OF_CHAOS,\n BOY_NEXTDOOR: BOY_NEXTDOOR,\n DEVILS_ADVOCATE: DEVILS_ADVOCATE,\n DOG_WHISPERER: DOG_WHISPERER,\n INEXPLICABLE: INEXPLICABLE,\n INSOMNIAC: INSOMNIAC,\n MASON: MASON,\n MINION: MINION,\n NUT_JOB: NUT_JOB,\n PODCASTER: PODCASTER,\n RATIONALIST: RATIONALIST,\n ROBBER: ROBBER,\n SEER: SEER,\n STONER: STONER,\n TANNER: TANNER,\n TROUBLEMAKER: TROUBLEMAKER,\n VILLAGER: VILLAGER,\n WEREWOLF: WEREWOLF,\n\n ALL_ROLES: ALL_ROLES,\n ROLE_METADATA: ROLE_METADATA\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi90ZW1wbGF0ZXMvc3RhdGljL2pzL2NvbnN0YW50cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy90ZW1wbGF0ZXMvc3RhdGljL2pzL2NvbnN0YW50cy5qcz9hOTJjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFJvbGUgbmFtZXNcbmNvbnN0IEFHRU5UX09GX0NIQU9TID0gJ0FnZW50IG9mIENoYW9zJztcbmNvbnN0IEJPWV9ORVhURE9PUiA9ICdCb3kgTmV4dGRvb3InO1xuY29uc3QgREVWSUxTX0FEVk9DQVRFID0gJ0RldmlsXFwncyBBZHZvY2F0ZSc7XG5jb25zdCBET0dfV0hJU1BFUkVSID0gJ0RvZyBXaGlzcGVyZXInO1xuY29uc3QgSU5FWFBMSUNBQkxFID0gJ0luZXhwbGljYWJsZSc7XG5jb25zdCBJTlNPTU5JQUMgPSAnSW5zb21uaWFjJztcbmNvbnN0IE1BU09OID0gJ01hc29uJztcbmNvbnN0IE1JTklPTiA9ICdNaW5pb24nO1xuY29uc3QgTlVUX0pPQiA9ICdOdXQgSm9iJztcbmNvbnN0IFBPRENBU1RFUiA9ICdQb2RjYXN0ZXInO1xuY29uc3QgUkFUSU9OQUxJU1QgPSAnUmF0aW9uYWxpc3QnO1xuY29uc3QgUk9CQkVSID0gJ1JvYmJlcic7XG5jb25zdCBTRUVSID0gJ1NlZXInO1xuY29uc3QgU1RPTkVSID0gJ1N0b25lcic7XG5jb25zdCBUQU5ORVIgPSAnVGFubmVyJztcbmNvbnN0IFRST1VCTEVNQUtFUiA9ICdUcm91YmxlbWFrZXInO1xuY29uc3QgVklMTEFHRVIgPSAnVmlsbGFnZXInO1xuY29uc3QgV0VSRVdPTEYgPSAnV2VyZXdvbGYnO1xuXG4vLyBBTExfUk9MRVMgcmVwcmVzZW50cyBhbiBhcnJheSBvZiBhbGwgdGhlIHBvc3NpYmxlIHJvbGVzIHRoYXQgZXhpc3QuXG5jb25zdCBBTExfUk9MRVMgPSBbXG4gICAgQUdFTlRfT0ZfQ0hBT1MsXG4gICAgQk9ZX05FWFRET09SLFxuICAgIERFVklMU19BRFZPQ0FURSxcbiAgICBET0dfV0hJU1BFUkVSLFxuICAgIElORVhQTElDQUJMRSxcbiAgICBJTlNPTU5JQUMsXG4gICAgTUFTT04sXG4gICAgTUlOSU9OLFxuICAgIE5VVF9KT0IsXG4gICAgUE9EQ0FTVEVSLFxuICAgIFJBVElPTkFMSVNULFxuICAgIFJPQkJFUixcbiAgICBTRUVSLFxuICAgIFNUT05FUixcbiAgICBUQU5ORVIsXG4gICAgVFJPVUJMRU1BS0VSLFxuICAgIFZJTExBR0VSLFxuICAgIFdFUkVXT0xGLFxuXTtcblxuLypcbiAqICBST0xFX01FVEFEQVRBIHJlcHJlc2VudHMgYSBkaWN0aW9uYXJ5IG9mIGVhY2ggcG9zc2libGUgcm9sZSB0aGF0IGV4aXN0cyB0byBpdHMgbWV0YWRhdGEgZmllbGRzLlxuICogIEF2YWlsYWJsZSBtZXRhZGF0YTpcbiAqICAgIC0gZGVzY3JpcHRpb246IGFicmlkZ2VkIGRlc2NyaXB0aW9uIG9mIHRoZSByb2xlXG4gKiAgICAtIGltYWdlRmlsZVBhdGg6IHBhdGggdG8gYW4gaW1hZ2UgdGhhdCBkZXBpY3RzIHRoZSByb2xlIGljb25cbiAqL1xuY29uc3QgUk9MRV9NRVRBREFUQSA9IHtcbiAgICBhZ2VudG9mY2hhb3M6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdTd2l0Y2hlcyBjYXJkcyB3aXRoIGFub3RoZXIgcGxheWVyIGFuZCB0YWtlcyB0aGVpciByb2xlLiBBZ2VudCBvZiBDaGFvcyB0aGVuIGpvaW5zIG9wcG9zaXRlIG9mIG5ldyBwbGF5ZXJcXCdzIG9yaWdpbmFsIHRlYW0uJyxcbiAgICAgICAgaW1hZ2VGaWxlUGF0aDogJ2FnZW50b2ZjaGFvcy5wbmcnLFxuICAgIH0sXG4gICAgYm95bmV4dGRvb3I6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdQbGF5cyBmb3IgdGhlbXNlbHZlcy4gV2lucyBpZiBwbGF5ZXIgdG8gdGhlIGxlZnQgb3IgcmlnaHQgZGllcy4nLFxuICAgICAgICBpbWFnZUZpbGVQYXRoOiAnYm95bmV4dGRvb3IucG5nJyxcbiAgICB9LFxuICAgIGRldmlsc2Fkdm9jYXRlOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmlsbGFnZSB0ZWFtLiBLbm93cyBhbGwgb2YgdGhlIHdlcmV3b2x2ZXMsIGJ1dCBsb3NlcyBpZiB2b3RlZCBhZ2FpbnN0IGJ5IGFsbCBvZiB0aGVtLicsXG4gICAgICAgIGltYWdlRmlsZVBhdGg6ICdkZXZpbHNhZHZvY2F0ZS5wbmcnLFxuICAgIH0sXG4gICAgZG9nd2hpc3BlcmVyOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmlsbGFnZSB0ZWFtLiBLbm93cyBvbmUgd2VyZXdvbGYsIGJ1dCBkaWVzIGlmIHRoYXQgd2VyZXdvbGYgaXMga2lsbGVkLiBJcyBhIHdlcmV3b2xmIGlmIG9ubHkgb25lIG9yIG5vIG90aGVycy4nLFxuICAgICAgICBpbWFnZUZpbGVQYXRoOiAnZG9nd2hpc3BlcmVyLnBuZycsXG4gICAgfSxcbiAgICBpbmV4cGxpY2FibGU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdWaWxsYWdlIHRlYW0uIEZsaXBzIGEgY29pbiwgYW5kIGlmIGhlYWRzLCBiZWNvbWVzIGFueSBvZiBtb3N0IG90aGVyIHJvbGVzIGFuZCBwZXJmb3JtcyB0aGVpciBhY3Rpb24uJyxcbiAgICAgICAgaW1hZ2VGaWxlUGF0aDogJ2luZXhwbGljYWJsZS5wbmcnLFxuICAgIH0sXG4gICAgaW5zb21uaWFjOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmlsbGFnZSB0ZWFtLiBPYnNlcnZlcyBvd24gY2FyZCBhdCB0aGUgZW5kIG9mIHRoZSBuaWdodCwgcHJpb3Igb25seSB0byBJbmV4cGxpY2FibGUuJyxcbiAgICAgICAgaW1hZ2VGaWxlUGF0aDogJ2luc29tbmlhYy5wbmcnLFxuICAgIH0sXG4gICAgbWFzb246IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdWaWxsYWdlIHRlYW0uIFdha2VzIHVwIGFuZCBsb29rcyBmb3Igb3RoZXIgbWFzb25zLicsXG4gICAgICAgIGltYWdlRmlsZVBhdGg6ICdtYXNvbi5wbmcnLFxuICAgIH0sXG4gICAgbWluaW9uOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnV2VyZXdvbGYgdGVhbS4gS25vd3MgYWxsIHdlcmV3b2x2ZXMuIFdpbnMgaWYga2lsbGVkIG9yIGlmIGEgdmlsbGFnZSB0ZWFtIHJvbGUgZGllcy4gSWYgbm8gd2VyZXdvbHZlcywgYmVoYXZlcyBhcyBhIHdlcmV3b2xmIGluc3RlYWQuJyxcbiAgICAgICAgaW1hZ2VGaWxlUGF0aDogJ21pbmlvbi5wbmcnLFxuICAgIH0sXG4gICAgbnV0am9iOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmlsbGFnZSB0ZWFtLiBDYW4gbWFrZSByYW5kb20gZ3Vlc3Mgb2YgYWxsIHdlcmV3b2x2ZXMgYmVmb3JlIHZvdGluZywgYnV0IG11c3QgcmV2ZWFsIGNhcmQgZmlyc3QuIENvcnJlY3QgZ3Vlc3Mgd2lucyBhdXRvbWF0aWNhbGx5LicsXG4gICAgICAgIGltYWdlRmlsZVBhdGg6ICdudXRqb2IucG5nJyxcbiAgICB9LFxuICAgIHBvZGNhc3Rlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1ZpbGxhZ2UgdGVhbS4gQ2FuIHByaXZhdGVseSBpbnNwZWN0IGFueSBvdGhlciBwbGF5ZXJcXCdzIGNhcmQgZHVyaW5nIHRoZSBkYXksIGJ1dCB3aXRoIHN0cmljdCBtYWpvcml0eSBhcHByb3ZhbCBvbmx5LicsXG4gICAgICAgIGltYWdlRmlsZVBhdGg6ICdwb2RjYXN0ZXIucG5nJyxcbiAgICB9LFxuICAgIHJhdGlvbmFsaXN0OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmlsbGFnZSB0ZWFtLiBJbnNwZWN0cyBhIHNpbmdsZSBvdGhlciBwbGF5ZXJcXCdzIGNhcmQgYWZ0ZXIgZXZlcnkgcG9zc2libGUgcm9sZS1zd2l0Y2gsIGV4Y2VwdCB0aGUgSW5leHBsaWNhYmxlLicsXG4gICAgICAgIGltYWdlRmlsZVBhdGg6ICdyYXRpb25hbGlzdC5wbmcnLFxuICAgIH0sXG4gICAgcm9iYmVyOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmlsbGFnZSB0ZWFtLiBTd2l0Y2hlcyBjYXJkcyB3aXRoIGFub3RoZXIgcGxheWVyIGFuZCB0YWtlcyBvbiBuZXcgcm9sZS4nLFxuICAgICAgICBpbWFnZUZpbGVQYXRoOiAncm9iYmVyLnBuZycsXG4gICAgfSxcbiAgICBzZWVyOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmlsbGFnZSB0ZWFtLiBJbnNwZWN0cyBhbnkgb3RoZXIgcGxheWVyXFwncyBjYXJkIG9yIHR3byBjYXJkcyBmcm9tIHRoZSBjZW50ZXIuJyxcbiAgICAgICAgaW1hZ2VGaWxlUGF0aDogJ3NlZXIucG5nJyxcbiAgICB9LFxuICAgIHN0b25lcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1ZpbGxhZ2UgdGVhbS4gU2h1ZmZsZXMgdHdvIG90aGVyIHBsYXllclxcJ3MgY2FyZHMsIHRoZW4gaW5zcGVjdHMgb25seSBvbmUgYmVmb3JlIHBsYWNpbmcgYmFjay4nLFxuICAgICAgICBpbWFnZUZpbGVQYXRoOiAnc3RvbmVyLnBuZycsXG4gICAgfSxcbiAgICB0YW5uZXI6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdQbGF5cyBmb3IgdGhlbXNlbHZlcy4gV2lucyBpZiBraWxsZWQuJyxcbiAgICAgICAgaW1hZ2VGaWxlUGF0aDogJ3Rhbm5lci5wbmcnLFxuICAgIH0sXG4gICAgdHJvdWJsZW1ha2VyOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmlsbGFnZSB0ZWFtLiBTd2l0Y2hlcyBjYXJkcyBiZXR3ZWVuIHR3byBvdGhlciBwbGF5ZXJzLCB3aXRob3V0IGxvb2tpbmcuJyxcbiAgICAgICAgaW1hZ2VGaWxlUGF0aDogJ3Ryb3VibGVtYWtlci5wbmcnLFxuICAgIH0sXG4gICAgdmlsbGFnZXI6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdWaWxsYWdlIHRlYW0uIE5vIHNwZWNpYWwgYWJpbGl0aWVzLicsXG4gICAgICAgIGltYWdlRmlsZVBhdGg6ICd2aWxsYWdlci5wbmcnLFxuICAgIH0sXG4gICAgd2VyZXdvbGY6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdXZXJld29sZiB0ZWFtLiBMb29rcyBmb3Igb3RoZXIgd2VyZXdvbHZlcywgb3IgYXQgYSBjZW50ZXIgY2FyZCBpZiB0aGVyZSBhcmUgbm9uZS4nLFxuICAgICAgICBpbWFnZUZpbGVQYXRoOiAnd2VyZXdvbGYucG5nJyxcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgQUdFTlRfT0ZfQ0hBT1MsXG4gICAgQk9ZX05FWFRET09SLFxuICAgIERFVklMU19BRFZPQ0FURSxcbiAgICBET0dfV0hJU1BFUkVSLFxuICAgIElORVhQTElDQUJMRSxcbiAgICBJTlNPTU5JQUMsXG4gICAgTUFTT04sXG4gICAgTUlOSU9OLFxuICAgIE5VVF9KT0IsXG4gICAgUE9EQ0FTVEVSLFxuICAgIFJBVElPTkFMSVNULFxuICAgIFJPQkJFUixcbiAgICBTRUVSLFxuICAgIFNUT05FUixcbiAgICBUQU5ORVIsXG4gICAgVFJPVUJMRU1BS0VSLFxuICAgIFZJTExBR0VSLFxuICAgIFdFUkVXT0xGLFxuXG4gICAgQUxMX1JPTEVTLFxuICAgIFJPTEVfTUVUQURBVEEsXG59OyJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBb0JBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQXJFQTtBQUNBO0FBMEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBckJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./templates/static/js/constants.js\n"); /***/ }), @@ -7042,7 +7042,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n}); /*! no static exports found */ /***/ (function(module, exports) { -eval("/* (ignored) *///# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy93cyAoaWdub3JlZCk/Zjk5ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiAoaWdub3JlZCkgKi8iXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///0\n"); +eval("/* (ignored) *///# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy93cyAoaWdub3JlZCk/OTg5ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiAoaWdub3JlZCkgKi8iXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///0\n"); /***/ }) diff --git a/templates/src/constants.py b/templates/src/constants.py index af930184..b5c6d00c 100644 --- a/templates/src/constants.py +++ b/templates/src/constants.py @@ -1,29 +1,56 @@ -WEREWOLF = 'Werewolf' -VILLAGER = 'Villager' -MINION = 'Minion' -ROBBER = 'Robber' -TROUBLEMAKER = 'Troublemaker' -SEER = 'Seer' -INSOMNIAC = 'Insomniac' -TANNER = 'Tanner' -MASON = 'Mason' -DOG_WHISPERER = 'Dog Whisperer' -DEVILS_ADVOCATE = 'Devil\'s Advocate' -STONER = 'Stoner' -RATIONALIST = 'Rationalist' +# Role names AGENT_OF_CHAOS = 'Agent of Chaos' -INEXPLICABLE = 'Inexplicable' BOY_NEXTDOOR = 'Boy Nextdoor' +DEVILS_ADVOCATE = 'Devil\'s Advocate' +DOG_WHISPERER = 'Dog Whisperer' +INEXPLICABLE = 'Inexplicable' +INSOMNIAC = 'Insomniac' +MASON = 'Mason' +MINION = 'Minion' NUT_JOB = 'Nut Job' PODCASTER = 'Podcaster' +RATIONALIST = 'Rationalist' +ROBBER = 'Robber' +SEER = 'Seer' +STONER = 'Stoner' +TANNER = 'Tanner' +TROUBLEMAKER = 'Troublemaker' +VILLAGER = 'Villager' +WEREWOLF = 'Werewolf' +# ALL_ROLES represents an array of all the possible roles that exist. ALL_ROLES = [ - WEREWOLF, VILLAGER, MINION, ROBBER, TROUBLEMAKER, SEER, INSOMNIAC, TANNER, MASON, - DOG_WHISPERER, DEVILS_ADVOCATE, STONER, RATIONALIST, AGENT_OF_CHAOS, INEXPLICABLE, - BOY_NEXTDOOR, NUT_JOB, PODCASTER + AGENT_OF_CHAOS, + BOY_NEXTDOOR, + DEVILS_ADVOCATE, + DOG_WHISPERER, + INEXPLICABLE, + INSOMNIAC, + MASON, + MINION, + NUT_JOB, + PODCASTER, + RATIONALIST, + ROBBER, + SEER, + STONER, + TANNER, + TROUBLEMAKER, + VILLAGER, + WEREWOLF, ] ORDERED_NIGHT_ROLES = [ - WEREWOLF, MINION, DEVILS_ADVOCATE, DOG_WHISPERER, MASON, SEER, AGENT_OF_CHAOS, - STONER, ROBBER, TROUBLEMAKER, INSOMNIAC, INEXPLICABLE + WEREWOLF, + MINION, + DEVILS_ADVOCATE, + DOG_WHISPERER, + MASON, + SEER, + AGENT_OF_CHAOS, + STONER, + ROBBER, + TROUBLEMAKER, + INSOMNIAC, + INEXPLICABLE ] diff --git a/templates/static/js/constants.js b/templates/static/js/constants.js index 5ca6afe2..9cbe0caa 100644 --- a/templates/static/js/constants.js +++ b/templates/static/js/constants.js @@ -1,122 +1,146 @@ -const WEREWOLF = 'Werewolf'; -const VILLAGER = 'Villager'; -const MINION = 'Minion'; -const ROBBER = 'Robber'; -const TROUBLEMAKER = 'Troublemaker'; -const SEER = 'Seer'; -const INSOMNIAC = 'Insomniac'; -const TANNER = 'Tanner'; -const MASON = 'Mason'; -const DOG_WHISPERER = 'Dog Whisperer'; -const DEVILS_ADVOCATE = 'Devil\'s Advocate'; -const STONER = 'Stoner'; -const RATIONALIST = 'Rationalist'; +// Role names const AGENT_OF_CHAOS = 'Agent of Chaos'; -const INEXPLICABLE = 'Inexplicable'; const BOY_NEXTDOOR = 'Boy Nextdoor'; +const DEVILS_ADVOCATE = 'Devil\'s Advocate'; +const DOG_WHISPERER = 'Dog Whisperer'; +const INEXPLICABLE = 'Inexplicable'; +const INSOMNIAC = 'Insomniac'; +const MASON = 'Mason'; +const MINION = 'Minion'; const NUT_JOB = 'Nut Job'; const PODCASTER = 'Podcaster'; +const RATIONALIST = 'Rationalist'; +const ROBBER = 'Robber'; +const SEER = 'Seer'; +const STONER = 'Stoner'; +const TANNER = 'Tanner'; +const TROUBLEMAKER = 'Troublemaker'; +const VILLAGER = 'Villager'; +const WEREWOLF = 'Werewolf'; +// ALL_ROLES represents an array of all the possible roles that exist. const ALL_ROLES = [ - WEREWOLF, VILLAGER, MINION, ROBBER, TROUBLEMAKER, SEER, INSOMNIAC, TANNER, MASON, - DOG_WHISPERER, DEVILS_ADVOCATE, STONER, RATIONALIST, AGENT_OF_CHAOS, INEXPLICABLE, - BOY_NEXTDOOR, NUT_JOB, PODCASTER + AGENT_OF_CHAOS, + BOY_NEXTDOOR, + DEVILS_ADVOCATE, + DOG_WHISPERER, + INEXPLICABLE, + INSOMNIAC, + MASON, + MINION, + NUT_JOB, + PODCASTER, + RATIONALIST, + ROBBER, + SEER, + STONER, + TANNER, + TROUBLEMAKER, + VILLAGER, + WEREWOLF, ]; +/* + * ROLE_METADATA represents a dictionary of each possible role that exists to its metadata fields. + * Available metadata: + * - description: abridged description of the role + * - imageFilePath: path to an image that depicts the role icon + */ const ROLE_METADATA = { - werewolf: { - imageFilePath: 'werewolf.png', - description: 'Werewolf team. Looks for other werewolves, or at a center card if there are none.' - }, - villager: { - imageFilePath: 'villager.png', - description: 'Village team. No special abilities.' + agentofchaos: { + description: 'Switches cards with another player and takes their role. Agent of Chaos then joins opposite of new player\'s original team.', + imageFilePath: 'agentofchaos.png', }, - minion: { - imageFilePath: 'minion.png', - description: 'Werewolf team. Knows all werewolves. Wins if killed or if a village team role dies. If no werewolves, behaves as a werewolf instead.' + boynextdoor: { + description: 'Plays for themselves. Wins if player to the left or right dies.', + imageFilePath: 'boynextdoor.png', }, - robber: { - imageFilePath: 'robber.png', - description: 'Village team. Switches cards with another player and takes on new role.' + devilsadvocate: { + description: 'Village team. Knows all of the werewolves, but loses if voted against by all of them.', + imageFilePath: 'devilsadvocate.png', }, - seer: { - imageFilePath: 'seer.png', - description: 'Village team. Inspects any other player\'s card or two cards from the center.' + dogwhisperer: { + description: 'Village team. Knows one werewolf, but dies if that werewolf is killed. Is a werewolf if only one or no others.', + imageFilePath: 'dogwhisperer.png', }, - troublemaker: { - imageFilePath: 'troublemaker.png', - description: 'Village team. Switches cards between two other players, without looking.' + inexplicable: { + description: 'Village team. Flips a coin, and if heads, becomes any of most other roles and performs their action.', + imageFilePath: 'inexplicable.png', }, insomniac: { + description: 'Village team. Observes own card at the end of the night, prior only to Inexplicable.', imageFilePath: 'insomniac.png', - description: 'Village team. Observes own card at the end of the night, prior only to Inexplicable.' - }, - tanner: { - imageFilePath: 'tanner.png', - description: 'Neither team. Wins if killed.' }, mason: { + description: 'Village team. Wakes up and looks for other masons.', imageFilePath: 'mason.png', - description: 'Village team. Wakes up and looks for other masons.' }, - dogwhisperer: { - imageFilePath: 'dogwhisperer.png', - description: 'Village team. Knows one werewolf, but dies if that werewolf is killed. Is a werewolf if only one or no others.' + minion: { + description: 'Werewolf team. Knows all werewolves. Wins if killed or if a village team role dies. If no werewolves, behaves as a werewolf instead.', + imageFilePath: 'minion.png', }, - devilsadvocate: { - imageFilePath: 'devilsadvocate.png', - description: 'Village team. Knows all of the werewolves, but loses if voted against by all of them.' + nutjob: { + description: 'Village team. Can make random guess of all werewolves before voting, but must reveal card first. Correct guess wins automatically.', + imageFilePath: 'nutjob.png', }, - stoner: { - imageFilePath: 'stoner.png', - description: 'Village team. Shuffles two other player\'s cards, then inspects only one before placing back.' + podcaster: { + description: 'Village team. Can privately inspect any other player\'s card during the day, but with strict majority approval only.', + imageFilePath: 'podcaster.png', }, rationalist: { + description: 'Village team. Inspects a single other player\'s card after every possible role-switch, except the Inexplicable.', imageFilePath: 'rationalist.png', - description: 'Village team. Inspects a single other player\'s card after every possible role-switch, except the Inexplicable.' }, - agentofchaos: { - imageFilePath: 'agentofchaos.png', - description: 'Switches cards with another player and takes their role. Agent of Chaos then joins opposite of new player\'s original team.' + robber: { + description: 'Village team. Switches cards with another player and takes on new role.', + imageFilePath: 'robber.png', }, - inexplicable: { - imageFilePath: 'inexplicable.png', - description: 'Village team. Flips a coin, and if heads, becomes any of most other roles and performs their action.' + seer: { + description: 'Village team. Inspects any other player\'s card or two cards from the center.', + imageFilePath: 'seer.png', }, - boynextdoor: { - imageFilePath: 'boynextdoor.png', - description: 'Plays for themselves. Wins if player to the left or right dies.' + stoner: { + description: 'Village team. Shuffles two other player\'s cards, then inspects only one before placing back.', + imageFilePath: 'stoner.png', }, - nutjob: { - imageFilePath: 'nutjob.png', - description: 'Village team. Can make random guess of all werewolves before voting, but must reveal card first. Correct guess wins automatically.' + tanner: { + description: 'Plays for themselves. Wins if killed.', + imageFilePath: 'tanner.png', }, - podcaster: { - imageFilePath: 'podcaster.png', - description: 'Village team. Can privately inspect any other player\'s card during the day, but with strict majority approval only.' + troublemaker: { + description: 'Village team. Switches cards between two other players, without looking.', + imageFilePath: 'troublemaker.png', + }, + villager: { + description: 'Village team. No special abilities.', + imageFilePath: 'villager.png', + }, + werewolf: { + description: 'Werewolf team. Looks for other werewolves, or at a center card if there are none.', + imageFilePath: 'werewolf.png', } }; export default { - ALL_ROLES, - ROLE_METADATA, - WEREWOLF, - VILLAGER, + AGENT_OF_CHAOS, + BOY_NEXTDOOR, + DEVILS_ADVOCATE, + DOG_WHISPERER, + INEXPLICABLE, + INSOMNIAC, + MASON, MINION, + NUT_JOB, + PODCASTER, + RATIONALIST, ROBBER, SEER, - TROUBLEMAKER, - INSOMNIAC, - TANNER, - MASON, - DOG_WHISPERER, - DEVILS_ADVOCATE, STONER, - RATIONALIST, - AGENT_OF_CHAOS, - INEXPLICABLE, - BOY_NEXTDOOR, - NUT_JOB, - PODCASTER + TANNER, + TROUBLEMAKER, + VILLAGER, + WEREWOLF, + + ALL_ROLES, + ROLE_METADATA, }; \ No newline at end of file