BACKBONE: BLS-ISP.NET MASTER HOST: rust-rts.bls-isp.net PROTOCOL: LOCKSTEP-TCP + NAT-RELAY
CLI-Zielserver:
RUST-RTS.BLS-ISP.NET RUST 2021 + BEVY 0.15 PBR 20 HZ LOCKSTEP + 64-BIT HASH

Zero Desync. Zero Hardcoding.
Pure Rust 3D Strategy.

IRONLOCK // RUST-RTS ist eine vollständig daten- und skriptgetriebene 3D-Echtzeitstrategie-Engine in Rust mit der Flaggschiff-Modifikation rust-ra2. Unter rust-rts.bls-isp.net stellt das BLS-ISP Command Network das zentrale Echtzeit-Multiplayer-Register, den 64-Bit-Replay-Verifier sowie den CGNAT-sicheren Reverse-TCP-Relay-Backbone bereit.

⚡ Live Lobbys öffnen
HOST CLIENT (P1) LockstepServer UPnP / CGNAT Uplink
BLS-ISP MASTER HUB rust-rts.bls-isp.net REST Registry & TCP Relay
WAN PEERS (P2–P8) 20 Hz Tick Sync 64-Bit FNV-1a Verified
BLS-ISP COMMAND TELEMETRIE Node: bls-isp-eu-central-01
Aktive Lobbys 0 0 offen · 0 im Gefecht
Spieler im Netzwerk 0 45s Heartbeat-TTL
Verifizierte Matches 3 ✓ 0 Desyncs registriert
Simulations-Takt 20 Hz 50 ms Fixed-Timestep
ZENTRALES MULTIPLAYER-VERZEICHNIS // RUST-RTS.BLS-ISP.NET

Globales Lockstep-Multiplayer-Lobby-Register

Jeder Host, der über --lobby-server https://rust-rts.bls-isp.net startet, trägt seine Lobby hier in Echtzeit ein. Dank integriertem Reverse-TCP-Relay-Tunnel können Mitspieler auch dann beitreten, wenn sich der Host hinter CGNAT oder DS-Lite ohne Portfreigabe befindet.

Lade Lobbys...
Status Lobby-Name & Heartbeat Host-Kommandant Karte (Map) Mod & Version Slots & Modus Beitritt & NAT-Modus Aktionen
Suche nach aktiven Lobbys...
LOCKSTEP VERIFICATION & LADDER LOG

Match-Historie & Deterministisches Replay-Register

Jedes Match in rts-network zeichnet sämtliche GameCommand-Bundles pro Tick sowie den finalen 64-Bit SimWorld::state_hash() auf. Dadurch sind Replays winzig, reproduzierbar und fälschungssicher.

Match & Spieler Sieger & Fraktion Karte & Mod Dauer & Ticks Finaler State-Hash Lockstep-Integrität Zeitpunkt & Replay-Datei
Lade Match-Historie...
DESIGN-PHILOSOPHIE & INFRASTRUKTUR

Die 4 Säulen von IRONLOCK // RUST-RTS auf rust-rts.bls-isp.net

Entwickelt für maximale Modifizierbarkeit, kompromisslose Netzwerk-Synchronität und sofortige Spielbarkeit ohne komplexe Router-Konfiguration.

01 // ZERO HARDCODING

100 % Datengetriebene Engine

Der Rust-Engine-Kern (engine/) kennt keine hartcodierten Fraktionen, Panzer oder Gebäude. Alles wird zur Laufzeit aus validierten TOML-Katalogen und binären glTF-2.0-Modellen (.glb) geladen.

02 // BIT-IDENTICAL LOCKSTEP

20-Hz Fixed-Timestep & 64-Bit Hash

Statt tausender Einheitenpositionen überträgt rts-network nur kompakte GameCommand-Frames pro Tick und gleicht kontinuierlich den SimWorld::state_hash() aller Mitspieler ab.

03 // DUAL SCRIPTING ENGINE

Rhai & Lua parallel in einer Mod

Mod-Entwickler implementieren Spezialfähigkeiten und Karten-Trigger wahlweise in Rust-nativem Rhai (.rhai) oder klassischem Lua (.lua) hinter derselben deterministischen Sandbox-API.

04 // BLS-ISP NAT-RELAY BACKBONE

Hosten hinter jedem Anschluss

Über rust-rts.bls-isp.net kombiniert die Engine automatisches UPnP-Port-Mapping mit einem Reverse-TCP-Relay-Tunnel, sodass auch Hosts hinter CGNAT oder DS-Lite sofort erreichbar sind.

WORKSPACE MOD-KATALOG

Installierte Total-Conversion-Mods & Kartenpakete

Live aus den TOML-Manifesten des Projekt-Workspaces (rust-ra2/ und mods/) geladene Modifikationen. Beim Verbinden prüft der Handshake (ClientHello / ServerWelcome) automatisch mod_id und mod_version.

TECHNISCHE ARCHITEKTUR

Modulare Rust-Workspace-Crates & Duale Skript-Runtime

Die Engine besteht aus fünf streng entkoppelten Cargo-Crates. Die Simulationslogik (rts-simulation) läuft vollständig deterministisch und headless-fähig, während rts-client das 3D-Rendering mit Bevy 0.15 übernimmt.

Duales Mod-Scripting: Rhai (allied_rules.rhai) & Lua (soviet_rules.lua) rts-sdk
// rust-ra2/scripts/allied_rules.rhai — GI Eingraben & Chrono-Boost
fn on_gi_deploy(ctx) {
    if ctx.custom_flags["deployed"] == true {
        ctx.speed_multiplier = 1.0;
        ctx.armor_multiplier = 1.0;
        ctx.custom_flags["deployed"] = false;
    } else {
        ctx.speed_multiplier = 0.0;
        ctx.armor_multiplier = 1.65;
        ctx.custom_flags["deployed"] = true;
    }
}

-- rust-ra2/scripts/soviet_rules.lua — Rhino Overcharge Hook
function on_rhino_overcharge(ctx)
    ctx.speed_multiplier = 1.25
    ctx.armor_multiplier = 1.35
    ctx.custom_flags["overcharged"] = true
end
Datengetriebene Einheiten-Definition (rust-ra2/units/units.toml) TOML + glTF 2.0
[[units]]
id = "grizzly_tank"
name = "Grizzly Battle Tank"
faction = "allies"
cost = 700
build_time_secs = 7.0
health = 400.0
armor = "heavy"
speed = 5.5
vision_range = 18.0
primary_weapon = "cannon_105mm"
prerequisites = ["allied_war_factory"]
script_hooks = { on_ability = "on_grizzly_ability" }

[units.visual]
model = "assets/models/grizzly_tank.glb"
archetype = "tank"
scale = [1.8, 1.1, 2.4]
primary_color = [0.22, 0.45, 0.82]
ENTWICKLER-HANDBUCH & PROTOKOLL-SPEZIFIKATION

CLI-Quickstart & rust-rts.bls-isp.net REST-API

Verbinde deinen lokalen rts-client direkt mit dem öffentlichen Master-Register auf rust-rts.bls-isp.net oder starte eine eigene Registry-Instanz aus centralwebserver/.

1. 3D-Client als Multiplayer-Host starten (automatische Registrierung)
cargo run --manifest-path engine/Cargo.toml -p rts-client -- \
  --mod-path rust-ra2 --host 0.0.0.0:7878 \
  --lobby-server https://rust-rts.bls-isp.net
2. Zweiten 3D-Client als Mitspieler verbinden
cargo run --manifest-path engine/Cargo.toml -p rts-client -- \
  --mod-path rust-ra2 --connect 127.0.0.1:7878
3. Offene Lobbys & Telemetrie per REST-API abfragen
curl -s https://rust-rts.bls-isp.net/api/lobbies?only_open=true
curl -s https://rust-rts.bls-isp.net/api/stats
4. Zentralen Webserver (Node.js / TypeScript) selbst betreiben
cd centralwebserver
PUBLIC_DOMAIN=rust-rts.bls-isp.net PUBLIC_HOST=rust-rts.bls-isp.net npm start
Methode Endpunkt Verwendung in rts-network / Web-UI Beispiel-Payload / Parameter
GET /api/lobbies Listet aktive Lobbys (automatisches TTL-Pruning abgelaufener Lobbys) ?mod_id=rust-ra2&only_open=true&search=...
POST /api/lobbies Registriert Host-Lobby & reserviert optional einen Reverse-TCP Relay-Tunnel {"lobby_name":"...","host_addr":"0.0.0.0:7878","allocate_relay":true,...}
POST /api/lobbies/:id/heartbeat Aktualisiert Spieleranzahl, Karte und Status (open, full, in_game) {"current_players":2,"max_players":2,"status":"in_game"}
DELETE /api/lobbies/:id Meldet eine Lobby beim Beenden des Hosts ab & schließt den Relay-Tunnel Antwort: {"deleted":true}
GET /api/matches Liefert aufgezeichnete Matches & deterministische .replay.json-Einträge ?mod_id=rust-ra2&search=0xcbf29ce
POST /api/matches Speichert ein abgeschlossenes Match inkl. final_state_hash im Register {"lobby_name":"...","winner_player":"...","final_tick":16800,"final_state_hash":"0x..."}
GET /api/stats & /api/health Echtzeit-Telemetrie für rust-rts.bls-isp.net (Lobbys, Spieler, Uptime, Node-ID) {"status":"online","public_domain":"rust-rts.bls-isp.net","active_lobbies":3,...}

Neue Multiplayer-Lobby im BLS-ISP Register melden

Abgeschlossenes Match / Replay registrieren