HeadlinesBriefing favicon HeadlinesBriefing.com

RuneScape auf 56k 2004

Hacker News •
×

Im Jahr 2004 spielte ich RuneScape auf einem 56k-Modem, das jedes Mal abstürzte, wenn meine Mutter das Telefon aufhielt. Eine 3D-Welt mit bis zu einigen Tausend Spielern funktionierte vollständig im Browser. Es funktionierte dank einer durchgehenden Übung, Bytes nicht zu verschwenden.

Beim Klicken auf eine Feldkachel nach Norden reist jeder Byte vom Klick über den Server zum Bildschirm eines anderen Spielers. Zentraler Brunnen, Varrock Square. Die Details stammen aus einem decompilierten RuneScape 2-Client aus dem Jahr 2004.

Die Beschränkungen waren streng: Ein 56k-Modem synchronisiert sich mit 56 Kilobit pro Sekunde im Downstream, etwa 5 KB/s, mit weniger im Upstream. Breitband war bereits 2000 verfügbar, aber die meisten Haushalte im Vereinigten Königreich blieben bis in die 2000er Jahre auf Flatrate. Java-Applets laufen in einer Sicherheits-Sandbox, blockieren rohe native Sockets und UDP.

Jeder Byte reist über eine einzelne TCP-Verbindung, in Reihenfolge, mit Overhead pro Segment. Der Spieleserver läuft in diskreten Zyklen von etwa 600 Millisekunden weiter. Nach dem Login-Handshake wird eine kleine Verschlüsselungsschicht eingerichtet.

Jedes Paket beginnt mit einem Opcode-Byte, verschlüsselt mit einem Flusschiffer namens ISAAC. Es gibt zwei Ströme - einen vom Client zum Server, einen umgekehrt. Beide Seiten benötigen beide Ströme.

Der Client generiert zwei Seed-Integer; der Server stellt die anderen beiden als Teil des Handshakes zur Verfügung. Der Server-zu-Client-Strom fügt jedem Wort 50 hinzu, um die Richtungen getrennt zu halten. Beim Ausgang verschlüsselt eine Zeile den Opcode: putOpcode(int opcode) { this.putByte(opcode + this.outboundCipher.value()); } Beim Eingang stellt das Spiegelbild es wieder her: currentOpcode = (currentOpcode - this.inboundCipher.value()) & 0xFF; Nur der Opcode wurde verschlüsselt, um Drittanbieter-Parser zu schützen.

Beim Senden einer Laufanfrage wird vor jeglichem Networking eine Breitensuche ausgelöst.