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
Jump to: navigation, search

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

  1. Poner todos los archivos con extensión ".drawinfo" en la carpeta "DrawInfo".
  2. Poner todos los archivos con extensión ".dynamicinfo" en la carpeta "DynamicInfo".
  3. Poner todos los archivos con extension ".paleffect" en la carpeta "PaletteEffects".
  4. Poner todos los archivos de GFXs y Paletas de colores en la carpeta "DynamicResources".

Usando el Tool Directamente

  1. Abrir DynamicXTool.exe.
  2. 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.
  3. Escribir la ubicación donde se guardara el resultado de la instalación, Si presionas Enter utilizara la ubicación del paso anterior.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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 -use-settings

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í:

{
  "InputROMPath": "",
  "OutputROMPath": "",
  "PixiPath": "",
  "UberasmToolPath": "",
  "GPSPath": "",
  "GraphicChange": true,
  "PaletteChange": true,
  "PaletteEffects": true,
  "DynamicPoses": true,
  "DrawingSystem": true,
  "ControllerOptimization": true,
  "FixedColorOptimization": true,
  "StatusBarOptimization": false,
  "ScrollingOptimization": true,
  "PlayerFeatures": false
}

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.

Dynamic X VS Dynamic Z V3.7

Formatos

Dynamic Info

Los archivos con extensión ".dynamicinfo" se utilizan para insertar gráficos de poses, paletas y otros recursos en el ROM. Además incluyen la información necesaria para que las poses sean cargadas correctamente en la VRAM.

El formato de estos archivos es el siguiente:

PosesGraphics:
	...
Palettes:
	...
Resources:
	...
PosesSizes:
	...
  • PosesGraphics: Debajo de este label va cada archivo de gráficos utilizado para cargar poses dinámicas. Ejemplo:
PosesGraphics: 
	DKCKlaptrap.bin
  • Palettes: Debajo de este label va cada archivo de paletas de colores utilizado para las poses dinámicas. Ejemplo:
Palettes:
	DKCKlaptrapPal1.bin
	DKCKlaptrapPal2.bin
	DKCKlaptrapPal3.bin
	DKCKlaptrapPal4.bin
	DKCKlaptrapPal5.bin
  • Resources: Debajo de este label va cada archivo extra que se utilice como recurso y que se desee insertar en el ROM. Ejemplo:
Resources:
    Geno.bin
    GenoPal.bin
    FireGenoPal.bin
    GenoPalPlayer2.bin
    FireGenoPalPlayer2.bin
  • PosesSizes: Debajo de este archivo van 2 líneas por cada pose, la primera linea es un label que describe la pose y la segunda linea son 2 valores, cada uno de estos valores indica cuantos tiles de 8x8 se usan en cada chunk, cada pose dinámica tiene 2 chunks de data generalmente (excepto algunas excepciones que pueden requerir solo 1 chunk), el chunk de arriba y el chunk de abajo. El chunk de arriba son todos los tiles de 8x8 que están antes de la ultima linea de 8 pixeles de alto, mientras que el chunk de abajo es la ultima linea. En el siguiente ejemplo se pueden ver 3 imagenes, la de la izquierda es como deberia verse la imagen ensamblada, la segunda es como se veria en la VRAM y la tercera es como estaria guardado en el archivo binario, tambien mostraria como son los poses sizes de esa pose, que en este caso serian 8 tiles del chunk de arriba y 8 tiles del chunk de abajo:
diagram1.png
PosesSizes:
Frame0_ResourceSize:
    db $08,$08

Draw Info

Palette Effect

Modo de Uso

Carga Dinámica de Poses

Cambiar Configuración de Espacio para Sprites Dinámicos

Dibujar Poses

Carga y Dibujo de Poses en Sprites

Carga de Gráficos

Carga de Paletas

Paletas de Sprites

Asignación Manual de Paletas
Sin Carga de Paleta
Asignación Automática de Paletas
Restringir Sobre escritura de Paletas

Efectos de paletas

Cambiar Gráficos del Player usando un GFX similar al GFX32

Cambiar Gráficos del Player

Cambiar Paleta del Player