¿Por qué muchos juegos carecen de soporte multijugador? Como estudiante de programación y con mi conocimiento de node.js, me doy cuenta de que no es tan difícil hacer un juego multijugador.

Esto es genial. De hecho, me reí un poco mientras leía algunas de las respuestas aquí. (Hola de nuevo Daniel Super!)

He estado trabajando intensamente en el desarrollo de juegos y aprendiéndolo durante los últimos tres años. Tengo un equipo a mi alrededor de 4 personas trabajadoras y apasionadas. Realmente construimos un juego en red en 48 horas durante un atasco de juegos, sin ninguna experiencia previa en redes.

¿Funcionó? Si. Algo así como. Teníamos la intención de tener un campo de batalla naval de buques de guerra vikingos capaces de dispararse rayos de ballesta el uno al otro. Al final, lo que tuvimos fue un juego de hasta 8 jugadores capaces de correr entre ellos alrededor de los bordes del mapa y disparar jabalinas. Las jabalinas en sí no tuvieron ningún efecto en otros jugadores, ya que las jabalinas no se conectaban correctamente. Además, si un jugador específico (el número 7, creo) intentara disparar una jabalina, y realmente golpeara a otra instancia de jugador en su propia pantalla, serían arrojados de regreso a la sala del vestíbulo. Estábamos entusiasmados, ya que era un gran logro, y las otras 60 personas en el atasco también estaban impresionadas de que pudiéramos hacer funcionar cualquier red.

Cuando decidimos llevar el juego más allá, pasamos los siguientes 6 meses para que el código de red funcionara correctamente con todos los componentes necesarios (lobby básico alojado por el jugador, sin seguridad). No publicamos porque había demasiados errores y demasiado código desorganizado e ineficiente.

Ahora con 3 años de experiencia y una mente naturalmente analítica y de resolución de problemas, podría concebir todos los sistemas para un juego multijugador (realmente haciendo esto para el juego actual de mi estudio), y como proyecto personal estoy diseñando sistemas para mi sueño proyecto: un MMORPG de mundo abierto con un planeta circunnavegable. Pero no tengo ni idea de por dónde empezar con la seguridad de la programación. Latencia y conmutación por error que he planeado. ‘Bots’ y piratear el juego del cliente para obtener lecturas de mapas es algo completamente diferente.

“¿Por qué muchos juegos carecen de soporte multijugador?”

“Me di cuenta de que no es tan difícil hacer un juego multijugador”

Oye, estoy de acuerdo contigo, no es tan difícil .

Pero, ¿qué significa eso?

Lo que probablemente quieres decir es:

la gente decía que la tecnología multijugador es increíblemente difícil, pero realmente puedo entender lo que está sucediendo y no fue tan difícil poner en marcha un prototipo simple.

Bueno, estoy de acuerdo contigo al 100%!

Me tomó solo un par de días cuando comencé a aprender el código MP para ejecutar el primer prototipo.

Ahora … Algunas cosas son fáciles de crear en MP y otras no. El multijugador por turnos es realmente fácil en estos días. ¡Realmente fácil!

Ahora, intente crear un juego popular, sistemas de servidor centralizados y, oh, el juego tiene que ser FPS y en tiempo real y todos deben sentir que están jugando en la misma habitación (no sienten latencia, ni deformación, etc.) …

¡Mierda! Ya no es tan fácil, ¿verdad?

“¿Pero dijiste que conseguiste que este MP de otro juego en tiempo real funcione en 3 semanas?”

Sí, pero es una cosa completamente diferente si un juego ha sido diseñado para ser tan fácil de implementar como un juego multijugador como sea posible cuando la física y el combate en sí se han diseñado con mecánicas que son indulgentes con los problemas de las redes como la latencia y permitir para pruebas de sincronización increíblemente baratas.

Incluso ese tipo de juegos eventualmente alcanzará un umbral después del cual los problemas se volverán altamente visibles para los jugadores.

Y luego el verdadero problema comienza con esos sistemas masivos y centralizados, especialmente los autorizados. Porque pronto te das cuenta de que, por ejemplo, si quieres un juego de estilo de competencia, simplemente no puedes aceptar que los clientes individuales serán pirateados y ejecutarán sus propios reveladores de mapas y demás. Lo que significa que tendrá que ir con autoridad y construir un cliente separado y construir todo tipo de cosas para verificar cómo limitar mejor la información disponible para el cliente y cómo hacer que todos los diferentes servidores trabajen juntos, etc.

Actualizar:

Estaba un poco cansado cuando escribí la respuesta y olvidé la razón # 1 por la que algunos juegos no tienen multijugador.

No todos los juegos son juegos multijugador. Un juego puede ser por diseño un juego para un jugador. Hay cosas que puedes hacer en un juego para un solo jugador que no funcionan en un entorno multijugador.

Por ejemplo, control del tiempo . No puedes permitir que los jugadores controlen la velocidad a la que progresa el modo multijugador.

Los turnos largos también son imposibles en el modo multijugador, tanto que generalmente tienes que diseñar cualquier juego por turnos para que los turnos no tarden demasiado. Es realmente molesto esperar 30 minutos para que el otro jugador simplemente termine el turno.

Terminando un juego largo. Si vas a intentar jugar durante 4 horas, ya es increíblemente difícil encontrar a otro jugador que pueda jugar contigo sin interrupciones. Ahora imagine muchos juegos para un solo jugador que pueden tomar varios cientos de horas para jugar. Algunos juegos, como la serie Total War, tienen “caídas en batallas”, que son un buen invento, pero esencialmente mientras estás en el modo de mapa de estrategia estás jugando solo y la mayoría de tus batallas no serán contra un jugador humano, si estás Por suerte, puedes tener algunas batallas contra un humano.

Balance de juego. ¡En un juego para un solo jugador puedes tener una experiencia mucho más rica! ¿Por qué? Porque, cariño, eres el héroe! En el entorno multijugador, generalmente estás emparejado con jugadores de aproximadamente el mismo nivel, por lo que en realidad estás perdiendo el 50% del tiempo, o más. Ni siquiera disfruto del modo multijugador personalmente. ¿A quién le gusta perder? Algunas personas lo hacen. Me gusta la historia y la experiencia. Un juego para un solo jugador está mucho mejor equipado para desafiar a un jugador lo suficiente mientras le permite ganar. Pero en línea debe preocuparse por equilibrar todo hasta el punto en que todas las opciones se sientan exactamente igual. En un solo jugador, puedes llevar un súper láser en tu bolsillo que mata todo al instante, pero puedes elegir conscientemente usar una motosierra porque es más fresca.

También hay más razones, pero pensé que la respuesta no estaba completa sin notar que no todos los juegos pueden ser multijugador porque ser multijugador en realidad arruina los juegos que se suponía que eran experiencias para un solo jugador.

Estás intentando resolver un problema sincrónico utilizando herramientas asincrónicas. Conecte 3 computadoras con diferentes cpu, gpu y velocidades de red e intente sincronizar un contenido de página web y comentarios de usuarios en constante cambio en 60 fps. El modo multijugador es uno de los temas más difíciles en el desarrollo de juegos.

Incluso si manejas la parte técnica con éxito, tendrás dificultades para reunir suficientes jugadores para proporcionar un ecosistema saludable para varios jugadores. Así que el modo multijugador es uno de los temas más difíciles en el marketing de juegos.

E, incluso si manejas todo eso, sigue siendo muy difícil equilibrar un juego multijugador. Una vez más, uno de los temas más difíciles en el diseño de juegos.

Por lo tanto, nos mantenemos alejados del modo multijugador a menos que estemos seguros de saber a qué nos enfrentamos.

Daré un acercamiento bastante general.

No, no es complejo implementar el soporte multijugador y ahora con tantos motores disponibles es bastante fácil.

Pero entonces ¿por qué no?

Comencemos hablando de CS: GO. El juego es multijugador en todos los sentidos. Pero tiene VAC habilitado en todo momento, lo que garantiza que los pitufos y los tramposos puedan mantenerse a raya.

No es fácil encontrar lagunas en todos y cada uno de los juegos. O tal vez los juegos no son tan exigentes para tener un sistema Anti Cheat.

Entonces se trata de LATENCIA.

Y ubicación del servidor. De nuevo para el CS: GO. La mayoría de los servidores estaban basados ​​en Singapur y no en India. Por lo tanto, el ping para jugadores del subcontinente indio fue mayor, lo que resultó en un retraso. Solo cuando los servidores estuvieron disponibles en India. Ha habido una experiencia mucho mejor.

Además, algunos desarrolladores independientes no quieren seguir esa ruta, ya que a veces es costosa. Aunque puedes crecer exponencialmente.

El modo multijugador asíncrono o por turnos no es terriblemente complicado en muchos casos. Podría implementar un servidor de ajedrez multijugador con relativa facilidad con algo como node.js.

Sin embargo, si quieres algo que sea en tiempo real y sincrónico, no es tan fácil. Ahora tiene que lidiar con problemas como la latencia (si solo recibo un mensaje de un jugador remoto cada 100 ms, ¿qué le muestro al usuario el resto del tiempo?), Sincronización (¿cómo me aseguro de que el mundo de juego de un jugador sea coincide con los demás, dados los problemas de latencia mencionados anteriormente), conmutación por error (¿qué sucede si mi servidor, o una de las máquinas del jugador, se cae?).

Si quiero que un servidor maneje la sincronización, ahora necesito ejecutar una versión separada del juego en el backend. Así que ahora, para ser eficiente, mi juego debe poder ejecutarse sin cabeza (sin una GUI). Si quiero que mi cliente de juegos tenga autoridad, necesito tener un sistema que defina un host y configurar un plan para la migración y la conmutación por error del host.

Hacer algo como esto correctamente puede terminar siendo casi tanto trabajo como hacer tu juego en primer lugar. Y, de hecho, todo esto es mucho más difícil de configurar y probar, simplemente porque necesita muchos andamios (y a menudo otras personas) para dar cuenta de todas las partes móviles.

Porque no todos los juegos interesantes son un juego multijugador interesante.

Y a veces, cuando juegas en el modo multijugador, debes renunciar a ciertas otras características amadas, y a veces no vale la pena.

Para el punto 1, un ejemplo (fuera de mi cabeza) sería Fez : la mecánica rotativa no funcionará con múltiples actores, y tampoco tiene sentido tener cooperativa, porque los objetivos en cada nivel generalmente son singular. Tampoco es exactamente una gran historia convincente.

Para el punto 2, un ejemplo sería The Elder Scrolls V: Skyrim . Lo que hace que Skyrim sea un juego atractivo para la mayoría de las personas es el motor de modificación. La gente puede agregar nuevo contenido y, por lo tanto, extender la jugabilidad del juego mucho más allá de lo que los desarrolladores habían hecho, pero sería una pesadilla para el multijugador implementado, ya que tendría que determinar la misma versión precisa de cada mod que se está utilizando para todos los jugadores que participan (y todos deben implementar exactamente las mismas modificaciones), sin mencionar la gran cantidad de problemas de equilibrio que el modding trae a la mesa para un juego multijugador convincente. El modo multijugador de Skyrim tendría que destripar o evitar por completo la plataforma de modificación, y eso francamente no es aceptable. Ha sido el punto de venta de la serie tener soporte para mods. El modo multijugador es secundario (y lo está haciendo el spin-off, ESO).

¿Conoces un pequeño nodo.js y te das cuenta de que no es tan difícil hacer un juego multijugador?

¡Incorrecto!

¡No sabes nada, Jon Snow!

Hacer un juego multijugador es difícil. No se trata solo de configurar un servidor web simple. Los juegos se ejecutan en una arquitectura de cliente de servidor, lo que significa que su servidor es responsable de ejecutar toda la lógica del juego a una velocidad de fotogramas completa y enviar todos los datos a cada uno de los clientes.

Agregue a eso la dificultad de sincronizar el juego cuando cada cliente tiene diferentes cantidades de latencia.

Muchos juegos no tienen multijugador en línea porque el multijugador en línea es realmente difícil. Cualquiera que diga lo contrario no sabe de qué está hablando.

Además de lo que ya se ha dicho, a muchas personas, incluido yo, no les gustan los juegos multijugador. Prefiero jugar contra la computadora. La estrategia basada en turnos, los juegos de rol basados ​​en turnos y similares son mis favoritos. No tengo los reflejos de un niño de 10 años adicto a la cafeína y la mayoría de las experiencias multijugador están orientadas a ese público. A medida que las personas de mi generación envejecen, espero que el mercado nos atienda más debido al poder adquisitivo y a la abundancia de tiempo libre.

Ah, la arrogancia de los estudiantes. Decir que sabes que no es difícil hacer un juego multijugador porque sabes que node.js es como decir que no es difícil construir un avión porque puedes hacer un avión de papel. Te hace ver un poco tonto a los ojos de las personas que realmente trabajan en estos sistemas, que son MUCHO más complicados de lo que puedes imaginar actualmente.

Por supuesto, si es tan fácil, estoy seguro de que solo harás uno y ganarás miles de millones al instante atrayendo a millones de jugadores, ¿verdad? ¿Derecho? 🙂

Como menciona uno de esos expertos, Dan lo golpeó en la cabeza. Conocías tan poco, garsshopper, que ni siquiera sabes lo que no sabes.

El modo multijugador sin escalabilidad ni seguridad es un juego de niños.

El modo multijugador con escalabilidad O seguridad es un trabajo y requiere la comprensión de cosas como la ocultación de la latencia, pero no es demasiado difícil para un programador experimentado.

El modo multijugador con escalabilidad Y seguridad es algo extremadamente difícil de lograr y requiere conocimientos y habilidades altamente especializados.

Eres un niño con un planeador de balsa que pregunta por qué lleva tantas horas aprender a volar un 727.

Hacer un juego multijugador puede ser bastante difícil, especialmente si el juego se creó inicialmente sin el multijugador en red en mente.

Desde una perspectiva de diseño, los desarrolladores tienen que equilibrar el juego y también considerar cómo se traducirían los elementos solo para un jugador en un entorno multijugador.

Desde el punto de vista de la codificación, hay mucho trabajo involucrado y agregar multijugador a un juego de un solo jugador generalmente es una tarea masiva donde a veces es más fácil simplemente reescribir el juego.

Los motores de juego con funciones de red agregadas hacen las cosas mucho más fáciles, descubrí que el motor Unity 3D, por ejemplo, hace que el modo multijugador sea increíblemente más fácil de poner en marcha una vez que lo entiendes.

Glyn Williams escribió una gran publicación sobre esto:

La respuesta de Glyn Williams a Todos escuchamos lo simple que puede ser la programación, pero ¿cuáles son algunos conceptos verdaderamente complejos con los que incluso los programadores experimentados luchan?

Es una publicación bastante larga, y vale la pena leerla, pero el punto principal es:

Es así de difícil.

Te sugiero que escribas un juego en red multijugador, luego regreses aquí con tus hallazgos sobre lo fácil que fue.

Porque el soporte multijugador requiere mucho esfuerzo. ¡No es solo un botón en el que haces clic y BAM! Tienes un juego multijugador. En primer lugar, debes escribir el código para apoyar el esfuerzo multijugador en el juego en sí. Luego, debes asegurarte de que tu juego y el equilibrio del juego funcionen para el modo multijugador. Entonces necesitas mantener una forma para que los jugadores realmente se conecten juntos. Esto cuesta más dinero. En algunos casos, obtienes eso como parte de la plataforma en la que estás, pero eso no siempre es cierto.