Gracias a la sorprendente falla en Ocarina of Time, fue posible agregar modelos de Star Fox 64

imagen

A lo largo de los años de escribir artículos sobre juegos, hablé sobre muchos problemas técnicos sorprendentes , códigos desconocidos durante mucho tiempo , trucos con la ejecución de código arbitrario y búsquedas de contenido profundamente oculto dentro de juegos y equipos clásicos. Pero nada podría prepararme para este video de Twitch en el que una flota de Arwing volador de Star Fox 64 invade el mundo de Ocarina of Time para atacar a Link.

Esperas ver tal escena solo en una caricatura creada por un fanático o en un truco de ROM que a Nintendo le encanta tomar de Internet . Pero lo más sorprendente de este video es que muestra una versión no modificada de la ROM japonesa original Ocarina of Time usando la consola estándar y los controladores N64.

Toda la mañana descubrí cómo esto es posible. Para explicar esto, tendrás que profundizar en el núcleo de las instrucciones del lenguaje de máquina de Nintendo 64, la gestión de memoria Ocarina of Time y el proceso de desarrollo del juego de mediados de los 90. Si eres tan curioso como yo, únete a nosotros.

Enlaces obsoletos y código nuevo


Este sorprendente pasaje comenzó con el descubrimiento de un problema técnico importante en octubre del año pasado: el jugador Glitches0and0stuff usando emuladores y un estudio cuidadoso de las áreas de memoria de Nintendo 64 descubrieron una forma de manipular enlaces obsoletos en Ocarina of Time .

De hecho, la falla es que el jugador recoge el elemento y luego engaña al juego para descargarlo directamente de las manos de Link cuando cruza el umbral de una nueva ubicación de carga (por ejemplo, la habitación de al lado). En esta etapa, el juego libera el área de memoria ocupada por este elemento para que pueda usarse para otros objetos en el juego durante su carga. Pero al mismo tiempo, el juego piensa que Link está sosteniendo algo , por lo que continúa actualizando el puntero al "enlace desactualizado" en la memoria liberada, escribiendo datos que representan la posición y el ángulo de un objeto inexistente. Con una manipulación cuidadosa, este puntero se puede utilizar para "corromper" los datos del objeto recién cargado con valores arbitrarios.


Los luchadores espaciales no pueden compararse con Link.


Arwing de Star Fox 64 puede recibir daño y disparar a Link porque siempre están en el juego.


Apuntar con el botón Z facilita apuntar un boomerang en la parte inferior del Arwing.


El enlace contiene un objeto "vacío": la preparación para la falla se realiza con la ejecución de código arbitrario.


La parte más importante de la técnica es congelar la cámara en la posición de falla.


Un dispositivo para mantener los botones / posiciones necesarios del joystick analógico del controlador 3 para ir directamente a los títulos.


Después de diez minutos de ingresar el nombre del archivo, el código Arwing está listo para descargar

Inicialmente, este truco se usó simplemente para "estropear" el juego, por ejemplo, para cargar nuevos elementos en cofres del tesoro o para cambiar las posiciones de otros elementos dentro de la habitación (como se explica en detalle aquí ). Sin embargo, después de un tiempo, los jugadores descubrieron que se puede usar el mismo método para modificar los códigos de salto individuales del ensamblador , diciéndole al juego dónde debe buscar la siguiente instrucción al realizar ciertos eventos del juego.

Después de insertar el código deseado de esta manera, puede forzar al juego a ir al área de memoria que contiene los últimos valores de rotación conocidos para las tirachinas X e Y. Si estos valores se especifican exactamente, se interpretarán como otro código de salto que ejecuta una transición al área de memoria donde se almacena el nombre del archivo actual. Luego, este nombre de archivo se interpretará como un código de máquina N64 normal, por lo que el jugador puede moverse rápidamente a cualquier lugar del juego que necesite (por supuesto, si convierte correctamente los caracteres binarios del nombre del archivo a los códigos de operación correspondientes ).


Explicación de falla con un enlace desactualizado que se usó originalmente para reemplazar elementos en cofres.

El primer ejemplo serio de usar esta manipulación con códigos de transición fue cargar la escena del juego con subtítulos . Por lo tanto, el jugador estableció un nuevo récord mundial para el speedran del juego en la categoría "Cualquier%" . Para hacer esto rápidamente en el área inicial del juego, debes usar otros problemas técnicos, incluido el problema técnico de la cámara "caminar durante la conversación" , que te permite cargar y descargar piedras en el momento y lugares perfectos. Además, para esto, debe mantener ciertos botones y posiciones del joystick analógico de los controles conectados al primer y tercer puerto de Nintendo 64 para que sus señales se interpreten como un código de ubicación de escena con subtítulos.

Desbloquear Arwing


El método descrito anteriormente es bastante bueno si solo quieres ir a la escena. Pero tiene una seria limitación: el sistema de archivos Ocarina of Time está limitado a ocho caracteres, es decir, el nombre del archivo solo se puede convertir en un par de instrucciones de código de máquina. Afortunadamente, estos dos espacios de instrucciones también se pueden utilizar para eliminar prácticamente el límite de caracteres.

Esto se hace de una manera extremadamente confusa, descrita en detalle en este Pastebin y este video . Baste decir que usa el método descrito anteriormente tres veces, que elimina las verificaciones importantes del indicador de posición del nombre de archivo, y luego establece este puntero en un valor de posición negativo.


Explicación detallada de la ejecución de código arbitrario en Ocarina of Time

Como resultado, los jugadores tienen la oportunidad de ingresar un código de cientos de caracteres, lo que les permite precargar secuencias de instrucciones de máquina mucho más complejas para implementar el método de transición de código descrito anteriormente. Pero esto aún no es suficiente para codificar los gráficos, las animaciones y la lógica de juego necesarios para atacar a Arwing. Afortunadamente, Nintendo nos ayudó mucho al ocultar convenientemente todo este código Arwing en el fondo de todos los cartuchos de Ocarina of Time .

Por qué El diseñador gráfico y de personajes Satoru Takizawa le dijo a Iwata Asks en una entrevista de 2011 que era solo una forma de reutilizar el código para mover a uno de los enemigos en Zelda :

Volvagia es un dragón, por lo que se mueve y se mueve en oleadas. Acabo de entregarle al programador jefe Kazuaki Morita partes del modelo de dragón, e inmediatamente lo puso en movimiento. Para mí fue un misterio cómo tuvo éxito ... así que no pude resistir no preguntarle. Él respondió que era lo mismo que programar para Star Fox 64 . Hay una escena en este juego en la que otro luchador cuelga de la cola de Arwing, y los movimientos de vuelo del luchador son exactamente los mismos que los de Volvagia. Me sorprendió, fue un verdadero milagro para mí.



Un video de 2007 que muestra a Arwing volando sobre el bosque de Kokiri (se utilizan códigos y emulador de GameShark).

Después de copiar las animaciones necesarias para Volvagia, Morita parece haber dejado todo el bloque de código Arwing en los datos basura del juego. Hace muchos años, los investigadores de datos aprendieron sobre esto. Y durante más de una década, los jugadores han sabido cómo acceder a estas partes ocultas del código utilizando dispositivos trampa como GameShark , que cambian los valores en la memoria para reemplazar a los enemigos con Arwing.

Pero gracias a los trucos con las manipulaciones de memoria descritos en el artículo, ya no se necesita un dispositivo de trampa externo. El 23 de enero, el reproductor ZFG1 demostró esto de una vez por todas cargando Arwing usando la ROM Zelda no modificada y la consola Nintendo 64 estándar en una transmisión de Twitch. El resultado fue un juego en el que Arwing reemplazó todas las puertas, volando alrededor de Ling, atacándolo con disparos dañinos de blasters e incluso cayendo al suelo cuando se derribó.

La preparación para grabar este clip tomó más de una hora , durante la cual se crearon tres ciclos de ejecución de código arbitrario y en 10 minutos se ingresó minuciosamente el nombre del archivo para cargar Arwing. Pero al mismo tiempo, este clip fue la culminación de meses y años de trabajo de una comunidad obsesionada con el deseo de comprender y dominar completamente el juego clásico y sus problemas técnicos.

Además del valor de entretenimiento, el clip "Arwings in Zelda" demostró que la comunidad, un grupo de especialistas en computación, con suficiente tiempo y esfuerzo, puede hacer cosas increíbles con equipos y software de juegos clásicos.

Source: https://habr.com/ru/post/485908/


All Articles