Displaced Gamers and their various technical dives, including the Behind the Code series, are favorites around here, and we’ve linked to them many times before. They take a lot of time with their content, but they always do a good job, much better than the average Youtube channel of whatever type, and it’s always something interesting to learn about. They have a new video up now (22 minutes) that examines the differences between the original and revised versions of Super Mario Bros 3, released a few months apart back in 1990.
Most of the differences were superficial: they changed the cover art slightly and added a ® symbol replacing a ™ on the Official Nintendo Seal. On the rom itself, they changed the names of the lands in the ending, from a flavorful set of localized names to just Adjective Land eight times in a row.
But there were other changes, and one of them was a substantial difference in the code, one that required moving much of it around by seven bytes to make room for it.
What was it? In brief, there’s one level in the game, 7-3, that uses a vertical-only scroll instead of a horizontal or multi-directional scroll, and it writes the images of the cards in the status window to the wrong place. So in the original release, on that one level, the card images are mysteriously blank during the vertical section.
That was fixed in the revision, which meant a check for what kind of scroll the level was using, and which changed the pointer to where to write them. Code needs space, and that space came out of a section of unused bytes at the end of the rom, with all the code between the change and that section shifted to account for it. If you had a Game Genie code that relied on data in those memory locations, too bad! You’ll need a modified version of that code.
Here’s the full low-down, which goes into much greater detail: