Skip to content

Lilianbazantay/r-type

Repository files navigation

R-Type — Multiplayer Arcade Shooter

An project

ProjectInstallationUsageFeaturesArchitectureTeam


Project

Overview

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 world
  • r-type_client — player client handling rendering + inputs
  • r-type_app — application used to create new entities
  • flappy_server — an authoritative server handling the world of the second game
  • flappy_client — player client for the second game

Installation

To install the project, you can refer yourself to the guide

1. Clone the repository

git clone [email protected]:Lilianbazantay/r-type.git r-type
cd r-type

2. Run the build script

Linux:

sudo ./scripts/linux.sh

Windows:

./scripts/msvc.ps1
./scripts/windows.ps1

This 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 system
  • ninja: a build system paired with cmake to improve compilation speed
  • freetype: a library that renders font
  • X11: windowing system for Unix-based system
  • XCB: library to enable connection with the X11 library
  • XRandR: X11 extension to handle the screen's configuration dynamically
  • XI: X11 extension to handle touchpads inputs
  • XCursor: X11 mouse cursor manager
  • udev: a linux device manager to detect and manage hardware dynamically.
  • OpenAL: audio API used for spatial sound playback
  • OpenGL: 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.


Features

Engine

  • Custom Entity Component System (ECS)
  • Deterministic authoritative server
  • Custom binary UDP protocol
  • Hot-reloadable entity definitions
  • Cross-platform architecture (Linux focused)

Networking

  • 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

Games

  • R-Type multiplayer arcade shooter
  • Flappy-like second game demonstrating engine reusability

Tools

  • 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

Architecture

The engine follows a data-oriented ECS design:

  • 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

Protocol

  • Fully custom binary protocol
  • Optimized packet size
  • Explicit serialization/deserialization
  • Stateless messages when possible

Usage

Start the server

./r-type_server -p <free port on your machine>

Start a client

./r-type_client -i <IP of the server machine> -p <same port as server>

Multiple clients can connect simultaneously. (max 4)


Team

Lilian BAZANTAY
[email protected]
Valentin ROQUEJOFRE
[email protected]
Antoine QUILLET
[email protected]
Thibaud LE CREURER
[email protected]
Arthur DRAHY
[email protected]

License

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.

About

mirror repository for r-type

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5