Add documentation relating to the event information
This commit is contained in:
parent
8a1facf59d
commit
4ac0fb2833
1 changed files with 157 additions and 0 deletions
157
planning.txt
Normal file
157
planning.txt
Normal file
|
|
@ -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
|
||||
Loading…
Add table
Add a link
Reference in a new issue