HeadlinesBriefing favicon HeadlinesBriefing.com

RuneScape en 56k en 2004

Hacker News •
×

En 2004, jugé RuneScape con un modem de 56k que se caía cada vez que mi madre colgaba el teléfono. Un mundo 3D con hasta un par de mil jugadores funcionaba completamente en el navegador. Funcionaba gracias a un ejercicio sostenido de no desperdiciar bytes.

Al hacer clic en una casilla al norte, cada byte viaja desde el clic al servidor y luego a la pantalla de otro jugador. Fuente central, Varrock Square. Los detalles provienen de un cliente RuneScape 2 decompilado de 2004.

Las restricciones eran estrictas: un modem de 56k se sincroniza a 56 kilobits por segundo en descarga, aproximadamente 5 KB/s, con menos en subida. La banda ancha estaba disponible para 2000, pero la mayoría de los hogares del Reino Unido se quedaban con el acceso por línea directa hasta finales de los 2000. Los applets de Java se ejecutaban en una sandbox de seguridad, bloqueando sockets nativos sin procesar y UDP.

Cada byte viajaba por una sola conexión TCP, en orden, con sobrecarga por segmento. El servidor de juego avanza en ciclos discretos de aproximadamente 600 milisegundos. Después de la mano de obra de inicio de sesión, se establece una capa de encriptación pequeña.

Cada paquete comienza con un byte de opcode, cifrado con un cifrado de flujo llamado ISAAC. Existen dos flujos - uno de cliente a servidor, otro inverso. Ambas partes necesitan ambos flujos.

El cliente genera dos enteros semilla; el servidor proporciona los otros dos como parte de la mano de obra. El flujo de servidor a cliente suma 50 a cada palabra para mantener las direcciones separadas. En la salida, una línea cifra el opcode: putOpcode(int opcode) { this.putByte(opcode + this.outboundCipher.value()); } En la entrada, el espejo lo recupera: currentOpcode = (currentOpcode - this.inboundCipher.value()) & 0xFF; Solo el opcode está encriptado, protegiendo contra analizadores de terceros.

Enviar una solicitud de caminata desencadena una búsqueda en anchura de campo antes de cualquier networking.