HeadlinesBriefing favicon HeadlinesBriefing.com

RuneScape en 56k en 2004

Hacker News •
×

En 2004, j'ai joué à RuneScape sur un modem 56k qui plantait chaque fois que ma mère décrochait le téléphone. Un monde 3D pouvant accueillir plusieurs milliers de joueurs fonctionnait entièrement dans le navigateur. Cela fonctionnait grâce à un exercice continu d'économie d'octets.

En cliquant sur une tuile vers le nord, chaque octet voyage du clic au serveur puis à l'écran d'un autre joueur. Fontaine centrale, Place de Varrock. Les détails proviennent d'un client RuneScape 2 décompilé en 2004.

Les contraintes étaient strictes : un modem 56k synchronise à 56 kilobits par seconde en débit descendant, soit environ 5 Ko/s, avec moins en montant. Le broadband était disponible dès 2000, mais la plupart des foyers du Royaume-Uni sont restés sur le modem jusqu'au début des années 2000. Les applets Java s'exécutent dans une zone de sécurité, bloquant les sockets natifs bruts et UDP.

Chaque octet voyage sur une seule connexion TCP, dans l'ordre, avec une surcharge par segment. Le serveur de jeu progresse par cycles discrets d'environ 600 millisecondes. Après la poignée de main de connexion, une petite couche de chiffrement est mise en place.

Chaque paquet commence par un octet d'opcode, chiffré avec un chiffrement de flux appelé ISAAC. Deux flux existent - un client-serveur, un inverse. Les deux parties ont besoin des deux flux.

Le client génère deux entiers seed ; le serveur fournit les deux autres comme partie de la poignée de main. Le flux serveur-client ajoute 50 à chaque mot pour maintenir les directions séparées. En sortie, une ligne chiffre l'opcode : putOpcode(int opcode) { this.putByte(opcode + this.outboundCipher.value()); } En entrée, le miroir le récupère : currentOpcode = (currentOpcode - this.inboundCipher.value()) & 0xFF; Seul l'opcode est chiffré, protégeant contre les analyseurs tiers.

Envoyer une demande de marche déclenche une recherche en largeur avant toute networking.