Super Mario Bros. 2
Nintendo's 1988 platformer for the NES, remade from the Famicom Disk System game Doki Doki Panic, in which four playable characters pull up vegetables and throw them.
On this page
Super Mario Bros. 2 is Nintendo’s sequel to Super Mario Bros. for the NES, released in North America in October 19881. It is a remake of Yume Kōjō: Doki Doki Panic, a Famicom Disk System game that came out in Japan on 10 July 19872. Nintendo made Doki Doki Panic under a deal with Fuji Television, as a tie-in for its Yume Kōjō expo, starring the expo’s mascots3.
Japan’s own Super Mario Bros. 2, now called The Lost Levels, didn’t come out in North America. IGN’s history says Nintendo judged it too hard for players there, and the retellings agree that Doki Doki Panic was remade in its place4. Kensuke Tanabe directed the remake5. He said that moving the game from disk to cartridge gave the team the chance to change other things, and that Mario’s cast would appeal in America where Fuji Television’s characters wouldn’t6. The game came back to Japan on 14 September 19927 as Super Mario USA.
Tanabe traced the game to a prototype programmed by SRD, in which two players climbed a screen that scrolled upward, stacking blocks and throwing each other. Shigeru Miyamoto suggested making it scroll sideways, more like a Mario game, and picking up blocks became pulling vegetables out of the ground8.
In the manual’s story, Mario dreams of Subcon, a land cursed by Wart, who hates vegetables. The game has 20 areas in seven worlds, each area ending in a boss and the last in Wart, and the player picks one of four characters whose jumps differ9. Stomping no longer defeats an enemy; the player stands on it, lifts it, and throws it10.
Computer Entertainer gave it 4½ stars of 511 in October 1988 and called it a worthy sequel. It reached no. 1 on that newsletter’s December chart, and on Nintendo Power’s Top 30 by the March/April 1989 issue12. In the magazine’s first annual awards, the Nesters, readers’ votes gave it Best Theme & Fun, Best Play Control, and Best Ending13. In Japan, Famicom Tsūshin’s reviewers gave Super Mario USA 24 of 4014, and one found it almost unchanged from Doki Doki Panic, which the magazine had scored 31 of 4015 in 1987. Alex Navarro scored the 2007 Virtual Console release 8 of 1016 for GameSpot. Gizmodo UK’s 2015 list counts 7.46 million17 copies sold, without naming its source. GameSpot credits the game with the Princess’s and Toad’s debut as playable characters, and IGN calls it the series’ big aberration18.
#How it plays
Each character’s jump comes from a table of take-off speeds, picked by whether the character is running, has charged a crouch, or is carrying something19. Mario leaves the ground fast and falls fast20. Luigi takes off far slower under a far lighter gravity, so his jump rises and falls slowly21. Toad and the Princess take off slower than Mario, except from a charged crouch, where all four leave at the same speed, and they fall under his gravity22,23. Holding Down for 6024 frames charges a crouch, and the jump from it is the highest the character has24,19.
Holding the jump button lightens gravity on every frame it is held, so a held jump goes higher than a tap25. Outside quicksand, a fall stops speeding up at a top speed25. With the button held at the top of a jump, the Princess hovers for up to 6026 frames, bobbing up and down26.
Speed builds by the same step each frame, to walking speed in 1227 frames, and B raises the top speed by half27,28. From a run, letting go of the d-pad and B drops the character to walking speed at once, and it stops 827 frames later27. Carrying an enemy or a block slows Luigi and the Princess, and Toad runs faster with one than empty-handed29. Quicksand drags every character down to a crawl and a low jump, and sinking too far is fatal30.
B pulls up whatever grows from a tuft of grass, or lifts an enemy or a block the player stands on. Toad pulls fastest and the Princess slowest31. B again throws it forward, and most things rise as they leave if the player was moving32. Vines, chains, and ladders are climbed faster down than up33.
The life meter starts each level with two marks and can grow to four34. A hit takes one mark and starts 12735 frames of invincibility frames. If it leaves two marks or more, it also launches the player up and away from the enemy35. On the last mark the character shrinks36. Every eighth enemy defeated comes back as a heart that restores a mark37.
A potion thrown to the ground opens a door into Subspace, except in a vertical area, where it vanishes38. Subspace lasts about 38439 frames39. Its grass gives coins on the first two visits in a level39. A mushroom there adds a mark to the meter and fills it, up to two a level40. Every fifth large vegetable pulled is a stopwatch41. After each level the coins pay for spins of a three-reel slot machine, whose cherries and triples win lives42.
#From Doki Doki Panic
Super Mario Bros. 2 keeps Doki Doki Panic’s character stats, its seven worlds, and most of its enemy graphics43,44,45. It changes the cast and adds a run and shrinking46,47,36. None of its song data matches the disk for more than 548 bytes in a row48.
| Doki Doki Panic | Super Mario Bros. 2 | |
|---|---|---|
| Cast | Imajin, Lina, Mama, and Papa | Mario, the Princess, Luigi, and Toad, built on their models, IGN says46 |
| Character stats | the same table on the disk | the same, except Luigi’s take-off speeds43 |
| B button | lift and throw, per its manual | lift, throw, and run47 |
| Crouch jump | charged by holding Down | the same49 |
| Life meter | two marks, up to four | the same34 |
| On the last mark | no shrinking | the character shrinks36 |
| To finish | all four clear the last page | any one clears the last level50 |
| Door item | a magic lamp | a magic potion38 |
| Grass through the door | medals, for two visits | coins, for two visits51 |
| Prize through the door | a heart | a mushroom52 |
| After a level | the Bonus Chance | the same reels, with one cherry on the first where the disk has three53 |
| Levels | 20 pages in seven chapters | 20 areas in seven worlds44 |
| Final boss | Mamu | Wart54 |
| Enemy graphics | most of its enemy tiles occur on the disk45 | |
| Song data | no run of more than 548 bytes found on the disk48 | |
| Unused data | Doki Doki Panic’s: a 24-byte table and its four heroes’ heads55 | |
| A Bonus Chance heading | “--- BONUS CHANCE ---”, read through SMB2’s letter codes | 20 blank tiles56 |
| Disk System sound | a leftover write to its register57 | |
| In Japan | 10 July 19872 on disk, from Fuji Television | 14 September 19927 on cartridge, as Super Mario USA |
#Across the series
Against Super Mario Bros., Mario leaves the ground faster; there a jump starts at −4 px/frame (−5 running)58,20. The take-off depends on a charged crouch and on carrying as well as on running, where Super Mario Bros. picks one of five rows by speed alone19,59. Super Mario Bros. switches from the light gravity to the heavy one once in a jump, and never back60. Here the button picks the gravity on each frame25. Without the button, Mario’s gravity equals the first game’s for a standing jump after the switch20,61. A fall’s speed is at most $3F (3.9375 px/frame)25, below Super Mario Bros.’ 4 px/frame62,25.
Both games share a walking speed, but B raises it by half here, where Super Mario Bros.’ caps are $18 walking (1.5 px/frame), $28 running (2.5 px/frame)63,28. Speed builds far faster, to walking speed in 1227 frames against the first game’s $18 in 40 frames walking, $28 in 45 running64,27.
In Super Mario Bros. a hit on big Mario keeps enemies off him for 8 ticks of 21 frames (148–168 frames)65. Here a hit takes one mark of the life meter and starts 12735 frames of safety35, and a character shrinks only on the last mark36.
The Lost Levels gave Luigi lighter gravities over Mario’s take-off speeds66. Here he has take-off speeds of his own as well21.
Cartridge
Mechanics
| Mechanic | Kind | How |
|---|---|---|
| Jump | Speed by state | each character's table picks the take-off speed by running, a charged crouch, and carrying |
| Gravity | Lighter while held | each character has a lighter gravity for any frame the button is held |
| Variable jump height | Held gravity | a lighter gravity on every frame the button is held |
| Running | Run button | B raises the top speed by half, from 1.5 to 2.25 px/frame; carrying an enemy or a block changes the cap |
| Flight | Hover | the Princess hovers for up to 60 frames with the button held |
| Climbing | Vine or ladder | vines, chains, and ladders, climbed faster down than up |
| Hit points | a life meter of two to four marks; a hit takes one | |
| Health upgrade | Whole containers | up to two mushrooms a level, each adding a mark until the level ends |
| Healing item | Instant | every eighth enemy defeated comes back as a heart worth one mark |
| Invincibility frames | Frame timer | a hit sets 127 frames, counted every frame |
| Knockback | Launch | a hit that leaves two marks or more launches the player up and away |
| Bonus stage | Slot machine | a slot machine after each level, one coin a spin |
| Extra life | Other condition | the slot machine's cherries and triples win lives |
Every claim about this game, by concept (62)
References
- ^ abNintendo of America's list of NES games dates Super Mario Bros. 2 to October 1988, and Computer Entertainer's October 1988 issue lists it among Nintendo's games due that month.PublisherNintendo, NES Games · Computer Entertainer, Oct 1988 · IGN, History of Super Mario Bros.
How we know
Super Mario Bros. 2
PDF p. 12 · archived copy ↗ Super Mario Bros. 2
printed p. 14, "Availability Update", Nintendo · archived copy ↗ originally released stateside in October 1988
Super Mario Bros. 2 · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^ abDoki Doki Panic (Yume Kōjō: Doki Doki Panic) came out for the Famicom Disk System on 10 July 1987, published by Fuji Television, by the Agency for Cultural Affairs' Media Arts Database. Famicom Tsūshin's issue of 24 July lists it as on sale.WebMedia Arts Database, Doki Doki Panic · Famitsu 28 (1987-07-24)
How we know
出版日 1987-07-10 … 出版者名 フジテレビ
record M727630 · archived copy ↗ 発売中
pp. 10-11, game information · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^Chris Kohler reported, from an interview with Kensuke Tanabe, that Doki Doki Panic was a tie-in that Nintendo made under a deal with Fuji Television for its Yume Kōjō ("Dream Factory") expo, starring the expo's mascots. Tanabe recalled being handed a sheet of characters at Fuji Television and told to make a game with them.InterviewKohler, "Secret History of SMB2"
How we know
Doki Doki Panic was actually part of a deal with the Fuji corporation … The mascot characters invented for this expo were the stars of the game. … being handed a sheet with game characters on it
Doki Doki Panic section · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^Retellings agree that Nintendo didn't release the Japanese Super Mario Bros. 2 in North America and remade Doki Doki Panic as the sequel instead. IGN's 2010 history says Nintendo judged the Japanese game too hard for North American players and cancelled its release there, and Boss Fight Books' description of Jon Irwin's book says Nintendo of America declared it "too hard".WebIGN, History of Super Mario Bros. · Irwin, Super Mario Bros. 2 (2014) · Kohler, "Secret History of SMB2"
How we know
Nintendo decided Mario 2's difficulty level exceeded North American skill level. … they canceled its stateside release and looked for an alternative
Super Mario Bros. 2 · archived copy ↗ was declared “too hard” by Nintendo of America
publisher description · archived copy ↗ swapping the game's characters out for the Mario cast
"You may already know the rest of the story" · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^Kensuke Tanabe directed the game. He said in 2004 that it was the first game he directed, and Kohler's 2011 report calls him its director. Kohler writes that Doki Doki Panic was made by the Mario team.InterviewNWR interview with Kensuke Tanabe (2004) · Kohler, "Secret History of SMB2"
How we know
The first game I directed was Super Mario 2 on the NES.
Tanabe's background · archived copy ↗ Super Mario Bros. 2 director Kensuke Tanabe
opening paragraph · archived copy ↗ Since it was developed by the Mario team
after "You may already know the rest of the story" · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^Tanabe told Kohler that moving the disk game to a cartridge for America gave the team the chance to change other things, and that Fuji Television's characters wouldn't be popular in America where Mario's would. Kohler writes that Tanabe's team added enemies and visual nods to the Mario games, and greatly improved the animation and sound effects.InterviewKohler, "Secret History of SMB2"
How we know
Because we had to make this change, we had the opportunity to change other things … We knew these Fuji TV characters wouldn't be popular in America, but what would be attractive in America would be the Mario characters. … adding more enemy characters, throwing in some visual nods to the Mario games and greatly enhancing the animation and sound effects
after the Fuji deal · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^ abNintendo brought the game to the Famicom in Japan on 14 September 1992 as Super Mario USA. Famicom Tsūshin's review gives the date and calls it the NES version of Mario 2, built on the disk game Doki Doki Panic, landing in Japan again.MagazineFamitsu 199 (1992-10-09) · Nintendo, Super Mario USA page · Kohler, "Secret History of SMB2"
How we know
発売日 9月14日
p. 37, review header · archived copy ↗ ディスクカードのアクションゲーム『夢工場ドキドキパニック』のNES版『マリオ2』が日本に再上陸。
p. 37, game information · archived copy ↗ スーパーマリオUSA
title · archived copy ↗ the game was eventually brought back to Japan, retitled Super Mario USA
last paragraph · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^Tanabe told Kohler the game grew out of a prototype that SRD programmed for Nintendo: a two-player game that scrolled up as the players climbed, stacking blocks and throwing each other. Shigeru Miyamoto suggested making it scroll sideways and more like Mario. Tanabe said picking up blocks became pulling vegetables from the ground, and throwing the other player became throwing enemies.InterviewKohler, "Secret History of SMB2"
How we know
The prototype, worked up by SRD, a company that programmed many of Nintendo's early games … The game-design team led by Miyamoto was tasked with coming up with a game that used this trick of programming.
opening paragraphs · archived copy ↗ add in traditional side-scrolling gameplay
after the Miyamoto quote · archived copy ↗ Picking up blocks was the same thing as pulling out vegetables from the ground … picking up the other player and throwing him turned into picking up enemy characters
before the Fuji deal · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^In the North American manual's story, Mario dreams of Subcon, a land of dreams under a curse by Wart, who hates vegetables. The game has 20 areas in seven worlds, each area ending with a boss and the last with Wart. The player picks one of four characters, Mario, Luigi, Toad, and the Princess, whose jumps differ.ManualSuper Mario Bros. 2 manual (US)
How we know
Welcome to 'Subcon', the land of dreams. … Remember, Wart hates vegetables.
The Story of Super Mario Bros.2 · archived copy ↗ This game is comprised of 20 areas in 7 worlds as shown in the diagram above. There is a little boss at the end of each area.
Know the Basic Rules of the Game · archived copy ↗ Each of the four have different jumping powers and ways of jumping.
Know what each character can do · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^Against Super Mario Bros., Alex Navarro's 2007 GameSpot review lists four playable characters, the power to pick up enemies, odd power-ups, and enemies that aren't Bowser's. Stomping on an enemy no longer defeats it; the player stands on it, lifts it, and throws it.WebNavarro, Super Mario Bros. 2 review (2007)revised
How we know
SMB2 was indeed a departure from what Super Mario Bros. laid out … Stomping on enemies no longer killed them.
review body · archived copy ↗ The quote matches our archived copy.
Revised after a check by a second AI model, 2026-10-26.
- ^Computer Entertainer's October 1988 review gave it four and a half stars and called it a worthy sequel, not to be missed.MagazineComputer Entertainer, Oct 1988
How we know
could easily have been subtitled 'Nintendo does it again.'
printed p. 10, Nintendo software · archived copy ↗ This one is a worthy sequel and not to be missed.
printed p. 10 · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^Computer Entertainer's December 1988 chart of videogames had it at no. 1. Nintendo Power's November/December 1988 issue put it at no. 2 in the pros' picks, and its Top 30 had it at no. 1 in the March/April 1989 issue, for the second issue running.MagazineComputer Entertainer, Dec 1988 · Nintendo Power 3 · Nintendo Power 5revised
How we know
Super Mario Bros II (Nin/NES)
printed p. 1, Top Fifteen Videogames · archived copy ↗ PROS' PICKS
p. 103, Pros' Picks · archived copy ↗ A solid lead for the second issue in a row.
pp. 70-71, Top 30 · archived copy ↗ The quote matches our archived copy.
Revised after a check by a second AI model, 2026-10-26.
- ^In the first annual Nintendo Power Awards, the "Nesters" of the May/June 1989 issue, readers' votes gave it three: Best Theme & Fun, Best Play Control, and Best Ending.MagazineNintendo Power 6revised
How we know
now, without further ado, we proudly present the winners of the first annual Nesters! … Your votes are in, the ballots have been tabulated
p. 18, Nester Awards · archived copy ↗ The landslide winner is Super Mario Bros. 2
p. 19, Best Theme & Fun · archived copy ↗ Once again the winner is Super Mario Bros. 2.
p. 19, Best Play Control · archived copy ↗ Taking honors once again is
p. 20, Best Ending · archived copy ↗ The quote matches our archived copy.
Revised after a check by a second AI model, 2026-10-26.
- ^Famicom Tsūshin's four reviewers gave Super Mario USA 24 of 40 in 1992. One wrote that it was almost unchanged from Doki Doki Panic but still plenty of fun, and that he wished its enemies had been made Mario's; another that only the hero had been swapped and the game, five years old, felt old.MagazineFamitsu 199 (1992-10-09)
How we know
ほとんど『夢工場ドキドキパニック』と変わっていない。 … できれば『マリオ』の敵キャラクターにしてほしかったな。
p. 37, Arutsu Suzuki · archived copy ↗ なにぶん5年も前のゲームなので、昔のゲームデザインっていう印象は否めない。
p. 37, Isabella Nagano · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^Famicom Tsūshin's reviewers gave Doki Doki Panic 31 of 40 in 1987. One called it an action game that arranges Super Mario a little, changing the weapons and removing the score.MagazineFamitsu 28 (1987-07-24)revised
How we know
「スーパーマリオ」をちょっとアレンジしたアクションゲーム。 … 武器を変えたり、スコアをなくしたり
p. 11, cross review, first box (score 6) · archived copy ↗ The quote matches our archived copy.
Revised after a check by a second AI model, 2026-10-26.
- ^Reviewing the Wii Virtual Console release in 2007, GameSpot's Alex Navarro scored it 8 of 10 and wrote that its unusual play still holds up.WebNavarro, Super Mario Bros. 2 review (2007)
How we know
One of the weirdest Mario games of all time comes to the Virtual Console, and it holds up wonderfully.
review summary · archived copy ↗ its unique gameplay still holds up as challenging and fun all these years later
review body · archived copy ↗ Wart is no substitute for Bowser 8 Great
review box · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^ abGizmodo UK's 2015 list of the best-selling Mario games counts 7.46 million copies of the NES game, 22nd among them. The list doesn't say where its figures come from.WebO'Malley, best-selling Mario games (2015)
How we know
22) Super Mario Bros. 2 (1988, NES) - 7.46 million
no. 22 · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^GameSpot's review credits the game with the Princess's and Toad's debut as playable characters, and says Super Mario Bros. 3 went back on many of its ideas. IGN's history calls it the series' big aberration, and says Luigi got his first distinctive traits in the Japanese sequel and his first model of his own here, built on Mama's and taller than Mario.WebNavarro, Super Mario Bros. 2 review (2007) · IGN, History of Super Mario Bros.
How we know
Super Mario Bros. 2 marked the debut of Princess Toadstool and Toad as playable characters. … Super Mario Bros. 3, actually reneged on a lot of this game's ideas
review body · archived copy ↗ In retrospect, it became the series' big aberration … now he got his first original character model as well. Building on Mama's model made him noticeably taller than Mario, too.
Super Mario Bros. 2 · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^ abc
PlayerStartJumpfirst checks quicksand: sunk withQuicksandDepth2 or more, the player takes off atJumpHeightQuicksand,$E0for all four (quicksand), and the table is skipped. Otherwise it picks the take-off speed from the character's table by three bits: running (horizontal speed of$08or more), a charged crouch (CrouchJumpTimerat$3C), and holding an item. A charged jump clears the running bit.CodeSMB2 DiscombobulatedrevisedHow we know
2537; %xxxxxRCI 2538; R = whether the player is running 2539; C = whether the crouch timer is charged 2540; I = whether the player is holding an item ⋮ 2542PlayerStartJump: 2543 LDA QuicksandDepth 2544 CMP #$02 2545 BCC PlayerStartJump_LoadXVelocity ⋮ 2547 ; Quicksand 2548 LDA JumpHeightQuicksand 2549 STA PlayerYVelocity 2550 BNE PlayerStartJump_Exit ⋮
src/prg-0-1.asm lines 2535–2588 at b73415e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-26.
- ^ abcMeasured in Mesen (MesenCE 2.2.1) from power-on, on the floor at the bottom of 1-1's first area (probes/super-mario-bros-2/movement.mjs), empty-handed Mario's jumps leave the ground at -5 standing, -5.625 running, and -6.5 px/frame from a charged crouch, and each frame adds 0.25 px/frame with A held and 0.4375 without:
MarioStats'$B0,$A6, and$98, and its gravities$04and$07. With an item, see carry-stats.VerifiedSMB2 DiscombobulatedrevisedHow we know
271MarioStats: ⋮ 278 .db $B0 ; Jump Speed, still - no object ⋮ 280 .db $98 ; Jump Speed, charged - no object ⋮ 282 .db $A6 ; Jump Speed, running - no object ⋮ 286 .db $07 ; Gravity without Jump button pressed 287 .db $04 ; Gravity with Jump button pressed
src/prg-a-b.asm lines 271–290 at b73415e · upstream ↗ Measured by a script in MesenCE 2.2.1 (build 4b8a196), on . It fails if the result disagrees with the claim.
The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-26.
Checked by a second AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-26.
- ^ abLuigi takes off far slower but falls under a far lighter gravity. Measured in Mesen (MesenCE 2.2.1) from power-on, on the floor at the bottom of 1-1's first area, empty-handed, his jumps leave the ground at -2.625 standing, -3 running, and -3.4375 px/frame charged, and each frame adds 0.0625 px/frame with A held and 0.125 without:
LuigiStats'$D6,$D0, and$C9, and its gravities$01and$02. With an item, see carry-stats.VerifiedSMB2 DiscombobulatedrevisedHow we know
321LuigiStats: ⋮ 328 .db $D6 ; Jump Speed, still - no object ⋮ 330 .db $C9 ; Jump Speed, charged - no object ⋮ 332 .db $D0 ; Jump Speed, running - no object ⋮ 336 .db $02 ; Gravity without Jump button pressed 337 .db $01 ; Gravity with Jump button pressed
src/prg-a-b.asm lines 321–343 at b73415e · upstream ↗ Measured by a script in MesenCE 2.2.1 (build 4b8a196), on . It fails if the result disagrees with the claim.
The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-26.
Checked by a second AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-26.
- ^Measured in Mesen (MesenCE 2.2.1) from power-on, on the floor at the bottom of 1-1's first area, empty-handed Toad's jumps leave the ground at -4.875 standing, -5.1875 running, and -6.5 px/frame charged, and fall under Mario's gravity, 0.25 px/frame a frame with A held and 0.4375 without:
ToadStats'$B2,$AD, and$98, and$04and$07. With an item, see carry-stats.VerifiedSMB2 DiscombobulatedrevisedHow we know
296ToadStats: ⋮ 303 .db $B2 ; Jump Speed, still - no object ⋮ 305 .db $98 ; Jump Speed, charged - no object ⋮ 307 .db $AD ; Jump Speed, running - no object ⋮ 311 .db $07 ; Gravity without Jump button pressed 312 .db $04 ; Gravity with Jump button pressed
src/prg-a-b.asm lines 296–318 at b73415e · upstream ↗ Measured by a script in MesenCE 2.2.1 (build 4b8a196), on . It fails if the result disagrees with the claim.
The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^Measured in Mesen (MesenCE 2.2.1) from power-on, on the floor at the bottom of 1-1's first area, the empty-handed Princess's jumps leave the ground at -4.8125 standing, -5.25 running, and -6.5 px/frame charged, and fall under Mario's gravity, 0.25 px/frame a frame with A held and 0.4375 without, apart from her float (float):
PrincessStats'$B3,$AC, and$98, and$04and$07. With an item, see carry-stats.VerifiedSMB2 DiscombobulatedrevisedHow we know
346PrincessStats: ⋮ 353 .db $B3 ; Jump Speed, still - no object ⋮ 355 .db $98 ; Jump Speed, charged - no object ⋮ 357 .db $AC ; Jump Speed, running - no object ⋮ 361 .db $07 ; Gravity without Jump button pressed 362 .db $04 ; Gravity with Jump button pressed
src/prg-a-b.asm lines 346–368 at b73415e · upstream ↗ Measured by a script in MesenCE 2.2.1 (build 4b8a196), on . It fails if the result disagrees with the claim.
The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^ abHolding Down on the ground charges the crouch jump for 60 frames, except on a flying carpet or in quicksand. Crouched on the ground, left and right do nothing; in the air, with Down held, they still steer. Let go of Down before then and the charge is lost; let go after and it is kept until left or right is pressed or the player jumps.CodeSMB2 Discombobulatedrevised
How we know
2461loc_BANK0_8C3D: 2462 LDA PlayerRidingCarpet 2463 BNE loc_BANK0_8C92 ⋮ 2465 LDA QuicksandDepth 2466 BNE ResetPartialCrouchJumpTimer ⋮ 2468 LDA Player1JoypadHeld ; skip if down button is not pressed 2469 AND #ControllerInput_Down 2470 BEQ ResetPartialCrouchJumpTimer ⋮ 2472 INC PlayerDucking ; set ducking state? 2473IFDEF PLAYER_HITBOX 2474 LDA PlayerDucking 2475 STA PlayerHitbox ⋮
src/prg-0-1.asm lines 2461–2495 at b73415e · upstream ↗ 2516ResetCrouchJumpTimer: 2517 LDA #$00 2518 STA CrouchJumpTimer 2519 BEQ loc_BANK0_8C95 ; unconditional branch?
src/prg-0-1.asm lines 2516–2519 at b73415e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^ abcde
PlayerGravityadds the character's lighter gravity on any frame the jump button is held and the heavier one otherwise, and adds none once a fall has reached$39(3.5625 px/frame). The last add can carry the fall past that, up to$3F(3.9375 px/frame) under a gravity of$07. Two branches come first: sunk in quicksand (QuicksandDepth2 or more), the routine addsGravityQuicksand,$08for all four (quicksand), at any speed; and while the Princess floats, it sets her speed outright fromFloatingYVelocityand adds nothing (float).CodeSMB2 DiscombobulatedrevisedHow we know
2606PlayerGravity: 2607 LDA QuicksandDepth 2608 CMP #$02 2609 BCC loc_BANK0_8CE5 ⋮ 2611 LDA GravityQuicksand 2612 BNE loc_BANK0_8D13 ⋮ 2614loc_BANK0_8CE5: 2615 LDA GravityWithoutJumpButton 2616 LDY Player1JoypadHeld ; holding jump button to fight physics 2617 BPL PlayerGravity_Falling ⋮ 2619 LDA GravityWithJumpButton 2620 LDY PlayerYVelocity ⋮
src/prg-0-1.asm lines 2606–2659 at b73415e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-26.
- ^ abThe Princess's
Floating Timeis$3C; the other three have 0. With the button held once her rise has slowed to-$04or less, each frame sets her vertical speed fromFloatingYVelocity, cycling up, still, down, still, until the timer runs out. Letting go ends the float for that jump. Measured in Mesen (MesenCE 2.2.1) from power-on, on the floor at the bottom of 1-1's first area, a jump with A held floats for 60 frames, holding each speed of the cycle for 8 frames, and then falls.VerifiedSMB2 DiscombobulatedHow we know
346PrincessStats: ⋮ 360 .db $3C ; Floating Time
src/prg-a-b.asm lines 346–360 at b73415e · upstream ↗ 2619 LDA GravityWithJumpButton 2620 LDY PlayerYVelocity 2621 CPY #$FC 2622 BMI PlayerGravity_Falling ⋮ 2624 LDY JumpFloatTimer 2625 BEQ PlayerGravity_Falling ⋮ 2627 DEC JumpFloatTimer ⋮ 2634 LDA FloatingYVelocity, Y 2635 STA PlayerYVelocity 2636 RTS ⋮ 2639 LDY PlayerYVelocity ⋮ 2648 STA PlayerYVelocity ⋮
src/prg-0-1.asm lines 2619–2656 at b73415e · upstream ↗ 2662FloatingYVelocity: 2663 .db $FC 2664 .db $00 2665 .db $04 2666 .db $00
src/prg-0-1.asm lines 2662–2666 at b73415e · upstream ↗ Measured by a script in MesenCE 2.2.1 (build 4b8a196), on . It fails if the result disagrees with the claim.
The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-21.
Checked by a second AI model, 2026-10-21.
Checked by a second AI model, 2026-10-26.
- ^ abcdefOn ordinary ground, holding right adds
$02to the speed each frame, so a character reaches walking speed,$18(1.5 px/frame), 12 frames from a standstill; with neither direction held the ground takes$03a frame off the speed, to zero. Measured in Mesen (MesenCE 2.2.1) from power-on, on the floor at the bottom of 1-1's first area, each character reaches 1.5 px/frame in 12 frames from a standstill; letting go of everything at 2.25 px/frame drops the speed to the 1.5 cap at once, and friction stops the character 8 frames later.VerifiedSMB2 DiscombobulatedrevisedHow we know
2424PlayerControlAcceleration: 2425 .db $FE 2426 .db $02
src/prg-0-1.asm lines 2424–2426 at b73415e · upstream ↗ 2498 LDA Player1JoypadHeld 2499 AND #ControllerInput_Right | ControllerInput_Left 2500 BEQ loc_BANK0_8C92 ⋮ 2502 AND #$01 2503 STA PlayerDirection 2504 TAY 2505 LDA GroundSlipperiness 2506 LSR A 2507 LSR A 2508 AND byte_RAM_10 2509 BNE ResetCrouchJumpTimer ⋮ 2511 LDA PlayerXVelocity ⋮
src/prg-0-1.asm lines 2498–2519 at b73415e · upstream ↗ 2668PlayerXDeceleration: 2669 .db $FD 2670 .db $03 ⋮ 2673; =============== S U B R O U T I N E ======================================= ⋮ 2675sub_BANK0_8D2C: 2676 LDA PlayerInAir 2677 BNE locret_BANK0_8D61 ⋮ 2679 LDA byte_RAM_10 2680 AND GroundSlipperiness 2681 BNE loc_BANK0_8D4D ⋮ 2683 LDA PlayerXVelocity 2684 AND #$80 ⋮
src/prg-0-1.asm lines 2668–2697 at b73415e · upstream ↗ Measured by a script in MesenCE 2.2.1 (build 4b8a196), on . It fails if the result disagrees with the claim.
The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^ abHolding B raises the top speed by half: running right with nothing carried, from
$18to$24(1.5 to 2.25 px/frame). Measured in Mesen (MesenCE 2.2.1) from power-on, on the floor at the bottom of 1-1's first area, all four characters run right at 1.5 px/frame and, with B, 2.25 px/frame.VerifiedSMB2 DiscombobulatedrevisedHow we know
2848; 1.5x max speed when the run button is held! 2849loc_BANK0_8DE0: 2850 LDA RunSpeedRight, Y 2851 BIT Player1JoypadHeld 2852 BVC loc_BANK0_8DEC ⋮ 2854 LSR A 2855 CLC 2856 ADC RunSpeedRight, Y
src/prg-0-1.asm lines 2848–2856 at b73415e · upstream ↗ Measured by a script in MesenCE 2.2.1 (build 4b8a196), on . It fails if the result disagrees with the claim.
The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-26.
Checked by a second AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-26.
- ^What the player carries sets the ground cap: an enemy, a mushroom block, or a POW block uses the character's carrying speed (Mario
$18, Luigi$16, Toad$1D, the Princess$15), and anything else (vegetables, shells, coins, bombs, rockets, keys, potions) the empty-handed$18. Sunk 4 pixels or more into quicksand, every character's cap is$04. B raises each by half (run-cap).CodeSMB2 Discombobulated · Super Mario Bros. 2 manual (US)How we know
2823; Determine the max speed based on the terrain and what the player is carrying. 2824sub_BANK0_8DC0: 2825 LDY #$02 2826 LDA QuicksandDepth 2827 CMP #$02 2828 BCS loc_BANK0_8DE0 ⋮ 2830 DEY 2831 LDA HoldingItem 2832 BEQ loc_BANK0_8DDF ⋮ 2834 LDX ObjectBeingCarriedIndex 2835 LDA ObjectType, X 2836 CMP #Enemy_VegetableSmall ⋮
src/prg-0-1.asm lines 2823–2850 at b73415e · upstream ↗ They all run at the same speed, but if they are carrying something, the order from the slowest to quickest is; Princess Toadstool, Luigi, Mario, Toad.
Know what each character can do, Running · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Standing in quicksand sinks the player at
$01a frame, or$08in the fast kind, and sinking 12 pixels into the next row of tiles kills them. Sunk 4 pixels or more, they jump at$E0(2 px/frame), fall under gravity$08, run no faster than$04(carry-speed), and can't charge a crouch jump.CodeSMB2 DiscombobulatedHow we know
7691PlayerTileCollision_CheckQuicksand: 7692 LDA #$01 7693 LDY byte_RAM_0 7694 CPY #BackgroundTile_QuicksandSlow 7695 BEQ PlayerTileCollision_QuicksandSlow ⋮ 7697 CPY #BackgroundTile_QuicksandFast 7698 BEQ PlayerTileCollision_QuicksandFast
src/prg-0-1.asm lines 7691–7698 at b73415e · upstream ↗ 7721PlayerTileCollision_QuicksandFast: 7722 LDA #$08 ⋮ 7724PlayerTileCollision_QuicksandSlow: 7725 STA PlayerYVelocity 7726 LDA QuicksandDepth 7727 BNE loc_BANK1_BA9B ⋮ 7729 LDA PlayerYLo 7730 AND #$10 7731 STA byte_RAM_4EB ⋮ 7733loc_BANK1_BA9B: 7734 ; check if player is too far under 7735 LDA PlayerYLo ⋮
src/prg-0-1.asm lines 7721–7763 at b73415e · upstream ↗ 2543 LDA QuicksandDepth 2544 CMP #$02 2545 BCC PlayerStartJump_LoadXVelocity ⋮ 2547 ; Quicksand 2548 LDA JumpHeightQuicksand 2549 STA PlayerYVelocity 2550 BNE PlayerStartJump_Exit
src/prg-0-1.asm lines 2543–2550 at b73415e · upstream ↗ 2607 LDA QuicksandDepth 2608 CMP #$02 2609 BCC loc_BANK0_8CE5 ⋮ 2611 LDA GravityQuicksand 2612 BNE loc_BANK0_8D13
src/prg-0-1.asm lines 2607–2612 at b73415e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Pulling something up, from the ground or off an enemy's or a block's top, holds a first pose for 6 frames, then steps through six more poses whose waits are the character's pick-up speeds, read from last to first: Mario's and Luigi's 7, 4, 1, 2, 4, 0, Toad's 2, 1, 1, 1, 1, 0, and the Princess's 12, 6, 2, 4, 6, 0, a wait of 0 lasting one frame. A small vegetable or dug sand takes Toad's waits whoever pulls it. Measured in Mesen (MesenCE 2.2.1) from power-on, pulling the large vegetable on the ledge in 1-1's first area, Mario and Luigi lift for 25 frames, Toad for 13, and the Princess for 37.VerifiedSMB2 Discombobulated
How we know
3627 LDA #$07 3628 STA ObjectBeingCarriedTimer, X 3629 STX ObjectBeingCarriedIndex 3630 LDA #PlayerState_Lifting 3631 STA PlayerState 3632 LDA #$06 3633 STA PlayerStateTimer 3634 LDA #SpriteAnimation_Pulling 3635 STA PlayerAnimationFrame 3636 INC HoldingItem
src/prg-0-1.asm lines 3627–3636 at b73415e · upstream ↗ 11101 LDA #$07 11102 STA ObjectBeingCarriedTimer, X 11103 JSR SetPlayerStateLifting
src/prg-2-3.asm lines 11101–11103 at b73415e · upstream ↗ 2036HandlePlayerState_Lifting: 2037 LDA PlayerStateTimer 2038 BNE locret_BANK0_8AC1 ⋮ 2040 LDX ObjectBeingCarriedIndex 2041 LDY ObjectBeingCarriedTimer, X 2042 CPY #$02 2043 BCC loc_BANK0_8ABB ⋮ 2045 CPY #$07 2046 BNE loc_BANK0_8A9D ⋮ 2048 LDA #DPCM_ItemPull 2049 STA DPCMQueue ⋮ 2051loc_BANK0_8A9D: ⋮
src/prg-0-1.asm lines 2036–2071 at b73415e · upstream ↗ 2091PlayerLiftTimer: 2092 .db $00 2093 .db $01 2094 .db $01 2095 .db $01 ⋮ 2097PlayerLiftFrames: 2098 .db $01 2099 .db $02 2100 .db $04 2101 .db $04 2102 .db $04 2103 .db $04 ⋮
src/prg-0-1.asm lines 2091–2105 at b73415e · upstream ↗ 271MarioStats: 272 .db $00 ; Pick-up Speed, frame 1/6 - pulling 273 .db $04 ; Pick-up Speed, frame 2/6 - pulling 274 .db $02 ; Pick-up Speed, frame 3/6 - ducking 275 .db $01 ; Pick-up Speed, frame 4/6 - ducking 276 .db $04 ; Pick-up Speed, frame 5/6 - ducking 277 .db $07 ; Pick-up Speed, frame 6/6 - ducking
src/prg-a-b.asm lines 271–277 at b73415e · upstream ↗ Measured by a script in MesenCE 2.2.1 (build 4b8a196), on . It fails if the result disagrees with the claim.
The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^B throws what the player carries, unless it is sand from digging. A bomb, rocket, mushroom block, POW block, key, or potion needs room in the tile ahead; enemies, vegetables, shells, and coins fly at once. Those fly forward at
$30(3 px/frame), rising at$08(0.5 px/frame) if the player was moving at$08or more and falling at$18if not. The others fly forward at$30level if the player was moving, and if standing are set down 16 px ahead, falling at$18.CodeSMB2 DiscombobulatedHow we know
2880; Check to see if we have an item that we want to throw. 2881loc_BANK0_8E05: 2882 BIT Player1JoypadPress 2883 BVC locret_BANK0_8E41 ⋮ 2885 LDA HoldingItem 2886 BEQ locret_BANK0_8E41 ⋮ 2888 LDY #$00 2889 LDX ObjectBeingCarriedIndex 2890 LDA EnemyState, X 2891 CMP #EnemyState_Sand 2892 BEQ locret_BANK0_8E41 ⋮ 2894 LDA ObjectType, X ⋮
src/prg-0-1.asm lines 2880–2925 at b73415e · upstream ↗ 2942 STA byte_RAM_1 2943 LDX ObjectBeingCarriedIndex 2944 LDA #Enemy_Coin 2945 CMP ObjectType, X 2946 ROL byte_RAM_1 2947 LDA PlayerXVelocity 2948 BPL loc_BANK0_8E6F ⋮ 2950 EOR #$FF 2951 CLC 2952 ADC #$01 ⋮ 2954loc_BANK0_8E6F: 2955 CMP #$08 ⋮
src/prg-0-1.asm lines 2942–2985 at b73415e · upstream ↗ 2800ThrowXVelocity: 2801 .db $00 ; standing, left (blocks) 2802 .db $00 ; standing, right (blocks) 2803 .db $D0 ; moving, left (blocks) 2804 .db $30 ; moving, right (blocks) 2805 .db $D0 ; standing, left (projectiles) 2806 .db $30 ; standing, right (projectiles) 2807 .db $D0 ; moving, left (projectiles) 2808 .db $30 ; moving, right (projectiles) ⋮ 2810ThrowYVelocity: 2811 .db $18 ; standing (blocks) 2812 .db $00 ; moving (blocks) ⋮
src/prg-0-1.asm lines 2800–2819 at b73415e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^On a vine, chain, or ladder the player climbs up at
$F0(1 px/frame), down at$20(2 px/frame), and sideways at 1 px/frame. Holding up and down together reads past the end of the table, the byte$A5, and sends the player up at 5.6875 px/frame. Holding left and right together reads past the end of the sideways table too, again a byte$A5, the first ofHandlePlayerState_Climbing, and sets the sideways speed to 5.6875 px/frame to the left.CodeSMB2 Discombobulated · “Super Mario Bros. 2 (USA)”revisedHow we know
2107byte_BANK0_8ACE: 2108 .db $00 2109 .db $10 2110 .db $F0 2111; --------------------------------------------------------------------------- ⋮ 2113HandlePlayerState_Climbing: 2114 LDA Player1JoypadHeld 2115 AND #ControllerInput_Down | ControllerInput_Up 2116 LSR A 2117 LSR A 2118 TAY 2119 CPY #$02 ⋮
src/prg-0-1.asm lines 2107–2131 at b73415e · upstream ↗ 3328ClimbSpeed: 3329 .db $00 3330ClimbSpeedDown: 3331 .db $20 3332ClimbSpeedUp: 3333 .db $F0 3334; Bug: The climb speed index is determined by checking the up/down flags in 3335; Player1JoypadHeld. If both are enabled, the index it out of bounds and uses 3336; the LDA ($A5) below, which zips the player up the vine!
src/prg-e-f.asm lines 3328–3336 at b73415e · upstream ↗ In the cartridge (“Super Mario Bros. 2 (USA)”): ClimbSpeed's three bytes at $F225, and the next routine's first, $A5; byte_BANK0_8ACE's three bytes at $8ACE, and HandlePlayerState_Climbing's first, $A5 (LDA Player1JoypadHeld). We don't reproduce the bytes.
Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^ abBoth games start the life meter at two marks and let it grow to four. Doki Doki Panic's manual says so, as does Super Mario Bros. 2's, whose code sets health from a table of three values, two to four marks, by the number of extra marks found, and sets two marks again when a level ends, on a game over, and on a warp.ManualDoki Doki Panic manual · Super Mario Bros. 2 manual (US) · SMB2 Discombobulatedrevised
How we know
ライフゲージは2目盛りから始まるんだ。 … このゲージは最高4目盛りまで増えるぞ。
p. 16, ライフゲージが0になるとアウト! (out when the life gauge reaches 0) · archived copy ↗ The life meter starts from the 2nd mark. When the marks are all white, you lose a life. This meter can increase to a maximum of 4 marks.
Watch out for Game Over · archived copy ↗ 3314RestorePlayerToFullHealth: 3315 LDY PlayerMaxHealth ; Get player's current max HP 3316 LDA PlayerHealthValueByHeartCount, Y ; Get the health value for this amount of hearts 3317 STA PlayerHealth 3318 RTS ⋮ 3321PlayerHealthValueByHeartCount: 3322 .db PlayerHealth_2_HP 3323 .db PlayerHealth_3_HP 3324 .db PlayerHealth_4_HP
src/prg-e-f.asm lines 3314–3324 at b73415e · upstream ↗ 1348ResetAreaAndProcessGameMode_NotTitleCard: 1349 LDA #PlayerHealth_2_HP 1350 STA PlayerHealth 1351 LDA #$00 1352 STA PlayerMaxHealth
src/prg-e-f.asm lines 1348–1352 at b73415e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^ abcdHealth is
$0Ffor one mark of the life meter and$10more for each further mark, up to$3Ffor four. A hit takes$10, one mark, and setsDamageInvulnTimeto$7F, during whichDamagePlayerreturns at once; the timer drops every frame. If the health left is$10or more, two marks or more, the hit also launches the player upward at$C0and sideways at four times the screen distance from the enemy. A hit on the last mark (health under$10) stores no health and sets no invulnerability: it turns the enemy toward the player (for the types beforeEnemy_BeezoDiving), stuns it for$10frames, sets the player's vertical speed to$C0andPlayerStateTimerto$20, and jumps toKillPlayer, which sets the dying state and health to 0. A dying player holds still for those 32 frames, then rises at$C0and falls back, gaining$02a frame up to$39, and loses a life once below the screen.CodeSMB2 DiscombobulatedrevisedHow we know
11362DamagePlayer: 11363 LDA DamageInvulnTime 11364 BNE locret_BANK3_BA31 ⋮ 11366 LDA PlayerHealth 11367 SEC 11368 SBC #$10 11369 BCC loc_BANK3_BA32 ⋮ 11371 STA PlayerHealth 11372 LDY #$7F 11373 STY DamageInvulnTime 11374 LDY #$00 11375 STY PlayerYVelocity ⋮
src/prg-2-3.asm lines 11362–11388 at b73415e · upstream ↗ 3171 ; Decrement player state timers 3172 LDX #$03 3173DecrementPlayerStateTimers_Loop: 3174 LDA PlayerStateTimer, X ⋮ 3177 DEC PlayerStateTimer, X
src/prg-e-f.asm lines 3171–3177 at b73415e · upstream ↗ 291PlayerStateTimer: ⋮ 297DamageInvulnTime:
src/ram.asm lines 291–298 at b73415e · upstream ↗ 11404loc_BANK3_BA32: 11405 TXA ⋮ 11407loc_BANK3_BA33: 11408 PHA 11409 LDX byte_RAM_12 11410 LDA ObjectType, X 11411 CMP #Enemy_BeezoDiving 11412 BCS loc_BANK3_BA48 ⋮ 11414 JSR EnemyFindWhichSidePlayerIsOn ⋮ 11416 INY 11417 TYA 11418 CMP EnemyMovementDirection, X ⋮
src/prg-2-3.asm lines 11404–11439 at b73415e · upstream ↗ 5154KillPlayer: 5155 LDA #PlayerState_Dying ; Mark player as dead 5156 STA PlayerState 5157 LDA #$00 ; Clear some variables 5158IFNDEF RESPAWN_INSTEAD_OF_DEATH 5159 STA PlayerHealth
src/prg-e-f.asm lines 5154–5159 at b73415e · upstream ↗ 1995HandlePlayerState_Dying: 1996 LDA PlayerStateTimer 1997 BNE locret_BANK0_8A86 ⋮ 1999 LDA PlayerScreenYHi 2000 CMP #02 2001 BEQ LoseALife ⋮ 2003 JSR ApplyPlayerPhysicsY ⋮ 2005 LDA PlayerYVelocity 2006 BMI loc_BANK0_8A72 ⋮ 2008 CMP #$39 2009 BCS locret_BANK0_8A86 ⋮ 2011loc_BANK0_8A72: ⋮
src/prg-0-1.asm lines 1995–2014 at b73415e · upstream ↗ 270; enum PlayerHealthValues 271PlayerHealth_1_HP = $0F 272PlayerHealth_2_HP = $1F 273PlayerHealth_3_HP = $2F 274PlayerHealth_4_HP = $3F
src/defs.asm lines 270–274 at b73415e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-26.
- ^ abcdSuper Mario Bros. 2 shrinks a character whose life meter is down to one mark. Chris Kohler's report on Kensuke Tanabe's talk says it was added because growing and shrinking was one of Mario's best-known traits. SMB2's cartridge keeps a full-size and a small tile bank for each character; Doki Doki Panic's disk has one tile file for each of its four, IMAJIN-C, LINA-C, MAMA-C, and PAPA-C, of 832 bytes.InterviewKohler, "Secret History of SMB2" · SMB2 Discombobulated · “Yume Koujou - Doki Doki Panic (Japan) (DV 1)”revised
How we know
Because one of Mario's most notable features at the time was his ability to grow and shrink when he ate magic mushrooms, this was added to the game.
closing paragraphs · archived copy ↗ 1925 LDA #$00 ; Check if the player needs to change size 1926 LDY #$10 1927 CPY PlayerHealth 1928 ROL A 1929 EOR PlayerCurrentSize 1930 BEQ loc_BANK0_8A26 ⋮ 1932 LDY PlayerCurrentSize 1933 LDA GrowShrinkSFXIndexes, Y 1934 STA SoundEffectQueue2 1935 LDA #$1E 1936 STA PlayerStateTimer 1937 LDA #PlayerState_ChangingSize ⋮
src/prg-0-1.asm lines 1925–1938 at b73415e · upstream ↗ 784CHRBank_Mario = $00 785CHRBank_Luigi = $01 786CHRBank_Princess = $02 787CHRBank_Toad = $03 788CHRBank_MarioSmall = $04 789CHRBank_LuigiSmall = $05 790CHRBank_PrincessSmall = $06 791CHRBank_ToadSmall = $07
src/defs.asm lines 784–791 at b73415e · upstream ↗ In the cartridge (“Yume Koujou - Doki Doki Panic (Japan) (DV 1)”): side B's file header for IMAJIN-C: CHR, $0340 (832) bytes; the header for LINA-C: CHR, 832 bytes; the header for MAMA-C: CHR, 832 bytes; the header for PAPA-C: CHR, 832 bytes. We don't reproduce the bytes.
Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^Every eighth enemy defeated, counted as it falls off the screen, comes back as a heart 96 px above where it left; stray bullets and bosses don't count, and the count carries over deaths until the level ends. A heart adds one mark, up to the meter's length.CodeSMB2 Discombobulated
How we know
1023 LDA EnemyState, X 1024 BNE MakeEnemyFlipUpsideDown ⋮ 1026 LDA EnemyArray_SpawnsDoor, X 1027 BEQ EnemyDeathMaybe
src/prg-2-3.asm lines 1023–1027 at b73415e · upstream ↗ 1058EnemyDeathMaybe: 1059 LDA ObjectType, X 1060 CMP #Enemy_Bullet ; "Stray bullet" enemy type 1061 BEQ MakeEnemyFlipUpsideDown ⋮ 1063 INC EnemiesKilledForHeart 1064 LDY EnemiesKilledForHeart 1065 CPY #$08 ; number of enemies to kill before a heart appears 1066 BCC MakeEnemyFlipUpsideDown ⋮ 1068 LDA #$00 ; reset enemy kill counter for heart counter 1069 STA EnemiesKilledForHeart ⋮ 1071 LDA #EnemyState_Alive ; convert dead enemy to living heart 1072 STA EnemyState, X ⋮
src/prg-2-3.asm lines 1058–1083 at b73415e · upstream ↗ 10942 ; check if it's a heart 10943 LDA ObjectType, Y 10944 BNE CheckCollisionWithPlayer_NotHeart ⋮ 10946 ; accept the heart into your life 10947 STA EnemyState, Y 10948 LDA #SoundEffect1_CherryGet 10949 STA SoundEffectQueue1 10950 LDY PlayerMaxHealth 10951 LDA PlayerHealth 10952 CLC 10953 ADC #$10 10954 STA PlayerHealth ⋮
src/prg-2-3.asm lines 10942–10958 at b73415e · upstream ↗ 1348ResetAreaAndProcessGameMode_NotTitleCard: 1349 LDA #PlayerHealth_2_HP 1350 STA PlayerHealth 1351 LDA #$00 1352 STA PlayerMaxHealth 1353 STA KeyUsed 1354 STA Mushroom1upPulled 1355 STA Mushroom1Pulled 1356 STA Mushroom2Pulled 1357 STA SubspaceVisits 1358 STA EnemiesKilledForHeart
src/prg-e-f.asm lines 1348–1358 at b73415e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abSuper Mario Bros. 2's magic potion is Doki Doki Panic's magic lamp: in both manuals, the item thrown makes a door appear, and Up at the door enters the other side, Subspace in SMB2. SMB2's code turns a thrown potion into a door where it lands, except in a vertical area, where it puffs away.ManualDoki Doki Panic manual · Super Mario Bros. 2 manual (US) · SMB2 Discombobulatedrevised
How we know
取ったアイテムがランプだったら、投げてみよう。するとそこにドアが現れるんだ。
p. 26, 魔法のランプで裏画面へ (to the reverse screen with the magic lamp) · archived copy ↗ If you find a magic potion, try throwing it. When you do that a door will appear. You'll enter the sub space if you press the top of the control pad while in front of the door.
Really useful items, Go to Sub-space with magic · archived copy ↗ 3553EnemyBehavior_SubspacePotion_CheckGroundCollision: 3554 PLA 3555 AND #CollisionFlags_Down 3556 BEQ EnemyBehavior_Vegetable ⋮ 3576 LDA #Enemy_SubspaceDoor 3577 STA ObjectType, X ⋮ 3583 ; No Subspace Doors allowed in vertical levels 3584 LDA IsHorizontalLevel 3585 BNE EnemyBehavior_SubspacePotion_CreateDoor ⋮ 3589 JSR EnemyDestroy ⋮ 3591EnemyBehavior_SubspacePotion_CreateDoor: 3592 JSR CreateEnemy
src/prg-2-3.asm lines 3553–3593 at b73415e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^ abcA thrown potion that lands makes a door in a puff of smoke, except in a vertical area, where only the smoke is left. Through the door, Subspace lasts 96 ticks of four frames, about 384 frames, and ends early if the player dies. Its grass gives coins on the level's first two visits that pull a coin, and small vegetables after.CodeSMB2 Discombobulated
How we know
3553EnemyBehavior_SubspacePotion_CheckGroundCollision: 3554 PLA 3555 AND #CollisionFlags_Down 3556 BEQ EnemyBehavior_Vegetable ⋮ 3558 JSR ResetObjectYVelocity ⋮ 3560 LDA ObjectYLo, X 3561 SEC 3562 SBC #$10 3563 STA ObjectYLo, X 3564 LDA ObjectXLo, X 3565 ADC #$07 3566 AND #$F0 ⋮
src/prg-2-3.asm lines 3553–3593 at b73415e · upstream ↗ 4859 LDA #$60 4860 STA SubspaceTimer
src/prg-0-1.asm lines 4859–4860 at b73415e · upstream ↗ 4831 LDY SubspaceTimer 4832 BEQ loc_BANK2_9741 ⋮ 4834 LDA byte_RAM_10 4835 AND #$03 4836 BNE loc_BANK2_9741 ⋮ 4838 LDY PlayerState 4839 CPY #PlayerState_Dying 4840 BEQ loc_BANK2_9741 ⋮ 4842 DEC SubspaceTimer 4843 BNE loc_BANK2_9741 ⋮ 4845 STA InSubspaceOrJar 4846 JSR DoAreaReset
src/prg-2-3.asm lines 4831–4846 at b73415e · upstream ↗ 5676 LDA InSubspaceOrJar 5677 BEQ HandlePlayerState_Respawning_Regular ⋮ 5679HandlePlayerState_Respawning_Subspace: 5680 ; Exit subspace immediately 5681 LDA #$00 5682 STA InSubspaceOrJar 5683 STA SubspaceTimer
src/prg-0-1.asm lines 5676–5683 at b73415e · upstream ↗ 3811 LDX InSubspaceOrJar 3812 CPX #$02 3813 BNE loc_BANK0_91E3 ⋮ 3815 LDA SubspaceVisits 3816 CMP #$02 3817 BCS loc_BANK0_91E2 ; skip if we've already visited Subspace twice ⋮ 3819 INC SubspaceCoins 3820 LDX #$00 ⋮ 3822loc_BANK0_91E2: 3823 TXA ⋮ 3825loc_BANK0_91E3: 3826 CLC ⋮
src/prg-0-1.asm lines 3811–3828 at b73415e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^A level has up to two Subspace mushrooms, each adding a mark to the life meter and refilling it. One taken stays taken, and the extra marks stay, through deaths until the level ends, a game over, or a warp, which set
PlayerHealthtoPlayerHealth_2_HPandPlayerMaxHealthto 0: a meter of two marks, both full.CodeSMB2 DiscombobulatedrevisedHow we know
3748 CMP #BackgroundTile_SubspaceMushroom1 3749 BEQ DoSubspaceTileRemap_CheckCreateMushroom ⋮ 3751 CMP #BackgroundTile_SubspaceMushroom2 3752 BEQ DoSubspaceTileRemap_CheckCreateMushroom ⋮ 3754 JMP DoSubspaceTileRemap_Exit ⋮ 3756DoSubspaceTileRemap_CheckCreateMushroom: 3757 SEC 3758 SBC #BackgroundTile_SubspaceMushroom1 3759 TAY 3760 LDA Mushroom1Pulled, Y 3761 BNE DoSubspaceTileRemap_AfterCreateMushroom
src/prg-6-7.asm lines 3747–3762 at b73415e · upstream ↗ 3402EnemyBehavior_PickUpMushroom: 3403 LDX EnemyVariable 3404 INC Mushroom1Pulled, X 3405 LDX byte_RAM_12 3406 INC PlayerMaxHealth 3407 JSR RestorePlayerToFullHealth
src/prg-2-3.asm lines 3402–3407 at b73415e · upstream ↗ 1348ResetAreaAndProcessGameMode_NotTitleCard: 1349 LDA #PlayerHealth_2_HP 1350 STA PlayerHealth 1351 LDA #$00 1352 STA PlayerMaxHealth 1353 STA KeyUsed 1354 STA Mushroom1upPulled 1355 STA Mushroom1Pulled 1356 STA Mushroom2Pulled 1357 STA SubspaceVisits
src/prg-e-f.asm lines 1348–1357 at b73415e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^The fifth large vegetable pulled since the level began or the player last died is a stopwatch, and the count starts over.CodeSMB2 Discombobulated · Super Mario Bros. 2 manual (US)
How we know
3604 CMP #Enemy_VegetableLarge 3605 BNE loc_BANK0_90EA ⋮ 3607 LDY BigVeggiesPulled 3608 INY 3609 CPY #$05 3610 BCC loc_BANK0_90E7 ⋮ 3612 LDA #Enemy_Stopwatch 3613 STA ObjectType, X 3614 LDY #$00 ⋮ 3616loc_BANK0_90E7: 3617 STY BigVeggiesPulled
src/prg-0-1.asm lines 3604–3617 at b73415e · upstream ↗ 1314ShowCardAfterTransition: 1315 LDA #GameMode_InGame 1316 STA GameMode 1317 STA StarInvincibilityTimer 1318 STA BigVeggiesPulled
src/prg-e-f.asm lines 1314–1318 at b73415e · upstream ↗ If you have already taken four and you take a fifth one, a stopwatch will appear.
Really useful items, Time Stop · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^The Bonus Chance after a level spins three reels of eight positions, one coin a spin. Each position holds one of four symbols: a Snifit, a turnip, a star, or a cherry. Each reel steps every 4 frames, and A stops the leftmost still spinning. A cherry on the first reel wins a life, cherries on the first two win two, three cherries five, and three of another symbol one; lives stop at 255. Each reel holds one cherry.CodeSMB2 Discombobulated · Super Mario Bros. 2 manual (US)revised
How we know
248Slot_Cherry = $00 249Slot_Star = $08 250Slot_Turnip = $10 251Slot_Snifit = $18
src/defs.asm lines 248–251 at b73415e · upstream ↗ 1652StartSlotMachine: 1653 DEC SlotMachineCoins 1654 JSR WaitForNMI ⋮ 1656 JSR sub_BANKF_EA68 ⋮ 1658 LDA #$01 ; Set all reel timers 1659 STA ObjectXLo 1660 STA ObjectXLo + 1 1661 STA ObjectXLo + 2 1662 LSR A ; Set all reels to the first position 1663 STA ObjectXLo + 6 1664 STA ObjectXLo + 7 1665 STA ObjectXLo + 8
src/prg-e-f.asm lines 1652–1665 at b73415e · upstream ↗ 1693 LDY #$00 1694 LDX ObjectXLo + 6 ; Load reel 1 1695 LDA SlotMachineReelOrder1RAM, X 1696 BNE CheckReel2Symbol ; Is this reel a cherry? ⋮ 1698 INY ; Yes; add one life ⋮ 1700CheckReel2Symbol: 1701 LDX ObjectXLo + 7 ; Load reel 2 1702 CMP SlotMachineReelOrder2RAM, X 1703 BNE AddSlotMachineExtraLives ; Does this match the previous symbol? ⋮ 1705 CMP #$00 ; Yes; are they both cherries? 1706 BNE CheckReel3Symbol ; If no, skip to third reel ⋮ 1708 INY ; They are both cherries, add another life or something ⋮
src/prg-e-f.asm lines 1693–1732 at b73415e · upstream ↗ 2114sub_BANKF_EAC2: 2115 LDA Player1JoypadPress 2116 BPL locret_BANKF_EAD1 ⋮ 2118 LDX #$00 ⋮ 2120loc_BANKF_EAC8: 2121 LDA ObjectXLo, X 2122 BNE loc_BANKF_EAD2 ⋮ 2124 INX 2125 CPX #$03 2126 BCC loc_BANKF_EAC8 ⋮ 2128locret_BANKF_EAD1: 2129 RTS ⋮
src/prg-e-f.asm lines 2114–2160 at b73415e · upstream ↗ 581BonusChanceReel1Order: 582 .db Slot_Snifit ; $00 583 .db Slot_Turnip ; $01 ; Graphics exist for a mushroom (not used) 584 .db Slot_Star ; $02 585 .db Slot_Turnip ; $03 586 .db Slot_Snifit ; $04 587 .db Slot_Star ; $05 588 .db Slot_Cherry ; $06 589 .db Slot_Turnip ; $07 590BonusChanceReel2Order: 591 .db Slot_Star ; $00 592 .db Slot_Snifit ; $01 ⋮
src/prg-a-b.asm lines 580–607 at b73415e · upstream ↗ You get 1 play for each coin you have collected from the last.
A Bonus Chance at the end of an Area · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^ abDoki Doki Panic's disk holds Super Mario Bros. 2's character stats table, 92 bytes in the same layout. Mario's, Toad's, and the Princess's 23 bytes each equal the first, second, and fourth blocks on the disk. Luigi's block, the third, differs only in its six take-off speeds, each
$02lower in SMB2, so read as SMB2 reads them, Luigi leaves the ground 0.125 px/frame faster than the disk's block would. The four offsets before the table hold the same values, with the last two swapped.CodeSMB2 Discombobulated · “Super Mario Bros. 2 (USA)” · “Yume Koujou - Doki Doki Panic (Japan) (DV 1)” · “Yume Koujou - Doki Doki Panic (Japan) (DV 2)”How we know
264StatOffsets: 265 .db (MarioStats - CharacterStats) 266 .db (PrincessStats - CharacterStats) 267 .db (ToadStats - CharacterStats) 268 .db (LuigiStats - CharacterStats)
src/prg-a-b.asm lines 264–268 at b73415e · upstream ↗ 321LuigiStats: ⋮ 328 .db $D6 ; Jump Speed, still - no object 329 .db $D6 ; Jump Speed, still - with object 330 .db $C9 ; Jump Speed, charged - no object 331 .db $C9 ; Jump Speed, charged - with object 332 .db $D0 ; Jump Speed, running - no object 333 .db $D4 ; Jump Speed, running - with object
src/prg-a-b.asm lines 321–333 at b73415e · upstream ↗ In the cartridge (“Super Mario Bros. 2 (USA)”): MarioStats and ToadStats, $83CD-$83FA in bank $A. We don't reproduce the bytes.
In the cartridge (“Yume Koujou - Doki Doki Panic (Japan) (DV 1)”): the same 46 bytes in TEMP-PRG, $60EF-$611C. We don't reproduce the bytes.
In the cartridge (“Super Mario Bros. 2 (USA)”): PrincessStats, $8412-$8428. We don't reproduce the bytes.
In the cartridge (“Yume Koujou - Doki Doki Panic (Japan) (DV 1)”): the same 23 bytes in TEMP-PRG, $6134-$614A. We don't reproduce the bytes.
In the cartridge (“Super Mario Bros. 2 (USA)”): LuigiStats' six jump speeds, $D6 $D6 $C9 $C9 $D0 $D4. We don't reproduce the bytes.
In the cartridge (“Yume Koujou - Doki Doki Panic (Japan) (DV 1)”): the disk's six bytes in that place, $D8 $D8 $CB $CB $D2 $D6 (TEMP-PRG $6123-$6128); the rest of the block equals LuigiStats. We don't reproduce the bytes.
In the cartridge (“Super Mario Bros. 2 (USA)”): StatOffsets, $00 $45 $17 $2E. We don't reproduce the bytes.
In the cartridge (“Yume Koujou - Doki Doki Panic (Japan) (DV 1)”): the disk's four bytes before the table, $00 $45 $2E $17 (TEMP-PRG $60EB-$60EE). We don't reproduce the bytes.
In the cartridge (“Yume Koujou - Doki Doki Panic (Japan) (DV 2)”): DV 2's copy of the offsets and table, equal to DV 1's. We don't reproduce the bytes.
Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abBoth games have 20 levels in seven parts: Doki Doki Panic's manual calls them pages in seven chapters, and Super Mario Bros. 2's calls them areas in seven worlds. SMB2's table of each world's first level, three levels a world and two in the last, is on Doki Doki Panic's disk byte for byte.ManualDoki Doki Panic manual · Super Mario Bros. 2 manual (US) · SMB2 Discombobulated · “Super Mario Bros. 2 (USA)” · “Yume Koujou - Doki Doki Panic (Japan) (DV 1)”revised
How we know
上の図のように、7章立ての20ページでこのゲームは構成されているんだ。
p. 13, the chapters and the family rule (CHAPTER diagram) · archived copy ↗ This game is comprised of 20 areas in 7 worlds as shown in the diagram above.
Know the Basic Rules of the Game · archived copy ↗ 209WorldStartingLevel: 210 .db $00 211 .db $03 212 .db $06 213 .db $09 214 .db $0C 215 .db $0F 216 .db $12 217 .db $14
src/prg-e-f.asm lines 209–217 at b73415e · upstream ↗ In the cartridge (“Super Mario Bros. 2 (USA)”): WorldStartingLevel, $E012-$E019 in bank $F. We don't reproduce the bytes.
In the cartridge (“Yume Koujou - Doki Doki Panic (Japan) (DV 1)”): the same 8 bytes in MAIN-PRO, $73C1-$73C8. We don't reproduce the bytes.
Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^ abMost of Super Mario Bros. 2's enemy tiles occur on Doki Doki Panic's disk: 234 of the 244 non-blank tiles in its four banks of world enemies occur in the disk's tile files, byte for byte, and 80 of the 122 in its two banks of common enemies. Of the 199 non-blank tiles in Doki's four character files, 2 occur in SMB2's CHR ROM. Tiles are counted as often as they occur.CodeSMB2 Discombobulated · “Super Mario Bros. 2 (USA)” · “Yume Koujou - Doki Doki Panic (Japan) (DV 1)”revised
How we know
5781LoadWorldCHRBanks: 5782 LDY #CHRBank_CommonEnemies1 5783 STY SpriteCHR2 5784 INY 5785 STY SpriteCHR3 5786 LDY CurrentWorldTileset 5787 LDA CHRBank_WorldEnemies, Y 5788 STA SpriteCHR4
src/prg-e-f.asm lines 5781–5788 at b73415e · upstream ↗ In the cartridge (“Super Mario Bros. 2 (USA)”): 0x22010-0x2280f; 0x23010-0x2400f; the whole CHR ROM, the ROM map's tile regions end to end, searched for the character files' tiles. We don't reproduce the bytes.
In the cartridge (“Yume Koujou - Doki Doki Panic (Japan) (DV 1)”): side A's TITLE-C, 8176 bytes of tiles; side A's ENDING-C, 3072 bytes of tiles; side B's IMAJIN-C, 832 bytes of tiles; side B's LINA-C, 832 bytes of tiles; side B's MAMA-C, 832 bytes of tiles; side B's PAPA-C, 832 bytes of tiles; side B's BG-CHR-C, 512 bytes of tiles; side B's BG-CHR-1, 2560 bytes of tiles; side B's BG-CHR-2, 2560 bytes of tiles; side B's BG-CHR-3, 2560 bytes of tiles; side B's BG-CHR-4, 2560 bytes of tiles. We don't reproduce the bytes.
Measured by a script. It fails if the result disagrees with the claim.
Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^ abIGN's history says Mario, Luigi, Peach, and Toad were built on the models of Doki Doki Panic's Brother, Mama, Sister, and Papa. The two manuals describe the four in parallel terms: Mario and Imajin jump lower with an item; Luigi and Mama jump high and far but slowly; Toad and Papa jump lowest, but an item changes neither their jump nor their running speed; and the Princess and Lina, third in jumping power, float for about 1.5 seconds while A is held. The manuals disagree on the highest jump: Doki Doki Panic's gives it to Imajin (いちばん高く), with Mama as high, where Super Mario Bros. 2's calls Mario average and gives it to Luigi.ManualDoki Doki Panic manual · Super Mario Bros. 2 manual (US) · IGN, History of Super Mario Bros.revised
How we know
4人のジャンプ力や、その性質には違いがあるのだ。
p. 14, 4人のジャンプ力 (the four players' jumping power) · archived copy ↗ いちばん高くジャンプできるんだ。でもアイテムをかついだとき、跳べる高さは少しだけ落ちる。
p. 14, 4人のジャンプ力 (the four players' jumping power), Imajin · archived copy ↗ ジャンプ力は3番目だ。Ⓐボタンを押し続けると、約1.5秒くらい空中歩行ができる。
p. 14, 4人のジャンプ力 (the four players' jumping power), Lina · archived copy ↗ イマジンと同じ高さに跳べる。スロージャンプできるので、もっと遠くまでいける。
p. 14, 4人のジャンプ力 (the four players' jumping power), Mama · archived copy ↗ 太っているので、ジャンプ力はいちばん低い。でもパワーがあるから、アイテムをかついでも跳べる高さ、走る速さは変わらない。
p. 14, 4人のジャンプ力 (the four players' jumping power), Papa · archived copy ↗ Mario Average jumping power in almost all situations. But, the height he can jump decreases a little when he is carrying an item. … Luigi He can jump the highest and can go much farther but he jumps slowly. … Toad He has the least jumping power. But since he has lifting power, the height he can jump and the speed he can run does not change even if he is carrying an item. … She is No.3 in jumping power. When you hold down the A button, she can float in the air for about 1.5sec.
Know what each character can do, Jumping power · archived copy ↗ Mario, Luigi, Peach and Toad were built on Brother, Mama, Sister and Papa's models.
Super Mario Bros. 2 · archived copy ↗ The quote matches our archived copy.
Revised after a check by a second AI model, 2026-10-26.
- ^ abSuper Mario Bros. 2's manual gives B a third use, running faster, and its code raises the top speed by half while B is held (smb2/run-cap). Doki Doki Panic's manual gives B only lifting and throwing. Both manuals say every character runs at the same speed.ManualDoki Doki Panic manual · Super Mario Bros. 2 manual (US) · SMB2 Discombobulatedrevised
How we know
アイテム・敵を持ち上げる … アイテム・敵を投げる
p. 18, コントローラの使い方 (how to use the controller) · archived copy ↗ 走るスピードはみんな同じだけど、
p. 15, the running and lifting speeds · archived copy ↗ Pick up items or lift enemies. Throw items or enemies. Go faster.
How to use the controller · archived copy ↗ You can run faster and faster by pressing either the left or right of the control pad and the 8 button at the same time.
Acceleration speed · archived copy ↗ They all run at the same speed, but if they are carrying something
Running · archived copy ↗ 2848; 1.5x max speed when the run button is held! 2849loc_BANK0_8DE0: 2850 LDA RunSpeedRight, Y 2851 BIT Player1JoypadHeld 2852 BVC loc_BANK0_8DEC ⋮ 2854 LSR A 2855 CLC 2856 ADC RunSpeedRight, Y
src/prg-0-1.asm lines 2848–2856 at b73415e · upstream ↗ The quote matches our archived copy.
Revised after a check by a second AI model, 2026-10-26.
- ^ abcdeSuper Mario Bros. 2's song data shares no run of more than 5 bytes with either Doki Doki Panic disk: that is the longest run found for the twelve data regions of the ROM map's music part (the songs, their pointers and headers, and the level music indexes). The sound engine's six regions share none of more than 17 bytes and the sound effects' three none of more than 14, while the two routines that pick an area's music share a run of 24 bytes. Tanabe's team greatly enhanced the sound effects, Chris Kohler reported.InterviewKohler, "Secret History of SMB2" · “Yume Koujou - Doki Doki Panic (Japan) (DV 1)” · “Yume Koujou - Doki Doki Panic (Japan) (DV 2)” · “Super Mario Bros. 2 (USA)”revised
How we know
greatly enhancing the animation and sound effects
closing paragraphs · archived copy ↗ In the cartridge (“Yume Koujou - Doki Doki Panic (Japan) (DV 1)”): the whole DV 1 image, both sides, searched. We don't reproduce the bytes.
In the cartridge (“Yume Koujou - Doki Doki Panic (Japan) (DV 2)”): the whole DV 2 image, both sides, searched. We don't reproduce the bytes.
In the cartridge (“Super Mario Bros. 2 (USA)”): music-pointers-and-headers (audio-music); music-ending (audio-music); music-starman (audio-music); music-underground (audio-music); music-subspace (audio-music); music-title (audio-music); music-character-select (audio-music); music-overworld (audio-music); music-boss (audio-music); music-wart (audio-music); music-jingles (audio-music); load-area-music (audio-music); level-music-indexes (audio-music); ensure-correct-music (audio-music); sound-queue-entry (audio-engine); music-engine (audio-engine); frequency-table (audio-engine); note-lengths (audio-engine); instruments (audio-engine); do-sound-processing (audio-engine); sound-effect-queues-1-2 (audio-sfx); sound-effect-data (audio-sfx); sound-effect-queue-3 (audio-sfx). We don't reproduce the bytes.
Measured by a script. It fails if the result disagrees with the claim.
The quote matches our archived copy.
Revised after a check by a second AI model, 2026-10-26.
- ^Both games have the charged crouch jump. Doki Doki Panic's manual says the character flashes while Down is held and then jumps about 1.5 times as high as a standing jump, and Super Mario Bros. 2's manual says the same of its power squat jump. SMB2's code charges it after 60 frames of crouching on the ground (smb2/jump-start).ManualDoki Doki Panic manual · Super Mario Bros. 2 manual (US) · SMB2 Discombobulatedrevised
How we know
十字ボタンの下を押しているとプレイヤーが点滅する。このときジャンプすると、その場ジャンプの約1.5倍跳び上がれる。
p. 19, ためジャンプ (charged jump) · archived copy ↗ The player will flash when the bottom of the control pad is pressed and held. When you jump, you will be able to jump 1.5 times higher than regular jumps.
How to use the controller, Power squat jump · archived copy ↗ 2482 LDA CrouchJumpTimer ; check if crouch jump is charged 2483 CMP #$3C 2484 BCS loc_BANK0_8C92 ⋮ 2486 INC CrouchJumpTimer ; increment crouch jump charge
src/prg-0-1.asm lines 2482–2486 at b73415e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^Doki Doki Panic's manual says the two children are saved only if the whole family beats Mamu, so each of the four must clear the last page. In Super Mario Bros. 2 the last level leads to the ending whichever character clears it; the end of each level adds one to the character's count of levels cleared, which the ending shows.ManualDoki Doki Panic manual · SMB2 Discombobulatedrevised
How we know
1人だけが最後のページまでクリアしてもダメ。家族全員がマムーを倒さないと、2人を助けられないのだ。
p. 13, the chapters and the family rule (CHAPTER diagram) · archived copy ↗ 1512EndOfLevel: ⋮ 1517 ; Increase current characters "contribution" counter 1518 LDX CurrentCharacter 1519 INC CharacterLevelsCompleted, X ⋮ 1522 LDA CurrentLevel 1523 CMP #$13 1524EndOfLevelJump: ⋮ 1526 BNE EndOfRegularLevel 1527EndOfLastLevel: ⋮ 1529 JMP EndingSceneRoutine
src/prg-e-f.asm lines 1512–1529 at b73415e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^Both games turn the grass on the other side into money for only two visits an area: medals in Doki Doki Panic's manual, coins in Super Mario Bros. 2's. SMB2's code counts a Subspace visit that pulled at least one coin, and after two, grass in Subspace gives small vegetables.ManualDoki Doki Panic manual · Super Mario Bros. 2 manual (US) · SMB2 Discombobulatedrevised
How we know
裏画面にある草は、各ページでランプを2度使うまでメダルになる。
p. 26, 魔法のランプで裏画面へ (to the reverse screen with the magic lamp) · archived copy ↗ The grass in Sub-space will turn into coins until you use magic twice in that area.
Really useful items, Go to Sub-space with magic · archived copy ↗ 3811 LDX InSubspaceOrJar 3812 CPX #$02 3813 BNE loc_BANK0_91E3 ⋮ 3815 LDA SubspaceVisits 3816 CMP #$02 3817 BCS loc_BANK0_91E2 ; skip if we've already visited Subspace twice ⋮ 3819 INC SubspaceCoins 3820 LDX #$00 ⋮ 3822loc_BANK0_91E2: 3823 TXA
src/prg-0-1.asm lines 3811–3823 at b73415e · upstream ↗ 1259 LDA InSubspaceOrJar 1260 BNE loc_BANKF_E609 ⋮ 1262 LDA SubspaceCoins 1263 BEQ loc_BANKF_E627 ⋮ 1265 INC SubspaceVisits
src/prg-e-f.asm lines 1258–1265 at b73415e · upstream ↗ 3514PickUpToEnemyTypeTable: 3515 .db Enemy_MushroomBlock ; $00 3516 .db Enemy_MushroomBlock ; $01 3517 .db Enemy_MushroomBlock ; $02 3518 .db Enemy_POWBlock ; $03 3519 .db Enemy_Coin ; $04 3520 .db Enemy_VegetableLarge ; $05 3521 .db Enemy_VegetableSmall ; $06
src/prg-0-1.asm lines 3514–3521 at b73415e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^Super Mario Bros. 2's code puts a mushroom in Subspace that adds a mark to the life meter and refills it, where Doki Doki Panic's manual describes a heart. SMB2's manual names the mushroom in its item list, but its Subspace paragraph still calls it a heart that increases the life meter.ManualDoki Doki Panic manual · Super Mario Bros. 2 manual (US) · SMB2 Discombobulatedrevised
How we know
ある場所にドアを置くと、ライフゲージをアップさせるハートがあるよ。
p. 26, 魔法のランプで裏画面へ (to the reverse screen with the magic lamp) · archived copy ↗ If you place a door in a certain place, there will be a heart that will increase your life meter.
Really useful items, Go to Sub-space with magic · archived copy ↗ These appear when you enter a warp to Sub space at a certain place. Your life meter will increase by one mark.
Items that help Mario and his friends, Mushrooms · archived copy ↗ 5147 ; Create a living fungus. 5148 ; Even most of this routine uses an enemy slot offset, the next few lines assume slot 0. 5149 ; We just set `X` to 0, so this is a safe enough assumption. 5150 LDA #Enemy_Mushroom 5151 STA ObjectType 5152 LDA #EnemyState_Alive 5153 STA EnemyState 5154 ; Keep track of which mushroom so that you can't collect it twice. 5155 STY EnemyVariable ⋮ 5157 ; Reset various object timers and attributes 5158 LDA #$00
src/prg-6-7.asm lines 5147–5158 at b73415e · upstream ↗ 3402EnemyBehavior_PickUpMushroom: 3403 LDX EnemyVariable 3404 INC Mushroom1Pulled, X 3405 LDX byte_RAM_12 3406 INC PlayerMaxHealth 3407 JSR RestorePlayerToFullHealth
src/prg-2-3.asm lines 3402–3407 at b73415e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^Both games end a level with a Bonus Chance, and Doki Doki Panic's disk holds Super Mario Bros. 2's 24 bytes of slot-machine reels with two exceptions. Where SMB2's first reel has a turnip (its second symbol) and a Snifit (its fifth), the disk has
$00, the value SMB2's code reads as a cherry, so that reel holds three of SMB2's cherry values on the disk and one in SMB2. A cherry on the first reel wins a life.CodeDoki Doki Panic manual · SMB2 Discombobulated · “Super Mario Bros. 2 (USA)” · “Yume Koujou - Doki Doki Panic (Japan) (DV 1)” · “Yume Koujou - Doki Doki Panic (Japan) (DV 2)”revisedHow we know
ページの終わりにボーナスチャンス!!
PDF p. 5 (unnumbered), contents · archived copy ↗ 581BonusChanceReel1Order: 582 .db Slot_Snifit ; $00 583 .db Slot_Turnip ; $01 ; Graphics exist for a mushroom (not used) 584 .db Slot_Star ; $02 585 .db Slot_Turnip ; $03 586 .db Slot_Snifit ; $04 587 .db Slot_Star ; $05 588 .db Slot_Cherry ; $06 589 .db Slot_Turnip ; $07
src/prg-a-b.asm lines 581–589 at b73415e · upstream ↗ 1693 LDY #$00 1694 LDX ObjectXLo + 6 ; Load reel 1 1695 LDA SlotMachineReelOrder1RAM, X 1696 BNE CheckReel2Symbol ; Is this reel a cherry?
src/prg-e-f.asm lines 1692–1697 at b73415e · upstream ↗ In the cartridge (“Super Mario Bros. 2 (USA)”): the three reels, $8539-$8550 in bank $A; Slot_Cherry is $00 (src/defs.asm). We don't reproduce the bytes.
In the cartridge (“Yume Koujou - Doki Doki Panic (Japan) (DV 1)”): the disk's 24 bytes, TEMP-PRG $64CB-$64E2; bytes 1 and 4 are $00 where SMB2 has $10 (turnip) and $18 (Snifit). We don't reproduce the bytes.
In the cartridge (“Yume Koujou - Doki Doki Panic (Japan) (DV 2)”): DV 2's copy, equal to DV 1's. We don't reproduce the bytes.
Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^Doki Doki Panic's final boss, Mamu, is Super Mario Bros. 2's Wart; each manual names its own. Kensuke Tanabe's team added enemy characters and visual nods to the Mario games for the American release, Chris Kohler reported.ManualDoki Doki Panic manual · Super Mario Bros. 2 manual (US) · Kohler, "Secret History of SMB2"revised
How we know
最後のページには大ボス・マムーがキミを待ちかまえているわけだ。
p. 13, the chapters and the family rule (CHAPTER diagram) · archived copy ↗ The big boss, Wart is waiting for you at the end of the final area once you've cleared all of the other areas.
Know the Basic Rules of the Game · archived copy ↗ Tanabe's team made many improvements to the original for its American debut, adding more enemy characters, throwing in some visual nods to the Mario games and greatly enhancing the animation and sound effects.
closing paragraphs · archived copy ↗ The quote matches our archived copy.
Revised after a check by a second AI model, 2026-10-26.
- ^Super Mario Bros. 2's cartridge keeps Doki Doki Panic data that it never shows. The 24 bytes the disassembly calls
MysteryData14439, copied to RAM and unused, are on Doki's disk unchanged, and so are the 32 bytes of sprite entries it labels as the heads of Imajin, Lina, Mama, and Papa. After the heads, SMB2 has a PPU write of 20 blank tiles ($FB) at$20C6, which the disassembly labelsBonusChanceUnused_BONUS_CHANCE; the disk's write at the same place holds text (bonus-chance-text).CodeSMB2 Discombobulated · “Super Mario Bros. 2 (USA)” · “Yume Koujou - Doki Doki Panic (Japan) (DV 1)”revisedHow we know
382; What is this for? It gets copied to RAM and then...that's all. ⋮ 387MysteryData14439:
src/prg-a-b.asm lines 381–387 at b73415e · upstream ↗ In the cartridge (“Super Mario Bros. 2 (USA)”): MysteryData14439, $8439-$8450 in bank $A. We don't reproduce the bytes.
In the cartridge (“Yume Koujou - Doki Doki Panic (Japan) (DV 1)”): the same 24 bytes in TEMP-PRG, $63C1-$63D8. We don't reproduce the bytes.
611BonusChanceUnusedImajinHead: 612 .db $CB, $B0, $00, $A0, $CB, $B0, $40, $A8 613BonusChanceUnusedLinaHead: 614 .db $CB, $B2, $00, $A0, $CB, $B2, $40, $A8 615BonusChanceUnusedMamaHead: 616 .db $CB, $B6, $00, $A0, $CB, $B6, $40, $A8 617BonusChanceUnusedPapaHead: 618 .db $CB, $B4, $00, $A0, $CB, $B4, $40, $A8
src/prg-a-b.asm lines 611–618 at b73415e · upstream ↗ In the cartridge (“Super Mario Bros. 2 (USA)”): the four heads, $8559-$8578. We don't reproduce the bytes.
In the cartridge (“Yume Koujou - Doki Doki Panic (Japan) (DV 1)”): the same 32 bytes in TEMP-PRG, $64EB-$650A. We don't reproduce the bytes.
621; Based on the position and the number of tiles, this probably used to say... ⋮ 623; --- BONUS CHANCE --- ⋮ 625BonusChanceUnused_BONUS_CHANCE: 626 .db $20, $C6, $14 627 .db $FB, $FB, $FB, $FB, $FB, $FB, $FB, $FB, $FB, $FB, $FB, $FB
src/prg-a-b.asm lines 621–627 at b73415e · upstream ↗ In the cartridge (“Super Mario Bros. 2 (USA)”): the PPU write of 20 tiles at $20C6, all $FB (blank). We don't reproduce the bytes.
Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^Where Super Mario Bros. 2 writes 20 blank tiles at
$20C6, Doki Doki Panic's disk writes 20 tiles that, decoded through SMB2's own letter codes, read "--- BONUS CHANCE ---", the text the disassembly's comment guessed from the write's place and length. This is a decode, not a byte match: the letters are SMB2's codes from its "NO BONUS", "PUSH (A) BUTTON", and title-card text, and how Doki Doki Panic draws its own text is unread.CodeSMB2 Discombobulated · “Yume Koujou - Doki Doki Panic (Japan) (DV 1)”revisedHow we know
621; Based on the position and the number of tiles, this probably used to say... ⋮ 623; --- BONUS CHANCE --- ⋮ 625BonusChanceUnused_BONUS_CHANCE: 626 .db $20, $C6, $14 627 .db $FB, $FB, $FB, $FB, $FB, $FB, $FB, $FB, $FB, $FB, $FB, $FB
src/prg-a-b.asm lines 621–627 at b73415e · upstream ↗ In the cartridge (“Yume Koujou - Doki Doki Panic (Japan) (DV 1)”): the disk's write at the same place, TEMP-PRG $650B-$6522, also to $20C6 with 20 tiles: $F3 $F3 $F3 $FB, $DB $E8 $E7 $EE $EC, $FB, $DC $E1 $DA $E7 $DC $DE, $FB, $F3 $F3 $F3. We don't reproduce the bytes.
631BonusChanceText_NO_BONUS: 632 .db $22, $86, $14 633 .db $FB, $FB, $FB, $FB, $FB, $FB 634 .db $E7, $E8, $FB, $DB, $E8, $E7, $EE, $EC ; NO BONUS 635 .db $FB, $FB, $FB, $FB, $FB, $FB 636 .db $00
src/prg-a-b.asm lines 631–636 at b73415e · upstream ↗ 638BonusChanceText_PUSH_A_BUTTON: 639 .db $22, $89, $0E 640 .db $E9, $EE, $EC, $E1, $FB, $0E, $F,$FB, $DB, $EE, $ED, $ED, $E8, $E7 ; PUSH (A) BUTTON 641 .db $00
src/prg-a-b.asm lines 638–641 at b73415e · upstream ↗ 676TitleCardText: ⋮ 680 ; WORLD 1-1 681 .db $24, $CA, $0B 682 .db $FB, $F0, $E8, $EB, $E5, $DD, $FB, $FB, $D1, $F3, $D1 683 ; EXTRA LIFE... 0 684 .db $23, $48, $10 685 .db $DE, $F1, $ED, $EB, $DA, $FB, $E5, $E2, $DF, $DE
src/prg-a-b.asm lines 676–690 at b73415e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^Super Mario Bros. 2's ending still writes
$80to$4080, a sound register of the Famicom Disk System, which a cartridge game has no use for; the disassembly marks it as a leftover.CodeSMB2 DiscombobulatedHow we know
1851 LDA #$80 1852 ; FDS leftover; $4080 is an old sound register 1853 ; The prototype had two writes to this address! 1854 ; It looks like they missed this one, though. 1855 STA FDS_WAVETABLE_VOL
src/prg-e-f.asm lines 1851–1855 at b73415e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^
PlayerYSpdDatastarts a jump at −4 px/frame (rows 0–2) or −5 px/frame (rows 3–4).CodeXkeeper0/smb1 · Jdaster64 n.d.How we know
4864PlayerYSpdData: 4865 .db $fc, $fc, $fc, $fb, $fb, $fe, $ff
src/prg.asm lines 4864–4865 at 1cc3c92 · upstream ↗ 4972 LDA PlayerYSpdData,y 4973 STA Player_Y_Speed
src/prg.asm lines 4972–4973 at 1cc3c92 · upstream ↗ 04000 | 04000 | 05000
JUMPING/VERTICAL PHYSICS, Mario table, Initial Velocity (−Y) · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-27.
- ^
InitJSpicks one of five jump rows by take-off horizontal speed, stepping up at$09,$10,$19, and$1C.CodeXkeeper0/smb1 · Jdaster64 n.d.How we know
4943 LDA Player_XSpeedAbsolute ; check value related to walking/running speed 4944 CMP #$09 ⋮ 4947 CMP #$10 4948 BCC ChkWtr ⋮ 4950 CMP #$19 4951 BCC ChkWtr ⋮ 4953 CMP #$1c 4954 BCC ChkWtr ; note that for jumping, range is 0-4 for Y
src/prg.asm lines 4943–4955 at 1cc3c92 · upstream ↗ Less than 01000 | 01000 – 024FF | 02500 or greater
JUMPING/VERTICAL PHYSICS, Mario table · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-27.
- ^
JumpSwimSubswaps in falling gravity, never back, once speed is zero or downward, or once the jump has risen at leastDiffToHaltJumpon a frame when A is not held, or was not held the frame before.CodeXkeeper0/smb1 · Jdaster64 n.d.revisedHow we know
4757 BPL DumpFall ; or moving downwards, branch to falling ⋮ 4760 AND PreviousA_B_Buttons ; and was pressed in previous frame 4761 BNE ProcSwim ; if so, branch elsewhere ⋮ 4765 CMP DiffToHaltJump ; compare to value set here to see if player is in mid-jump ⋮ 4768 LDA VerticalForceDown ; otherwise dump falling into main fractional 4769 STA VerticalForce
src/prg.asm lines 4756–4769 at 1cc3c92 · upstream ↗ so long as they are moving upward in a jump, holding “A” will make them rise more slowly
JUMPING/VERTICAL PHYSICS · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-27.
Revised after a check by a second AI model, 2026-10-27: "Not held both this frame and last" read two ways; held gravity stays only while A is held on both frames.
- ^In rows 0–1, falling gravity is
$70/256 = 0.4375 px/frame².CodeXkeeper0/smb1How we know
4861FallMForceData: 4862 .db $70, $70, $60, $90, $90, $0a, $09
src/prg.asm lines 4861–4862 at 1cc3c92 · upstream ↗ 6683 ADC $00 ; add downward movement amount to contents of $0433 6684 STA SprObject_Y_MoveForce,x
src/prg.asm lines 6681–6687 at 1cc3c92 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-27.
- ^
MovePlayerVerticallygivesImposeGravity4 px/frame as Mario's maximum fall speed; the clamp sets the speed back to 4 only when its whole part is at least 4 and its fraction byte at least$80.CodeXkeeper0/smb1 · Jdaster64 n.d.revisedHow we know
6549 LDA #$04 ; set maximum vertical speed here 6550 JMP ImposeGravitySprObj ; then jump to move player vertically
src/prg.asm lines 6547–6550 at 1cc3c92 · upstream ↗ 6688 CMP $02 ; compare to maximum speed ⋮ 6691 CMP #$80 ; if less positively than preset maximum, skip this part ⋮ 6694 STA SprObject_Y_Speed,x ; keep vertical speed within maximum value ⋮ 6696 STA SprObject_Y_MoveForce,x ; clear fractional
src/prg.asm lines 6688–6696 at 1cc3c92 · upstream ↗ their vertical downward velocity caps at 04800 in most cases, wrapping back to 04000 when exceeded
JUMPING/VERTICAL PHYSICS · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Revised after a check by a second AI model, 2026-10-27: The clamp sets the speed back to 4 only when its whole part is at least 4 and its fraction at least $80, so 4 px/frame alone overstated it.
- ^Mario's top ground speed is
$18walking and$28running (B held).CodeXkeeper0/smb1 · Jdaster64 n.d.How we know
4873MaxRightXSpdData: 4874 .db $28, $18, $10
src/prg.asm lines 4873–4874 at 1cc3c92 · upstream ↗ 5009 AND #B_Button 5010 BNE SetRTmr ; if pressed, skip ahead to set timer ⋮ 5014 INY ; if running timer not set or level type is water,
src/prg.asm lines 5000–5014 at 1cc3c92 · upstream ↗ Maximum walk speed (normal, castle cutscene) 01900 | Maximum running speed 02900
SMB PHYSICS 101 / GROUND PHYSICS, Mario table · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-27.
- ^Measured from a standstill in World 1-1, Mario reaches
$18on frame 40 walking and$28on frame 45 running, and let go at those speeds he stops in 40 and 49 frames.VerifiedXkeeper0/smb1revisedHow we know
4877FrictionData: 4878 .db $e4, $98, $d0
src/prg.asm lines 4877–4878 at 1cc3c92 · upstream ↗ 5042 LDA PlayerFacingDirsrc/prg.asm lines 5042–5047 at 1cc3c92 · upstream ↗ 4870MaxLeftXSpdData: 4871 .db $d8, $e8, $f0 ⋮ 4873MaxRightXSpdData: 4874 .db $28, $18, $10
src/prg.asm lines 4870–4874 at 1cc3c92 · upstream ↗ 5029 STA MaximumLeftSpeed ⋮ 5036 STA MaximumRightSpeed
src/prg.asm lines 5028–5036 at 1cc3c92 · upstream ↗ Measured by a script in MesenCE 2.2.1 (build 4b8a196), on . It fails if the result disagrees with the claim.
The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-25.
Checked by a second AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-25.
- ^A hit on big Mario sets
InjuryTimerto 8, and enemy contact is skipped until it is back at 0. It is one of the interval timers, whichDecTimerscounts down once every 21 frames, so the window lasts 8 such ticks, 148 to 168 frames while the game's timers run.CodeXkeeper0/smb1How we know
10583InjurePlayer: 10584 LDA InjuryTimer ; check again to see if injured invincibility timer is 10585 BNE ExInjColRoutines ; at zero, and branch to leave if so ⋮ 10591 LDA #$08 10592 STA InjuryTimer ; set injured invincibility timer
src/prg.asm lines 10583–10592 at 1cc3c92 · upstream ↗ 127 LDX #$14 ; load end offset for end of frame timers 128 DEC IntervalTimerControl ; decrement interval timer control, 129 BPL DecTimersLoop ; if not expired, only frame timers will decrement 130 LDA #$14 131 STA IntervalTimerControl ; if control for interval timers expired, 132 LDX #$23 ; interval timers will decrement along with frame timers
src/prg.asm lines 126–139 at 1cc3c92 · upstream ↗ 60Timers = $0780 ⋮ 78InjuryTimer = $079e
src/ram.asm lines 60–78 at 1cc3c92 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^Picking Luigi copies his own gravities and frictions over Mario's: held gravity
$18–$22for the five jump rows against Mario's$1E–$28, falling gravity$3E–$5Dagainst$60–$90, and friction$B4,$68,$A0against$E4,$98,$D0. It also writes anRTSover theASLthat doubles Mario's friction when he faces away from his motion. His take-off speeds are Mario's. Each area's setup loads the chosen player's set; the axe at the end of a castle loads Mario's set andASLback for the walk that follows, whoever is playing, until the next area loads the player's own again.Codedoppelganger's SMB2J disassemblyHow we know
14477;jump, fall and friction physics data used with mario and luigi 14478;note luigi's higher jump, but with lesser friction 14479JumpFrictionData: 14480 .byte $20, $20, $1e, $28, $28, $0d, $04 14481 .byte $70, $70, $60, $90, $90, $0a, $09 ⋮ 14483 .byte $e4, $98, $d0 ⋮ 14485 .byte $18, $18, $18, $22, $22, $0d, $04 14486 .byte $42, $42, $3e, $5d, $5d, $0a, $09 ⋮ 14488 .byte $b4, $68, $a0
sm2main.asm lines 14477–14488 at 9c40114 · upstream ↗ 14490LoadPhysicsData: 14491 ldx #$60 ;use luigi's offsets and RTS opcode 14492 ldy #$21 14493 lda SelectedPlayer ;if selected luigi, branch to continue 14494 bne ModifyPhysics 14495LoadMarioPhysics: 14496 ldx #$0e ;otherwise use mario's offsets and ASL opcode 14497 ldy #$10 14498ModifyPhysics: 14499 stx PhyOpcode ;load opcode into friction code to modify it 14500 ldx #$10 14501MPhyLoop: ⋮
sm2main.asm lines 14490–14507 at 9c40114 · upstream ↗ 5124 lda PlayerFacingDir 5125 cmp Player_MovingDir ;check facing direction against moving direction 5126 beq ExitPhy ;if the same, branch to leave 5127PhyOpcode: asl FrictionAdderLow ;otherwise multiply friction by 2 5128 rol FrictionAdderHigh ;then leave (or just leave, if code was modified earlier 5129ExitPhy: rts
sm2main.asm lines 5124–5129 at 9c40114 · upstream ↗ 2605DoneInitArea: lda #Silence ;silence music 2606 sta AreaMusicQueue 2607 lda #$01 ;disable screen output 2608 sta DisableScreenFlag 2609 jsr LoadPhysicsData 2610 inc OperMode_Task ;increment task for this mode 2611 rts
sm2main.asm lines 2605–2611 at 9c40114 · upstream ↗ 11158HandleAxeMetatile: 11159 lda #$00 11160 sta OperMode_Task ;reset secondary mode 11161 lda #$02 11162 sta OperMode ;set primary mode to victory mode 11163 jsr LoadMarioPhysics 11164 lda #$18 11165 sta Player_X_Speed ;set horizontal speed and continue to erase axe metatile
sm2main.asm lines 11158–11165 at 9c40114 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-21.
Checked by a second AI model, 2026-10-26.
Sources
Code
- Xkeeper and kmck. 2023. “Super Mario Bros. 2, Discombobulated: a disassembly for asm6f (Xkeeper0/smb2).” Commit b73415e. Xkeeper0/smb2 @ b73415e · licence, all uses
- 1988. “Super Mario Bros. 2 (USA).” · licence, all uses
- 1987. “Yume Koujou - Doki Doki Panic (Japan) (DV 1).” · licence, all uses
- 1987. “Yume Koujou - Doki Doki Panic (Japan) (DV 2).” · licence, all uses
- doppelganger and Xkeeper. 2022. “smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1).” Commit 1cc3c92. Xkeeper0/smb1 @ 1cc3c92 · licence, all uses
- doppelganger and threecreepio. 2025. “SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly).” Commit 9c40114. threecreepio/smb2j-disassembly @ 9c40114 · licence, all uses
Primary
- America, Nintendo of. n.d. “NES Games (Nintendo of America release list).” Nintendo of America. original · archived · licence, all uses
- Kohler, Chris. 2011. “The secret history of Super Mario Bros. 2.” Wired, reprinted by Ars Technica. Condé Nast. original · archived · licence, all uses
- Metts, Jonathan, Daniel Bloodworth, and Matt Casamassina. 2004. “Kensuke Tanabe Talks Metroid Prime 2: Echoes.” Nintendo World Report (Planet GameCube), E3 2004 interview. Nintendo World Report. original · archived · licence, all uses
- Nintendo. n.d. “スーパーマリオUSA (Super Mario USA), Famicom 40th Anniversary page.” Nintendo. original · archived · licence, all uses
- America, Nintendo of. 1988. “Super Mario Bros. 2 instruction booklet (North America).” Nintendo of America. original · archived · licence, all uses
- Nintendo and Fuji Television. 1987. “夢工場ドキドキパニック (Yume Kōjō: Doki Doki Panic) instruction booklet.” Fuji Television / Tokuma Shoten. original · archived · licence, all uses
Secondary
- Computer Entertainer editors. 1988. “Computer Entertainer: the newsletter, vol. 7 no. 7 (October 1988).” Computer Entertainer, vol. 7, no. 7. Computer Entertainer. original · archived · licence, all uses
- McLaughlin, Rus. 2010. “IGN Presents: The History of Super Mario Bros.” IGN. original · archived · licence, all uses
- Affairs, Agency for Cultural. n.d. “夢工場ドキドキパニック (Yume Kōjō: Doki Doki Panic), Media Arts Database record M727630.” Agency for Cultural Affairs, Japan. original · archived · licence, all uses
- Famicom Tsūshin editors. 1987. “Famicom Tsūshin (Famitsu) no. 28, 24 July 1987: New Games Cross Review.” Famicom Tsūshin (ファミコン通信), no. 28, pp. 10-11. ASCII. original · archived · licence, all uses
- Irwin, Jon. 2014. “Super Mario Bros. 2 (Boss Fight Books, no. 6).” Boss Fight Books, no. 6; 184 pp.; foreword by Howard Phillips. Boss Fight Books. original · archived · licence, all uses
- Famicom Tsūshin editors. 1992. “Weekly Famicom Tsūshin (Famitsu) no. 199, 9 October 1992: New Games Cross Review.” Weekly Famicom Tsūshin (週刊ファミコン通信), no. 199, p. 37. ASCII. original · archived · licence, all uses
- Computer Entertainer editors. 1988. “Computer Entertainer: the newsletter, vol. 7 no. 9 (December 1988).” Computer Entertainer, vol. 7, no. 9. Computer Entertainer. original · archived · licence, all uses
- Nintendo Power editors. 1988. “Nintendo Power, issue 3 (1988-11).” Nintendo Power, vol. 3. Nintendo of America. original · archived · licence, all uses
- Nintendo Power editors. 1989. “Nintendo Power, issue 5 (1989-03).” Nintendo Power, vol. 5 (March/April 1989). Nintendo of America. original · archived · licence, all uses
- Nintendo Power editors. 1989. “Nintendo Power, issue 6 (May/June 1989).” Nintendo Power, vol. 6 (May/June 1989), p. 52. Nintendo of America. original · archived · licence, all uses
- O'Malley, James. 2015. “30 Best-Selling Super Mario Games of All Time on the Plumber's 30th Birthday.” Gizmodo UK. Univision Communications. original · archived · licence, all uses
- Jdaster64. n.d. “A Complete Guide to SMB's Physics Engine.” original · archived · licence, all uses