|This pack of patches enables the SA-1 enhancement chip on your ROM and modifies most of the SMW engine to use the fast CPU, including regular/non-regular sprites and blocks, removing all slowdown on levels + overworld plus it reduces the loading times. As a bonus, it increases the maximum number of sprites on screen to 20, sprites per level to 255 and the maximum amount of tiles on screen to 128. Additionally, it optimizes some heavily math-based routines, such as the windowing HDMA effects.
With this, almost all slowdown possible in-game disappears.
- Increases the maximum amount of sprites *on screen* to 22.
- Increases the maximum amount of sprites *per level* to 255.
- Adds MaxTile, a system that allows to place much more sprite tiles on screen.
- Moves the sprite processing code to SA-1, making all sprites run about 4x faster compared to S-CPU.
- Optimizes some routines to make the level/overworld loading faster.
- Moves almost all non standard sprites, such as shooters, generators, cluster, extended, minor extended, bounce, score and smoke to the SA-1 CPU.
- Moves the block/map16 handling to the SA-1 CPU.
- Moves almost all overworld code to SA-1 side, leaving minimal CPU usage on overworld.
- All other SA-1 features such as 6/8MB support, 10.74 MHz CPU clock, Character Conversion DMA, fast RAM, arithmetic functions, etc., can be used.
SA-1 Pack v1.40 changes:
SA-1 Pack v1.36 changes:
- Adds MaxTile, a system responsible for managing OAM slots across the entire game. Via dynamic allocation, the system allows to you use ALL OAM slots for anything, including standard sprites with pretty high compatibility with previous resources. See MaxTile documentation for more information.
- The addition of MaxTile also fixes a few priority issues caused by NoMoreSpriteTileLimits.
- Now it's possible to detect SA-1 Pack and its version. See Programming guide for more information.
SA-1 Pack v1.35 changes:
- Fixed a visual glitch in the bonus game, where one of the boxes (and its item) is floating on screen, a bit higher than the ground and scrolling vertically. Thanks goes to RaspberryAlpine for finding out this.
- Made the DMA transfer on the LZ2/LZ3 decompression retry if it gets interrupted. Although NMI/IRQ does not interrupt DMA, HDMAs can actually will DMA get interrupted. Thanks goes to p4plus2 for revealing that detail for me.
- Updated programming guide to include details about common routines on SMW and on which processor SA-1 Pack uses (either SNES or SA-1). Also organized the documentation a bit.
- Added the "finish OAM" hook, an extremely useful feature for programmers. See $40:0110-$40:0112 for more details on BW-RAM docs.
- Added DMA remap which moves all game DMA logic to channel 2 and Windowing HDMA to channel 1, freeing up channel 7 for custom HDMA. In addition, DMA channel 0 is now reserved for transfers during game play (outside interrupts), fixing a rare bug on the LZ2/LZ3 decompressor when you decompress a GFX file while the game is running and *just* when the DMA executes, a NMI occurs and the DMA settings end up reseted. For the effectiveness of this solution, please change all patches to use DMA channel 2 instead of 0 or 1. This fixes issue #14 on GitHub.
- Made all levels by default use Sprite Memory Header 0x08, allowing to all original levels have up to 22 sprites on screen. Note that I have included some logic to not take in account boss fight levels and levels that has wigglers (Forest of Illusion and Outrageous), since they are not compatible with.
- Fixed bank switching getting incorrectly reset to original values after reapplying SA-1 Pack, which makes ROMs larger than 4 MB completely unplayable. This fixes issue #15 on GitHub
- Fixed an issue where the Layer 3 tilemap would glitch if a custom game over screen was used. Caused by a remap error. Thanks MFG for figuring out and providing the fix. Merges pull request #18 on GitHub.
- Fixed some inconsistencies on the programming guide.
- Minor changes on readme file.