paint-brush
Construyendo un visor de niveles para The Legend Of Zelda - Twilight Princesspor@hackerclz1yf3a00000356r1e6xb368
Nueva Historia

Construyendo un visor de niveles para The Legend Of Zelda - Twilight Princess

por Tommy6m2024/08/03
Read on Terminal Reader

Demasiado Largo; Para Leer

Comencé a programar un visor web BMD para Twilight Princess (Nintendo GameCube) porque amo este juego y como productor de juegos, me fascina analizar niveles y sumergirme en los detalles de cómo se hicieron.
featured image - Construyendo un visor de niveles para The Legend Of Zelda - Twilight Princess
Tommy HackerNoon profile picture
0-item


Este proyecto es definitivamente uno de los más avanzados que tengo. Comencé a programar un visor web BMD para Twilight Princess (Nintendo GameCube) porque amo este juego y como productor de juegos, me fascina analizar niveles y sumergirme en los detalles de cómo se hicieron. Este proyecto es una forma de explorar esa pasión y obtener una comprensión más profunda del juego que amo. Es una experiencia de aprendizaje desafiante y gratificante. Estoy emocionado de ver adónde me llevará este proyecto y qué nuevos descubrimientos haré a lo largo del camino. Hasta ahora este proyecto me llevó meses y meses de investigación. Investigación que se basa en el trabajo de más de 20 personas más que investigaron y compartieron sus conocimientos y hallazgos sobre rarc, bmd, gcm yaz0, j3d, tev etc. Me encontré con una persona a la que anoté para darle crédito:


Gracias a: ("LordNed", "thakis", "Jasper St. Pierre", "Kiwi", "Dolphin Emulator Team", "Gamma", "Zan") - ¡por sus esfuerzos pioneros!

Agua, niebla y texturas animadas son características actualmente en la hoja de ruta.

Demostración

El programa fue programado usando three.js y webGL. Se ejecuta a 60 fps constantes en el navegador Chrome. Desafortunadamente no puedo compartir el Visor interactivo (modelos, habitaciones, etc.) con ustedes porque no quiero ver hasta qué punto están los límites para el uso legítimo de la investigación. Disfruta de mi montaje:


https://api.fenixfox-studios.com/assets/d43523dd-5cbe-4da4-9c7d-2d275690050a

Especificaciones

BMD y BDL son los formatos de archivo utilizados por Nintendo para almacenar datos de modelos en sus juegos de GameCube y Wii. Son parte de la biblioteca J3DGraph de Nintendo, que es un componente del conjunto de herramientas JSYSTEM más grande. BMD apareció por primera vez en el juego Luigi's Mansion. En ese entonces era el único formato de modelo utilizado en Super Mario Sunshine. Wind Waker introdujo además el formato BDL, que es una extensión de BMD con una sección adicional para instrucciones materiales FIFO llamada MDL3. MDL3 se utiliza para mejorar la eficiencia de renderizado. Super Mario Galaxy 2 fue el último juego en utilizar este formato de modelo.


JSYSTEM es un conjunto de herramientas de desarrollo de juegos patentado que utiliza Nintendo para crear juegos para sus consolas. Incluye varias bibliotecas y herramientas para tareas como modelado 3D, animación y física. J3DGraph es una biblioteca dentro de JSYSTEM que proporciona funciones para manejar gráficos 3D y es responsable de los formatos de archivo BMD y BDL. BMD significa Binary MoDel y BDL significa Binary Display List.


El kit de herramientas JSYSTEM fue descubierto por ingenieros inversos y modders de juegos a principios de la década de 2000, cuando comenzaron a analizar y descompilar el código de los juegos de Nintendo GameCube y Wii. Descubrieron que muchos de los juegos compartían estructuras de código y bibliotecas similares, lo que les llevó a sospechar la existencia de un conjunto de herramientas de desarrollo común. Después de mucha investigación y experimentación, pudieron identificar y extraer las bibliotecas JSYSTEM de los juegos y comenzaron a documentar y aplicar ingeniería inversa a sus diversos componentes, incluida la biblioteca J3DGraph y los formatos de archivo BMD y BDL.


A medida que creció la comprensión de JSYSTEM, los modders comenzaron a desarrollar sus propias herramientas para trabajar con el formato JSYSTEM y comenzaron a crear sus propios modelos y texturas personalizados e incluso a crear nuevos juegos utilizando las bibliotecas de JSYSTEM. Esto llevó a la creación de una vibrante comunidad de modders que continúa existiendo hoy en día, y muchos modders comparten sus hallazgos y herramientas en línea.

Desarrollo

Al principio, no estaba realmente interesado en los formatos de contenedor *.dol o *.gcm reales porque otras personas ya habían hecho un gran trabajo proporcionando herramientas listas para usar (más tarde creé el lector gcm). Después de buscar un poco, encontré carpetas que parecían contener cosas interesantes, como habitaciones y otros elementos. Grandes áreas, como Faron Woods, se dividieron en partes y se guardaron en archivos separados, que luego se fusionarían para formar el área completa.


Pero quería empezar fácil. ¡Quizás algo sencillo! Después de descomprimir la mayor parte del contenido de la carpeta, ordené los archivos por tamaño y encontré un objeto súper simple. Cuando revisé el archivo en HexWorkshop , me topé con marcadores como VTX, INF, DRW y SHP. Por las posiciones de los vértices, me di cuenta de que era una caja plana con un simple pomo de puerta. Pronto me di cuenta de que era la puerta del templo en el lecho del lago.


Sabía cómo se vería el objeto y sabía dónde buscar la información básica, como las coordenadas de los vértices y la información de la textura.


Documentación en formato BMD


Debe tener cuidado ya que parte de la información es simplemente incorrecta para su caso. Ciertos atributos eran simplemente diferentes de lo que dicen esos médicos. ¡Pero tener una hoja de formato como esa es todo lo que necesitas para extraer un modelo 3D y su textura!


Después de mi intento exitoso de extraer al menos un objeto simple, pensé que sería hora de cavar más y abordar un área completa. Armado con el mismo algoritmo que acabo de escribir, elegí el archivo llamado R00_00. Esperaba que fuera Ordon Village o Faron Woods. Pero eso no importó porque lo único que obtuve fue un montón de basura. Claramente se trata de un caso de orden de vértices incorrecto. ¿Puedes saber mirando esta imagen qué habitación es?


Forma por forma, poco a poco probé las aguas. Aquí y allá empezaron a aparecer acantilados y lápidas. Quedó claro que estaba mirando el área del Cementerio Kakariko.


Después de bastante tiempo, pude producir este resultado: faltaban ciertos objetos, algunas caras estaban invertidas y ni una sola textura parecía estar aplicada correctamente.


La solución fue algo confusa. Aunque ciertas formas tenían índices de materiales específicos definidos, no tenían una relación directa de 1:1. En su lugar, había que mirar la jerarquía de escenas definida en la sección INF del archivo BMD. Esta jerarquía consistía en un árbol de nodos que podían representar una forma o un material. Normalmente, la jerarquía comenzaría con un material, seguido de algunas formas. Por ejemplo, es posible que vea algo como (mat1, shp2, shp5, shp6, mat2, shp1, shp12...). En este caso, las formas 2, 5 y 6 usarían todas el material 1, y así sucesivamente.



Bueno, genial, pero todos los que alguna vez jugaron ese juego podrían notar que los materiales no lucen bien. Los colores están apagados, no hay mezcla entre los materiales y, en general, se ve bastante oscuro. A estas alturas me habría sumergido en la parte más alucinante de todo esto. GameCube utiliza etapas TEV, o etapas de Texture Environment, para manejar estas tareas. Las etapas TEV son responsables de mezclar texturas, gestionar colores y aplicar efectos de transparencia. Tenga en cuenta el hecho de que GameCube realmente no admitía efectos de transparencia como los conocemos hoy con dos pasadas de renderizado y los objetos lejanos renderizados primero. Hay algunos repositorios de GitHub, algunos artículos, algunos hilos del foro. ¡Consigue tanta información como puedas!


Una parte más importante que necesitaba agregar eran los efectos atmosféricos como niebla, floración y nubes. Hasta este momento no podía crear con éxito los efectos de niebla y floración, pero encontré la sombra de la nube y los puse en un escenario TEV de combinación. Todavía estoy buscando las coordenadas UV correctas para las nubes.


El resultado final de esa sala sería este: (En realidad, tomó bastante tiempo llegar hasta aquí)


Conclusión

Este proyecto ha sido un viaje increíble. Dedicar mi tiempo a descubrir cómo las personas inteligentes resolvieron las limitaciones técnicas del pasado me ayudó a apreciar la compleja belleza de Twilight Princess. He progresado mucho, pero todavía hay una lista enorme de cosas por explorar e implementar. Planeo seguir trabajando en este visor, agregando funciones como niebla, BTK (animación de textura) y otros efectos atmosféricos para hacerlo lo más preciso e inmersivo posible.