Control a spaceship through a field of planets. In space. On a Torus manifold.
- Clone this repository and change working directory:
git clone --recurse-submodules -j5 https://github.com/anarchuser/Capstone;
cd Capstone
- Install dependencies:
./configure
- Run the project:
make
The game itself is simple - fly the spaceship using WASD
or arrow keys
without colliding with anything. Once your health points reach 0, you die.
From the main menu you can also join another player on a remote machine in the same local network. To play together one player starts a game instance and all others connect to the IP address of the first machine.
Pressing Escape
in-game opens a menu that allows you to restart, disconnect, and close the game.
- Game play
- Control a spaceship using the keyboard
- Spawn planets exerting gravitational pull onto spaceships
- Damage spaceships on collision
- Allow shooting of bullets
- UI/UX
- Provide a main menu
- Provide an in-game menu
- Allow restarting and quitting the game
- Enter the ip to connect to
- Change the username in-game
- Read host- and username from env variables
- Network
- Connect to another player's game client
- Ensure clients use the same RNG seed
- Mirror local commands to remote spaceship too
- Join back to the other client
- Run game over player 1's local backend
- Run game over each player's local backend
- Share all existing connections back
- Handle disconnects smoothly
- Synchronisation
- Transmit initial spaceship data on join
- Continuously synchronise spaceships per server across clients *
- Synchronise spaceships across servers *
- Reach consensus of current game state
- Enforce consensus to every client
- [maybe] Detect and kick cheaters
- Enforce physics constraints (no teleportation)
- Compare game state diffs across servers
| * Synchronise spaceship = Client force-updates
Copyright © 2022 Aaron Alef aaron.alef@code.berlin @anarchuser