SMB3 Sprites
We already have most of these sprites hosted in the sprites section, but let me clear up why I decided to remake them: they were lacking in everything that made them unique.
- Hammer Bros. now will hop between platforms like the Super Mario Bros. 3 counterparts.
- Boomerang Bros. can catch their boomerangs like they used to; the boomerangs also move in a smoother fashion and are extended sprites.
- Fire Bros. fireballs are extended sprites using Mario's fireball code, just tweaked to harm Mario.
- Sledge Bros. properly slam down to stun Mario instead of simply falling at the default speed sprites normally fall at.
- Goombas are pretty much the same, but can be spawned using a shooter included to make them "crawl" out of pipes.
- Para Goombas aren't modeled after SMW's code and thus properly flutter about.
- Flying Para Goombas drop extended sprite Micro Goombas that grab onto Mario and will prevent him from jumping high or running, and can be shaken off by button mashing or jumping in water.
- Micro Goombas have an added functionality that wasn't in SMB3; they die upon hitting water and sink when they touch lava, giving them slightly more personality that just a weapon.
However the sprites will not work without 2 patches I designed to go along with them. The former patch adds the extended sprites used by all of these sprites (the hammer is a new custom extended sprite with a proper X-Speed routine rather than moving horizontally pixels at a time and won't despawn immediately after going offscreen vertically). The latter patch adds the functionality to .cfg sprites that calls the default sprite interaction routine when "don't use default interaction with Mario" and "can be stomped" are both set. This allows one to check if a sprite was stomped, clear $1594,x and do whatever they please, which is useful for bosses and sprites that do other functions when stomped if you don't want to make an entirely new interaction routine.
Delay Blocks
This patch will add a new functionality to blocks by creation of a new "sprite" table. It essentially is a sprite spawned at the position of the block that will wait a number of frames before performing a specific action. By default there are 16 slots but this but even 50 slots isn't much of a stretch, along with the RAM area used and some other stuff can be customized and the blocks included will change accordingly due to the patch and blocks sharing the same defines file. Of course the 2 blocks are merely examples of what can be done here; you can create delay blocks that can, for example,
spawn a bob-omb explosion in the object's place (sorry for the slow as molasses gif) to create TNT blocks activated by being touched. Another thing is the possibility of creating a new set of Turn Blocks.
In addition to such, one thing the Delay Blocks do is when spawned if it determines there is no free slots available at that time, it will prematurely activate a block whose "marked for replacement" timer is zero (though it can be set to zero upon spawning if its low priority, or set for the entirety of its lifetime for high priority), and if none can be found it will choose a random one to activate and replace.
Lastly, in this Delay Blocks patch, it will install a set of subroutines that can be JSL'd to to perform several actions relating to blocks. The routines installed were the Map16++ (change block to next block in Map16) routine, the Change Map16 routine (change block to any Map16 block), and a slightly modified version of the Map16++ routine to be the Map16-- routine (change block to previous block in Map16). The custom blocks and delay blocks both call upon this routine for various things, but primarily to make the code run once because I am a dumb and couldn't find a better way to do that.