R-Type

The Goal of this project is to implement a multithreaded server and a graphical client for a game called R-Type, using an engine of your own design.
Supported Platforms
Platform | Compiler | Status |
Linux | g++ | ✅ |
macOS | g++ | ✅ |
Windows | MSVC | ✅ |
Project Structure
flowchart LR
subgraph App
subgraph client [Client]
A[Client]
A -->|.a/.lib| B[Engine]
B -->|.a/.lib| C[ECS]
A -->|.a/.lib| D[IGameClient]
B -->|.so/.dll| E[IAudio]
B -->|.so/.dll| F[INetworkClient]
B -->|.so/.dll| G[IRenderer]
end
subgraph server [Server]
H[Server]
H -->|.so/.dll| I[IGameServer]
H -->|.so/.dll| J[INetworkServer]
end
A <==>|TCP/UDP| H
end
R-Type
├── assets # Game assets (images, sounds, etc.)
├── cmake # Cmake configs
├── client # Client source code
├── documentation # Project documentation
├── modules # Static libraries
├── plugins # Dynamic libraries
├── scripts # Build and utility scripts
├── server # Server source code
├── tests # Unit and integration tests
└─── third-party # External libraries as submodules
Build and Run
- Important
- When cloning the project, you should also initialize the submodules:
git clone --recurse-submodules git@github.com:bobis33/R-Type.git
If you already cloned the project, you can initialize the submodules with: git submodule update --init --recursive
Prerequisites
Make sure you have the following dependencies installed on your system:
Unix (Linux, macOS)
./scripts/unix/build.sh release
## Or
cmake -S . -B cmake-build-release -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=g++ -DCMAKE_C_COMPILER=gcc
cmake --build cmake-build-release -- -j4
## Then
./cmake-build-release/bin/r-type_client ## client
./cmake-build-release/bin/r-type_server ## server
Windows
cmake -S . -B cmake-build-release -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=Release
cmake --build cmake-build-release --config Release
## Then
cmake-build-release\bin\r-type_client.exe ## client
cmake-build-release\bin\r-type_server.exe ## server
Documentation
API documentation is generated using Doxygen and deployed on GitHub Pages. You can find the same documentation as PDF here. More specific documentation for each part of the project can be found in their respective directories:
External Libraries
All dependencies are included as submodules in the third-party directory.
Contributing
➡️ Want to contribute? See CONTRIBUTING.md.