Dynamic X
Dynamic X is a tool and patch that is used to do graphics and color palette changes dynamically.
Tool Features
Patch Features
You can download the tool and resources made with the tool here:
SNEStorage
Warning: Dynamic X is SA-1 V1.40 or higher exclusive for now. I will do a non-SA-1 version in the future.
Repository
Change Log:
MMX Dig Labour and MMX Dig Labour's Pick Axe V1.0
MMX Pixi Routines V1.1
Anonimzwx's Pixi Routines V1.1
Dynamic X Open Beta V0.7
FAQ
Q: Can i change VRAM Space used by Dynamic Sprites?
Yes, it is possible using an uberasm.
Q: Can i restrict which palettes can be used by Dynamic Sprites?
Yes, it is possible using an uberasm.
Q: How Dynamic X allows to use that number of Dynamic Sprites without sacrifice framerate?
Dynamic poses are loaded only once in VRAM then they can be reused by all Sprites. Basically Dynamic X turn VRAM into a Cache Memory of Poses saving a lot of resources. Also if a Dynamic sprite can't load a pose in the current frame, it delays its dynamic routine up to be able to upload graphics.
Q: Dynamic Sprites can be affected by Global Palette effect?
Yes, you must change the first bit (from left to right) of Extra Byte 1. For example use value 80 in Extra Byte 1 does that the sprite can be affected by Global Palette Effect.
Q: Using Dynamic X Player features can i do Players of any size?
Yes, but Dynamic X only affects Palettes and Graphics, you must use another system to do interaction, object clipping or change player logic.
Q: Sometimes i have flickering, How can be fixed?
You can activate Dynamic X's NMI optimizations, if that is not enough, you can disable vanilla exanimations. Also be careful using to much Lunar Magic exanimations, if you have issues with flickering maybe you should use Dynamic X to do exanimations because in that way Data is registered on the Dynamic X's Data Counter and then dynamic sprites can delay their dynamic routine to avoid flickering.
Q: I was using a dynamic sprite and a normal sprite, but the normal sprite have glitched graphics or glitched palette. Why that happened?
that sprite is using a palette or graphics that are overwritten by the dynamic sprite. You must restrict which palette are allowed to be used by dynamic sprites and also change which VRAM's Dynamic Space use.
Q: Dynamic Sprites uses uncompressed graphics? Is there a way to use compressed graphics?
For now Dynamic X Only allows uncompressed graphics, now I have a tool to optimize tiles to use the minimum vram space possible. There are future plans for compressed graphics.
Q: How can i reduce space used by Dynamic Sprites?
A general way is optimize tiles to use the minimum space possible. For some sprites, you can separate the sprite in sections (for example separate the legs, arms and the body), this is not always possible but in a lot of cases can reduce the amount of data a lot.
Q: Is it possible transform a non-dynamic sprite into a Dynamic Sprite? Is this a good idea?
It is a very good idea transform a non-dynamic into a Dynamic Sprite, because in that way you dont need to add the Color Palette or ExGFX manually on the level and Dynamic X resuse poses, also in some cases you save space because in most of cases you don't need a 4kb exgfx for a sprite, the sprite can use a lot less space and also lot of people do various version of the same exgfx to add non-dynamic sprites to differents levels, then in those cases you can save a lot of space.
I already did a tool to transform non-Dynamic to Dynamic reusing tile and it instantly separate sections automatically. I will upload it soon after do a good Quality Assurance.
------------------------------------------------------
Youtube
Twitter
SMWControlLibX GitHub
My Discord Server
Snestorage where you can download my resources
Dynamic X is a tool and patch that is used to do graphics and color palette changes dynamically.
Tool Features
- Allows to select which Dynamic X features use.
- Allows to export all defines generated by the tool to Pixi, Uberasm Tool and GPS automatically.
- Allows to insert graphics, color palettes or any data in ".bin" format to the ROM. Data is compacted in 32kb or less data chunks and defines are generated with data addresses.
- Allows to import dynamic poses, Dynamic X generates defines to access to the poses such as a Pose ID and Pose Address. Each pose saves its data on the rom about how to load it in VRAM. Poses can be upload to VRAM from any ".asm" resource with this system.
- Allows to import drawing poses. Dynamic X generates graphic routines that are optimized to use less space and also be fast. Poses with similar characteristics share the same graphic routine. Poses can be drawn on the screen from any ".asm" resource with this system.
- Allows to import Palette Effects. Palette effects uses RGB or HSL Channels to change colors.
Patch Features
- Graphic Change: It allows to change graphics dynamically from any ".asm" resource.
- Color Palette Change: It allows to change color palettes dynamically from any ".asm" resource.
- Dynamic Poses System: It Allows to upload dynamic poses to the VRAM from any ".asm" resource, poses are reused between all resources, each pose can be loaded to VRAM only once at the same time. If VRAM's Dynamic Space is full then poses that are unused for more time are replaced.
- Drawing System: Allows to draw any pose on the screen from any ".asm" resource. Poses can be dynamic or not.
- Global Palette Effect System: Allows to change palettes dynamically applying effects such as change Hue, Saturation or brightness, also you can mix up color palette with a base color. This is more powerful than Color Math but could be a bit slow then I recommend don't change Global Palette Effect very often, if it changes every frame can produce slowdown, but every 2 frames or every 4 frames shouldn't be an issue.
- Sprite Color Palette Assignment System: Each sprite that uses Dynamic X, can use this system to load Its palette dynamically, this system integrates Global Palette Effect System then you can select if the sprite applies global effects or no, the sprite has 3 options:
- Automatic: The sprite finds a Color Palette that is not currently used and use it.
- Manually: Using Extra Byte 1, user can select which palette use.
- No Assignment: Using Extra Byte 1, user can select which palette use. But the palette is not loaded, this could be useful if you wanna use a custom palette that is already loaded in the level.
- Player Features:Optimize MarioGFX Routine to only send data when it is necessary, also optimize Yoshi and Podoboos dynamic routine. Allows to disable Player Dynamic routine to do your own Dynamic Routine or Vanilla Dynamic Routine but with others graphics. Also allows to change player palettes. With this system is possible to do custom gaphics and palettes for player.
- NMI Optimizations: Includes some NMI Optimizations such as Controller, Status bar and Fixed Color Optimizations.
You can download the tool and resources made with the tool here:
SNEStorage
Warning: Dynamic X is SA-1 V1.40 or higher exclusive for now. I will do a non-SA-1 version in the future.
Repository
Change Log:
MMX Dig Labour and MMX Dig Labour's Pick Axe V1.0
MMX Pixi Routines V1.1
- Added Hurt routine for MMX Sprites.
Anonimzwx's Pixi Routines V1.1
- Added SpawnCluster routine that I use.
- Fixed a bug related to Display Contact Effect.
Dynamic X Open Beta V0.7
- Added Dyzen's Pixi Routines.
- Added Anonimzwx's Pixi Routines.
- Added Pixi's Pixi Routines.
- Added DKC's Kritter.
- Added SMM's Midway Flag.
- Added MMX's Metall C-15 and Metall C-15's Projectiles.
- Added MMX's Explosions.
- Sprites previously uploaded changed to fix some issues related with deprecated tables.
- Some tables were deprecated.
- Fixed bug related to palettes that happened during pause.
- Fixed bug related to Player Features. Yoshi tongue acted weird.
- Fixed bug related to Player Features. Player palette wasn't loaded correctly in the second cycle of Title Screen.
- Fixed bug with Palette Assignment, sometimes palettes weren't assigned correctly.
FAQ
Q: Can i change VRAM Space used by Dynamic Sprites?
Yes, it is possible using an uberasm.
Q: Can i restrict which palettes can be used by Dynamic Sprites?
Yes, it is possible using an uberasm.
Q: How Dynamic X allows to use that number of Dynamic Sprites without sacrifice framerate?
Dynamic poses are loaded only once in VRAM then they can be reused by all Sprites. Basically Dynamic X turn VRAM into a Cache Memory of Poses saving a lot of resources. Also if a Dynamic sprite can't load a pose in the current frame, it delays its dynamic routine up to be able to upload graphics.
Q: Dynamic Sprites can be affected by Global Palette effect?
Yes, you must change the first bit (from left to right) of Extra Byte 1. For example use value 80 in Extra Byte 1 does that the sprite can be affected by Global Palette Effect.
Q: Using Dynamic X Player features can i do Players of any size?
Yes, but Dynamic X only affects Palettes and Graphics, you must use another system to do interaction, object clipping or change player logic.
Q: Sometimes i have flickering, How can be fixed?
You can activate Dynamic X's NMI optimizations, if that is not enough, you can disable vanilla exanimations. Also be careful using to much Lunar Magic exanimations, if you have issues with flickering maybe you should use Dynamic X to do exanimations because in that way Data is registered on the Dynamic X's Data Counter and then dynamic sprites can delay their dynamic routine to avoid flickering.
Q: I was using a dynamic sprite and a normal sprite, but the normal sprite have glitched graphics or glitched palette. Why that happened?
that sprite is using a palette or graphics that are overwritten by the dynamic sprite. You must restrict which palette are allowed to be used by dynamic sprites and also change which VRAM's Dynamic Space use.
Q: Dynamic Sprites uses uncompressed graphics? Is there a way to use compressed graphics?
For now Dynamic X Only allows uncompressed graphics, now I have a tool to optimize tiles to use the minimum vram space possible. There are future plans for compressed graphics.
Q: How can i reduce space used by Dynamic Sprites?
A general way is optimize tiles to use the minimum space possible. For some sprites, you can separate the sprite in sections (for example separate the legs, arms and the body), this is not always possible but in a lot of cases can reduce the amount of data a lot.
Q: Is it possible transform a non-dynamic sprite into a Dynamic Sprite? Is this a good idea?
It is a very good idea transform a non-dynamic into a Dynamic Sprite, because in that way you dont need to add the Color Palette or ExGFX manually on the level and Dynamic X resuse poses, also in some cases you save space because in most of cases you don't need a 4kb exgfx for a sprite, the sprite can use a lot less space and also lot of people do various version of the same exgfx to add non-dynamic sprites to differents levels, then in those cases you can save a lot of space.
I already did a tool to transform non-Dynamic to Dynamic reusing tile and it instantly separate sections automatically. I will upload it soon after do a good Quality Assurance.
------------------------------------------------------
Youtube
SMWControlLibX GitHub
My Discord Server
Snestorage where you can download my resources