Use browser cookies to save a user's custom roles for future games. Let a user opt in to saving the role in localStorage. On the setup screen, check for saved roles in the cookies and render them if present. Also allow a user to remove any previously created custom role.
clients are polling the server, which pretty much defeats the purpose of using sockets. Change this to have the server simply push the few events as they happen. Also serialize the data sent by the server so it is as lightweight as possible.
Is your code licensed? I'm Heinrich from the Computer Science student's council in Halle, Germany.
We're host and maintain a collection of online open source board and card games (https://github.com/fsrmatheinfo/spieleabend) and we would be happy to include your great app!
Have you thought about licensing your code under any open source license?
Joe is spectator that joined after the game has started:
Mod controls should display Joe as an option to transfer powers to, but does not:
The join event for a spectator will need to be broadcast to the room, and on the client-side, if the recipient is a moderator, add them to the list of options to transfer powers to.
Accidentally clicking the button can be disastrous for the game, so there should absolutely be a confirmation as to whether the user meant to click it.
Organize the roles further:
Red & Blue split.
Under red:
Principle Evils (Werewolves) and Auxiliary Evils (Minions, etc.)
Then in blue:
Maybe something like folders. If I could title them myself, I'd go Informational, Day Deflection, Night Deflection, Protective, and Other. But maybe you want to have set ones.
Personally might like "Null Roles" for blue myself, but doubt anyone else would know what it means. Just made up the term a few nights ago for things like "Gunsmith" that really does nothing to help or hurt the village necessarily with it's ability.
Move the back button to the upper left, so users don't confuse it for the join button. Convert the join page input fields to a form to improve accessability.
Sometimes we still forget when we are killed and click "I'm Dead" and "yes I'm dead" out of habit. If there were toggle to set the game to "No Reveal" and/or "Day Reveals Only" (tho we don't do the second option now, the option would be great and a lot of other groups use it, and it's going to prolly be a part of the next version of Ultimate Werewolf set), then maybe that toggle removes the I'm Dead button entirely...just a button that is at top maybe, somehow explicitly different that says "The Game Is Finished" for pure "No Reveal" games.
For "Day Reveals Only", there'd need to be an option for a dead player to say which type of kill it is.
Example:
6 players remaining, Werewolf and 2 Dreamwolves are alive. The Wolf might eat a Dreamwolf to make it 2 evil vs. 3 good, so the game would continue, but as is, the game calls parity at those six players instead.
When a lot of custom cards have been created, the setup page becomes quite unwieldy - cards take up a lot of space, which leads to lots of scrolling and difficulty determining which roles have been added. Give this view more options:
Add an option to change the cards to a much more compact "list" view vs. the default gallery view (similar to Windows File Explorer).
Add some sort of viewable panel that displays the current list of selected roles.
Things like "Private chat is allowed-Disallowed-Neighbors only" and "May players end a day phase early?" and if so, "What happens: Sleep and wolves eat, Tribunal, Reverse Tribunal, 1-2-3 Point, etc." (<with custom ideas possible) And maybe allow multiple options within the same game if mod chooses.
Get with me and I could help define these better if you choose to do it.
All card quantities are reset to 0 when a custom card is added, which can be frustrating for the user if they already constructed a deck before adding the role. Change this to preserve the quantity values from before the card was added.
Edit by @AlecM33 - the start over option makes a lot of sense. Why make the host go back to the create screen and enter all the same options again. Striking through the timer and potentially opening it as a separate issue.
While playing last night, mod had created a deck with an evil team of Werewolf and a custom Werewolf. When the Werewolf (role chosen from standard set) died, the app ended the game and revealed the identity of the entire evil team.
Right now each client calculates the time remaining and emits an event to end the game. Centralize this time tracking on the server and broadcast an event to all the clients when the timer expires. The current method is prone to errors (and is really just plain stupid)
I think people just watching could be able to see active games at the time and possibly join and see what roles are in the game without being invasive to the game
Could we have the clock end with a pop-up button that asks if we want to continue off the clock or end the game? We have some ideas for improved options when the time runs out, but if it's not watched closely, the clock can spoil the answers.
Because of the height of the screen, all that can be seen on some mobile devices is your name, the timer, the role info button, and your role card. The player list has been pushed down out of view. To someone new to the app, it might not be clear that the player list is available and that you have to scroll to reach it.
Implement a better UI layout for mobile to indicate where the player list is. Perhaps move the list to a modal for smaller screens and have a button to activate it.
When players have joined, they can see this share option:
The 6 character code is also a means of joining via the app's homepage - this is because the code can actually be more convenient in certain scenarios, such as when a person wants to join on their phone and you don't have a quick way of sending the link over - they can just enter the short code instead of the whole link. It's not obvious that the last part of the link is the access code, though. We want to display it as a second field, perhaps right below the share link. Something like "Or enter this code on the homepage: [code]"
Currently the toast element doesn't have a way to dismiss the message on command. It will always disappear automatically after a provided duration.
This can of course be annoying if the toast is blocking something the user wants to see - allow the user to click a small close button on the toast to dismiss it.
The toast module is found in client/src/modules/Toast.js
Currently the name is entered on the join page, and if the join is successful, that permanently sets that clients name. We want clients to be able to edit their name in the lobby and during a game, and have that change broadcasted to the other clients.
Having an edit button built into this top banner on the game page might be a good implementation:
I'd like to be able to assign roles like Hidden Lycan. App would need to show the assigned player a vanilla Villager card, but mod needs to know the hidden role in order to give proper game info.
Make the role page have an option for the creator of the game to change an Evil team red to an Evil team red with a red line around it (counts for parity) mid-game. There are tons of transformation roles that trigger on different events.