EntradaBorrada

Antes de nada, disculpas por adelantado.

saying_sorry1

A veces hago entradas para consumo propio que luego contrasto para ordenar las ideas, es un método de Briefing y Contrabriefing y el no-definitivo sino una serie de datos inconclusos fue publicado hace unos días en los que he estado por motivos de salud fuera de casa.  Tras revisar los comentarios y hacer una pequeña investigación concreta con datos reales sobre el juego he llegado a la conclusión que lo mejor es hacer una entrada nueva y empezar desde cero.

tableflip02

Dicho esto, lo mejor es ir al grano. Pensad que esto no es un remaster de la entrada borrada sino un borrón y cuenta nueva con tal de acercarnos más a la realidad.

#1 Datos Recursivos.

El original de PlayStation esta compuesto por 3 CDs, el primero de 631MB, el segundo de 620MB y el tercero de 558MB. Un total de 1809MB de espacio ocupado en la versión de PlayStation del juego, el problema es que en esta versión del juego hay datos recursivos entre los 3 discos y antes de nada hemos de saber cuales de los elementos se repiten en los tres discos.

Sinceramente como desde hace años es algo que siempre me ha llamado la atención, saber si Final Fantasy VII es posible meterlo en un cartucho de N64 o en su defecto en un disco del 64DD y quiero zanjar esa duda para siempre. He decidido hacer un análisis forense al disco buscando elementos comunes.

#1.1 Carpetas Enemy

Los 3 Discos comparten los mismos datos en ese aspecto a excepción de dos archivos relacionados con el modelado de Vincent que se encuentran en el Disco 3.

  • Disco 1: 10.61 MB
  • Disco 2: 10.75 MB
  • Disco 3: 10.75 MB

Dado que los datos son comunes nos bastarían unos 10.75MB del 64DD para almacenar los modelados de los personajes y enemigos durante las batallas.

#1.2 Carpeta Battle

Los escenarios de batalla se repiten en los 3 discos sin diferencias entre uno y el otro.

  • Disco 1: 13.77 MB
  • Disco 2: 13.77 MB
  • Disco 3: 13.77 MB

Dado que los datos son comunes nos bastarían unos 13.77MB del 64DD para almacenar los modelados de los escenarios donde ocurren las batallas.

#1.3 Carpeta Field

Los escenarios pre-renderizados se encuentran en una carpeta llamada «Field» que no solo incluye los fondos pre-renderizados sino el scripting de cada fondo. Cada fondo tiene un archivo BSX, uno DAT y otro MIM que es el que almacena los datos gráficos del juego.

Los archivos BSX apenas ocupan unos 926KB del total del juego, los DAT unos 400KB pero donde esta toda la parte importante es en los MIM. Lo que nos interesa son los archivos .MIM que en total son unos 112MB de archivos comunes en formato de imagen no comprimido, esto es suficiente para inutilizar el uso del fallido disco magnético de Nintendo.

¿Cómo lo hacemos para portar dichos fondos a N64?

Aquí entramos en el microcódigo JPEG del RCP de N64. El trabajo de dicho microcódigo sería descomprimir los fondos del original de PlayStation que habrían sido portados a JPEG, la documentación de la consola dice que podemos descomprimir imágenes JPEG hasta con una compresión de 10:1 utilizando dicho microcódigo para ello ¿Se vería afectada la calidad de imagen por ello? con ese nivel de compresión no, es cuando alcanzamos burradas de compresión de 50:1 que el JPEG degrada enormemente la imagen pero N64 solo soporta descompresión 10:1 como mucho.

¿El problema? Cuanto más sobrecarguemos con microcódigo el RSP menos rendimiento obtiene este, la idea es dejar entre escenario y escenario un pequeño tiempo de carga con el que entre escena y escena el RCP o la CPU pueden descomprimir los datos desde el cartucho. Los cuales ocuparían unos 11.2 MB en total dentro del mismo.

Otra de las optimizaciones esta en el hecho de que Nintendo64 no soporta color de 24 bits porque su salida de color es de 21 bits. Los escenarios pre-renderizados en PlayStation están en formato de 24 bits de color, traspasarlos a 21 bits haría perder un poco de calidad de imagen pero es que la salida de video de la consola no puede mostrar 24 bits por lo que esa calidad de imagen de menos no se podría mostrar y los fondos de FFVII… No es que sean para tirar cohetws. Esto permitiría pasar de los 11.2 MB ocupados por los fondos a unos 9.8MB en total.

#1.4 La Carpeta Magic

Hay un carpeta que es donde están almacenados los datos de la magia del juego, así como de los diferentes objetos del mismo. Tanto los que son utilizados por los jugadores como por los enemigos.

Es la carpeta más compleja del juego fuera de los elementos multimedia ocupando un total de 45MB en común en cada uno de los discos. Personalmente no se como Square hubiese podido implementar esos datos para N64 por el hecho que hacen superar los 64MB de límite que tenemos para el Disco.

EDIT: Es muy posible que dada la cantidad de almacenamiento del CD-ROM algo tan simple como la recursividad de librerías para ahorrar espacio no se tuviese en cuenta. ¿Por qué digo esto? No conozco el código pero estoy seguro que un buen repaso al mismo hubiese resultado en una versión más eficiente del mismo que no ocupase tanta información incluso en PlayStation y sin usar compresión de ningún tipo.

#1.5 La Carpeta World

Los datos del Overworld del juego se encuentran en esta carpeta, la cual esta repetida en los 3 discos. Sorprendentemente ocupa unos 28.9 MB de datos, Lo cual sorprende enormemente dado que sinceramente y técnicamente hablando el overworld de FF VII es una mierda enorme en Final Fantasy VII con montones de errores gráficos.

Personalmente creo que de haber existido una versión para Nintendo64 dicha parte se hubiese re-hecho por completo aprovechando las capacidades técnicas de la máquina y pienso que Square hubiese podido reducir el tamaño de la carpeta a unos 8MB aproximadamente. 

#1.6 Carpeta Sound

Dicha carpeta es común entre los 3 discos, incluye los efectos de sonido y buena parte de la música en formato MIDI, son unos 784KB en total lo que ocupa. Aunque esta parte al estar pensada para el chip de sonido de PlayStation se reprogramaría por completo, en todo caso los datos MIDI dentro de esos 784KB son solo 50KB, el resto son instrucciones para el procesador de sonido de PSX.

En N64 no hay chip de sonido, se ha de tirar bien o de la CPU o del RSP. Ambos son R4300i pero el hacerlo en el RSP reduce la capacidad poligonal del juego. Necesitamos el RSP para convertir los fondos de JPEG a algo que el RDP pueda entender por lo que consumir rendimiento con el sonido pues…. Seria una sobrecarga. Así que mejor dejarle dicho trabajo a la CPU.

#1.7 Carpeta Menu

La carpeta común con los datos para componen los menus del juego, unos 520KB ocupa en total.

#1.8 Carpeta Mini

Los Minijuegos del Gold Saucer ocupan unos 4370 KB en total del disco, se repiten en los tres discos. Esta es una de las partes que técnicamente resultan patéticas junto al overworld en Final Fantasy VII y que requerirían un rehecho completo de los mismos a nivel técnico con tal de estar de acorde con las capacidades de N64.

Unos 4MB deberían ser suficientes como para almacenar esta sección del juego. La cual al igual que la sección del overworld estaría remasterizada por completo en esta versión.

#1.9 Carpeta Battle

La carpeta que ejecuta el subprograma al entrar aleatoriamente en batalla, es común en los 3 discos y ocupa unos 423KB en total.

#2 La Carpeta SuperNova

La invocación del jefe final del juego tiene su propia carpeta en el tercer CD, la cual ocupa unos 1130KB en total.

#2 Optimizaciones.

Uno de los errores comunes en N64 era el hecho de portar juegos desde PlayStation sin tomar como ventaja el texturizado con corrección de perspectiva. En PlayStation era necesario que los modelados tuviesen polígonos de más porque si estos eran demasiado grandes el texturizado se distorsionaba enormemente. ¿El hándicap de N64? Tener solo 4KB de texturas por lo que era cuasi imposible repetir una textura sobre una gran superficie y esta se extendía en muchos juegos hasta dar un efecto que…

zelda-majoras-mask-0006No obstante, dado el patético nivel técnico de las batallas de Final Fantasy el hecho de que los escenarios de batalla utilizarán este tipo de texturizado serviría al mismo tiempo para poder recortar (no se hasta que punto) la complejidad poligonal a los personajes y enemigos sin recortar la complejidad visual del juego. Eso si, es posible que el juego por culpa de los famosos problemas de latencia en la memoria no se hubiese visto tan fluido como en la versión de PlayStation pero dados los problemas existentes con el almacenamiento el hecho de poder recortar en datos se agradece, aunque personalmente creo que Nintendo les debería haber dejado a Square a utilizar el Turbo 3D que aumenta la tasa de relleno desactivando consigo el Z-Buffer y efectos que se benefician del mismo como es la corrección de perspectiva, pero al menos el juego ira fluido y podrían hacer un port directo.

#3 Resumen

Si tenemos en cuenta todas las optimizaciones posibles el juego ocuparía unos 94MB, superando el tamaño de un Disco del 64DD. No podemos utilizar varios discos porque entonces estaríamos duplicando datos por lo que lo mejor es una dupla cartucho+64DD funcionando conjuntamente.

Dado que hubiese sido más barato un disco magnético del 64DD que no un cartucho de 64MB, lo mejor hubiese sido una combinación de cartucho de 32MB con disco magnético del 64DD funcionando ambos de manera conjunta. Hay que tener en cuenta que cuando Final Fantasy VII fue lanzado los cartuchos disponibles para los editores y desarrolladores independientes eran como mucho los de 16MB, los de 32MB aparecieron a finales del 98 con FF VII ya teniendo una carrera en PlayStation y el 64DD no existía. Pero si Nintendo no hubiese retrasado el 64DD durante tantos años y no lo hubiese sacado tarde y mal… En realidad si el 64DD hubiese venido de serie con la consola… O al menos un formato mejor que el cartucho entonces hubiésemos visto el juego aparecer en N64 y no en PlayStation aunque como sabemos la oferta de Sony encima de la mesa al final influyo mucho en la decisión de Square.

Pero todo esto es solo la mitad de la historia, N64 soporta descodificación Huffman a tiempo real, esta tiene un ratio de compresión un poco mejor que la LZS (1.5:1), pero utilizando este método de compresión se nos queda la cosa cercana a los 66MB por lo que se supera el límite de 64MB por muy poco, pero el cartucho incluido de serie en la dupla no tendría que ser muy grande y con uno de 4MB acompañando al disco magnético seria suficiente.

EDIT: Algunos juegos de N64 utilizan compresión ZLIB que permite comprimir con un ratio mínimo de 2:1 por lo que es muy probable que Square la hubiese utilizado para ahorrarse la producción del cartucho ya que entonces el juego cabría en un disco del 64DD. 

A continuación hare algo de Feedback de la entrada que ha sido borrada por mi parte.

Comentario#1:

Un port del juego tal cual esta en psx obviamente no es posible, pero un port con fondos no prerrenderizados y con una narrativa adaptada a no tener 50 minutos de cinematicas, si que seria posible.

Habéis hecho muchos comentarios como este, por lo que voy a responder a este para responderlos a todos.

Los fondos pre-renderizados de la mayoría de juegos de PlayStation y en especial Final Fantasy VII no son mejores que los del primer Myst de PC. ¿Hubiese sido lo mismo a nivel visual si se hubiese hecho todo en modo Full 3D? El problema es que N64 no tenía la potencia poligonal suficiente como para que en la composición de los escenarios todo se hiciese completamente 3D y aún así no se hubiese visto «igual» ni por asomo.

El primer juego de los de PlayStation en perder los fondos pre-renderizados fue Resident Evil con el Code Verónica y lo hizo en Dreamcast y PS2. La consola de Sega podía mover sin problemas unos 500K-1KK de polígonos por segundo de manera real sin despeinarse y aún así no se conseguían reemplazar por completo en lo que a calidad visual se refiere los fondos pre-renderizados.

CodeVeronicaN64 solo supera los 100K por pocosi renderiza con efectos de un ciclo, es decir, al nivel visual de Super Mario 64 o con 2 ciclos desactivando el Z-Buffer (World Driver Championship) por lo que técnicamente estaba muy lejos de poder realizar lo que dices, de prescindir de los fondos pre-renderizados para ser Full 3D.

Aunque como hemos visto, el problema no esta en los fondos pre-renderizado sino en la carpeta Magic que esencial para el juego y ocupa la friolera de 45MB y es esencial para el desarrollo del juego en si mismo.

Comentario#2:

No seas ran negativo, todo el diseño de final Fantasy 7 se basa en ahorrar memoria para evitar la carga de escenas y eventos. Las texturas, excepto las de los fondos de batalla, son Gouraud shading, y recuerda que el Rcp es programable. Considerando la relación que tenía square-nintendo es muy probable que no hubiera sido imposible entregar las herramientas de micro código Mips assembler para la compresión de fondos como lo hiso ocarina of time con sus fondos pre-render.
La ost de este juego es una de las más básicas que ha hecho Uematsu a favor de evitar las cargas, todas las pistas son instrumentos como snes, pero uematsu escogió los más livianos (La ost conpleta de ff7 pesa 820 Kb, incluyendo One Winged angel).
Realmente todo el truco podría haberse centrado en programar el Rcp para tareas de compresión de diferente tipo, como texto, que a diferencia de Resident Evil 2, aquí no hay voces.
Quizás soy muy optimista, ya que el juego salio en el 97 y solo las tools de audio mp3 del Rcp estaban disponibles, pero no dejo de pensar que es el modelo que ofreció Sony (menos royalties) fue lo que convenció a Square y es mas que un tema técnico, en lo cual todos estos años se excusan.

Lo de los fondos pre-renderizados es salvable por los motivos que he comentado más arriba. En cuanto a la música, no he comentado lo del One Winged Angel porque hay un detalle cuanto menos curioso, la versión de PC del juego carece de la versión con coro… ¿El motivo? No tenían las herramientas para extraer el sonido en formato .psf aunque en el caso de este juego es el único archivo con dicha extensión en todo el disco. En todo caso tener que gastar 8MB de cartucho o el DD en la cancioncilla de marras me hubiese parecido a mi un disparate enorme de gasto de recursos.

En todo caso tu comentario me ha hecho replantearme la entrada.

Comentario#3:

Al final de cuentas PSX si era técnicamente superior a N64… y sólo por que el cartucho fue un cuello de botella enorme comparado con el CD Rom.

Ya todo esto como lograron meter lo de dos CD ROM a un cartucho con Resident Evil 2?

Saludos.

Bueno, esto ya sería para otra entrada, con lo que hay en esta es suficiente y sería irnos por los cerros. Sinceramente el port de RE2 a N64 esta muy mitificado técnicamente hablando pero se merece su propia entrada porque la forma en que Angel Studios consiguió meter todo Resident Evil 2 en un cartucho de 64MB… Tiene su mérito, pero eso para otra entrada.

Eso es todo.