-
Notifications
You must be signed in to change notification settings - Fork 1
Home
A cooperative hacking game, in the style of "Keep Talking and Nobody Explodes". One person is sitting at the terminal attempting to gain access, but without enough information to do so. Another person (or group of people) has a manual with the rest of the information required to gain access (such as passwords, commands to run etc).
The main interface to the terminal is text-based. Commands are entered in order to start the various hacking tasks which must be completed to gain access. These tasks may be text-based (e.g. enter the correct password), or graphical (e.g. click on the right picture).
Tasks may be dependent on other tasks being completed first - attempting to start a task will tell the user if other tasks must be completed first. Expect that to complete each level, the "login" command needs to be run, but this may tell the player they need to complete other tasks first.
An example task might be guessing a password: the player with the manual has access to a list of passwords. The players guess passwords, and are told how many characters are correct, the player with the manual must work out which password is the right one.
Once the player starts hacking (i.e. enters a command on the terminal), they have a limited amount of time to gain access before they are 'locked out' and lose.
- Interruptions - eg the screen goes off/flickers.
- Timer tasks - eg the player has to enter a particular command, click on a button etc every 30s to avoid being locked out.
- Tasks vary based on terminal identity - eg. a label on the bezel, a welcome message etc, checking the kernel version using a command, the prompt etc.
- Lives: making a mistake removes some time from the clock - need to decide exactly what a 'mistake' entails.
- Password guessing - similar to mastermind/fallout password guessing, where you have a list of possible passwords with overlapping letters, and you get told how many characters were correct with each guess.
- Remove a security chip from a board - the manual tells you which is the correct chip based on various identifiers.
- Messaging app - have to provide the correct responses to queries.
- GameStates: A gamestate manager manages what state the game is in (e.g. in the main menu, selecting a level, playing a level etc). Each state has its own gamestate class, implementing the behaviour for that gamestate and responsible for rendering it. Gamestates are maintained in a stack, and can be pushed and popped to switch between them.
- Terminal: The main gameplay class - the Terminal class is responsible for:
- Displaying a terminal-style interface and handling text input etc. The text buffer is held in a fixed-size queue, which is added to every time a command is entered. Programs can also add to the buffer in order to display text on screen.
- Tracking success/failure conditions - running the timer, counting mistakes etc.
- Launching the tasks (programs) and managing their lifecycle. Each Terminal instance (i.e. level) has a different set of programs available: these are passed in on initialization as a dictionary mapping the command used to launch a program. Programs can be text (text entered is passed to the program) or graphical (text entry is suspended until the program exits).
- Programs: Each task is implemented as a 'Program'. The terminal passes input to the program, and the program is responsible for displaying text output via the terminal, or displaying its graphical output itself (the terminal will call the program's draw function as part of its own draw function). Each program also has a list of programs that it is dependent on - these have to be completed before the program can be launched.