Final Fantasy VII: Corrección del bug del Elemento W


Si alguna vez has jugado a
Final Fantasy VII, seguramente conozcas el bug de la materia Elemento W. Es un error que ha acompañado al juego en casi todas sus versiones y que muchos jugadores lo consideran ya como algo normal dentro del mismo juego.

Sin embargo, la historia real detrás de este error es mucho más interesante de lo que parece. El famoso glitch de duplicación no existía en la primera versión japonesa de Final Fantasy VII. De hecho, el problema original era exactamente el contrario: ¡te hacía perder objetos!

Durante años se pensaba que todas las versiones de Final Fantasy VII compartían el mismo bug, pero tras analizar el código de las distintas ediciones de PlayStation descubrí que el conocido glitch de duplicación nació como consecuencia de un intento de Squaresoft por corregir un error anterior. En otras palabras, el bug de Elemento W es el resultado de otro bug.


El problema en la versión japonesa original

Para entender su origen tenemos que revisar la primera versión japonesa de Final Fantasy VII de PlayStation.

Elemento W es una materia que permite usar dos objetos en un combate en un solo turno. En esta versión, existía un fallo cuando el jugador cancelaba la acción cuando ya había seleccionado el primer objeto. ¿Cuál era el fallo? El juego no te devolvía dicho objeto, haciendo que lo perdieses para siempre.

Analizando el código, se puede comprobar que no existe ninguna instrucción encargada de restaurar el objeto. ¡Se olvidaron por completo de implementarla!

A simple vista puede parecer un problema menor, pero demuestra que la mecánica de Elemento W nunca llegó a funcionar correctamente en ninguna versión.

Lo más interesante es que, el equipo de desarrollo era consciente de ello, y cuando trabajan en Final Fantasy VII International, intentaron corregir el problema.


Cuando un arreglo crea otro bug

La solución introducida en Final Fantasy VII International consistió en añadir una nueva rutina encargada de devolver el objeto al inventario... pero fueron tan descuidados que se equivocaron en ejecutarla en el momento adecuado.

El resultado es que en lugar de resolver el problema original, ahora el juego añadía una unidad al primer objeto cada vez que se cancelaba el uso del segundo objeto. Es decir, incluyeron la instrucción en el "cancelar" que no era.

Como consecuencia, el jugador podía aumentar indefinidamente la cantidad del primer objeto cancelando repetidas veces la segunda selección.

Así nació el famoso glitch de duplicación de objetos mediante Elemento W, heredado por las versiones occidentales y posteriormente por las de PC.  Con el tiempo se convirtió en uno de los trucos más conocido de Final Fantasy VII.


La historia del parche

Aunque durante la retraducción de Final Fantasy VII edité una gran cantidad de elementos del juego, en aquel entonces no tenía la experiencia necesaria para interpretar el código MIPS que usa PlayStation.

No fue hasta que comenzamos a trabajar sobre la versión de PC cuando me informaron de un supuesto arreglo del bug de Elemento W. En realidad, la solución consistía en un archivo DLL externo que impedía el aumento de objetos, haciendo que el comportamiento fuera idéntico al de la versión japonesa original.

Mi primer paso fue analizar dicho DLL mediante un desamblador de x86 para averiguar exactamente qué modificaba en memoria. Gracias a ello pude localizar la rutina correspondiente dentro del ejecutable de PC. A partir de ese punto intenté identificar la misma lógica en el código MIPS de la versión de PlayStation.

Visto con perspectiva, hoy probablemente no habría seguido un camino tan complicado para localizar el origen del bug.

Bastaría con colocar un breakpoint de escritura sobre la cantidad del objeto que aumenta al ejecutar el glitch y rastrear el resultado hasta encontrar la rutina responsable. Supongo que lo que en su día me costó meses hoy podría localizarlo en cuestión de minutos.

Una vez localizada la rutina, el siguiente reto consistió en encontrar los dos puntos de cancelación utilizados por Elemento W: el que provocaba el bug de duplicación y aquel donde realmente debería haberse restaurado el objeto.

Pasaron años hasta que comenté mis hallazgos en los foros de Romhacking.net y un usuario llamado assassin examinó el código conmigo. Con su ayuda conseguimos desarrollar un parche de corrección, aunque realmente todo el mérito es suyo.

Sin embargo, nos dimos cuenta de otro fallo. El juego únicamente tenía en cuenta la posición del primer objeto dentro del inventario, pero no comprobaba qué objeto ocupaba realmente dicha posición. Este comportamiento era precisamente el que permitía utilizar el glitch para aumentar la cantidad de objetos que normalmente no podían usarse en combate, como armas o armaduras, al ganar objetos mediante los comandos Robar o Morfo, y hacer creer el juego que era uno de los objetos que habiamos seleccionado con la materia Elemento W.

Una vez más, assassin encontró una solución. La nueva versión añadía una comprobación adicional del tipo de objeto, eliminando por completo este comportamiento inesperado.

Con un código que funcionaba correctamente, me dediqué a portar la corrección al resto de versiones de PlayStation afectadas por el bug. La única excepción fue la primera edición japonesa, ya que su problema era diferente y requería una solución específica.

Ese trabajo quedó pendiente durante años, hasta que recientemente decidí retomarlo mientras pensaba en escribir esta entrada. Gracias a la experiencia adquirida durante todo este tiempo trabajando con el ensamblador MIPS, adaptar la corrección a la versión original japonesa resultó mucho más sencillo de lo que habría costado años atrás.


El parche de corrección

Hace algunos años publiqué un parche destinado a corregir el glitch de duplicación de objetos en las versiones International japonesa, americana y todas las europeas de Final Fantasy VII para PlayStation.

Sin embargo, la primera versión japonesa seguía siendo un caso especial. En ella no existía el bug de duplicación, pero sí el error original que provocaba la pérdida de objetos al cancelar la acción con Elemento W.

Tras analizar esta versión y localizar el origen exacto del problema, he desarrollado un nuevo parche para esa versión que restaura correctamente el objeto al cancelar la acción sin introducir el comportamiento que acabaría dando lugar al glitch de duplicación.

Con esta nueva publicación, todas las versiones de PlayStation de Final Fantasy VII disponen por fin de una corrección adecuada para los errores relacionados con la materia Elemento W.

Descarga el parche de corrección de Elemento W (892KB). Archivo comprimido en "7z" que contiene un parche para todas las versiones de PlayStation de Final Fantasy VII: NTSC-J, NTSC-J INT, NTSC-U, PAL-E, PAL-G, PAL-F, PAL-S 1.0 y PAL-S 1.1. Los parches están en formato xdelta, por lo que se necesita una herramienta como xdelta UI para poder aplicarlos.

Curiosamente, el glitch de Elemento W terminó convirtiéndose en uno de los errores más populares y queridos por la comunidad. Incluso varias personas me llegaron a decir que era algo que debía estar en el juego porque los desarrolladores lo pusieron intencionalmente.

Aunque posiblemente sea el parche que he creado que la gente menos aprecia, resulta interesante disponer por fin de una corrección adecuada para todas las versiones de PlayStation, incluida la primera edición japonesa, donde se originó toda esta historia.

Lo único que me pregunto a estas alturas es, ¿aún no existe ningún arreglos para las versiones de PC? ¿Square Enix se niega a corregir este error tras tantos relanzamientos?

Publicar un comentario

No hay comentarios