Quake II Rerelease Game Source - Código del juego para la reedición de Quake II 2023
(github.com/id-Software)- Código fuente que contiene el código del juego de la reedición de Quake II 2023 y el código original del juego como referencia, permitiendo a los usuarios crear mods del juego
- Los mods pueden cargarse en la reedición del mismo modo que en el juego original: usando
+set game mymodal ejecutarlo o ingresandogame mymoden la consola durante la ejecución - Para evitar modificar los archivos originales del juego, se recomienda instalar los mods en el directorio
%USERPROFILE%\Saved Games\Nightdive Studios\Quake II - La reedición usa una nueva API para la comunicación entre el servidor y los módulos de juego, e introduce un módulo ligero de juego del lado del cliente, similar al módulo
cgamede Quake III Arena, para poder cambiar comportamientos del cliente que antes estaban hardcodeados - La base de código combina los módulos de juego
baseq2,ctf,rogueyxatrixdel juego original, y requiere un compilador C++17 - La compilación solo fue probada con Clang, VS2019 y VS2022; puede compilarse tanto con C++17 como con C++20, y al usar C++20 se puede omitir la dependencia de
fmtlib - Las dependencias son fmtlib y jsoncpp, y pueden instalarse con
vcpkg install jsoncpp:x64-windows fmt:x64-windows - Las DLL de la reedición podrían no cargar correctamente los mapas de las expansiones originales, y en algunos casos los mapas fueron modificados para resolver conflictos de
spawnflags - Los mods existentes podrían migrarse para ajustarse a los cambios en la interfaz de exportación del juego, pero debido a cambios importantes en la estructura y el layout para soportar todas las expansiones en una sola base de código e incorporar nuevas funciones, podría ser necesario reescribirlos al usar la nueva base de código
- La lógica interna de la DLL del juego fue ajustada a un tickrate de 40 Hz en lugar de los 10 Hz del motor original; se eligieron 40 Hz por el equilibrio entre pasos de 25 ms y consideraciones de ancho de banda y CPU
- El sistema de guardado registra los datos de nivel y de juego en JSON UTF-8 en lugar de usar offsets de punteros y copias de memoria, y ya no interactúa directamente con el sistema de archivos
- La reedición de Quake II usa el protocolo de servidor versión 2023; la mayoría de los mensajes son retrocompatibles, pero algunos fueron ajustados para nuevas funciones, funciones modificadas y límites aumentados
- id Software no puede brindar soporte para este lanzamiento y recomienda usar recursos impulsados por la comunidad
1 comentarios
Opiniones en Hacker News
Quake II fue mi primera experiencia escribiendo C.
El código era claro, consistente y directo, y aunque no diría que es el mejor código fuente que he leído hasta ahora, sí me puso la vara alta. Después vi mucho código raro en el código fuente de varios juegos, como anidamientos que se salían por el lado derecho de la pantalla o funciones gigantes que hacían mil cosas, y eso fue una lección temprana de que también se pueden hacer cosas geniales con código simple.
A fines de los 90 y principios de los 2000 daba clases de VR para niños usando Quake y Quake II. Teníamos visores de VR y varias PC con Q.E.D. o Qoole, y hacíamos que estudiantes de 12 a 14 o de 14 a 18 años crearan sus propios juegos de realidad virtual.
En la práctica, hacían niveles de Quake/Quake II sin monstruos ni armas, y usaban triggers dentro del nivel para mostrar mensajes en pantalla y contar una historia. Un equipo hizo un nivel en el que había que cruzar slime y activar una bomba con un botón para drenarlo; otro equipo hizo un laberinto 3D de agua flotando en el espacio para atravesarlo nadando. Todavía tengo en el disco duro algunos niveles creados por estudiantes, aunque algunos ya no corren bien.
Para la clase hice un mod que daba una pistola de bengalas en lugar del blaster. Básicamente era el blaster, pero con efectos de sonido distintos, sin modelo de arma, y modificado para que los proyectiles se vieran afectados por la gravedad, rebotaran y se apagaran después de cierto tiempo. Si hubieras estado en esa clase, quizá no habrías podido probar el visor, porque no siempre funcionaba correctamente.
Los comentarios dentro de las funciones son relativamente escasos, y si no tienes una comprensión sólida de gráficos 3D, aparecen con frecuencia expresiones casi crípticas que te dejan desconcertado. Es esperable, viniendo del trabajo de un pionero de la industria como Carmack, pero para seguirlo con confianza se necesita mucho conocimiento previo y cierta inclinación matemática.
Antes escribía crónicamente código macarrónico, donde 25 líneas de código servían como esqueleto para una docena de funciones, y encima de eso se apilaba otra docena. Corría rapidísimo, pero la deuda técnica se acumulaba a gran velocidad, y al final esas funciones se volvían intocables por el riesgo de romper muchas de las cosas montadas encima.
Intentaba explicarlo con comentarios, pero la comunicación no era buena: escribía qué hacía la función, no cómo funcionaba. Cosas como “procesamiento de tabla SINE”, “desfragmentación de fragmentos de tabla”, “interpretación binaria”. Todos decían: “¿Qué diablos es esto? Pero vaya que es rápido”, y creo que si hubiera sido en otro campo que no fueran los videojuegos, ni yo ni el producto habríamos durado mucho.
Me sorprendía que juegos exitosos, divertidos y suficientemente estables se hubieran lanzado con código que por detrás era un completo desastre. Si esa basura armada a las apuradas también puede generar suficientes ganancias, a veces me cuestiono el esfuerzo y el tiempo que dedico a evitar el caos.
Me reí con este pasaje: https://github.com/ESWAT/john-carmack-plan-archive/blob/mast...
En el .plan de John Carmack del 31 de enero de 1997, cuenta que fue a una concesionaria Ferrari para comprar un F355 nuevo como auto “razonable”, vio un F40 justo enfrente y terminó comprándolo. Después también escribió su plan de regalar su primer Ferrari como premio al ganador de un torneo de Quake, porque ya tenía demasiados Ferraris.
El premio era un 328 GTS modelo 1987 con turbo, que había aparecido en la revista Turbo en enero de 1994; en el dinamómetro de chasis daba 360 hp en las ruedas traseras, tenía motor nuevo y pintura nueva, aunque el interior necesitaba algo de trabajo. También pensaba dar efectivo para cubrir impuestos y seguro.
Por contar una anécdota de Quake II: fue el primer juego de disparos en primera persona que terminé de principio a fin.
Lo jugué durante una semana en verano cuando fui a visitar a un amigo que vivía en otro estado; de no haber sido así, creo que jamás me habrían dado permiso. Al empezar, como solo había jugado DOOM, usé los mismos controles, y sorprendentemente funcionaban, así que avancé sin pensarlo mucho.
Entonces, de pronto, la vista quedó fija en el techo y me confundí por completo. Resultó que había tocado el mouse, y después de trastear un buen rato entendí el concepto de controlar la vista con el mouse. A partir de ahí el juego se volvió mucho más fácil.
No había internet, ni mi amigo ni yo sabíamos sobre mirar con el mouse, y nunca habíamos visto a alguien jugar un FPS 3D de verdad. Hoy ese conocimiento está tan difundido que cuesta imaginar lo extraña y alienígena que era en ese entonces la interfaz de los juegos. Me alegra que el código fuente esté disponible.
[0]: https://github.com/id-Software/Quake-2
[1]: https://github.com/id-Software
Fue alrededor de 1999, en la ComicCon de Roma, Italia, justo cuando Half-Life acababa de entrar en gold master y se había publicado una demo multijugador. Al menos 20 personas estaban jugando Half-Life multijugador por LAN, todas usando también el mouse. Era una locura.
Después fui a muchísimas LAN parties hasta 2005, pero el matchmaking online terminó matando QuakeNet y su cultura social.
Ah, qué nostalgia.
En 1999, Quake II era el juego que jugaba; literalmente, casi el único. Le dediqué una cantidad enorme de tiempo a QII y escribí mi primer código haciendo mods.
No es exagerado decir que Quake II me convirtió de usuario de computadoras en programador. Marcó el rumbo de mi vida adulta y de mi carrera.
Al hacer mi primer mod aprendí cálculo vectorial, a entender una base de código existente y a integrar builds automáticos para probar rápido. También toqué un poco la creación de mapas y el arte 3D, pero pronto me di cuenta de que no era artista ni diseñador.
En esa época no tenía ningún control de versiones ni política de backups, así que perdí todo el código original. El siguiente juego con el que me obsesioné de forma parecida fue Tribes 2, y el scripting y modding que permitía eran realmente increíbles.
https://xn0.co/Xeno-Mod_1.9_Setup.exe
¡Obviamente todos en HN van a descargar y ejecutar un ejecutable de cualquier origen de internet! Pero si tienes el QII original y te da curiosidad, es seguro ejecutarlo.
Homenaje: http://guake-project.org/
Tremendo; me transportó directo a los 90. Más precisamente, estoy hablando del primer Quake.
Tenía una PC en el piso de mi cuarto, creo que era una Pentium 166MMX, y un amigo trajo una máquina parecida, algo más rápida, como de 233. No teníamos tarjetas LAN.
Usamos el viejo cable paralelo de mi padre para engañar a Windows y hacerlo creer que era una conexión LAN, y funcionó lo suficientemente bien como para jugar durante varios días. Luego nos aburrimos un poco y nos metimos en la escena de modding, aunque no creábamos nada nosotros: descargábamos cosas publicadas y las probábamos. Nunca voy a olvidar Girobot y KQP (Killer Quake Patch).
Los bots de Girobot eran bastante fuertes, siempre que no se quedaran trabados en el terreno. La verdadera mina de oro era KQP, que agregaba todo tipo de mods, armas y sistemas de bots disparatados. La Vampire Gun hacía que el jugador alcanzado muriera deshaciéndose lentamente, pero no demasiado lento, en pedazos de carne, y me hacía reír a carcajadas cada vez. Extraño mucho los 90.
Por cierto, entiendo que KQP también incluía ZeusBots.
[1] https://github.com/Jason2Brownlee/QuakeBotArchive
Vi a gente quejarse en otros lados de que la reedición no tiene versión para Linux, pero publicaron el código fuente así y dice que fue probado con clang. Un gran aplauso para id por mantenerse fiel a sus principios.
Creo que, como el código anterior también era de su propiedad, no habrían tenido obligación legal.
Hay demasiados juegos que ya no se venden y que no se ejecutan en stacks modernos de software y hardware.
Me gustaría que existiera una ley que dijera que, si durante 20 años no publicaste parches para que un software funcione en nuevas plataformas, entonces, por su importancia cultural, deberías liberarlo como open source.
Me da curiosidad qué opinan sobre usar _t como sufijo de tipo en C/C++, como en este código fuente.
Según entiendo, está reservado para tipos definidos por el lenguaje, pero nunca he visto una alternativa razonable. Sin el sufijo, el código a veces queda raro. Por ejemplo, para un tipo personalizado de “viewport”, creo que
viewport_t viewport;es mejor queviewport viewport;.Normalmente no me importa tanto como para oponerme, así que nombro los tipos como lo pida la guía de estilo. El prefijo
tes peor, y agregar la palabra completatypedeftambién es peor._tfue POSIX, no C.Aun así, trabajando con la base de código de id Tech se me pegó la costumbre de
_s/_t, y decidí que no me molestaba que mi base de código en C quedara marcada para siempre como “no compatible con POSIX”. Lo que sea que eso signifique en la práctica. En C++ simplemente uso InitialCamelCase.under_scorespara las variables. Terminan apareciendo cosas comoViewport viewport;, pero al menos es fácil ver queViewportes un tipo._type.Curiosamente, una base de código enorme de un producto embebido con un OS personalizado no usa tipos como
uint32_tpara enteros de ancho fijo. En su lugar, un header común de la empresa defineuint32y similares, sin el sufijo_t. No sé por qué se tomó esa decisión.En mi época de crecimiento, este juego lo era todo para mí. Me presentó por primera vez a los clanes, los ladders y una verdadera cultura de juego online.
Mi mapa era The Edge, y mis armas eran el railgun o el lanzacohetes. En ese entonces era conexión telefónica, así que era clave encontrar un servidor con buena latencia. Lo más molesto eran quienes usaban esa arma que causaba lag a todos.
Sé que Q3 es un juego más grande que perfeccionó el género, pero mi favorito siempre será Quake 2. También tenía un single-player sólido y expansiones, y la sensación de velocidad era perfecta para mí. Con la llegada de Q3, todo se volvió demasiado rápido.
VQL se siente mucho más cercano a Q2, mientras que PQL está más cerca de CPMA o QuakeWorld. Como bonus, The Edge también se puede jugar en Quake Live.
Si eres fan de Quake 2 y tienes acceso a un Oculus Quest 2, te recomiendo probar Quake2Quest. Se siente realmente distinto correr en persona por esos mapas en los que pasé tantísimo tiempo antes.