Alex Mitchell

Bug in Super Mario Bros (NES) discovered, patched

GoldS, an admin and writer at video game research wiki The Cutting Room Floor, has released a patch for Super Mario Bros. (NES) that fixes a bug in the code that governs Lakitu’s behaviour when throwing spiny eggs:

“The Spiny eggs are thrown by Lakitu in a simple way, with no horizontal movement whatsoever. However, this is not the intended behavior, and is actually the result of a bug! The eggs are supposed to be thrown out relative to the player’s speed, Lakitu’s speed, the player’s position, and a pseudo-random value, as well as bounce off of any blocks or walls that they hit on the way down.”

Super Mario Bros. was released in Japan in September 1985, which means this bug went undiscovered for a little under thirty-five years. Bugfixes like these are being released with greater frequency thanks to community efforts to decompile, reverse engineer, and explore the source code of popular games; an important step in the preservation and long-term viability of video games as a medium. Similar decompilation efforts with Super Mario 64 recently yielded a patch that fixed a twenty-four year old bug adversely affecting the way smoke was rendered, and also led to the discovery that game code in the Japanese and North American releases could be further optimized for a small performance improvement. (See also: MVG’s response to that discovery)

The “Spiny Egg Speed” patch should be applied to an unheadered NTSC copy of Super Mario Bros. You can compare the checksum of your Super Mario Bros. ROM against the No-Intro database at DAT-o-MATIC.

Something to bear in mind is that calling this patch a “bug fix” does mean making some assumptions about the way that Super Mario Bros. was authored. The Cutting Room Floor writers make a compelling case that it was a simple mistake based on how the code is laid out, but on the other hand the way Lakitu behaves is consistent between the original NES/Famicom version, the Game Boy Color “Deluxe” release, and the Super Mario All-Stars SNES port. Is this actually a bug then, or was this an artistic decision that was simpler to implement in a way that makes it look like a bug? No one but the original dev team can really say, although Lakitu’s behaviour would change for subsequent games in a way that is similar to how he behaves in post-patch SMB1. I think the important thing to reiterate here is that authorship is complicated, and without the author’s input it’s hard to know if these kinds of patches are like removing the top layer of paint from “Adoration of the Mystic Lamb”(Pic, Story) or the botched restoration of the “Ecce Homo” fresco (Pic, Story). Either way, the digital nature of this medium fortunately allows you to enjoy patched and unpatched versions without having to affect either, so it is wholly in the hands of the audience how they prefer to experience this timeless classic.