A sprite insertion tool made to allow more dynamic sprite usage, space savings and more SA-1 compatibility.
Despite this, it is almost fully compatible with sprites written for older SpriteTools, save for the fact that Asar is now used as the assembler. There also the new sprite status table that has been moved from 1938 to 7FAF00, used by SubOffScreen routines since version 1.2.10.
Since version 1.2.13, now you can disable the 255 sprite per level support by using the -d255spl flag. This is only useful if you are converting old romi sprites to pixi and you don't know what you are doing. You will have to rebuild your rom in case you already ran pixi +1.2.10 without that flag and want now to use the flag.
Detailed usage instructions, common errors and changes compared to older sprite tools can be found in the included readme.txt file. Version history can be found in changelog.txt.
Source (up to date now): https://github.com/JackTheSpades/SpriteToolSuperDelux
List of known bugs/issues: https://github.com/JackTheSpades/SpriteToolSuperDelux/issues?q=is%3Aopen+is%3Aissue+label%3Abug
Any weird issues you may encounter, contact me on discord (Atari2.0#1706).
Version 1.32 (January 23, 2021):
- (Atari2.0) Fixes spritetool_clean.asm not being in the asm/ folder.
- (Atari2.0) Now permits nested shared routine calls, fixing https://github.com/JackTheSpades/SpriteToolSuperDelux/issues/28
- (Atari2.0) Updated asar.dll to 1.80, fixes https://github.com/JackTheSpades/SpriteToolSuperDelux/issues/35
- (Atari2.0) Updated and fixed make, Makefile and .gitignore
- (Atari2.0) Added escaping to ! in filepaths, fixes https://github.com/JackTheSpades/SpriteToolSuperDelux/issues/16
- (Atari2.0) Added autoclean to all sprite pointers, fixes https://github.com/JackTheSpades/SpriteToolSuperDelux/issues/34
- (Atari2.0) Fixed various compiler warnings, swapped fread arguments causing an error when writing extmod file.
- (Atari2.0) Fixed snestopc not working correctly on SA-1 roms bigger than 2 mbs
- (Atari2.0) Greatly refactored and reworked MeiMei, embedded both ROM classes in one
- (Atari2.0) Made Pixi work on +6mb ROMs correctly
- (Atari2.0) Now can use -nr to specify max number of shared routines
- (Atari2.0) Fixed various memory leaks, along with a couple of asar warnings related to relative paths being used.
- (Atari2.0) You can now use comments in your list.txt file
- (Atari2.0) Completely rewritten populate_sprite_list and relative_directory to fix various bugs related to pathing.
Version 1.31 (November 4, 2020):
- (Atari2.0, randomdude999) Fully implemented Romi's SpriteTool legacy cleanup (note that this doesn't mean that now Pixi can coexist in the same rom as SpriteTool but it means that at least SpriteTool roms can be easily upgraded to Pixi without breaking massively as long as you do it properly). ASM file used for cleanup provided by randomdude999.
- (Atari2.0) Fixed an issue where upon upgrading from 1.2.x to 1.3, Pixi would completely destroy overworld layer 2 events.
- (Atari2.0) Upped limit for .s16 files from 0x10 pages to 0x38 pages
- (Atari2.0) Added extmod support (for specifics read the Lunar Magic help file in the section "Restore Options"), also added a "-ext-off" command line option to turn off extmod logging.
- (Atari2.0) Finished implementing -mw2 and -mwt command line options, since they were not completed.
- (Atari2.0) Fixed a bunch of compilation warnings.
- (Atari2.0) Added a command line option (-lm-handle) strictly to enable the use of Pixi in the custom user toolbar of Lunar Magic, check LM's help file for more details. Usage is: "-lm-handle <LM_VERIFICATION_HANDLE>", this command line option can't be used out of LM's custom user toolbars. Keep in mind that this is Windows only.
- (Atari2.0) Added an icon to the executable file.
Version 1.3 (September 19, 2020):
- (Atari2.0) Added a lot of utility routines (CapeContact, CheckForContactAlternate, SetPlayerClippingAlternate, SetSpriteClippingAlternate, LoseYoshi, FinishOAMWrite, FireballContact) most of these were taken from GIEPY. Credit to respective authors in the asm files.
- (Atari2.0) Fixed a bug regarding cape interaction with extended sprites by adding a print "CAPE" statement, along with an ExtendedCapeClipping routine
- (Atari2.0) Added a SpawnSpriteSafe routine to fix a problem related to how the vanilla game handles OAM in certain sprite slots.
- (Atari2.0) Optimized Random a little bit
- (Akaginite, randomdude999 and Atari2.0) Fixed, reworked and merged the per-level sprites update. Now you can use B0-BF as normal sprite slots aswell, reduced insert size
- (Atari2.0) Added print statements for states that are not 8, more details in README.txt
- (Atari2.0) Fixed various bugs related to per-level sprites in sprite.cpp
- (Atari2.0) Added a warning in case the user is inserting Pixi while having the VRAM patch from LM disabled.
- (Alcaro) Updated asardll.c to not give compiler warnings about strict aliasing and a missing cast
- (randomdude999) Fixed compilation on Linux, added basic makefile
- (lx5, Atari2.0) Updated CFG Editor and Pixi to support json files with more than 4 extra bytes for custom collections.
- (Atari2.0) Changed SA1 definitions to use absolute addressing instead of long addressing.
- (Atari2.0) Added setting bit to disable Lunar Magic sprite count warning message when using 255 sprites per level.
- (Atari2.0) Fixed per-level sprites displaying 9 extra bytes in the Lunar Magic window, forced to 4 (as a side effect of this, in fact, per level sprites now can only use up to 4 extra bytes).
Version 1.2.15 (July 10, 2020):
- (Atari2.0) Removed unnecessary waiting (BRA $00/NOPs) in SA-1 version of various routines (Aiming, CircleX, CircleY, Random)
- (Atari2.0) Added exception control for missing .json files. Now it will output exactly what json file was not found instead of printing the stacktrace.
- (Atari2.0) Added a command line option "-out" that can be added after "-d" to redirect debug output to a file instead of the prompt/stdout.
- (Atari2.0) Fixed trimming of filenames causing bug with trailing whitespaces in .cfg/.json names in list.txt
- (Atari2.0) Added a warning in case the user is inserting Pixi into a rom without having modified any level in Lunar Magic, causing various bugs (like goal posts not working).
Version 1.2.14 (March 02, 2020):
- (Atari2.0) Fixed a bug which caused pixi to cleanup stuff wrong if you ran it with an empty list.
- (Sillymel) Fixed a bug in GetDrawInfo which caused it to consider clippings from 20+ instead of two-tiles death animation flags. This is actually a bug in the Vanilla game as well (see $01A365 and $02D378).
- (Sillymel) Fixed comments on ShooterMain.
- (Sillymel) Fixed a bug which caused SpawnExtended to return the wrong carry flag when signalling it failed to spawn a sprite due to the sprite being offscreen.
- (Sillymel) Fixed carry return of GetMap16 so it actually returns the flags like it says it should.
- (Sillymel) Fixed ChangeMap16 return so it returns #$FFFF instead of #$00FF.
- (Sillymel) Fixed a bug which caused ChangeMap16 to break the stack due to it mishandling 16 bit mode.
- (Tattletale) Added proper documentation to -d255spl.
- (Tattletale) Added a comment about x/y offset in SpawnSprite, basically it substracts them if they are negative.
- (Tattletale) Added a comment about TDC usage in GetDrawInfo.
- (Tattletale) Fixed a slight overlook in GetDrawInfo which would cause it to keep the vertical offscreen flag's state if the sprite is offscreen horizontally. Reported by Super Maks 64.
- (Tattletale) -ssc is now properly implemented, reported by Shiny Ninetales, quite possibly imamelia had issues with this too.
Since it's not specifically mentioned in the readme.txt, I figured out that the character to start comments in your list.txt (as of v1.32) is a semi-colon (;).
On any line (blank lines or on a sprite definition row) anything after a (;) will be considered a comment and be ignored while PIXI runs. This makes it easy to add notes, for example which ExGFX goes with which custom sprite.