Be notified of new releases
Create your free GitHub account today to subscribe to this repository for new releases and build software alongside 28 million developers.Sign up
This version still does not work with VWF Dialogues and requires to you change your sprite header index to 0x08 instead of 0x10 for the 22 sprites mode. However it has native support for the new Lunar Magic version.
Recommended upgrade procedure:
- Edit your ROM with new Lunar Magic version
- Apply this SA-1 Pack version.
- Update and run your preferred Sprite Tool.
The current version of Romi's Sprite Tool will work fine except with the Goal Tape sprite. However you must update all of your sprites to take the sub off screen routines and map16 changes if you want to use them on the custom level size.
- 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.
This version does not work with the current VWF dialogues due of its new IRQ controller. It requires a small tweak to its code.
- 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 screen resolution.
- 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.
- Fixed Snes9x 1.56 crashing the game on SMW ROMs without Addmusic installed. This occurs because of the increased SA-1 CPU base clock.
- Fixed Asar 1.60 reporting error when applying the patch, due of changes in the label preprocessor.
- Fixed a missing channel change (from 0 to 1) on part of the CC-DMA setup. CC-DMA should work again.
- Migrated SA-1 Pack source code to GitHub, now available at https://github.com/VitorVilela7/SA1-Pack
- Migrated README to Markdown (ExE-Boss)
Blue Shelless Koopa finally can play shell-soccer in peace without bugs ruining their fun.
- Fixed Sprite <-> Sprite interaction missing several sprite pointer changes, making certain sprite tables corrupted. One of the most notables consequences of the glitch were the blue shelless koopas not being able to hold a shell thrown from behind.
- Fixed Yoshi spitting fire (from a red shell or if red yoshi) slight off position (around -16 pixels from where it was supposed to), due of yet another missing sprite pointer change.
- Fixed one missing wait for h-blank call, which seems the responsible for generating the lag in ZSNES for mode 7 bosses.
- Fixed Dynamic Sprites setting !SLOTSUSED to #$01 instead of #$00 after upload. This bug happened because the channel used to DMA transfer was changed to #$02 instead of #$01 and the same value was subtracted to determine !SLOTSUSED value. Also slight optimized the code, by setting the zero store before the jump table.
- Updated the Quick Guide, with more recent instructions regarding resource compatibility.
- Rewrote part of the read me.
- Add a memory map summary file to the docs folder, which contains basically all memory changes the SA-1 does. Useful for converting resources.
- Registered SA-1 main loop address, as JML, at $008A74.
- Removed some unused code related to h-blank detection.
- Removed a leftover print pc from Overworld hijack.
- Removed most of the compatible tools/patches/block/etc. pages as Dropbox will be killing them soon.
Real Hardware Compatible
This version pretty much adds compatibility with real hardware, making it run (for now) with hacked SA-1 carts (with 128KB BW-RAM or more). Thanks a lot markfrizb for discovering, testing and helping me with the fixing process. Without him I'd never really know that the SA-1 Pack had real hardware issues.
Complete change list:
- Fixed SNES NMI and IRQ vectors override not getting written correctly ($220C, $220E). These registers are SA-1 only write and they were being written on SNES CPU side, making real hardware crash. None of the major emulators currently emulate this register properly.
- Added a code on RESET routine to put the SA-1 CPU on sleep state before booting and setting up initial variables. The same procedure is done on most commercial games so I decided to include it on SA-1 Pack just to be safe in real hardware.
- Added a code for clearing DMA state ($2230) on SA-1 RESET routine.
- Made all DMAs invoked by the patch use channel 1 instead of 0. This should make the DMA remap patch work with SA-1 ROMs without requering to modify any of the SA-1 Pack code.
- Made DSX (Dynamic Sprites) patch code optional, requested by anonimzwx.
- Made some minor grammar fixes.
- Fixed Character Conversion DMA randomly freezing the game when SA-1 is unable to receive IRQs.
- Made the dynamic sprite uploader only run on level and title screen game mode. This may fix some issues with dynamic sprites getting garbaged graphics on fade in/out or even unwanted uploads.
- Fixed a bug where the arrow used in CONTINUE/END text wasn't being rendered in bsnes and other saner emulators that blocks WRAM access from SA-1 CPU.
- Fixed another bug when more than 84 sprites gets loaded. Interesting how the cause was the same as another one I fixed on version v1.20, so this time I had sure that no similar bugs will appear.
- Made all files have @includefrom sa1.asm to avoid possible patching problems.
- Made the ZSNES detection optional.
- Moved routines $00E2BD and $00C47E to SA-1 side on level game mode, which seems to handle mario physics, mario oam, most sprites types (shooters, generators, clusters, extended, minor extended, bounce, score and smoke) plus block/map16 handling. With that, the CPU usage on levels decreased a lot, almost by half.
- Moved almost all overworld code to SA-1 CPU. Now the CPU usage on overworld is around 22% and the [!] blocks spreading event runs without slowdown chance.
- Made the sprite C6 (Light) update every frame instead of every four frames.
- Fixed IRQ issues with ZSNES and bsnes accuracy. Layer 3 won't glitch anymore.
- Fixed LZ3 making the ROM crash if "case 00" wraps a bank.
- Fixed stairs GFX being messed up. The cause was of wrong bank being used on two STA opcodes on clear stack routine.
- Fixed an issue with sprite loading code, which could crash the ROM if more than 84 sprites gets loaded when placed on specific positions.
- Fixed pos-Bowser's battle.
- Fixed fireworks.
- Fixed two missing addresses from The Last Remap patch.
- Lowercased files lzx.asm, lz2.asm and lz3.asm. It should make SA-1 Pack patchable on case-sensitible OS.
- Restored old and fast MVN code on LZ2/LZ3 patches, but if ZSNES runs the old (slow) code will be used.