/Capstone

Control a spaceship through a field of planets. In space. On a Torus manifold.

Primary LanguageC++GNU General Public License v3.0GPL-3.0

Capstone Capstone Workflows Documentation License: GPL v3

Control a spaceship through a field of planets. In space. On a Torus manifold.


Screenshot


Setup

  1. Clone this repository and change working directory:
git clone --recurse-submodules -j5 https://github.com/anarchuser/Capstone;
cd Capstone
  1. Install dependencies:
./configure
  1. Run the project:
make

How to play

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.

Features (planned vs work-in-progress)

  • 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