[Ejercicio técnico] Trasteando con un debugger

Buenas...

Pues no es que sea muy experimetado con los debuggers, pero estoy dedicándome a echar un vistazo al uso de la vram en los juegos para saber cuanto espacio quedaba libre en aquellos que parecían ir al límite por como comprimían gráficos (calidad de los escenarios del art of fighitng 2), o por como dejaban de pequeños el tamaño de los personajes (samurai showdown).

La cuestión es que aunque estoy dando con programas bastante completos, los cálculos hay que hacerlos muy a ojo. ¿No hay ninguno que te indique cuanta memoria se usa en el momento? (video ram, ram, ram del spc, etc).

Aún con todo, me estoy llevando una pequeña sorpresa con un par de ellos:



Art of Fighting 2.
He escogido a dos de los personajes mas grandes (mr big y jack), que además coincide en que el escenario del segundo es uno de los que menos repetición de tiles tiene (por lo que tiende a ocupar mas vram).

Imagen

Lo que me estoy dando cuenta, es que calculando, queda libre sobre un 20% de la vram, y eso sin contar las direcciones de memoria sueltas entre bloques de datos, que siempre computan, pero que a ojo no se aprecian tanto.
¿Que significa esto?, pues que quedaba espacio de sobra para "malgastar" tiles en los escenarios para que lucieran mas como el original... o limitarse a mejorar los escenarios de forma notable, y hacer los personajes bastante mas grandes, o no tocar el tamaño y proporcionarles bastantes frames de animación.
Según veo (y sin que mi juicio sea verdadero), diría que unos escenarios bien recreados, con unos personajes un poco mas grandes, y haciendo que el zoom-out llegue un poco mas lejos (para que se note bien el efecto entre zoom-in y zoom-out), hubiera sido perfectamente posible.


Street Fighter Alpha 2
En este la intención ha sido la misma, coger a los dos personajes mas grandes, con un escenario que interpreto que es bastante generoso con la no repetición de tiles, y analizar la escena en un momento muy puntual, a ver como está todo.

Imagen

Según la imagen, lo que da a pensar es que el uso de la vram tiene que tener una optimización brutísima, para que con esa profundidad de color, esos escenarios, y esas animaciones, pueda verse todo así de grande.
...pues nada mas lejos de la realidad. He contado 4 bloques bastante gordos de espacio sin usar, y de hecho veo que optimización poca, porque hay muchas direcciones de memoria sueltas entre bloques de datos que están por ahí desperdiciadas.
Calculando a ojo, diría que en torno al 16/20% de la vram está sin usar, y no creo equivocarme mucho. Vamos, que si se ponen tontos podrían haber mejorado las animaciones... y si alguien no confía en el DMA para transportarlos a tiempo, siempre puedes dejar ahí las animaciones del escenario, cosa que siempre resulta vistosa, y le añade complejidad al asunto gráfico.

Vamos, que menuda sorpresa me he llevado con esto.


Samurai Showdown
Lo mismo que los anteriores. He escogido a cham-cham y earthquake, y ha salido el escenario de este último, que además creo que es uno de los escenarios con msa profundidad de color, y que exije menos repetición de tiles debido a su estilo "pseudo-fotografía".

Imagen

Con este me he llevado un pequeño chasco. A ojo, calculo que en en la escena de la foto queda libre en torno a un 10% de la memoria... pero es que me estoy dando cuenta de que la gestión de la memoria en este juego es muy anárquica. Cuento muchos minibloques vacios ahí camuflados entre cadenas y cadenas de datos.
Diría que un 10%, pero seguramente sea un poco mas. El caso es que si se pretende aumentar el tamaño de los luchadores, tal vez un haohmaru podría tener un tamaño como el de la recreativa, y todo con esas animaciones, sin que falte un solo golpe o movimiento, y con esa calidad de escenarios... pero un earthquake lo veo jodido. Todo depende de cuanta memoria se esten llevando los escenarios, porque con un 10/15% del total de la memoria, en el caso de que los personajes estén ocupando actualmente tal vez un 10 o un 12%, tal vez si se podría hacer algo intermedio (no tan grandes como en el original, o como en la megaCD, pero si de un tamaño parecido al de megadrive, y con un earthquake bastante gigante).

Me la voy a jugar. Creo que la lacra de la versión megadrive está en el cartucho, y que no incluyeron a earthquake para no meter memorias mas grandes, no porque la vram no diese para mas (si alguien puede echarle un vistazo, a ver que ve, tal vez nos saque de dudas).


Fatal Fury Special
Mismo procedimiento. Pillo por un lado a axel hawk, y por el otro a big bear, con un escenario que no es que esté muy comprimido, pero que tampoco es que sea una maravilla del grafismo.

Imagen

Aquí directamente me encuentro bastante confundido. Encuentro menos espacio libre del que esperaba, seguramente mas de un 5%, pero en el sentido de que tal vez esté bastante cerca del 10% de memoria libre sin usar. Lo que ocurre es que detecto un comportamiento un poco extraño, como si hubiera espacio ocupado, aunque sin datos, ¿como si estuviese reservado? (como los dummies en las grabaciones de cd's), ¿es eso posible?.
Algo de espacio hay para mejorar cosas, sobre todo animaciones... y hombre teniendo en cuenta que big bear no es precisamente pequeño, creo que al menos las animaciones de los personajes menos grandes si podría haber sido mucho mas rica.
De todos modos, estoy seguro de que aquí hay gato encerrado, y se puede hacer mas de lo que parece, sobre todo teniendo en cuenta los ejemplos de los títulos anteriores, porque este fatal fury special no tiene nada que no tengan los otros.




Lo dejo aquí con estos 4 ejemplos, porque de científico esto no tiene nada hasta no dar con una herramienta que hable mas claro, y diga con cifras que es lo que está pasango. Analizar una vram de muchos cientos de pantallazos no es algo para ir haciendo a ojo, ni mucho menos.

A ver si al menos el hilo da para recopilar información sobre debuggers, y herramientas varias.
Ahora mismo el debugger que tengo para hechar un ojo de vez en cuando en la SNES:

Este tiene la capacidad de ver cada canal de audio del sistema.
"Bsnes-plus"

este otro tiene también cosas interesantes

"no$sns"

y por ultimo este

"Geiger's Snes9x Debugger"
¿Hay alguna posibilidad de saber cuanta memoria es ocupada en tiempo real?, porque ese detalle vendria de perlas, sobre todo cuando se trabaja con graficos.

P.D: Muchas gracias por contestar.
Que tal Señor Ventura. Me temo que esa pregunta, ahora mismo no puedo contestarte, ya que para eso se requiere conocer de antemano, cuanta vram posee originalmente el equipo, cuantos sprites y tiles hay presentes en pantalla y cual es su altura y anchura y todo eso, sumándolo y multiplicando, tiene que dar el resultado que deseas. O al menos, es como pienso que eso trabaja.

Pero quizás, algún otro compañero sepa mas que yo del asunto, pues por ahora, soy mas que un aficionado que de vez en cuando echa un ojo al debugger para algunos juegos.
eso es amor al retro mas profundo,menudo curro.
Me ha dado por echarle un vistazo rápido al Mortal Kombat, y he descubierto un par de detalles bastante interesantes.

Imagen


El primer detalle es que en los momentos normales de combate no hace uso de mas de 3 canales de sonido, por lo que es evidente la poca carga de trabajo que tiene el sistema de sonido de la snes.
No he podido determinar cuanta ram del SPC se usa, pero parece evidente que los samples están downgradeados a propósito, y no por necesidades del hardware.

El segundo detalle es quizás el mas inesperado... en el momento exacto de la foto, la memoria de video (VRAM), está aproximadamente a un 60% de su capacidad. Queda probablemente algo mas de un 40% de espacio libre, cosa que hubiera permitido aumentar la profundidad de colores de los sprites, así como su tamaño, y ya de paso mejorar los propios escenarios.

Usa sprites de 8x8 y 16x16 para conformar los personajes, y aunque no estoy sabiendo como averiguar el número de sprites simultáneos, es bastante obvio que en un juego de estas características 128 sprites son suficientes para cualquier tamaño de objetos que sea planteable integrar, ya que sus animaciones tampoco requieren de un uso del DMA exagerado.


Probablemente hubiese tolerado una versión muy cercana al arcade, sobre todo en cuanto a la calidad de digitalización de los sprites, y en cuanto al tamaño de los personajes.
El sistema de sonido tambien está bastante infrautilizado, por lo que tambien hubiera sido posible hacer un mejor trabajo.
Los debuggers incluidos en los emuladores son una bendición de nuestros días.

Poder cojer un sistema poder comprobar el estado del sistema en tiempo real es una viguería. Te ayuda a ver como trabajaron algunos programadores y como funcionan sus genialidades.

Hacer debug antaño era un dolor de muelas. Recuerdo hacerlo en el amiga con un cartucho action replay mk3... E incluso antes reseteando por la brava y capturando la memoria que aún no se había borrado o sobreescrito... Así es como, por ejemplo, conseguía gráficos o los ficheros de sonido de los juegos NDOS de amiga (tenían un sistema de ficheros propio y el disquete no se podía leer desde workbench)

Hoy en día aún hago mucho debug, sobre un puerto firewire y un segundo ordenador, pero nada es tan divertido como antes

Un saludo
6 respuestas