Super Mario Bros. 3/Unfinished bonus games

MaxmaolqvdA

By modifying the attributes of the Spade bonus tile with a map editor, one can access the remnants of two lost Bonus Games. The world map can be instructed to load a Bonus Game with one of three hosts, different backgrounds, and different Bonus Game types. The actual host can be any of them; they do not themselves alter how the game is run or dialog spoken.

(NOTE: The graphics in the following screenshots may be partially or completely incorrect, as many of the original tiles were either moved around or completely overwritten in the final release. Assumptions were made based on the remaining sprite and background tile configurations.)



Above are two screenshots from BMF54123's Bonus Game restoration hack showing alternate hosts, backgrounds, and game types in action.

Bonus Game Hosts
There are four host specifiers, but only one (0 / Toad) is used in normal gameplay; a Koopa Troopa and Hammer Brother were slated to host the Bonus Games. The CHR tiles (which appear twice in the ROM, for some reason) had been shifted at some point and do not line up correctly with code (off by 16; see Disassembly source for PRG bank #22, search for "HostTroopa_DrawSprites:" and "HostHammerBro_DrawSprites:").



Bonus Game Backgrounds
There are five valid bonus backgrounds, although only one is normally used. Two of them are empty and only show the brick background, and were possibly placeholders for some other variant. There are also two unused, scrambled objects that are not assigned to any particular background.

Unused Text
This Japanese text, originally discovered in the US ROM, was to have been spoken by the bonus game hosts. Some of it can only be displayed by poking certain memory addresses while a bonus game is running, but all of it points to the original bonus game structure which apparently was to be completely "rolling die" driven with different games of chance.



The Rolling Die
The Bonus Game structure was originally based entirely around a roll of the dice. Every game would open with the die and different instructions of how to win or proceed. As released, the die still exists in code (though the graphics are lost) but it's pushed off-screen in a forceful hack by Nintendo developers. Said hack also forces the Bonus Game to bypass the original logic controlling the die, jumping directly into the logic for what would have been the "secondary" instruction (see Disassembly source for PRG bank #22, search for "PRG022_C8E6:").

The code actually supports a total of eight bonus game variants, any of which could actually proceed to a second set of dialog. This functionality went largely unused, and Nintendo's hack breaks most of what's left. If the hack is removed, so the die is not hidden and bonus state alteration never happens, then most of the functionality returns. The lost text hints at what about half of the games should do.

Type 0: The Key/Coin game
Due to incomplete/non-maintained programming, you do get rewards for completing this game, but they're incorrect.


 * Rolling a "1" gives you an extra life, although it does so without playing the 1-up chime or protecting against 99 lives overflow. Unclear if this was the intended behavior. (It could be "1" gets you a "1-up".)


 * Rolling a "2" actually increments the first byte of the active Player's score "storage" (used to persist 1P or 2P's score when they switch turns), but this is an improper way to change score, and when the game exits it will overwrite the storage score with the current score anyway. So most likely this was supposed to target something else.


 * The other values that are meant to give "coins" actually give you 10 x (face value) points. This is not done properly (it will not add through the more significant digits), so most likely this is unmaintained code that was supposed to modify the Player's coins, not score.

Type 1: The "Spade" (Roulette/Slot Machine) Game
This type ultimately hosts the Spade game as the final SMB3 defines it. This may have been the original location of Type 5 (Odd-Wins Game), or it was moved here after the die game was to be abandoned. In any case, the hack's function bypasses the primary Bonus Game logic (the rolling die) and jumps directly to the secondary instruction (as if you had won the die game). If the hack is removed, this becomes an undefined die game that mimics Type 0.

Type 2: The "N-Spade" (Card-Matching) Game
This type ultimately hosts the N-Spade game as the final SMB3 defines it. This may have been the original location of Type 6 (Even-Wins Game), or it was moved here after the die game was to be abandoned. In any case, the hack's function does the same as Type 1, and will also become an undefined die game that mimics Type 0 if the hack is removed.

Type 3: Undefined Game 1 (CCCCCCC CCCCCCC)
The host will speak placeholder text: a repeating Japanese character in the original, the letter C in the English version. This is an undefined die game that mimics Type 0.

Type 4: Undefined Game 2 (DDDDDDD)
The host will just speak placeholder text: a repeating Japanese character in the original, the letter D in the English version. This is an undefined die game that mimics Type 0, however it also sets memory at address to. The significance of this value is lost, as it has no use anywhere else in code.

Disassembly source for PRG bank #30, search for "BONUS_UNUSED_DDDD (??!) only...".

Type 5: The Odd-Wins Game
The host gives directions of rolling an odd number to play the "Roulette" game, which refers to the "Spade" game. If the Bonus Game exit code is corrected to use this game type, the workflow will proceed directly to the Roulette/Slot-machine/Spade game if the player successfully rolls an odd number. Even more interesting, the original host greeting will be cleared and a second set of text will be written.

Normally, the Roulette/Spade game gives you only one chance to line up the pictures, but there is an unused counter at RAM address, which is normally set to ; setting it to any other value during the game will allow you to keep trying until either you win, or the counter reaches zero (whichever comes first). Simply press A, B, or Start to spin the reels again. A simple one-byte correction to code can restore the multiple turn behavior.

To fix this game, edit the disassembly source for PRG bank #30; search for "If Bonus_GameType <> BONUS_SPADE, jump to PRG030_8D85" and change the CMP one line before to use "BONUS_UNUSED_ODDROULETTE".

To restore the multiple tries ability, edit the disassembly source for PRG bank #22, search for "Roulette_ConfigTurns:" and change the to.

Type 6: The Even-Wins Game
The host gives directions of rolling an even number to play the "Card" game, which refers to the "N-Spade" game. If the Bonus Game exit code is corrected to use this game type, the workflow will proceed directly into the Card/N-Spade game if the player successfully rolls an even number. Even more interesting, the original host greeting will be cleared and a second set of text will be written.

To fix this game, edit the disassembly source for PRG bank #30, search for "If Bonus_GameType <> BONUS_NSPADE, jump to PRG030_8D95", and change the CMP one line before to use "BONUS_UNUSED_EVENCARD".

Type 7: The "2 Return" Game


Perhaps the most oddball of lost games, the host gives apparently incomplete direction about "2" (a die roll perhaps?). This game is the only host-significant one, as the "item" atop the "Koopa Troopa with Box" host sets you up to land on one set of two possible fixed locations on the world map. The other determining factor was apparently supposed to be whether you had approached the game on the world map by traveling leftward/upward vs. rightward/downward, although in practice this code doesn't seem to work right (see Disassembly source for PRG bank #22, search for "Bonus_Return2_SetMapPos:").

The screenshot is from a hack by Southbird demonstrating all eight types of bonus games. The docks out on the water are fixed target points that Type 7 will potentially cast you out onto. There is no evidence exactly what the point was of this "bonus game" (if you can even call it that), but its code suggests that the object sitting on the Koopa Troopa's box is not a power-up but perhaps some other indicator that was a destination you were to be sent to.

Whether this was malicious or for accessing some kind of secret part of a world map has been lost to time.