Skip to content

lucasteles/Backdash

Repository files navigation

CI Nuget

https://editorconfig.org/

Backdash 🕹️

Highly configurable and extensible implementation of Rollback Netcode with full asynchronous IO.

Heavily inspired by GGPO.

Overview

Traditional techniques account for network transmission time by adding delay to a players input, resulting in a sluggish, laggy game-feel. Rollback networking uses input prediction and speculative execution to send player inputs to the game immediately, providing the illusion of a zero-latency network. Using rollback, the same timings, reactions, visual and audio queues, and muscle memory your players build up playing offline will translate directly online. Backdash is designed to make incorporating rollback networking (aka. Rollback Netcode) into new and existing games as easy as possible.

Getting started

NuGet package available:

$ dotnet add package Backdash

Tip

💡 Please check the DOCUMENTATION for usage details.

Demos:

Title Link
Terminal Terminal
Monogame Local Monogame Local
Monogame Lobby Monogame Online
Godot Lobby Godot Online
Save/Load Replay Save and load Replay

Samples

Check the samples on the /samples directory:

There are examples for up to 4 players:

Building from source

You need to have installed .NET 8 SDK

  1. Clone this repository.
  2. Restore tools
    • On root directory run: dotnet tool restore
  3. Building Library (root directory)
    • SDK only: dotnet nuke build --configuration Release
      • Alternatively open the solution file Backdash.sln on your IDE.
    • SDK and samples dotnet nuke build-samples --configuration Release.
      • Alternatively open the solution file Backdash.Samples.sln on your IDE.

Licensing

Backdash is available under The MIT License. This means Backdash is free for commercial and non-commercial use.

Attribution is not required, but appreciated.

Footnotes

  1. If you are using ARM MacOS you may need the x64 version of .NET SDK to build some samples. 2

  2. The sample needs a web server to exchange players addresses. check the sample README.md for more information.