Tip: You can use the SMW Customizer to edit tons of misc. features in SMW, including the speed of Bullet Bills, how many points a 3-UP moon gives you, and more!
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.
Features:
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:
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.36 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.
SA-1 Pack v1.35 changes:
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.
Sorry for this taking so long to moderate, there's a lot to unpack here! Everything that I and some of the other moderators tested worked as intended. From MaxTile to sprite spamming to vanilla game improvements, everything worked beautifully.
Note to end users that if you update to this version, you may have to update some other patches as well due to a change in DMA channels. This is mostly applicable for stuff like player graphics patches, status bar/overworld huds, and retry.
I don't quite understand how Maxtile works. Is it like when a sprite is onscreen its tiles are stored in the two graphics pages and are removed when it desapawns, thus potentially allowing sprites from different headers to coexist?
MaxTile allows for more sprites tiles on the screen at the same time (such as multiple banzai bills), but it doesn't come with any management system for uploading graphics to SP1-SP4 dynamically.
I don't quite understand how Maxtile works. Is it like when a sprite is onscreen its tiles are stored in the two graphics pages and are removed when it desapawns, thus potentially allowing sprites from different headers to coexist?
When i try to use Widescreen using the system provided for SA-1, doesn't work properly because it generates random inputs, for example when I press right the player spinjumps.
here i have a uberasm "global_code.asm" with the code that i used:
Code
load:
rts
init:
rts
main:
rts
nmi:
LDA.b #$E0
STA $1D01
LDA.b #$00
STA $1D00
LDA $6100
CMP #$1E
BEQ .pass2
CMP #$1F
BEQ .pass2
CMP #$10
BCS .pass1
BRA .noLowerRes
.pass1
CMP #$17
BCC .pass2
BRA .noLowerRes
.pass2
REP #$20
LDA #$0000
STA $4360
LDA #bright_table
STA $4362
SEP #$20
LDA.b #bright_table>>16
STA $4364
LDA.b #$E0-$08
STA $1D01
LDA.b #$01
STA $1D00
LDA #%01000000
TSB $0D9F|!addr
LDA $0D9F|!addr
STA $420C
.noLowerRes
RTS
bright_table:
db $08,$80 ;0-1
db $68,$0F ;2-3
db $68,$0F ;4-5
db $08,$80 ;6-7
db $00
Follow Us On