From 4ac0fb283315dc9a153a3048541d233e4ba8894c Mon Sep 17 00:00:00 2001 From: Oliver-Akins Date: Sun, 20 Sep 2020 22:00:46 -0600 Subject: [PATCH] Add documentation relating to the event information --- planning.txt | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 planning.txt diff --git a/planning.txt b/planning.txt new file mode 100644 index 0000000..aa11602 --- /dev/null +++ b/planning.txt @@ -0,0 +1,157 @@ +OnConnect + - Client connects to the server, this is just an information log event + +OnDisconnect + - Client disconnects from the server, this is just an information log event + +HostGame + - Client wants to start a new game, create a basic room with the basic + information included in the object. + - May want to save currently active rooms to disk to prevent data being + lost in case of a server/computer crash. + - On success: + - Emit `GameCreated` event w/ necessary data + - On error: + - Emit `GenericError` event w/ more info + +JoinGame + - Client wants to join an already existing game + - Check if a room exists: + - If no: + - Emit `InvalidRoom` event + - Check if the username is taken: + - If yes: + - Does the user have the same token as the person in the game already + - If yes: + - Allow the player to connect with that name + - Emit `GameRejoined` + - If no: + - Emit `UsernameTaken` + - If no: + - Emit `GameJoined` to joining client + - Emit `UserJoined` to all existing clients + +StartGame + - This is triggered the host user triggers the start of the game. + - Server decides who all is fascist/liberal then picks one fascist to be Hitler + - Store this data, send each player only the data is relevant to that player: + - Liberals: + - Party affiliation + - Fascists (not Hitler): + - Party affiliation + - Other fascist's identity + - Hitler's identity + - Hitler: + - Party affiliation + - "Oh hey, you're Hitler" + - If 5-6 players: + - Send other fascist's identity + - If 7+ players: + - No one else's identity + - Start the main game loop. (emit `PresidentNominate` to the players, with + list of eligible players, only the president can send a response to + this event, any other events in this state will be ignored.) + +ChancellorNomination + - The president's nomination of player to elect as chancellor + - Emit `ChancellorVote` to all alive + - Wait until we get a `Vote` event from each client. + +Vote + - Sent from a client that has voted, this will be in a binary yes/no format + - Only alive players send vote events, so only wait for that many events + - Once all players have voted: + - If majority vote "no" or tied: + - Add one to election counter + - Check if election counter is == 3 + - If yes: + - Enact top policy from the policy deck, do not take any + executive actions + - Check win conditions of the boards + - Reset election counter + - If no: + - Go to next president + - If majority vote "yes": + - Check enacted policies to see if there are >= 3 fascist policies + in play + - if yes: + - Is the chancellor Hitler? + - If yes: + - Emit `GameEnd`, fascists won + - If no: + - Take 3 policies from the top of the deck, send them to president + +PresidentPolicies + - Client sends the two policies that the president wants to give the chancellor. + - Server discards the third, not chosen policy + - Server sends chancellor the two chosen policies + +VetoRequest + - Chancellor is requesting a discard of both policies + - Send a confirmation to the president + +VetoConfirm + - President's choice for the veto vote, this handles both the president + denying the veto and accepting it. + - If president allows veto: + - Discard the two policies + - Add one to election counter + - Check if election counter is == 3 + - If yes: + - Enact top policy from the policy deck, do not take any + executive actions + - Check win conditions of the boards + - Reset election counter + - If no: + - Go to next president + +ChancellorPolicy + - Client sends the policy that the chancellor chose + - Server discards other policy + - Did the policy cover an executive action? + - If yes: + - Take according action + - If no: + - Continue + - Then: + - Check win conditions + - Reset election counter + - Go to next president + + +--- + +# Special Actions: + +Execution: + - Server initiates process + - Send president list of alive players + - Receive `ExecutePlayer` + - Is the chosen player Hitler? + - If yes: + - Liberals win the game + - If no: + - Chosen player is marked as dead so we don't wait for their + votes, and skip over them in the presidential cycle + - Then: + - Stop processing the action, go back to main game loop + +Special Election: + - President receives list of all non-dead players + - Receive `NextPresident`: + - Put the chosen player at the front of the queue + - Stop processing the action, go back to main game loop + +View top 3 policies: + - Send copies of the top three policies to the president (not does not + modify policy deck) + - Receive `ExecutiveConfirmation`: + - Stop processing action, go back to main game loop + +Investigate loyalty: + - President receives list of players that have not been investigated + - Receive `InvestigateAffiliation`: + - Server sends the client the player's party affiliation + - Mark player has having been investigated + - Receive `ExecutiveConfirmation`: + - Stop processing action, go back to main game loop \ No newline at end of file