Project • Installation • Usage • Features • Architecture • Team
This project is a full R-Type multiplayer engine with a game engine, implemented in C++, using:
- ASIO (UDP networking)
- SFML (graphics, input, audio)
- A custom ECS architecture
- A fully custom binary client/server protocol
The goal is to reproduce the behavior of the classic R-Type shooter while supporting multiplayer gameplay.
The project is separated into 2 main parts: Software Architecture & Prototype and Advanced Topics. For more information on the subject, you can download the subject in the wiki.
For our part we chose to work on the game engine and decided to add multiple features; including:
- an application to create and customise entities.
- a second game with its own server and client to prove the efficency of our engine.
The project produces fixe binaries:
r-type_server— authoritative server handling the game worldr-type_client— player client handling rendering + inputsr-type_app— application used to create new entitiesflappy_server— an authoritative server handling the world of the second gameflappy_client— player client for the second game
To install the project, you can refer yourself to the guide
git clone [email protected]:Lilianbazantay/r-type.git r-type
cd r-typeLinux:
sudo ./scripts/linux.shWindows:
./scripts/msvc.ps1
./scripts/windows.ps1This installs dependencies (via vcpkg) and generates:
./r-type_client
./r-type_server
./r-type_app
Note: The installation script will install system-wide dependencies. These includes:
- basic developement tools: used to compile the program and run it
cmake: our build systemninja: a build system paired with cmake to improve compilation speedfreetype: a library that renders fontX11: windowing system for Unix-based systemXCB: library to enable connection with the X11 libraryXRandR: X11 extension to handle the screen's configuration dynamicallyXI: X11 extension to handle touchpads inputsXCursor: X11 mouse cursor managerudev: a linux device manager to detect and manage hardware dynamically.OpenAL: audio API used for spatial sound playbackOpenGL: graphic API to render in both 2D and 3D. Creates a grpahical context.libtool: a build tool to abstract static library creation
The freetype library, X11 library and its dependencies and OpenAL/OPENGL are all library used by the SFML library.
Every library here is imported that way as to not make the project dependant on them and allow it run without being dependant on the user's system.
- Custom Entity Component System (ECS)
- Deterministic authoritative server
- Custom binary UDP protocol
- Hot-reloadable entity definitions
- Cross-platform architecture (Linux focused)
- Client/server model over UDP (ASIO)
- Lag compensation & client-side prediction
- Entity state synchronization
- Server-side collision & game logic
- Support for up to 4 concurrent players
- R-Type multiplayer arcade shooter
- Flappy-like second game demonstrating engine reusability
- vcpkg
- Ensures a consistent development environment across all machines
- Automatically installs and manages all dependencies and submodules
- r-type_app
- Create and customize entities
- Edit components and behaviors
- Export directly to the engine format
The engine follows a data-oriented ECS design:
- Factory is a design pattern that create all entities
- Entities are unique IDs
- Components are plain data structures
- Systems operate on component sets
- Owns the authoritative game state
- Runs physics, collisions, AI and game rules
- Sends snapshots to clients
- Handles rendering, inputs, audio
- Applies prediction & interpolation
- Synchronizes entities with the server
- Fully custom binary protocol
- Optimized packet size
- Explicit serialization/deserialization
- Stateless messages when possible
./r-type_server -p <free port on your machine>./r-type_client -i <IP of the server machine> -p <same port as server>Multiple clients can connect simultaneously. (max 4)
| Lilian BAZANTAY [email protected] |
Valentin ROQUEJOFRE [email protected] |
Antoine QUILLET [email protected] |
Thibaud LE CREURER [email protected] |
Arthur DRAHY [email protected] |
This project is developed as an Epitech educational project between the 01/09/2025 and the 25/01/2026. It is not intended for commercial use. All rights reserved.
