Nebula Crash — autos chocones espaciales, sin armas, solo impacto
Leo Brando
@leo_brando_
Multijugador masivo en tiempo real en un sistema estelar
Abres la URL, escribes un nombre, pulsas JUGAR y estás pilotando una nave low-poly por un sistema estelar compartido en menos de diez segundos. Sin registro, sin login — en el espíritu de fly.pieter.com.
No hay armas. Solo pilotar y chocar: el que impacta más rápido destruye al otro.
Un monorepo con tres paquetes y una única fuente de verdad de física y protocolo en shared/, de modo que la predicción del cliente calza exactamente con el servidor autoritativo.
· Servidor — Node + TypeScript vía tsx, física a 20 Hz y snapshots a 20 Hz. Procesa cada input con su propio dt para reconciliación exacta, aplica efectos ambientales (calor solar, gravity assist, overcharge de cinturón, wormholes), resuelve colisiones entre jugadores, asteroides y NPCs, y construye snapshots delta por cliente con interest management (spatial hashing de 4 km, radio de 8 km). · El transporte está abstraído — ws + http de Node por defecto para que siempre arranque, con uWebSockets.js como drop-in opcional para escalar (TRANSPORT=uws). Ambos comparten las mismas rutas HTTP. · Protocolo binario — opcode de 1 byte más payload, posición cuantizada a int16 relativa al chunk, rotación como quaternion smallest-three en 32 bits, y delta compression que solo envía los campos que cambiaron, con spawns y removidos explícitos. · Cliente — Three.js + Vite. Predicción y reconciliación por número de secuencia, buffer de interpolación de 100 ms para los remotos, InstancedMesh para 2.500 asteroides, LOD en planetas, partículas con pooling, calidad auto-ajustable, HUD con radar esférico y minimapa, y audio procedural vía Web Audio. · Redis sostiene los leaderboards (diario, semanal e histórico con TTL), los contadores de ads y los referidos — con un stub en memoria tras la misma interfaz cuando no hay Redis. · El sharding existe como interfaces; el MVP corre en un solo nodo.
- Three.js
- Node + TS
- binary protocol
- Redis
- uWebSockets.js
1 comentario
@javier hace 2 meses
smallest-three para la rotación, buena
▲ 7