1 puntos por GN⁺ 2025-10-20 | 1 comentarios | Compartir por WhatsApp
  • Presenta un proyecto de código abierto que descompila completamente el ROM de Nintendo 64 de Duke Nukem: Zero Hour
  • Este repositorio logró al 100% recuperar todo el código fuente del software original del juego
  • El usuario debe poseer la ROM del juego, y mediante una ROM original de EE. UU. o de Francia se pueden realizar compilaciones y pruebas completas
  • En comparación con los proyectos de descompilación existentes, destaca por su compatibilidad funcional completa y soporte de herramientas de depuración
  • Este proyecto es un recurso muy valioso para la investigación del motor de juego, modding, portado y análisis del motor

Significado y ventaja competitiva del proyecto

  • Duke Nukem: Zero Hour es un juego de acción muy conocido lanzado en exclusividad para la plataforma Nintendo 64
  • Este proyecto de código abierto reconstruye completamente el ROM de ese juego mediante descompilación en C, Python y otros lenguajes, a nivel de código fuente
  • A diferencia de otros proyectos de descompilación de N64, alcanza compatibilidad total, permitiendo compilar y ejecutar correctamente el ROM, depuración basada en código fuente y soporte para múltiples versiones
  • Posee un alto valor como material para investigar la arquitectura de motores de juego y el know-how del desarrollo de videojuegos de consola de los años 90
  • Varias herramientas automáticas de análisis/descompilación (asm-differ, mips2c, splat, decomp-permuter, etc.) se integran en el proyecto para maximizar la eficiencia del desarrollador

Principales funciones y estructura

Estructura general

  • El proyecto está conformado por varios lenguajes y separa sus partes en C (más del 95 %), Python, Roff, C++, Makefile y Shell
  • Directorios principales:
    • .github/workflows: configuración de CI y automatización
    • include, libs, src: gestión de código fuente y librerías del juego, administración de headers
    • tools: herramientas de análisis, extracción y conversión
    • versions: estructura para soportar simultáneamente múltiples versiones del juego, como US/FR
  • Mantiene un mantenimiento activo con alrededor de 370 commits

Resumen de compilación y uso

  • Soporte de entorno basado en Ubuntu 20.04 y Docker
  • Extracción del ROM, comparación bit a bit y soporte de modo NON_MATCHING
  • Soporta tanto la ROM en versión francesa como la de EE. UU., con opciones configurables según la necesidad del usuario
  • Uso de Docker y la extensión Mutagen para brindar compatibilidad entre varios sistemas operativos (WIN/Mac/Linux)

Depuración y herramientas de desarrollo

  • Soporte de depuración a nivel de código fuente basado en gdb y mupen64plus (actualmente con prioridad en Windows)
  • Integración con Visual Studio Code y la extensión Native Debug
  • Herramientas clave de automatización y análisis:
    • asm-differ: comparación de objetivo/fuente a nivel de ensamblador
    • decomp-permuter: reacomodo del código y puntuación automática
    • mips2c: conversión de ensamblador MIPS a C
    • splat: herramienta de análisis de estructura de ROM

Casos de uso

  • Posibilidad de aprovechar el código en proyectos de ingeniería inversa de videojuegos, portados, análisis de motores y mejoras de juegos clásicos
  • Muy adecuado también para fines de preservación histórica e investigación educativa
  • El mantenimiento y la actualización están activos para distintas plataformas y versiones

Conclusión

  • Este proyecto de código abierto es un caso poco común de divulgación completa del código fuente del software de videojuegos clásicos de consola de los años 90
  • Es un recurso valioso para investigadores de ingeniería inversa de juegos y consolas, desarrolladores noveles, y creadores de ports y fan games

1 comentarios

 
GN⁺ 2025-10-20
Opiniones en Hacker News
  • Me parece interesante que esté 100% decompilado en C, pero que todavía no estén completamente etiquetadas muchas funciones y variables porque fueron generadas automáticamente. Estaría divertido si alguien intentara hacer un port ahora
    • Me pregunto qué tan efectivo sería un LLM para el etiquetado. Me preocupa que haga perder tiempo con etiquetas incorrectas
    • Hoy en día herramientas como Ghidra se ofrecen gratis, así que “decompilado 100% en C” ya no se siente como algo tan impresionante
    • Como el código fuente del Build engine está publicado para uso no comercial, me pregunto si podría ayudar a mapear nombres de funciones y variables
  • Parece que Gillou68310 hizo el 99% prácticamente en solitario, así que me parece una dedicación realmente impresionante. The Legend of Zelda: Twilight Princess también va muy bien https://decomp.dev/zeldaret/tp
    • Ya que estamos, también quiero apoyar el proyecto de decompilación de Castlevania: Symphony of the Night. Va bastante bien (aunque todavía queda mucho por hacer) https://github.com/Xeeynamo/sotn-decomp
  • Zero Hour fue uno de los títulos imprescindibles de la era N64 y uno de los pocos juegos realmente buenos de la etapa tardía de la serie Duke Nukem. Tiene elementos de plataformas desafiantes y niveles bastante crueles, pero siempre me impresionó lo sólidos que eran los entornos y el esfuerzo por recrear el encanto de Duke 3D. El port reciente de Perfect Dark fue excelente, así que espero que esta decompilación reciba un tratamiento de calidad similar
  • Me pregunto por qué eligieron justamente Duke Nukem: Zero Hour
    • Zero Hour es una joya algo olvidada. Los juegos de Duke Nukem en PlayStation son clones de Tomb Raider y además fueron mal recibidos, pero Zero Hour está basado en el Build engine como el Duke Nukem 3D original. Aunque no llega a ese nivel, se podría decir que es el mejor Duke Nukem que no hizo 3D Realms. Su desventaja es que cambió a una cámara en tercera persona (aunque hay un modo en primera persona incompleto vía truco) y los controles no son muy buenos. Pero ahora que está el código fuente, hasta esos problemas se podrían arreglar
    • Buena pregunta. Eso sí, me hubiera gustado que hubiera capturas de pantalla para compartirlo con mis amigos. Cuando jugábamos antes era un paraíso de caos
  • Me pregunto por qué una persona (o grupo) dedica tiempo y esfuerzo a este tipo de proyectos de decompilación. Quisiera saber si se trata de grupos de jugadores aficionados que aman un título en particular, o si el objetivo es la preservación digital
    • Yo fui quien reimplementó Cosmo's Cosmic Adventure (DOS, 1992). La razón fue simple: quería entender cómo este juego lograba trucos gráficos tan geniales en hardware limitado (IBM AT). No es que el juego fuera extraordinario en sí, sino que tenía un valor sentimental porque fue una parte importante de mi infancia. Gracias a esa experiencia aprendí sobre la plataforma PC, el ecosistema de C de los 80 y mis propios gustos https://github.com/smitelli/cosmore https://cosmodoc.org/
    • Yo he dedicado muchísimo tiempo a hacer ingeniería inversa de firmware de sintetizadores vintage (más simple que los juegos modernos). Por ejemplo, he anotado los ROM de los sintetizadores Yamaha DX7 y DX9, y ese proceso amplió muchísimo mis habilidades de ingeniería. También fue divertido y me permitió conocer gente increíblemente brillante. Se siente como un rompecabezas técnico. De ahí también salieron mods de firmware muy interesantes anotación del DX7 anotación del DX9 DX97 y además escribí un tutorial sobre el proceso de ingeniería inversa tutorial. A veces también se siente como arqueología, porque alcanzas a ver la forma de pensar de ingenieros anteriores. Recuerdo que el N64 también era difícil de desarrollar en su momento
    • Puede ser simplemente amor por el juego. Yo también apreciaba muchísimo Mega Man Battle Network 2 cuando era niño, y gracias a ese juego aprendí inglés y me convertí en programador. Incluso conservo dos cartuchos físicos. A veces lo analizo con IDA e intento entenderlo poco a poco, aunque no tengo ni la habilidad ni el tiempo de la verdadera comunidad de ROM hacking, pero igual lo intento
    • Desde mi punto de vista, son personas que simplemente quieren hacerlo por sí mismas o que tienen un espíritu de desafío fuera de lo común
    • Este año di una charla en Game On Expo sobre la decompilación de Castlevania: Symphony of the Night https://github.com/xeeynamo/sotn-decomp. La motivación principal de la mayoría de quienes participan en este tipo de trabajos es que aman profundamente el juego. Después vienen razones como portearlo, modearlo, estudiar o preservarlo. Personalmente también me divierte el desafío (se parece a resolver un rompecabezas matemático). Para sostener este trabajo por mucho tiempo, hace falta entender la historia y la teoría de los compiladores, además de las presiones comerciales y de ingeniería de la época en que se hizo el juego. En el proceso a veces terminas entendiendo por qué ciertas partes del juego fueron hechas de esa manera. También hago streams trabajando en SotN, y si tienen preguntas, todo comentario en el chat es bienvenido https://m.twitch.tv/madeupofwires/home
  • ¡Qué gran proyecto! Pero… me preocupa un poco que esté en GitHub. Me da miedo que pronto le llegue un aviso de retirada
    • Le eché un vistazo rápido al repositorio y no parece haber material con copyright. Solo está subido el código que realiza la decompilación en sí
    • También hay decompilaciones de juegos de Nintendo publicadas en GitHub, así que no veo por qué esta tendría que ser retirada
  • Quiero destacar que aparece el aviso: “Esta es una decompilación de Duke Nukem Zero Hour para N64. Nota: debes tener el cartucho del juego para usar este repositorio”
  • Me pregunto si un LLM sirve para este tipo de ingeniería inversa
    • Se puede automatizar bastante del etiquetado con LLM. Incluso parece posible hacer “correcciones iterativas hasta que coincida con el binario”, aunque no he visto un caso bien documentado. Como referencia, el proyecto decompai sigue una idea parecida (aunque no exactamente igual a este proyecto). Yo lo probé, y cuando ya tienes cierta información previa, sirve bastante para estimar nombres de variables. Es especialmente útil para tareas aburridas y repetitivas como nombrar contadores o variables temporales. También puede inferir nombres de funciones observando patrones de algoritmos
    • No sé si la EFF ya emitió una postura oficial sobre el uso de LLM, pero creo que desde el punto de vista del copyright hay un riesgo legal. La decompilación es posible porque produce una nueva obra creativa, pero un LLM podría quedar fácilmente expuesto al argumento de que genera resultados derivados o no creativos. El hecho de que las empresas de IA estén pagando sumas enormes por licencias de datos de entrenamiento también complica el panorama. Yo evitaría usarlo por ese riesgo de copyright. Pero si la decompilación con LLM de verdad se vuelve fácil, seguramente pronto veremos nueva jurisprudencia
    • Creo que sí son bastante útiles. No son perfectos, pero ahorran muchísimo tiempo. Sobre todo para identificar funciones de librería o algoritmos conocidos, son más precisos de lo que una persona podría ser. Incluso reconocen código que quedó deteriorado tras pasar por compilación y decompilación
    • Estoy usando agentes mientras hago un port de un juego. Incluso teniendo el código fuente, muchas veces las cosas no salen bien. Como el LLM no suele querer portar muchas librerías, varias veces intenté reducir trabajo repetitivo y terminé con un proyecto lleno de stubs y suposiciones que acabaron enredándolo todo
    • No lo he usado personalmente, pero creo que ayudaría en mejoras localizadas como renombrar variables y funciones
  • Se menciona a propósito la advertencia de que “hay que tener el cartucho del juego para usar el repositorio”
    • Quienes usan consolas portátiles retro chinas legalmente tendrían que extraer sus propios ROM. Pero si compras una versión barata con 10 mil juegos incluidos, mágicamente todo se vuelve legal. Claro, como en realidad casi nunca castigan a nadie, este tipo de avisos se siente hasta tierno
    • En la práctica, pude usarlo perfectamente sin tener el cartucho del juego. Creo que el aviso es incorrecto
    • Eso es solo una advertencia legal, no un requisito real para que funcione
  • Todavía sigo esperando Duke Nukem Forever con ansias. Ya ni recuerdo cuánto tiempo ha pasado