On this page
  1. How it plays
  2. From Doki Doki Panic
  3. Across the series
  4. Cartridge
  5. Related
  6. Mechanics
  7. References
  8. Sources

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 PanicSuper Mario Bros. 2
CastImajin, Lina, Mama, and PapaMario, the Princess, Luigi, and Toad, built on their models, IGN says46
Character statsthe same table on the diskthe same, except Luigi’s take-off speeds43
B buttonlift and throw, per its manuallift, throw, and run47
Crouch jumpcharged by holding Downthe same49
Life metertwo marks, up to fourthe same34
On the last markno shrinkingthe character shrinks36
To finishall four clear the last pageany one clears the last level50
Door itema magic lampa magic potion38
Grass through the doormedals, for two visitscoins, for two visits51
Prize through the doora hearta mushroom52
After a levelthe Bonus Chancethe same reels, with one cherry on the first where the disk has three53
Levels20 pages in seven chapters20 areas in seven worlds44
Final bossMamuWart54
Enemy graphicsmost of its enemy tiles occur on the disk45
Song datano run of more than 548 bytes found on the disk48
Unused dataDoki Doki Panic’s: a 24-byte table and its four heroes’ heads55
A Bonus Chance heading“--- BONUS CHANCE ---”, read through SMB2’s letter codes20 blank tiles56
Disk System sounda leftover write to its register57
In Japan10 July 19872 on disk, from Fuji Television14 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

Interactive: rom-parts (needs JavaScript)

256 KB, a cell per 512 bytes, from 316 mapped regions

Mechanics

MechanicKindHow
JumpSpeed by stateeach character's table picks the take-off speed by running, a charged crouch, and carrying
GravityLighter while heldeach character has a lighter gravity for any frame the button is held
Variable jump heightHeld gravitya lighter gravity on every frame the button is held
RunningRun buttonB raises the top speed by half, from 1.5 to 2.25 px/frame; carrying an enemy or a block changes the cap
FlightHoverthe Princess hovers for up to 60 frames with the button held
ClimbingVine or laddervines, chains, and ladders, climbed faster down than up
Hit pointsa life meter of two to four marks; a hit takes one
Health upgradeWhole containersup to two mushrooms a level, each adding a mark until the level ends
Healing itemInstantevery eighth enemy defeated comes back as a heart worth one mark
Invincibility framesFrame timera hit sets 127 frames, counted every frame
KnockbackLauncha hit that leaves two marks or more launches the player up and away
Bonus stageSlot machinea slot machine after each level, one coin a spin
Extra lifeOther conditionthe slot machine's cherries and triples win lives
Every claim about this game, by concept (62)
generalSuper Mario Bros. 2's cartridge ROM (USA, PRG0), counted by part of the game: each stretch of code or data goes to the part its code shows it serves, and the value sums the bytes of each part.Code
Standing in quicksand sinks the player at $01 a frame, or $08 in 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.Code
The fifth large vegetable pulled since the level began or the player last died is a stopwatch, and the count starts over.Code
IGN'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.Manual
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.Manual
Super 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.Manual
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.Manual
Both 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.Manual
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.Manual
Most 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.Code
Super 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.Interview
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 labels BonusChanceUnused_BONUS_CHANCE; the disk's write at the same place holds text (bonus-chance-text).Code
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.Code
Super Mario Bros. 2's ending still writes $80 to $4080, a sound register of the Famicom Disk System, which a cartridge game has no use for; the disassembly marks it as a leftover.Code
Nintendo 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.Publisher
Nintendo 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.Magazine
Doki 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.Web
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.Interview
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.Interview
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.Interview
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".Web
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.Interview
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.Manual
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.Web
Computer Entertainer's October 1988 review gave it four and a half stars and called it a worthy sequel, not to be missed.Magazine
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.Magazine
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.Magazine
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.Magazine
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.Magazine
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.Web
Gizmodo 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.Web
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.Web
Area transitionA 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.Code
Bonus stageThe 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.Code
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.Code
ClimbingOn 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 of HandlePlayerState_Climbing, and sets the sideways speed to 5.6875 px/frame to the left.Code
FlightThe Princess's Floating Time is $3C; the other three have 0. With the button held once her rise has slowed to -$04 or less, each frame sets her vertical speed from FloatingYVelocity, 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.Verified
GravitySuper Mario Bros. 2 keeps speeds as 4.4 fixed point; ApplyPlayerPhysics takes whole pixels from a speed's upper nibble.Code
PlayerGravity adds 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 (QuicksandDepth 2 or more), the routine adds GravityQuicksand, $08 for all four (quicksand), at any speed; and while the Princess floats, it sets her speed outright from FloatingYVelocity and adds nothing (float).Code
Healing itemEvery 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.Code
Health upgradeA 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 PlayerHealth to PlayerHealth_2_HP and PlayerMaxHealth to 0: a meter of two marks, both full.Code
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.Manual
Held itemEach character's stats table holds a second take-off for each kind of jump, used while carrying something. Standing, charged, and running, they are: Mario $B0, $98, $AA; Luigi $D6, $C9, $D4; Toad $B2, $98, $AD; the Princess $B3, $98, $B3. Against the empty-handed ones (mario-stats and the rest), an item lowers only the running jump: Mario's and Luigi's by $04, and the Princess's to her standing one; Toad's are unchanged. The same tables hold the ground caps, $18 empty-handed for all four, and carrying $18, $16, $1D, and $15 (carry-speed).Code
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).Code
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.Verified
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 $08 or more and falling at $18 if not. The others fly forward at $30 level if the player was moving, and if standing are set down 16 px ahead, falling at $18.Code
Hit pointsBoth 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.Manual
Super 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.Interview
Invincibility framesHealth is $0F for one mark of the life meter and $10 more for each further mark, up to $3F for four. A hit takes $10, one mark, and sets DamageInvulnTime to $7F, during which DamagePlayer returns at once; the timer drops every frame. If the health left is $10 or more, two marks or more, the hit also launches the player upward at $C0 and 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 before Enemy_BeezoDiving), stuns it for $10 frames, sets the player's vertical speed to $C0 and PlayerStateTimer to $20, and jumps to KillPlayer, which sets the dying state and health to 0. A dying player holds still for those 32 frames, then rises at $C0 and falls back, gaining $02 a frame up to $39, and loses a life once below the screen.Code
JumpPlayerStartJump first checks quicksand: sunk with QuicksandDepth 2 or more, the player takes off at JumpHeightQuicksand, $E0 for 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 $08 or more), a charged crouch (CrouchJumpTimer at $3C), and holding an item. A charged jump clears the running bit.Code
Measured 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 $04 and $07. With an item, see carry-stats.Verified
Luigi 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 $01 and $02. With an item, see carry-stats.Verified
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 $04 and $07. With an item, see carry-stats.Verified
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 $04 and $07. With an item, see carry-stats.Verified
Holding 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.Code
Doki 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 $02 lower 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.Code
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).Manual
RunningHolding B raises the top speed by half: running right with nothing carried, from $18 to $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.Verified
The run button's half is added to whatever cap applies, the carrying speed (carry-speed) or quicksand's $04 as well as the unladen $18. To the left the cap is negative, and halving it with the carry set rounds it away from zero: a cap of $EB to the left becomes $E0, where $15 to the right becomes $1F.Code
On ordinary ground, holding right adds $02 to 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 $03 a 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.Verified
Left and right push at the same $02 a frame in the air, and with neither held the air keeps the speed. Any push resets a crouch jump's charge (crouch-charge). Crouched on the ground, left and right do nothing, and the ground's friction slows the player. On ice the push comes on one frame in four and the friction on one in sixteen.Code
Super 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.Manual

References

  1. ^ 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.

    In the claim ledger

  2. ^ 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.

    In the claim ledger

  3. ^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.

    In the claim ledger

  4. ^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.

    In the claim ledger

  5. ^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.

    In the claim ledger

  6. ^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.

    In the claim ledger

  7. ^ 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.

    In the claim ledger

  8. ^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 claim ledger

  9. ^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.

    In the claim ledger

  10. ^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.

    In the claim ledger

  11. ^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.

    In the claim ledger

  12. ^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 claim ledger

  13. ^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.

    In the claim ledger

  14. ^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.

    In the claim ledger

  15. ^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.

    In the claim ledger

  16. ^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.

    In the claim ledger

  17. ^ 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.

    In the claim ledger

  18. ^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.

    In the claim ledger

  19. ^ abcPlayerStartJump first checks quicksand: sunk with QuicksandDepth 2 or more, the player takes off at JumpHeightQuicksand, $E0 for 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 $08 or more), a charged crouch (CrouchJumpTimer at $3C), and holding an item. A charged jump clears the running bit.CodeSMB2 Discombobulatedrevised
    How 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.

    In the claim ledger

  20. ^ 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 $04 and $07. With an item, see carry-stats.VerifiedSMB2 Discombobulatedrevised
    How 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.

    In the claim ledger

  21. ^ 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 $01 and $02. With an item, see carry-stats.VerifiedSMB2 Discombobulatedrevised
    How 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.

    In the claim ledger

  22. ^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 $04 and $07. With an item, see carry-stats.VerifiedSMB2 Discombobulatedrevised
    How 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.

    In the claim ledger

  23. ^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 $04 and $07. With an item, see carry-stats.VerifiedSMB2 Discombobulatedrevised
    How 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.

    In the claim ledger

  24. ^ 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.

    In the claim ledger

  25. ^ abcdePlayerGravity adds 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 (QuicksandDepth 2 or more), the routine adds GravityQuicksand, $08 for all four (quicksand), at any speed; and while the Princess floats, it sets her speed outright from FloatingYVelocity and adds nothing (float).CodeSMB2 Discombobulatedrevised
    How 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.

    In the claim ledger

  26. ^ abThe Princess's Floating Time is $3C; the other three have 0. With the button held once her rise has slowed to -$04 or less, each frame sets her vertical speed from FloatingYVelocity, 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 Discombobulated
    How 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.

    In the claim ledger

  27. ^ abcdefOn ordinary ground, holding right adds $02 to 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 $03 a 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 Discombobulatedrevised
    How 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.

    In the claim ledger

  28. ^ abHolding B raises the top speed by half: running right with nothing carried, from $18 to $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 Discombobulatedrevised
    How 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.

    In the claim ledger

  29. ^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.

    In the claim ledger

  30. ^Standing in quicksand sinks the player at $01 a frame, or $08 in 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 Discombobulated
    How 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.

    In the claim ledger

  31. ^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.

    In the claim ledger

  32. ^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 $08 or more and falling at $18 if not. The others fly forward at $30 level if the player was moving, and if standing are set down 16 px ahead, falling at $18.CodeSMB2 Discombobulated
    How 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.

    In the claim ledger

  33. ^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 of HandlePlayerState_Climbing, and sets the sideways speed to 5.6875 px/frame to the left.CodeSMB2 Discombobulated · “Super Mario Bros. 2 (USA)”revised
    How 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.

    In the claim ledger

  34. ^ 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.

    In the claim ledger

  35. ^ abcdHealth is $0F for one mark of the life meter and $10 more for each further mark, up to $3F for four. A hit takes $10, one mark, and sets DamageInvulnTime to $7F, during which DamagePlayer returns at once; the timer drops every frame. If the health left is $10 or more, two marks or more, the hit also launches the player upward at $C0 and 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 before Enemy_BeezoDiving), stuns it for $10 frames, sets the player's vertical speed to $C0 and PlayerStateTimer to $20, and jumps to KillPlayer, which sets the dying state and health to 0. A dying player holds still for those 32 frames, then rises at $C0 and falls back, gaining $02 a frame up to $39, and loses a life once below the screen.CodeSMB2 Discombobulatedrevised
    How 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.

    In the claim ledger

  36. ^ 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.

    In the claim ledger

  37. ^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.

    In the claim ledger

  38. ^ 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.

    In the claim ledger

  39. ^ 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.

    In the claim ledger

  40. ^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 PlayerHealth to PlayerHealth_2_HP and PlayerMaxHealth to 0: a meter of two marks, both full.CodeSMB2 Discombobulatedrevised
    How 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.

    In the claim ledger

  41. ^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.

    In the claim ledger

  42. ^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.

    In the claim ledger

  43. ^ 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 $02 lower 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.

    In the claim ledger

  44. ^ 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.

    In the claim ledger

  45. ^ 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.

    In the claim ledger

  46. ^ 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.

    In the claim ledger

  47. ^ 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.

    In the claim ledger

  48. ^ 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.

    In the claim ledger

  49. ^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.

    In the claim ledger

  50. ^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.

    In the claim ledger

  51. ^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.

    In the claim ledger

  52. ^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.

    In the claim ledger

  53. ^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)”revised
    How 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.

    In the claim ledger

  54. ^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.

    In the claim ledger

  55. ^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 labels BonusChanceUnused_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)”revised
    How 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.

    In the claim ledger

  56. ^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)”revised
    How 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.

    In the claim ledger

  57. ^Super Mario Bros. 2's ending still writes $80 to $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 Discombobulated
    How 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.

    In the claim ledger

  58. ^PlayerYSpdData starts 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.

    In the claim ledger

  59. ^InitJS picks 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.

    In the claim ledger

  60. ^JumpSwimSub swaps in falling gravity, never back, once speed is zero or downward, or once the jump has risen at least DiffToHaltJump on a frame when A is not held, or was not held the frame before.CodeXkeeper0/smb1 · Jdaster64 n.d.revised
    How 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 the claim ledger

  61. ^In rows 0–1, falling gravity is $70/256 = 0.4375 px/frame².CodeXkeeper0/smb1
    How 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.

    In the claim ledger

  62. ^MovePlayerVertically gives ImposeGravity 4 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.revised
    How 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.

    In the claim ledger

  63. ^Mario's top ground speed is $18 walking and $28 running (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.

    In the claim ledger

  64. ^Measured from a standstill in World 1-1, Mario reaches $18 on frame 40 walking and $28 on frame 45 running, and let go at those speeds he stops in 40 and 49 frames.VerifiedXkeeper0/smb1revised
    How we know
    4877FrictionData:
    4878	.db $e4, $98, $d0
    
    src/prg.asm lines 4877–4878 at 1cc3c92 · upstream ↗
    5042	LDA PlayerFacingDir
    
    src/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.

    In the claim ledger

  65. ^A hit on big Mario sets InjuryTimer to 8, and enemy contact is skipped until it is back at 0. It is one of the interval timers, which DecTimers counts down once every 21 frames, so the window lasts 8 such ticks, 148 to 168 frames while the game's timers run.CodeXkeeper0/smb1
    How 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.

    In the claim ledger

  66. ^Picking Luigi copies his own gravities and frictions over Mario's: held gravity $18–$22 for the five jump rows against Mario's $1E–$28, falling gravity $3E–$5D against $60–$90, and friction $B4, $68, $A0 against $E4, $98, $D0. It also writes an RTS over the ASL that 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 and ASL back for the walk that follows, whoever is playing, until the next area loads the player's own again.Codedoppelganger's SMB2J disassembly
    How 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.

    In the claim ledger

Sources

Code

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
  • Navarro, Alex. 2007. “Super Mario Bros. 2 Review.” GameSpot, Wii Virtual Console review. CBS Interactive. 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