This pack of patches enables the SA-1 chip on your ROM and modifies almost all SMW engine to make the sprites (including non-standard) and blocks processed by SA-1, killing almost all slowdown on level and overworld and decreases the level loading time. And as a bonus, it increases the maximum number of sprites on screen to 20 and per level to 255.
Additionally, it includes a couple of minor optimizations, like the circle routine used on level ending.
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.
Moves the sprite processing code to SA-1, making all sprites gets processed 4 times as normally
Optimizes some routines to make the level loading faster.
Moves almost all non standard sprites, such as shooters, generators, cluster, extended, minor extended, bounce, score and smoke to SA-1 CPU.
Moves the block/map16 handling to SA-1 CPU.
Moves almost all overworld code to SA-1 side, leaving minimal CPU usage on overworld.
All other SA-1 features like 6 and 8MB support, 10.74 MHz CPU, Character Conversion DMA, fast RAM, etc.
Versin 1.32 changes:
Fixed an oversight in the Lives Exchanger fix. (LX5)
Fixed a rare bug involving the tile generation routine. (Tattletale)
Minor code cleanup.
Version 1.31 changes:
Added support to Dynamic levels patch, built-in in Lunar Magic.
**Change Super No More Sprite Tile Limits setting header from 0x10 to 0x08**. This important change fixes various graphical glitches present in Bowser battle, such as Princess Toadstool appearing "in the front" of the clown car, Bowser's bowling ball having parts of its OAM tiles disappearing and additionally it fixes the softlock after beating Bowser, where the fireworks animation simply doesn't show out. However, this implies into having to you edit all levels that you used to have Sprite Header Index as 0x10 and change it to 0x08, otherwise you won't have more than 10 sprites on screen. The sprite header index 0x08 will not cause any problem on the original game because along index 0x03 and 0x05, it's unused in the original game while 0x10 was used for Bowser's battle scenes. This also now means you can play SMW normally using this patch, without having to use something else to fix Bowser.
Sprite resetting/cleaning routine now runs on SA-1 CPU. This should make level loading a few milliseconds faster.
Minor cleanup and rearrangements on the sprite loading routines.
Fixed live exchange not being properly updated on hardware. Patch by LX5.
Fixed graphical glitches when a mushroom (and likely other powerups) falls during Morton, Ludwig and Roy battles. SMW made it use a fixed OAM slot just for their battles, but Arujus while building the More Sprites patch thought the fixed slot would be used during normal levels as well and removed it thinking it would cause problems. I have undo that change and both works now.
Fixed sprite loading routine not running on SA-1 CPU during initialization. Now the routine is 100% SA-1 CPU.
Fixed minor grammar error on notable changes and on this document.
Version 1.30 changes:
Side note: does not work correctly with current version of RPG Hacker's VWF dialogues.
Rewrote SMW's IRQ handling system. Now it runs on RAM, gives PPU IRQ priority over SA-1 IRQ, added support for custom IRQ codes.
Added support for bypassing SMW's NMI routine to run on specific
scanline as an IRQ, also known as "IRQ-as-NMI". In practice this trick,
used in many games including Yoshi's Island, Super Mario RPG, Star Fox
and more will allow for much more DMA uploads per time, which implies
into more ExAnimations, Dynamic Sprites, etc., in sacrifice of vertical
IRQ and NMI now preserves $2224 and Direct Page. Direct Page usage and BW-RAM mapping is now allowed on SNES CPU side as well.
Rewrote most of the documents, including the README, to include more
information and use markdown styling, which includes the BW-RAM, I-RAM,
Memory Map Summary and Sprite Remap documents.
README and all other documents are now in .html format on the release .zip file.
Split some of the routines in sa1.asm to separate files.
Added W-RAM document.
Added known issues document.
Added notable changes document.
Added programming document, which was part of the README originally.
Updated quick guide to include updated information.
Added remap.asm with hybrid SA-1 Pack/normal definitions.
Made the SA-1 dynamic vectors loads value from vector info on initialization instead of static default vectors from SMW.
yeah please make this compatible with everything instead of making everything compatible with this
I'm not sure that's how SA-1 would work, I'm pretty sure that if there was a way to keep everything compatible with SA-1 on it's own, then he would have done that a long time ago. Besides, SA-1 already seems really weird with how it works on the SNES.
Tested with: Asar 1.71; Lunar Magic 3.03; bsnes v106.44
All of the fixes work, so I'm approving it.
(coders: be careful with NMI-heavy stuff when the lives exchanger is enabled though, it may break it again)