[wip][multiplayer] arena3

B

PROLOGO

...

TRAMA

...

TECNOLOGIA

Entorno de desarrollo: VS Code + Webpack + Node

Estructura modular basada en workers (multihilo).

CLIENTE
Hilo principal: Core + comunicaciones P2P WebRTC
worker 1: Renderizado
worker 2: Físicas
worker 3: Multiplayer

SERVIDOR AUTORITATIVO
Node + Cannon + ws + simple-peer

ESTADO ACTUAL

Desarrollando la tecnología.

La intención es obtener un conjunto de módulos reutilizables (lo más parecido a un engine) que distribuyan la carga usando diferentes hilos del procesador.

Para esto se desarrollará un core especializado en mensajería entre workers.

FOCO DE DESARROLLO

Cliente, reforma módulo renderizado, ahora 100% worker side ✅
Cliente, reforma módulo core, añadido P2P WebRTC ✅
Cliente, crear módulo de sonido ✅
Cliente, crear fondo ✅
Servidor, física disparo ✅
Servidor, física "colliders iniciador de eventos" ✅
Servidor, física "colliders sólido móvil" ✅
Servidor, física ray casting ✅
Cliente, crear mecánica FPS ✅
Servidor, crear sub server espacio con física de vuelo, "control nave" ✅


Cliente, crear planeta ❌


PROBAR en ARENA3.SPACE

5
B

reservado

Leos

Devlog que llevo mucho tiempo esperando, lo seguiré de cerca!

1
B

La ventana izquierda es renderizando desde el hilo principal, la derecha es renderizando desde el worker.

Dependencias DOM en los loaders que no funcionan en workers, ahora mismo finalizando loaders personalizados libres de dependencias y con optimizaciones internas varias.

B

Recuperando capturas... test animador sincronizado.

B

Recuperando capturas... cameo MV

Jastro

Bienvenido al devlog! Que ganas de darle caña cuando se pueda hacer mas el gamba :D

1
voidlaw

Ojooo! Con muchas ganas de ver en que acaba este proyecto :eyes:

1
B

Update... finalizados loaders personalizados que eliminan las dependencias HTML DOM, ahora el render es 100% worker side.


Más focos de desarrollo:

Server:

  • Física, elemento sincronizado "control nave" ❌
  • Física, elemento sincronizado "disparo" ✅
  • Física, elemento collider iniciador de eventos ✅

Cliente:

  • Crear módulo de sonido ✅
  • Crear fondos animados basados en shaders ❌
  • Crear planeta ❌
B

Trabajando física server side...

1
B

Nueva animación "disparo"

3 2 respuestas
Jastro

#11 que chulo tio 10 / 10

1 1 respuesta
Hukha

#11 Hecha por ti?

1 1 respuesta
B

#12 #13 es de un pack... pero vamos, podría haberla hecho sin problemas... a mediados de los 90s ya las hacía similares sin todas las facilidades que hay ahora.

2 respuestas
Hukha

#14 Eres una puta navaja suiza

2 1 respuesta
Leos

#14 Algún dia me gustaría tomarme una cerve contigo, me imagino tu hablando sobre todo y yo viendote como un enviado de dios escuchando palabra a palabra todo

Hay muchas cosas que das por supuestas o fáciles que yo no acabo de entender ni como funcionan y me parece que haces maravillas xD

2
B

Creando nuevo módulo sistema de sonido...

1
B
1 respuesta
Hukha

#18 Necesita un chat para poder insultar al que huye de mi xD

1 1 respuesta
B

#19 tenía en mente algo similar al de @midgard en el bomb.town, con bocadillos encima de los players.

¿Tecla para insulto aleatorio?

3 1 respuesta
B

#20 Es una mierda cuando hay decenas de players en un mismo sitio, yo me arrepiento

Oye, así que usas cannon en server side, va guay?

1 1 respuesta
B

#21 el chat, si es por rendimiento gráfico, igual tiene que ver que implementas las burbujas vía elementos html, la página la tienes saturada y además elementos con transparencias.

Yo lo voy a implementar dentro del canvas... dentro de webgl.

Y si no es rendimiento gráfico, sino temas de red... no veo motivo para que de problemas.

Sobre Cannon, cumple con lo que voy a necesitar... para rendimiento puro miraría algo en C++.

Tú que estás con playcanvas... el problema con Ammo es que no está optimizado, es un port directo sin revisión humana...

Podría ser interesante si lo usas desde un worker, aunque personalmente no lo veo. Yo metería lo justo en webassembly, cálculos con matrices pesadas y poco más, no un engine entero.

1 respuesta
B

#22 Hay gente que se me ha quejado del rendimiento por los bocadillos, a mí personalmente no me afecta, pero tengo PC high-end.

Lo suyo sería implementarlo con canvas, sí.

Pero lo decía más bien porque cuando hay mucha gente charlando se sobreponen los bocadillos y al final no sabes a quién leer.

Ya, Ammo es sidote. Intenté usarlo en server side y causaba CPU leaks inclusive tras X horas activo.

Me había planteado C++ pero lo he tocado muy por encima y creo que la podría cagar muy fuerte, al final terminé tirando por un backend en C# que es el lenguaje que más domino.

El juego al principio ni siquiera tenía físicas en client side, era lo más óptimo en mi cabeza. Pero la gente empezó con las burlas de stadia y decidí implementarlas.. si no el delay autoritativo es muy gordo.

Por cierto, había un notas haciendo pruebas con Ammo en un worker y era la caña, pero el team nunca lo implementó en el engine. A mí me comentaron hace poco que van a implementar oimo y cannonjs como alternativas de físicas en PlayCanvas, plug n play, durante este año.

https://forum.playcanvas.com/t/alpha-webworker-wasm-physics-with-playcanvas/6689

1 1 respuesta
B

En arena3 por ahora, render, física y Websockets 100% worker side en el cliente.

B

"Mini hack", para evitar las "Chrome's autoplay policies", que impiden reproducir sonido sin la intervención del usuario, he empleado el siguiente código...

Tan sencillo como crear un iframe invisible temporal con allow = "autoplay" apuntando al archivo arena.mp3, que es un audio de 1s de duración "sordo". Desbloqueará la reproducción de audio sin necesidad de intervención por parte del usuario..

Una espera de 100ms desde el cargado de la página debería ser suficiente para reproducir audio.

2 1 respuesta
B

#25 Hombre tampoco hace falta recurrir a chapucillas así, haces que la intervención sea clicar el body y a tomar viento jajaja al menos es como lo hago yo

1 respuesta
B

#26 una de las features que estoy desarrollando es la ausencia de precargas.

La carga (sea desde caché previa o no) se realiza y computa en background al mismo tiempo que ya estás jugando el mapa.

El motivo es lograr sensación de instantáneo... abrir la página y poder escuchar la música de fondo sin intervención del user ensalza esta sensación.

Intento que sea una característica/firma del arena3.

1
B

Nueva animación, tecla MAYS para correr.

  • física 100% server side (60 ticks/s server, 20 ticks/s interpolados cliente)
kesada7

Soy un rebelde que lo ha abierto en Opera y funciona correcto xD

NO puedo andar hacía atrás! Quiero poder andar hacia atrás mientras disparo!! xD Siempre mola ver estas cosas que haces, a ver cuando terminas una y podemos echarnos todos unas partidas jaja de verdad entre nosotros MV tournament

1
B

Añadido el equivalente al "Trigger Collider" de Unity para iniciar eventos (sincronizado desde el server).

3

Usuarios habituales