These articles are starting to get a bit lengthy, which is the exact opposite of what I wanted to happen! I need to work on my next videos!
Here's a small thing that I will warn is one of those things that you will never unsee once you know about it.
At least one of the animations in Super Mario Bros. 3 for the Super Nintendo is broken. The muncher graphic (which is a tile part of the background and not a sprite object) doesn't animate cleanly. It seems to be split in half some of the time.
Unfortunately I've noticed this effect ever since I first played this game so I've been suffering this whole time.
Why would this happen? We'll have to look at the original version on the NES and see how it was ported in Super Mario All-Stars.
Super Mario Bros. 3 for the NES utilized the MMC3 ROM mapper. It allowed for a bunch of fancy stuff, but the important thing for today is that it allowed for more than just 8 kilobytes of graphics for a game. Only 8 kilobytes could be used at a time but those graphics can be swapped out on the fly at any time.
SMB3 uses this feature extensively for animated tiles. All of the graphics for the entire game are sitting pretty in the CHR ROM banks in the cartridge, and all you need to do is talk to the MMC3 mapper by writing a few bytes in a few places to instantaneously swap out graphics banks.
So, to make easy animations, you create a set of graphics banks--as many banks as there are frames in your animations. Then swap them out at a regular interval and bam! Animated tiles.
There's a lot of unused and weird stuff in here that I could talk about for another hour but I don't have the time right now!
The Super Nintendo doesn't have this luxury though. All graphics need to be uploaded to video RAM in order to be used--they have to be transferred from the ROM on the cartridge. No quick hotswapping like with an NES mapper. Theoretically you could get a similar effect by uploading all of the frames to VRAM at once, and changing where the background tiles find their graphics within VRAM, but with the amount of animated graphics here, the Super NES's video RAM just wasn't large enough.
So in order to animate tiles on the Super NES, every time the animation frame advances, you have to upload allll of that data to video RAM. And you need to do this for each frame of animation. And you have to do it all during the vertical blanking period for there to be no visual anomalies. This is pretty much impossible due to how much graphics there are here.
So what Super Mario All-Stars does, is split up the animation frames into chunks. Instead of uploading all of the graphics at once (about once every 8-20 frames depending on the animation speed), it splits it into 8 pieces, uploading one chunk per frame.
The chunks are essentially the eight rows of 16 8x8 tiles, although some do break this pattern.
You may be able to see the problem already. If all of the tiles of a particular object weren't all included in the same batch, part of it would update on one frame, while the other part would update on a different frame. For the most part, all types of blocks were included in the same batch, so all 4 8x8 tiles of the full 16x16 block would update at once. However, the muncher tile seems to be the odd one out.
Half of the muncher updates 3 frames before the other half does.
Because of this, the two halves of the muncher update on different frames, which is what causes it to look weird.
This actually was fixed in Super Mario Advance 4 for the Gameboy Advance. Turns out the GBA is powerful enough to transfer all that graphics data into its VRAM at once. Pretty much all animated graphics update at the same time, more similar to its NES counterpart.
It still bugs me so much, but at least they fixed it.
You can support Retro Game Mechanics Explained on Patreon here! Any and all support is greatly appreciated!