es/Dynamic Z: Difference between revisions
Line 393: | Line 393: | ||
==== Sistema de Rojo-Verde-Azul (RGB) ==== | ==== Sistema de Rojo-Verde-Azul (RGB) ==== | ||
==== Cambio de Paletas de colores del Player ==== | ==== Cambio de Paletas de colores del Player ==== | ||
{| class="wikitable" | |||
|- | |||
! Nombre !! Tamaño !! Descripción | |||
|- | |||
| DZ_Player_Palette_Enable || 1 || Si es 1, se realiza la rutina default de cambio de paleta del player. Si es 0, no se realiza esa rutina, permitiendo una personalizada. | |||
|- | |||
| DZ_Player_Palette_Addr || 2 || Indica la dirección de memoria donde se almacena la paleta del player, puede modificarse para cambiar los colores en la paleta de colores 8 iniciando del color 0x86. Por default tiene el valor dado por la dirección de WRAM $7E0D82. | |||
|- | |||
| DZ_Player_Palette_BNK || 1 || Indica el BNK donde se almacena la paleta del player, puede modificarse para cambiar los colores en la paleta de colores 8 iniciando del color #$86. Por default es 0x00. | |||
|- | |||
| DZ_PPUMirrors_CGRAM_LastPlayerPal || 2 || Almacena la dirección de memoria de la ultima paleta que fue cargada. Si su valor es 0xFFFF y se utiliza la rutina de cambio de paleta default, se forzara el rutina de cambio de paleta en ese frame. | |||
|} | |||
=== Sistema de OAM === | === Sistema de OAM === | ||
=== Modo 50% más === | === Modo 50% más === |
Revision as of 19:49, 16 October 2020
English | Português | Español | 日本語 |
Es una librería para el Super Mario World creada por anonimzwx que comunica la PPU (Unidad Procesadora de Imagen) con la lógica de los distintos recursos del ROM mediante un sistema de Mirrors. Actualmente esta en la proceso la versión v3.75.
Funcionalidades
- Soporte para Sprites Dinámicos: Sprites que pueden cargar el cuadro de animación que necesitan en la memoria de video (VRAM) en cada iteración del juego.
- Soporte para Sprites Dinámicos con Memoria Compartida: Sprites Dinámicos pero que todas sus copias usan el mismo cuadro de animación al mismo tiempo y usan el mismo espacio en la memoria de vídeo.
- Soporte para Sprites Semi-Dinámicos: Sprite que carga todos sus cuadros de animación en la memoria de video (VRAM) cuando esta en la pantalla, todas sus copias usan el mismo espacio en la memoria de vídeo.
- Soporte para Sprites Dinámicos de 2 fases: Sprites Dinámicos pero que cargan la mitad de un cuadro de animación en una iteración y la otra mitad en otra iteración, esto permite un Sprite de gran tamaño pudiendo alcanzar tamaños de hasta 112x112.
- Soporte para Sprites con Rotación y Re-escalamiento: Sprites Dinámicos pero que pueden rotar sus cuadros de animación o re-escalarlos.
- Cambiar gráficos en tiempo real.
- Cambiar paletas de colores en tiempo real.
- Cambiar tilemaps en tiempo real.
- Sistema de Tinte-Saturación-Valor (HSV) para paletas de colores.
- Sistema de Rojo-Verde-Azul (RGB) para paletas de colores.
- Cambiar bloques del Foreground para modificar el terreno en tiempo real.
- Cambiar gráficos o paletas de colores del Player en tiempo real, permitiendo Players personalizados.
- Sistema de OAM propio con prioridad y que permite usar los 128 tiles de la OAM simultáneos.
- Modo 50% más: Permite eliminar ciertas rutinas de DMA originales del juego para poder procesar mayor cantidad de recursos dinámicos.
- Widescreen (solo para SA-1): Permite eliminar scanlines del juego para poder procesar mayor cantidad de recursos dinámicos, esto hara que la pantalla se vea como la pantalla panorámica de las películas.
- Optimizaciones para la rutina de NMI handler.
Complementos
- DRAdder: Herramienta para añadir recursos dinámicos al ROM como GFX, tilemaps o paletas y comunicarlos con la lógica.
- Installer: Herramienta para instalar más facil el parche en el rom y seleccionar las funcionalidades deseadas.
Comparativa entre Dynamic Z y DSX
DSX tambien conocido como Dynamic Sprite Patch, es un parche para sprites dinamicos pero que trae varias desventajas.
- Solo permite un área en la VRAM de 128x32, esto significa que como máximo permite 4 sprites de 32x32 o 1 de 64x64.
- Utiliza un buffer para armar los cuadros de animación del sprite dinámico, lo que termina siendo lento, ya que, debe transferirlos primero a el buffer y luego transferir el Buffer a la VRAM, esto produce bastante Slowdown y es muy notorio sobretodo en LoRom.
- El hijack utilizado es riesgoso, bajo ciertas cirscunstancias puede terminar generando glitches gráficos graves.
Dynamic Z V3.5 se supone que dejaría obsoleto al DSX, sin embargo, el staff de SMWC nunca quizo realizar una remoderación de sprites dinámicos a pesar que Dynamic Z V3.5 tenia mayores capacidades en todo aspecto.
Dynamic Z V3.5 permite un area de 128x64, por lo tanto, permite el doble de sprites dinamicos, además permite tambien sprites de 48x48, dando mayor flexibilidad de uso. Si se utiliza el modo 50% más, permite 128x96, 3 veces más que el DSX, además permite sprites de 80x80. Tambien permite sprites de 112x112 y de 96x96 si se utilizan 30FPS.
Dynamic Z V3.75 permite lo mismo que el Dynamic Z V3.5 solo que ahora hay flexibilidad total de los tamaños, además permite incrementar la cantidad de sprites sacrificando Scanlines.
Dynamic Z no tiene glitches graficos y no utiliza buffer además por lo que es mucho más rapido y produce menos slowdown.
Instalación
Utiliza la aplicación "Dynamic Z Installer" que viene incluida con el parche, con ella puedes seleccionar las funcionalidades que trae e instalar el parche facilemente.
DRAdder
DRAdder o Dynamic Resource Adder, es un tool para insertar recursos dinámicos al ROM, esto incluye paletas, gráficos y tilemaps.
Uso
- En la carpeta "Dynamic Resources" agrega todos los recursos dinamicos como graficos, paletas o tilemaps que seran insertados al ROM.
- En el archivo "ResourceList.txt" veras lo siguiente:
- Para los sprites, agrega en la etiqueta correspondiente los nombres.
- Para otros codigos, como codigos de bloques o codigos de uberasm, puedes añadir la ruta del archivo debajo de la etiqueta OTHER:
- Ejecuta el programa "DynamicResourceAdder.exe" siguiendo las instrucciones. Otra opción es usarlo en la linea de comando con el comando
PIXI: .Normal .Cluster .Extended OTHER:
PIXI: .Normal Klaptrap Klump Zinger .Cluster Butterfly SmallFish .Extended OTHER:
PIXI: .Normal Klaptrap Klump Zinger .Cluster Butterfly SmallFish .Extended OTHER: ./Uberasm Tool/level/Level105.asm
DynamicResourceAdder <nombre del rom.smc> <lista de recursos.txt> <carpeta de pixi>
<lista de recursos.txt> y <carpeta de pixi> son optativos.
Crear Codigos para usarlos con el Tool
En la primera linea del codigo agrega una linea que diga:
;@<nombre de grafico>.bin
Ejemplo:
;@Zinger.bin
El archivo puede ser de cualquier formato, no es necesario que sea ".bin".
Para agregar multiples recursos por archivo deben ir separados por ",", Ejemplo:
;@GFX.bin,Tilemap1.stim
Variables
Hay 2 tipos de variables, estan las variables del parche y los Mirrors de PPU, las variables del parche inician en la dirección $7F0B44 con LoROM o en $418000 con SA-1, mientras que los mirrors de PPU inician en $7FB080 con LoROM o en $418B80 con SA-1. Las variables pueden usar distinta dirección de RAM dependiendo de las funcionalidades elegidas por el usuario, por eso, se requiere usar los archivos de Defines que trae el parche o instalar el parche usando el Tool de instalación.
Generales
Nombre | Descripción |
---|---|
DZ_Timer | Incrementa en 1 cada vez que se ejecuta el código del parche durante el NMI-Handler. Se utiliza como Timer para sprites Dinámicos o para sincronizar rutinas dinámicas evitando flickering. |
DZ_MaxDataPerFrameIn16x16Tiles | Máxima cantidad de data que se puede enviar a la VRAM por frame en tiles de 16x16. Por default es 0x10. Puede ser incrementado usando el modo 50% más o sacrificando scanlines. No Modificar Manualmente. |
DZ_MaxDataPerFrame | Similar a DZ_MaxDataPerFrameIn16x16Tiles pero en bytes. No modificar Manualmente. |
DZ_CurrentDataSend | Cantidad de data enviada en el frame actual. No modificar manualmente, puede ser leida para saber si realizar una rutina dinamica en el frame actual. Para esto se debe revisar si lo que se quiere enviar más lo que esta en esta variable es mayor a DZ_MaxDataPerFrame. |
DZ_FreeRams | Direcciones de RAM que pueden utilizarse libremente, al momento de insertar el parche se puede saber cuantas hay disponibles. |
Sprites Dinámicos
Nombre | Tamaño | Descripción |
---|---|---|
DZ_DS_Length | 1 | Tamaño de la lista de sprites dinámicos, Tamaño máximo de la lista es 0x30. No modificar manualmente. |
DZ_DS_LastSlot | 1 | Ultimo Slot de la lista. No modificar manualmente. |
DZ_DS_FirstSlot | 1 | Primer Slot de la lista. No modificar manualmente. |
DZ_DS_MaxSpace | 1 | Espacio máximo asignado en la VRAM para sprites dinámicos en tiles de 16x16. Por default es 0x20. |
DZ_DS_FindSpaceMethod | 1 | Si es 1 los sprites dinámicos se acomodan partiendo desde el fondo del espacio asignado en la VRAM. Si es 0 se acomodan partiendo desde el Tope del espacio asignado en la VRAM. Por Default es 1. |
DZ_DS_StartingVRAMOffset | 2 | Dirección en la VRAM desde donde inicia el espacio asignado para sprites dinámicos. |
DZ_DS_StartingVRAMOffset8x8Tiles | 1 | Similar a DZ_DS_StartingVRAMOffset pero en en bloques de 8x8. |
DZ_DS_TotalSpaceUsed | 1 | Espacio total usado por todos los sprites dinámicos en la VRAM. No modificar manualmente. |
DZ_DS_TotalSpaceUsedOdd | 1 | Espacio Total usado por todos los sprites dinámicos en frames impares. No modificar manualmente. |
TotalSpaceUsedEven | 1 | Espacio Total usado por todos los sprites dinámicos en frames pares. No modificar manualmente. |
DZ_DS_TotalDataSentOdd | 1 | Cantidad de data enviada a la VRAM enviada por sprites en frames impares. No modificar manualmente. |
TotalDataSentEven | 1 | Cantidad de data enviada a la VRAM enviada por sprites en frames impares. No modificar manualmente. |
Las siguientes son tablas de 0x30 bytes que representan la información de cada sprite dinámico.
Nombre | Descripción |
---|---|
DZ_DS_Loc_UsedBy | Se utiliza para vincular a un sprite con un Slot Dinámico. Usa el formato S TT IIIII, S = Si es Shared Dynamic o no. TT => 00 es sprite Normal, 01 Es Cluster Sprite, 10 Es Extended Sprite y 11 es Overworld Sprite. IIIII es el Indice del Sprite. |
DZ_DS_Loc_SpriteNumber | Es el ID Del Sprite. Se Utiliza para saber si el sprite vinculado a el Slot sigue siendo valido. |
DZ_DS_Loc_SpaceUsedOffset | Indica en que lugar de la VRAM inicia el espacio asignado al slot de sprite dinámico. Esta en bloques de 16x16. |
DZ_DS_Loc_SpaceUsed | La cantidad de espacio que requiere el Sprite en la VRAM. Esta en bloques de 16x16. |
DZ_DS_Loc_IsValid | Si es 0, el sprite dinámico aun no ha realizado su rutina dinámica y no por lo tanto, no puede realizar su rutina gráfica. |
DZ_DS_Loc_FrameRateMethod | Si es 0 puede enviar data a la VRAM en cualquier frame, si es 1 solo en frame impares y si es 2 solo en frame pares. |
DZ_DS_Loc_NextSlot | Link hacia el siguiente slot de la lista. No modificar manualmente. |
DZ_DS_Loc_PreviewSlot | Link hacia el slot anterior de la lista. No modificar manualmente. |
Las siguientes tablas indican que slot de la lista usa cada sprite dinámico.
Nombre | Tamaño |
---|---|
DZ_DS_Loc_US_Normal | Lorom: 12 - SA-1: 22 |
DZ_DS_Loc_US_Cluster | 20 |
DZ_DS_Loc_US_Extended | 10 |
DZ_DS_Loc_US_OW | 16 |
Sprites Dinámicos con Memoria Compartida
Las siguientes son tablas de 0x30 bytes asignadas a un slot de sprite dinámico.
Nombre | Descripción |
---|---|
DZ_DS_Loc_SharedUpdated | Indica si el el slot de sprite dinámico ya realizo su rutina dinámica durante este frame, después de procesar todas las copias del sprite dinámico con memoria compartida, se pondrá en 0. |
DZ_DS_Loc_SharedFrame | Indica que cuadro de animación deben mostrar todas las copias del sprite dinámico con memoria compartida. |
Sprites Semi-Dinámicos
Las variables de Sprites Semi-Dinámicos estan conformadas por una tablas por cada tipo de sprite.
Offset indica la posición en la VRAM en la que se alojaran los gráficos del sprite.
0x00 = X 0x01 = X+$100 0x02 = X+$200 0x03 = X+$300 0x04 = X+$400 0x05 = X+$500 0x06 = X+$600 0x07 = X+$700 0x08 = X+$800 0x09 = X+$900 0x0A = X+$A00 0x0B = X+$B00 0x0C = X+$C00 0x0D = X+$D00 0x0E = X+$E00 0x0F = X+$F00
X puede ser $6000 si se elije SP1/SP2 o $7000 si se elije SP3/SP4.
Cuidado: El offset debe ser menor a $10-Cantidad de lineas de 8 pixeles de alto usadas por el sprite, por ejemplo si el espacio en la VRAM utilizado por el sprite es 4 lineas, debe elegirse C o menos.
Nombre | Tamaño |
---|---|
DZ_SDS_Offset_Normal | Lorom: 12 - SA-1: 22 |
DZ_SDS_Offset_Cluster | 20 |
DZ_SDS_Offset_Extended | 10 |
DZ_SDS_Offset_OW | 16 |
PaletteAndPage tiene el siguiente formato:
0000PPPT:
PPP Es la paleta utilizada por el sprite:
000 = Paleta 8 001 = Paleta 9 010 = Paleta A 011 = Paleta B 100 = Paleta C 101 = Paleta D 110 = Paleta E 111 = Paleta F
T es la pagina de graficos usada, 0 es SP1/SP2, 1 es SP3/SP4.
Nombre | Tamaño |
---|---|
DZ_SDS_PaletteAndPage_Normal | Lorom: 12 - SA-1: 22 |
DZ_SDS_PaletteAndPage_Cluster | 20 |
DZ_SDS_PaletteAndPage_Extended | 10 |
DZ_SDS_PaletteAndPage_OW | 16 |
Size es la cantidad de bloques de 8x8 usados por el sprite en la VRAM.
Nombre | Tamaño |
---|---|
DZ_SDS_Size_Normal | Lorom: 12 - SA-1: 22 |
DZ_SDS_Size_Cluster | 20 |
DZ_SDS_Size_Extended | 10 |
DZ_SDS_Size_OW | 16 |
Valid indica si el sprite ya envio todos sus gráficos en la VRAM, mientras es 0, el sprite no debe ejecutarse.
Nombre | Tamaño |
---|---|
DZ_SDS_Valid_Normal | Lorom: 12 - SA-1: 22 |
DZ_SDS_Valid_Cluster | 20 |
DZ_SDS_Valid_Extended | 10 |
DZ_SDS_Valid_OW | 16 |
SendOffset utilizado para realizar la rutina dinámica, este indica desde que posición debe empezar la rutina dinámica. Al inicio es igual a offset, pero si no logra enviar toda la información en un solo frame, entonces aumenta según en que posición quedo, para asi seguir enviando data en el siguiente frame.
Nombre | Tamaño |
---|---|
DZ_SDS_SendOffset_Normal | Lorom: 12 - SA-1: 22 |
DZ_SDS_SendOffset_Cluster | 20 |
DZ_SDS_SendOffset_Extended | 10 |
DZ_SDS_SendOffset_OW | 16 |
SpriteNumber es el SpriteNumber del sprite, se registra para poder saber si sigue siendo valido el slot o no.
Nombre | Tamaño |
---|---|
DZ_SDS_SpriteNumber_Normal | Lorom: 12 - SA-1: 22 |
DZ_SDS_SpriteNumber_Cluster | 20 |
DZ_SDS_SpriteNumber_Extended | 10 |
DZ_SDS_SpriteNumber_OW | 16 |
PaletteLoaded si la paleta de colores no ha sido cargada entonces es 0, sino es 1.
Nombre | Tamaño |
---|---|
DZ_SDS_PaletteLoaded_Normal | Lorom: 12 - SA-1: 22 |
DZ_SDS_PaletteLoaded_Cluster | 20 |
DZ_SDS_PaletteLoaded_Extended | 10 |
DZ_SDS_PaletteLoaded_OW | 16 |
Sprites Dinámicos de 2 fases
Sprites con Rotación y Re-escalamiento
Cambio de Gráficos y Tilemaps
Se utiliza una lista de transferencias hacia la VRAM. Luego de realizar las transferencias, DZ_PPUMirrors_VRAM_Transfer_Length sera 0xFF. Si DZ_PPUMirrors_VRAM_Transfer_Length es 0xFF la lista esta vacia y no se realiza ninguna transferencia. Para utilizarlo, se recomienda usar las macros que vienen incluidos con el parche.
Nombre | Tamaño | Descripción |
---|---|---|
DZ_PPUMirrors_VRAM_Transfer_Length | 1 | Tamaño de la lista de transferencias de DMA a la VRAM. Tamaño máximo 128. |
DZ_PPUMirrors_VRAM_Transfer_SourceLength | 256 | Tabla que tiene el tamaño en bytes del recurso que se enviara. 2 bytes por transferencia. |
DZ_PPUMirrors_VRAM_Transfer_Offset | 256 | Tabla que tiene la Dirección de la VRAM donde llegara el recurso que se enviara. 2 bytes por transferencia. |
DZ_PPUMirrors_VRAM_Transfer_Source | 256 | Tabla que tiene la Dirección del recurso que se enviara. 2 bytes por transferencia. |
DZ_PPUMirrors_VRAM_Transfer_PPUSourceBNK | 256 | Tabla que tiene el BNK del recurso que se enviara. 2 bytes por transferencia (el high byte no se toma en cuenta). |
Cambio de Bloques
Cambio de Gráficos del Player
Nombre | Tamaño | Descripción |
---|---|---|
DZ_Player_GFX_Enable | 1 | Si es 1, realiza la rutina dinámica normal del player, si es 0, se deshabilita permitiendo hacer una rutina dinámica personalizando. |
DZ_Player_GFX_Addr | 2 | Indica la dirección donde inician los graficos del player, puede modificarse para cambiar los gráficos por otro player que use el mismo esquema que los gráficos originales. Por default es 0x2000. |
DZ_Player_GFX_BNK | 2 | Indica el BNK donde estan almacenados los graficos del player, puede modificarse para cambiar los gráficos por otro player que use el mismo esquema que los gráficos originales. El High byte debe ser 0x00, por default es 0x007F. |
Cambio de Paletas de colores
Sistema de Tinte-Saturación-Valor (HSV)
Sistema de Rojo-Verde-Azul (RGB)
Cambio de Paletas de colores del Player
Nombre | Tamaño | Descripción |
---|---|---|
DZ_Player_Palette_Enable | 1 | Si es 1, se realiza la rutina default de cambio de paleta del player. Si es 0, no se realiza esa rutina, permitiendo una personalizada. |
DZ_Player_Palette_Addr | 2 | Indica la dirección de memoria donde se almacena la paleta del player, puede modificarse para cambiar los colores en la paleta de colores 8 iniciando del color 0x86. Por default tiene el valor dado por la dirección de WRAM $7E0D82. |
DZ_Player_Palette_BNK | 1 | Indica el BNK donde se almacena la paleta del player, puede modificarse para cambiar los colores en la paleta de colores 8 iniciando del color #$86. Por default es 0x00. |
DZ_PPUMirrors_CGRAM_LastPlayerPal | 2 | Almacena la dirección de memoria de la ultima paleta que fue cargada. Si su valor es 0xFFFF y se utiliza la rutina de cambio de paleta default, se forzara el rutina de cambio de paleta en ese frame. |
Sistema de OAM
Modo 50% más
Widescreen
Se utiliza una rutina de HDMA para la realizar el widescreen, luego de eso, se calcula la máxima cantidad de data que se puede enviar a la VRAM.
Nombre | Tamaño | Descripción |
---|---|---|
DZ_PPUMirrors_WS_Enable | 1 | Si es 0, no se realiza la rutina de HDMA, si es 1 se realiza. |
DZ_PPUMirrors_WS_Buffer | 435 | Un buffer que tiene 2 bytes por scanline, el primer byte de cada scanline tiene el alto de la scanline y el segundo es el valor del registro 2100, al final del buffer se pone el valor 0xFF. Este buffer debe ser escrito usando las macros que vienen con el parche. |
Otros
Macros
Generales
Sprites Dinámicos
Sprites Dinámicos con Memoria Compartida
Sprites Semi-Dinámicos
Sprites Dinámicos de 2 fases
Sprites con Rotación y Re-escalamiento
Cambio de Gráficos y Tilemaps
Cambio de Bloques
Cambio de Gráficos del Player
Cambio de Paletas de colores
Sistema de Tinte-Saturación-Valor (HSV)
Sistema de Rojo-Verde-Azul (RGB)
Cambio de Paletas de colores del Player
Sistema de OAM
Modo 50% más
Widescreen
Otros
Rutinas
Generales
Sprites Dinámicos
Sprites Dinámicos con Memoria Compartida
Sprites Semi-Dinámicos
Sprites Dinámicos de 2 fases
Sprites con Rotación y Re-escalamiento
Cambio de Gráficos y Tilemaps
Cambio de Bloques
Cambio de Gráficos del Player
Cambio de Paletas de colores
Sistema de Tinte-Saturación-Valor (HSV)
Sistema de Rojo-Verde-Azul (RGB)
Cambio de Paletas de colores del Player
Sistema de OAM
Modo 50% más
Widescreen
Otros
Sprites Dinámicos
Un Sprite Dinámico es un Sprite que sus gráficos se cargan en la VRAM a medida que son requeridos. Existen distintos tipos de Sprite dinámico:
- Sprites Dinámicos Con Memoria Compartida: Es un Sprite Dinámico en que todas las copias de él, comparten el mismo cuadro de animación en todo momento.
- Sprites Dinámicos Con Memoria Mixta: Es un Sprite Dinámico que puede usar memoria compartida solo para ciertas animaciones.
- Sprites Semi-Dinámicos: Es un Sprite que carga en la VRAM todos los gráficos que necesita cuando es utilizado, luego todas las copias de dicho sprite, utilizan el mismo espacio en la VRAM para los gráficos.
- Sprites Dinámicos de 2 fases: Es un Sprite Dinámico pero cada frame requiere 2 loops para ser cargado en la VRAM, por lo tanto, la velocidad de animación máxima es 30FPS. Estos sprites suelen ser de gran tamaño y están pensados para la realización de jefes.
- Sprites con Rotación y Re-escalamiento: Es un Sprite Dinámico pero que al empezar el nivel, calcula sus frames con distintos ángulos de rotación o distintos tamaños y luego los utiliza para sus animaciones. Se recomienda siempre dentro de lo posible, no utilizarlos, ya que, el algoritmo de rotación y escalamiento utiliza vecinos más cercanos y los cuadros de animación terminan con mala calidad, además, requieren un Setup usando uberasm, se recomienda redibujar cada frame a mano o hacer sus gráficos con un Tool Externo, solo se recomienda utilizar en caso que se tenga poco espacio en el ROM.
Uso
- Usando el Dynamic Resource Adder (DRAdder), agrega todos los recursos a la carpeta Dynamic Resources.
- Agrega el nombre del sprite en la lista "ResourceList.txt" en la zona que corresponda.
- Inserta los recursos con el DRAdder e inserta el sprite con pixi.
Uso de Sprites Dinámicos (Con o sin Memoria compartida)
El primer extra byte tiene el siguiente formato:
TT?? ????
TT = Asigna si el sprite usa solo frames impares o pares para enviar sus graficos a la VRAM. 00 = Asigna de forma automatica asignando de forma balanceada, 01 = Solo envia en frames pares, 10 = Envia en solo frames impares, 11 = No usado.
Uso de Sprites Semi-Dinámicos
El primer extra byte tiene el siguiente formato:
GGGG PPP T
GGGG = Asigna en que linea de 128x8 de la VRAM se enviaran los grafico donde 0 es el tope y F es el fondo. PPP = Paleta que usara el sprite
- 000 = Paleta 8
- 001 = Paleta 9
- 010 = Paleta A
- 011 = Paleta B
- 100 = Paleta C
- 101 = Paleta D
- 110 = Paleta E
- 111 = Paleta F
T = Si es 0 Usa SP1 y SP2, Si es 1 Usa SP3 y SP4.
Creación de Sprites Dinámicos
Creación de Sprites Dinámicos Con Memoria Compartida
Creación de Sprites Dinámicos Con Memoria Mixta
Creación de Sprites Semi-Dinámicos
Creación de Sprites Dinámicos de 2 fases
Creación de Sprites con Rotación y Re-escalamiento
Uso
Sistema de Cambio de Gráficos y Tilemaps
Cambio de Gráficos del Player
Cambio de Bloques en tiempo real
Sistema de Cambio de Paletas de Colores
Cambio de Paletas de colores del Player
Sistema de Tinte-Saturación-Valor (HSV)
Sistema de Rojo-Verde-Azul (RGB)
Sistema de OAM
Modo 50% más
Widescreen
Optimizaciones de la rutina NMI-Handler
Dynamic Z y Dyzen X
Repositorio
Enlace de acceso al repositorio: https://github.com/weierstrass1/Dynamic-Z
Dynamic Z es un proyecto es de libre uso, solo se pide agregar a anonimzwx en los créditos de los proyectos donde se use. En caso de querer colaborar con el parche pedir permiso a anonimzwx.
Donaciones
Si deseas apoyar este proyecto puedes hacerlo a traves de Patreon: https://www.patreon.com/user?u=27937024
Créditos
El autor original del parche es anonimzwx.
Agradecimientos especiales a:
- LX5
- LMPuny
- Usuarios de Fortaleza Reznor
- Usuarios del discord de SNES-Office. https://discord.gg/ARPSauH