DOOM en Neo Geo: el port imposible homebrew que se está convirtiendo en realidad
Hay ports que simplemente no deberían existir. El de DOOM en Super Nintendo era una proeza técnica que rozaba lo milagroso. El de DOOM en Game Boy Color era un chiste con patas que de algún modo funcionaba. Pero DOOM en Neo Geo AES... eso ni siquiera se intentó en su día. Y con razón. El hardware de SNK, por potente que fuera en lo suyo, representaba una filosofía de diseño radicalmente distinta a la que necesita un motor de raycasting en tiempo real. Sin embargo, un desarrollador llamado sabino ha decidido que "imposible" es solo una cuestión de perspectiva, y el proyecto DoomGeo-AES está aquí para demostrarlo.
¿Por qué DOOM nunca llegó a Neo Geo?
Para entender el problema hay que comprender qué es, en esencia, lo que Neo Geo hace bien y lo que no puede hacer en absoluto. El canal Modern Vintage Gamer dedicó un vídeo completo a analizar esta cuestión, y la conclusión es brutal: el hardware de SNK es una máquina de sprites extraordinariamente capaz, pero carece de algo que DOOM necesita de forma fundamental: un framebuffer.
DOOM —y cualquier motor de raycasting estilo Wolfenstein 3D— funciona escribiendo píxeles directamente en un búfer de memoria que luego se vuelca a pantalla. Cada fotograma, el motor calcula qué píxel va en cada posición y lo pinta. Es bruto, directo y eficaz en hardware que permite ese acceso lineal a la VRAM.
Neo Geo no funciona así. Su chip de vídeo, el LSPC2-A2, es un compositor de sprites con capacidades de escalado hardware. La máquina puede mostrar hasta 380 sprites simultáneos con reducción/ampliación en tiempo real, pero no expone ningún framebuffer accesible a la CPU. No puedes escribir "pon este píxel en estas coordenadas". Tienes que hablar con el hardware en sus propios términos: control blocks de sprites, paletas, tiles pregrabados en ROM.
En palabras simples: Neo Geo es una máquina de 2D con sprites hardware de altísimo rendimiento. DOOM es un motor pseudo-3D que necesita pintar píxeles libremente. Son dos filosofías de renderizado que chocan de frente.
Las barreras técnicas concretas
Más allá de la ausencia de framebuffer, hay otros obstáculos que hacen del port algo especialmente complicado:
El procesador. Neo Geo lleva un Motorola 68000 a 12 MHz. Es un procesador perfectamente válido para la época —el mismo que usan Amiga, Mega Drive o Atari ST—, pero DOOM necesita mover enormes cantidades de datos de textura por píxel. Sin unidad de punto flotante y con esa velocidad de reloj, los cálculos de raycasting por columna de pantalla son muy exigentes.
La RAM. La consola base tiene 64 KB de RAM de trabajo. DOOM en PC necesitaba varios megabytes solo para los datos del juego en memoria. Los cartuchos Neo Geo podían llevar mucha ROM, pero la RAM disponible en tiempo de ejecución es extremadamente limitada para un motor de este tipo.
El modelo de renderizado. Como explicamos antes, todo tiene que pasar por sprites. No hay modo gráfico de baja resolución al que "bajar" para ganar ciclos de CPU, no hay forma de escribir directamente en el buffer de pantalla. Cualquier solución tiene que hablar el idioma del hardware: sprites, scaling, tiles.
DoomGeo-AES: la solución inteligente
Y aquí es donde entra la genialidad del proyecto. DoomGeo-AES no intenta hacer un port convencional de DOOM. No trata de replicar el motor de id Software píxel a píxel en una plataforma que no puede soportarlo. En cambio, adopta un enfoque completamente diferente: hacer que DOOM funcione como Neo Geo quiere que funcione.
El proyecto describe su técnica así: en lugar de un framebuffer, el renderizador usa sprite strips. Para cada una de las 80 columnas de la pantalla, el motor lanza un rayo contra el mapa 2D, mide la distancia perpendicular a la pared impactada y calcula la altura de esa columna. Ese valor no se usa para pintar píxeles: se usa para escribir el valor de vertical-shrink en el control block del sprite correspondiente a esa columna. El hardware de Neo Geo escala automáticamente ese sprite de textura hasta la altura calculada.
En otras palabras: el escalado hardware que Neo Geo usa para sus sprites de combate en 2D se reutiliza como motor de renderizado 3D por columnas. Las 80 columnas de pantalla son 80 sprites independientes que el LSPC2-A2 escala en tiempo real. La CPU solo tiene que actualizar unos pocos bytes de control por columna por frame, y el chip de vídeo hace el trabajo pesado de escalar texturas. Trabajo delicado, pero elegante.
El proyecto parte de un fork de NGRayEx, un raycaster de investigación para Neo Geo escrito por el usuario lantus, inspirado precisamente por el análisis técnico de Modern Vintage Gamer.
Estado actual del proyecto
DoomGeo-AES está activo y en desarrollo. Esto es lo que ya funciona a día de hoy:
El juego arranca con un menú de introducción con letras de bloque en la fix layer (la capa de texto de Neo Geo) y carga un mapa compacto de 16×16 habitaciones diseñado a mano que funciona de forma estable. El convertidor de WAD puede procesar los datos del E1M1 de DOOM original —incluyendo sectores, puertas, secrets, texturas y spawns— y transformarlos en estructuras compatibles con Neo Geo, aunque esa ruta experimental sigue en desarrollo.
El HUD es reconocible al instante: barra de estado de DOOM con la cara de Doomguy, indicadores de arma, ranuras de llaves y contadores de munición/salud/armadura. Las armas implementadas incluyen puño, pistola, escopeta, chaingun, lanzacohetes, rifle de plasma, BFG y motosierra, todas con sus sprites de psprite correspondientes cuando el IWAD los suministra.
El gameplay incluye recogida de objetos, llaves y puertas con llave, salidas, secrets, sectores de daño, monstruos con sus frames de rotación de DOOM correctos, proyectiles, explosiones de barriles y IA compacta. El movimiento usa comprobaciones de altura de jugador y de escalón al estilo DOOM para que las escaleras pequeñas sean franqueables pero los salientes altos bloqueen.
También hay un minimap en la fix layer, que se superpone siempre sobre los sprites sin coste adicional de renderizado.
Lo que aún falta es notable: el sistema de audio está completamente sin implementar (el chip YM2610 y el Z80 de sonido de Neo Geo son una historia aparte), y la conversión del E1M1 completo en una experiencia jugable todavía necesita trabajo. Pero para ser un proyecto de investigación en homebrew, el avance es impresionante.
La magia del hardware siendo usado contra sí mismo
Lo que hace especialmente fascinante a DoomGeo-AES desde una perspectiva técnica es que no fuerza al hardware a hacer algo para lo que no está diseñado. No hay hacks de framebuffer, no hay escritura directa a VRAM en momentos prohibidos, no hay trucos de timing al límite del colapso.
El escalado de sprites de Neo Geo existe para animar luchadores y personajes de acción con perspective scaling. DoomGeo-AES lo roba para simular la proyección perspectiva de columnas de pared. Es el mismo principio que usó la SNES para su port —también un tour de force de ingeniería creativa— pero adaptado a una arquitectura todavía más alejada de lo que DOOM necesita en teoría.
La aritmética del raycaster usa punto fijo 16.16. Las rotaciones emplean multiplicaciones de coseno y seno precalculadas. Todo el renderer escribe solo unos pocos control words por columna por frame. El hardware hace el resto. Es elegante de una forma que los ports convencionales rara vez pueden presumir.
Cómo probarlo
El proyecto está disponible en GitHub en github.com/sabino/DoomGeo-AES. El repositorio incluye un paquete para GitHub Pages que ejecuta la ROM directamente en el navegador vía EmulatorJS con el core FBNeo, así que no necesitas configurar nada para verlo en acción. Para compilarlo localmente necesitas el toolchain ngdevkit y un BIOS de Neo Geo (no incluido por razones de copyright).
Los controles en el mapeo de teclado por defecto son: flechas para moverse/girar, Z para el botón A (strafe con A+izquierda/derecha), X para disparar, A para ciclar armas, S para usar puertas. El minimapa se activa con Z+A.
Por qué importa este proyecto
En la escena homebrew hay dos tipos de proyectos: los que llevan software conocido a nuevas plataformas con ports directos, y los que tienen que reinventar la rueda porque la plataforma destino no tiene las ruedas que el software necesita. DoomGeo-AES pertenece claramente al segundo grupo, y eso lo hace mucho más interesante desde un punto de vista técnico e histórico.
Neo Geo nunca tuvo un port de DOOM en los 90 porque nadie en aquel momento tenía tiempo o interés de resolver el puzzle arquitectónico que supone. Hoy, con décadas de conocimiento acumulado sobre el hardware de SNK, con herramientas de desarrollo abiertas como ngdevkit y con el código fuente de DOOM disponible, alguien lo está resolviendo por puro amor al arte.
Si tienes curiosidad por los límites del hardware retro y por la ingeniería creativa que nace de esos límites, sigue el proyecto. Tiene todo el potencial de convertirse en uno de los homebrews más técnicamente singulares que haya corrido en una Neo Geo.

📤 ¿Te ha gustado? ¡Compártelo con otros jugadores!