We've just updated MediaWiki and its underlying software. If anything doesn't look or work quite right, please mention it to us. --RanAS
es/Dynamic X
From SnesLab
Dynamic X es un sistema avanzado de manejo de carga dinámica cuyo propósito es otorgar soporte a la transferencia de gráficos y paletas de colores a la VRAM y CGRAM respectivamente. Este sistema vendría a reemplazar al Dynamic Z V3.7 que a su ves es un reemplazo del DSX.
Funcionalidades
- Cargar Poses Dinámicamente: Permite cargar poses para Sprites Dinámicos desde cualquier código ASM.
- Dibujar Poses: Permite dibujar cualquier pose que este registrada en el sistema en cualquier lugar de la pantalla y desde cualquier código ASM. La forma de dibujar esta totalmente optimizada para cada pose, básicamente todas las poses que tienen características similares, usan la misma rutina grafica para optimizar ciclos y que sea lo más eficiente posible, además de disminuir considerablemente la cantidad de ROM utilizada en rutinas graficas, ya que, 1 rutina grafica puede dibujar cientos de poses distintas que pertenecen a distintos Sprites.
- Cargar Gráficos a la VRAM.
- Cargar Paletas de Colores a la CGRAM.
- Asignación Automática de Paletas: Cuando un Sprite carga una paleta, puede pedir al sistema que le asigne una paleta de forma automatizada, este buscara una paleta libre y podrá ser usada por el Sprite, en caso que la paleta ya este cargada en la CGRAM cargada entonces le dará al Sprite esa paleta. El sistema informa si no hay paletas disponibles, de esta manera, se puede evitar que el Sprite intente funcionar con paletas erróneas.
- Efectos de Paletas de Colores: Se puede editar las paletas que están cargadas para que cambien atributos como el Hue (Tinte), la Saturación y el Brillo, se pueden ponderar con un color preestablecido o también quitarle potencia a ciertos canales RGB o HSL.
- Registro de Gráficos y Paletas: El sistema permite insertar gráficos y paletas en el ROM, al hacerlo quedan disponibles la posición en que fueron guardados en el ROM y además puedes saber el ID con que fue registrado en el sistema, puedes utilizar ese ID para cargar dinámicamente esos gráficos. Dynamic X se hará cargo de eliminar los gráficos y paletas guardados previamente por el sistema e insertar los nuevos gráficos y paletas en un lugar libre en la ROM.
Funcionalidades que pueden tener problemas de compatibilidad
- Gráficos Custom para el Player: Dynamic X permite tanto cambiar los gráficos del player usando un EXGFX similar al GFX32 estando limitado a que use el tamaño y la cantidad de poses del juego Vanilla o simplemente deshabilitar completamente la carga dinámica de gráficos del player, yoshi o podoboos para hacer tu propia rutina dinámica para un player custom sin limitaciones de tamaño o cantidad de poses. Esta funcionalidad permite cambiar los gráficos en cualquier momento, por lo que podrías usar distintos players en distintos niveles o en distintas zonas del mismo nivel.
- Paletas Custom para el Player: Dynamic X te permite cambiar la paleta de colores del player libremente.
- Optimizaciones del DMA del Player: Dynamic X disminuye considerablemente los ciclos utilizados por el NMI handler, ya que, los gráficos del player, yoshi y podoboos solo son cargados en la VRAM cuando son requeridos, no siempre como ocurre en el juego Vanilla. Esto además te deja algunos tiles extras en el SP1 en niveles que no utilicen a yoshi o podoboos, incluso un tile extra en niveles que no usen la capa.
Requisitos
Instalación
Pasos Generales
- Poner todos los archivos con extensión ".framesinfo" en la carpeta "FramesInfo".
- Poner todos los archivos con extensión ".dynamicinfo" en la carpeta "DynamicInfo".
- Poner todos los archivos de GFXs y Paletas de colores en la carpeta "DynamicResources".
Usando el Tool Directamente
- Abrir DynamicXTool.exe.
- Escribir la ubicación del ROM que se desea modificar, otra opción es arrastrar el ROM a la consola. Si presionas Enter y no has hecho una instalación previa, entonces enviara error, si has hecho una instalación previa entonces usara el path utilizado en la instalación previa.
- Escribir la ubicación donde se guardara el resultado de la instalación, Si presionas Enter utilizara la ubicación del paso anterior.
- Escribir la ubicación de la carpeta de Pixi, esto es para instalar los defines. Si presionas Enter se va a saltar este paso o en caso que hayas definido la ubicación en una instalación previa, entonces utilizara esa.
- Escribir la ubicación de la carpeta de Uberasm Tool, esto es para instalar los defines. Si presionas Enter se va a saltar este paso o en caso que hayas definido la ubicación en una instalación previa, entonces utilizara esa.
- Escribir la ubicación de la carpeta de GPS, esto es para instalar los defines. Si presionas Enter se va a saltar este paso o en caso que hayas definido la ubicación en una instalación previa, entonces utilizara esa.
- A continuación el tool te preguntara si deseas cambiar los settings, si escribes "Yes" o "Y" te empezara a preguntar por cada feature por separado, responde "Yes" o "Y" por cada uno que desees instalar y "No", "N" o presionar Enter por cada uno que no quieras instalar, Si escribes "No", "N" o presionas Enter utilizara settings default (todos los features que no tienen problemas de compatibilidad) o si cambiaste los settings en una instalación previa utilizara esos settings.
- Cuando la instalación termine, re-instala todos los tools o parches que dependan de los recursos dinámicos instalados.
Usando el Tool Desde Consola
Debes llamar el comando:
DynamicXTool "<rom_path>" "<output_path>"
- <rom_path>: (optativo) Es la ubicación del rom que deseas modificar. Si no se escribe este parámetro y no se instalo el tool previamente, entonces, enviara error. Si hubo una instalación previa entonces usara la ubicación que se uso en esa instalación.
- <output_path>: (optativo) Es la ubicación donde se guardara el resultado. Si no se escribe este parámetro se utilizara el <rom_path> como ubicación.
El ROM se instalara con los settings default si nunca se ha hecho una instalación previa, si se ha hecho una instalación previa, entonces se usaran los settings usados en esa instalación.
Settings
En caso de querer cambiar los settings manualmente debes abrir el archivo settings.json que se vera así:
{ WIP }
Debes cambiar los parámetros según los settings que desees.
Mejoras en Comparación a otros sistemas
Dynamic X VS DSX
- Dynamic X contiene muchos features que DSX no posee. El DSX solo posee soporte para sprites dinámicos. Por favor ver capitulo Funcionalidades.
- DSX permite máximo 4 sprites dinámicos de 32x32, 2 de 48x48 o 1 de 64x64. Dynamic X tiene menos limitaciones en el número de sprites, primero por que todos los sprites comparten poses, por lo tanto, si hay 2 sprites iguales es muy probable que puedas usar todos los que quieras en pantalla sin problemas, segundo puedes decirle al Dynamic X que espacio dinámico usar y dependiendo de ese espacio tienes más o menos limite para sprites dinámicos, de hecho, no existe un limite para sprites dinámicos como tal debido a que si un sprite no puede cargar una pose en la vram, usa la ultima pose que logro cargar, por lo tanto, en el peor de los casos el sprite quedaría con su pose congelada por un momento hasta que sea capaz de cargar una nueva pose.
- DSX requiere copiar una rutina a todos los sprites que usan su sistema, Dynamic X es solo llamar una rutina de la API, en 3 lineas de codigo puedes subir una pose a la VRAM y dibujar esa pose, eso hace al Dynamic X mucho más eficiente en ROM.
- DSX no tiene sistema de dibujado, el sprite debe tener su propia rutina gráfica, lo que no solo hace que cada pose dinámica sea solo utilizable dentro del contexto del sprite, sino que gasta mucha más ROM al tener que hacer esa rutina gráfica. Dynamic X por otro lado, permite cargar cualquier pose dinámica y dibujarla desde cualquier código ASM, lo que le da mucha más flexibilidad de uso y además al tener un sistema centralizado de dibujo, se ahorra mucho espacio en ROM.
- El DSX permite como máximo, cargar poses dinámicas de 64x64 (16 tiles de 16x16), Dynamic X no tiene un limite, si puedes optimizar el NMI handler podrías teóricamente hacer poses de hasta 96x96 (32~36 tiles de 16x16), aunque sin optimizaciones fuertes y solo desactivando las exanimations vanilla, podrías conseguir un sprite 80x80 (24~25 tiles de 16x16).
- Los gráficos del Dynamic X, son optimizados, esto significa que a pesar de no estar comprimidos con algoritmos como LZ, si usan la menor cantidad de tiles de 16x16 y 8x8 posibles, por lo tanto, esto permite utilizar sprites más grandes y optimizar las transferencias a la VRAM, lo que aumenta su capacidad de tener más poses dinámicas cargadas en la VRAM. El DSX por su parte, los gráficos no tienen ningún tipo de optimización y suelen malgastar mucho espacio con zonas en blanco.
- El DSX usa un buffer que luego es enviado a la VRAM, esto es un problema debido a que generar ese buffer es muy lento y requiere muchos ciclos, además el DSX debe generar este buffer en cada frame, por lo que un sprite dinámico hecho para DSX suele ser muy lento y utilizar muchos recursos, incluso utilizando SA-1 podrías tener problemas de slowdown si utilizas sprites dinámicos y algún efecto de hdma que sea complejo como un parallax o un wave. El Dynamic X no utiliza un buffer, si no que usa cola de transferencias que se carga directamente a la VRAM sin buffers intermedios, no solo eso, sino que cada pose es cargada solo cuando es necesario, por lo tanto, la carga no se hace en cada frame, sino cuando es necesario, además en ciertos sprites puedes sincronizar la animación para que todos usen exactamente la misma pose o una pose que ya esta cargada en la VRAM, esto reduce considerablemente el slowdown.