Super Mario Bros. 3
Nintendo's 1988 side-scrolling platformer for the Famicom and NES, the third Super Mario Bros.
Super Mario Bros. 3 is Nintendo’s side-scrolling platformer for the Famicom and NES. It came out in Japan on 23 October 19881,1. Nintendo of America’s list of NES games dates the North American release February 19902,2. A British magazine expected it in Britain in November 19913.
Mario crosses eight worlds to reach Bowser at the end of the eighth4. Each world has a map screen, on which the player walks to the next level and uses the items Mario has collected5. The staff’s letter at the end of both manuals names the map and a new two-player game as what is new6.
Nintendo Power named Shigeru Miyamoto as project head, Takashi Tezuka as a director, Nakago as coding director, and Koji Kondo as the composer7. In a 2016 interview, Miyamoto and Tezuka put the team at 20 to 30 people, and Kondo said he was alone on sound8. Work began in the spring of 1986, and the game was first built with a view from above at a slant9. A centaur power-up was rejected in favor of a tail and flight10.
Famicom Tsūshin’s reviewers gave it 35 of 4011,11, and its staff named it the action game of 198812. Each of Electronic Gaming Monthly’s four reviewers scored it 9 of 1013, and Mean Machines gave it 98%14,14. The film The Wizard showed it in its finale two months before the North American release15. A Nintendo spokeswoman said more than 250,000 copies sold in its first two days there16. David Sheff’s Game Over counts 7 million sold in the United States and 4 million in Japan17. Nintendo Power’s readers’ chart had it at no. 1 by May 1990 and still at the end of 199118. In 1997 Electronic Gaming Monthly called it the best platform game of all time, and IGN later ranked it the best NES game19.
#How it plays
Mario walks at up to 1.5 px/frame, and holding B lets him speed up to 2.5 px/frame20. As Raccoon Mario holding B, he gains speed on 14 frames out of every 16 from a standstill and reaches running speed in 46 frames. Every form but Frog Mario speeds up at that rate, while Frog Mario gains 2 a frame21. Let go of the d-pad and he slows to a stop on the ground but keeps his speed in the air21,22.
Running at full speed fills the P-meter in the status bar, one of its seven steps every 8 frames23. A full meter raises his top speed to 3.5 px/frame20. Once he stops running, a full meter stays full for 16 frames more and then loses a step every 24 frames23.
A jump takes off at 3.5 px/frame from a standstill and up to 4 px/frame at full speed24. Holding A keeps gravity light until the rise slows to 2 px/frame25. Held, a standing jump rises 71 px, about four and a half tiles. Tapped, it rises 21 px26. A fall levels off at 4 px/frame27.
The Super Leaf makes Mario Raccoon Mario, and the Tanooki Suit makes him Tanooki Mario28. Both can fly and wag a tail29. A jump with the P-meter full starts a flight of about 256 frames, 4¼ seconds. While it lasts, each press of A in the air lifts him at 1.5 px/frame, and near its end the lift fades30. A landing doesn’t end the flight, so he can take off again until the time runs out31. Out of flight time, each press of A holds a fall to 1 px/frame for 16 frames30,32. B swings the tail33.
Tanooki Mario can also turn to stone. Hold Down and press B, and he stays a statue for up to about 3.2 seconds while Down is held, unable to move sideways and falling fast34. Enemies and their fireballs can’t hurt a statue. A statue landing on most enemies squashes or defeats them, even ones Mario couldn’t otherwise stomp35.
On the ground Frog Mario moves only in hops, and in the air he steers like the other forms36. Under water the d-pad sets his speed directly, and holding A doubles it37. Fire Mario’s fireballs start downward and the Hammer Suit’s hammers upward. Ducking in the Hammer Suit, Mario destroys the fireballs of four kinds of enemy instead of being hurt by them38.
Holding only Down on a slope starts a slide that the slope speeds up, except in the Frog or Hammer Suit39. Holding B as he touches a shell picks it up, and letting go of B kicks it. A shell kicked while he runs the same way goes faster40. A carried shell let go against a wall breaks instead41. A Bob-omb is thrown in an arc rather than kicked42.
A hit takes Mario down one step. From the Fire Flower or any suit he goes back to Super Mario, from Super Mario to small Mario, and small Mario loses a life43. He then blinks for a while, and further hits are ignored44.
#Across the series
Against Super Mario Bros., Mario’s walking and running top speeds are the same45,20. He also reaches running speed in about the same time, 45 frames there and 46 here46,21. The P-meter’s third top speed is new23.
The jump takes off slower, at 3.5 to 4 px/frame against 4 to 547,24. In Super Mario Bros., holding A keeps a standing jump’s gravity at 0.125 px/frame² until the peak48,49. Here the held gravity is lighter, 1/16 px/frame², but only while Mario rises faster than 2 px/frame. From there to the peak a held jump gains 5/16 px/frame², heavier than Super Mario Bros.‘s25. A fall’s gravity is lighter here, 5/16 against 7/16 px/frame²50,25. A standing jump held to its peak rises 71 px against 6651,26.
In Super Mario Bros., Mario’s speed in the air picks the running or walking limits, whatever B does52. Here B sets the top speed in the air as it does on the ground, and a faster speed carries on until he lands21.
In Super Mario Bros. a hit turns Super or Fiery Mario straight back into small Mario53. Here a Fire Flower or a suit is lost first, back to Super Mario43.
Mechanics
| Mechanic | Kind | How |
|---|---|---|
| Running | P-meter | B raises the top speed to 2.5 px/frame, and a full P-meter to 3.5 |
| Jump | Speed from the run | one take-off speed plus a small boost from the run, 3.5 to 4 px/frame |
| Gravity | Lighter while held | 1/16 px/frame² while A is held on a fast rise, 5/16 otherwise |
| Variable jump height | Held gravity | held, a standing jump rises 71 px; tapped, 21 px |
| Air control | Momentum | a held direction speeds Mario up in the air as on the ground, and let go he keeps his speed |
| Flight | Run-up | a full P-meter at take-off gives the Raccoon and Tanooki suits about 4¼ seconds of flight |
| Power-up | Until hit | the Fire Flower and the four suits last until a hit, which takes Mario back to Super Mario |
| Invincibility frames | Frame timer | a hit sets a blink in which further hits are ignored |
| Slope sliding | On Down | Down on a slope starts a slide the slope speeds up |
| Projectile | Ballistic | Fire Mario's fireballs start downward and the Hammer Suit's hammers upward |
| Water physics | the Frog Suit swims at speeds set straight from the d-pad, doubled with A | |
| Coyote time | Some platforms | a few objects leave a 4- to 15-frame window to jump from the air |
| Stage select | a map screen for each world, where Mario walks to the next level's panel | |
| Multiplayer | Alternating | two players take turns, each with their own continues |
| Status bar split | Scanline IRQ | the MMC3's scanline counter fires an IRQ above the status bar |
| CHR bank switching | Mid-frame | the status bar gets its own tile banks, and background tiles animate by cycling banks every 8 frames |
| Raster effects | Several bands | the N-Spade game scrolls three rows independently with three IRQs |
| DPCM samples | Music track | samples play as a track in the music |
Every claim about this game, by concept (56)
References
- ^ abcFamitsu's database gives 23 October 1988 as the date Super Mario Bros. 3 came out on the Famicom in Japan. The staff's letter that closes the Japanese manual is dated the same day.WebFamitsu.com, SMB3 (FC) · Super Mario Bros. 3 Japanese manualrevised
How we know
1988年10月23日
game data · archived copy ↗ 1988. 10. 23.
last page (PDF p. 45), "To Mario's Players" · archived copy ↗ The quote matches our archived copy.
Revised after a check by a second AI model, 2026-10-26.
- ^ abcNintendo of America's list of NES games dates the North American release February 1990, and Electronic Gaming Monthly's April 1990 review gives 15 February.PublisherNintendo, NES Games · EGM 9
How we know
Super Mario Bros. 3
PDF p. 12 · archived copy ↗ 2/15/90
p. 10, review box · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^ abMean Machines, a British magazine, wrote in July 1991 that the game would come out in Britain in early November, and its review in the October 1991 issue gives the release as November.MagazineMean Machines 10 · Mean Machines 13
How we know
will doubtlessly do the same when it's released over here in early November
p. 10 · archived copy ↗ RELEASE DATE: NOVEMBER
p. 59, review box · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^The game has eight worlds, which the North American manual calls the eight kingdoms of the Mushroom World. A Koopa Kid guards each world, and Bowser waits at the end of World 8.ManualSuper Mario Bros. 3 US manual · Mean Machines 13 · Nintendo Power, SMB3 strategy guiderevised
How we know
Let's take a look at the 8 kingdoms that make up the Mushroom World.
p. 30 (PDF p. 31), "The Eight Kingdoms" · archived copy ↗ Each Mushroom World is guarded by an evil Koopa child … The object is to reach the end of world eight where Bowser lies in wait
p. 56 · archived copy ↗ Castle Of Koopa
p. 3, contents · archived copy ↗ The quote matches our archived copy.
Revised after a check by a second AI model, 2026-10-26.
- ^On the map screen the player picks the next level by walking to its panel and pressing A. Some paths are blocked until an item clears them, such as a hammer for a pile of rocks, and items Mario has collected can be used there before a level. Enemies roam the map, and meeting one starts a fight that wins another item. A mini-fortress stands partway through each world.MagazineNintendo Power 11 · Mean Machines 13
How we know
Screen and hit the A Button and you’ll be whisked to an Action Scene.
pp. 8-9 · archived copy ↗ if there's a pile of rocks blocking your way, use the hammer to knock the obstacle away! … Items are selected with the A button, and these can help you in your selected level. … Mario can rendezvous with these critters and beat them about a bit, thus gaining another useful item!
p. 58 · archived copy ↗ In the middle of each World is stationed … a Mini-Fortress defended by Boo Diddly
pp. 8-9 · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^Both manuals close with a letter from the staff naming what is new against the earlier games: a map screen between the action scenes, on which the player charts progress, and a new two-player game. The Japanese letter likens the map to a board game.ManualSuper Mario Bros. 3 US manual · Super Mario Bros. 3 Japanese manual
How we know
In addition to the action scenes, we've added a World Map on which you can plot your progress as well as play a new 2 player game.
p. 42 (PDF p. 43), "To Mario's Players" · archived copy ↗ マップ画面という少しボードゲームの要素も入り
last page (PDF p. 45) · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^Nintendo Power's January 1990 feature on the making of the game names Shigeru Miyamoto as project head, Takashi Tezuka as a director and planner, Mr. Nakago as coding director, and Koji Kondo as the composer. It credits the design and programming to the staff of the Research and Development departments of Nintendo's Kyoto headquarters, NCL.MagazineNintendo Power 10, The Making of SMB3
How we know
project head in charge of development on SMB 3
pp. 20-23, "The Making of Super Mario Bros. 3" · archived copy ↗ Mr. Tezuka, a director and planner of SMB 3 … Mr. Nakago, coding director on SMB 3 … He composed the music for SMB 3.
pp. 20-23 · archived copy ↗ staff of NCL's Research and Development Departments
p. 20 · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^In Nintendo's 2016 interview, Miyamoto and Tezuka put the team at 20 to 30 people. Miyamoto describes a "Map Room" where programmers entered map data from paper sheets every day, and Kondo says he was alone on sound.InterviewNintendo Classic Mini interview, vol. 3
How we know
Maybe 20 to 30? … We had what we called the Map Room … But I was alone on sound.
Human Wave Tactics · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^Miyamoto says work began in the spring of 1986, after The Lost Levels, and that a spring 1988 release slipped by another six months. Tezuka says the game was first built with a view from above at a slant; Miyamoto told him that view lost the sense of distance to the ground, and the game became a side view.InterviewNintendo Classic Mini interview, vol. 3
How we know
We began after Super Mario Bros.: The Lost Levels in the spring of 1986 … We wanted to release it in spring of 1988, but we couldn't do that either, so it dragged on for another six months! … At first, we were making it with a bird's-eye view rather than a side view. … you lost your sense of distance to the ground
Human Wave Tactics · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^Nintendo Power's making-of feature says a power-up turning Mario into a centaur was rejected, and the team settled on a tail and flight instead.MagazineNintendo Power 10, The Making of SMB3
How we know
A concept that was rejected was having Mario power-up as a Centaur … to give Mario a tail and the ability of flight
p. 20 · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^ abFamicom Tsūshin's cross review gave it 35 of 40, which placed it in the magazine's Platinum Hall. One reviewer called it close to the best form a sequel to Super Mario could take.WebFamitsu.com, SMB3 (FC)
How we know
プラチナ殿堂
game data · archived copy ↗ 『スーパーマリオ』の続編としては、最高の形に近いと思う。
review comments · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^Famicom Tsūshin's staff named it the action game of 1988, citing the leaf that lets Mario fly.MagazineFamitsu 67, '88 Best Hit Game Awards
How we know
アクションゲーム賞
p. 8, genre awards chosen by the staff · archived copy ↗ 今回はハッパのアイテムで空を飛んだり
p. 8 · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^Electronic Gaming Monthly's four reviewers each scored it 9 of 10. One called it the best Nintendo game ever made, another the best game ever made for the NES, and a third one of the best Nintendo games ever made.MagazineEGM 9
How we know
you get the best game ever made for the NES! … This is the best Nintendo game ever made. … the best Nintendo games ever made!
p. 10, Review Crew · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^ abMean Machines scored it 98% overall; its reviewer Julian called it the finest video game he had played.MagazineMean Machines 13
How we know
OVERALL 98%
p. 59, scores · archived copy ↗ Super Mario III is simply the finest videogame I've ever played.
p. 57 · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^Universal's film The Wizard, released on 14 December 1989, ends in a tournament played on Super Mario Bros. 3, two months before the game's North American release; Nintendo Power promoted it as a preview of the game. Sheff writes that Nintendo was paid a licensing fee and approved the script and the game footage.MagazineNintendo Power 9 · Sheff, Game Over (1999)
How we know
On December 14, Universal City Studios will premiere
pp. 89-90, "The Wizard" · archived copy ↗ pits the finalists against each other on Super Mario Bros. 3 … a great chance to get a preview of Super Mario Bros. 3
pp. 89-90 · archived copy ↗ approval of both the script and the film's game footage
"The Grinch Who Stole Christmas", pp. 190-191 · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^The Chicago Tribune reported in March 1990, citing a Nintendo spokeswoman, that more than 250,000 cartridges sold at about $50 each in the game's first two days in stores.WebChicago Tribune, SMB3 launchrevised
How we know
more than 250,000 cartridges were bought … first two days on the shelves
29 March 1990 · archived copy ↗ The quote matches our archived copy.
Revised after a check by a second AI model, 2026-10-26.
- ^ abDavid Sheff's book Game Over says the game sold 7 million copies in the United States and 4 million in Japan, more than any video game until then.BookSheff, Game Over (1999)
How we know
would sell more copies than any video game in history … 7 million in the United States and 4 million in Japan
Prologue, pp. 4-5 · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^Nintendo Power's readers' chart had it at no. 1 by the May/June 1990 issue, with about twice the points of Tetris in second place, and still at no. 1 after 26 months in December 1991. In December 1994, after 63 months on the chart, it was no. 2 among NES games.MagazineNintendo Power 12 · Nintendo Power 31 · Nintendo Power 67
How we know
11,595 … 5,570
pp. 42-43, Top 30 · archived copy ↗ 8,825
pp. 90-91, Top 30 · archived copy ↗ 63 months
p. 101, NES Top 20 · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^Electronic Gaming Monthly's 1997 list of the 100 best games ranked its All-Stars version no. 2 and called it the best platform game of all time, crediting among much else the map that spread the levels out. IGN's list of the 100 best NES games ranks it no. 1, as the greatest NES game.MagazineEGM 100 · IGN, Top 100 NES Games (SMB3)
How we know
single best platform game of all time … the levels were spread out on an overworld map that sprawled in every direction
no. 2 · archived copy ↗ we can unequivocally call it the greatest NES game of all time
no. 1 · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-26.
- ^ abcOff uphill slopes, Mario's speed tops out at
$18walking,$28holding B, and$38while the P-meter is full; walking uphill, the cap comes fromPlayer_UphillSpeedValsinstead. Measured in Mesen from power-on as Raccoon Mario at World 1-1's start, holding Right levels off at$18, and Right with B at$28until the meter fills, then at$38.VerifiedSouthbird's SMB3 disassemblyHow we know
3559PLAYER_TOPWALKSPEED = $18 ; Highest X velocity considered as Player "walking" 3560PLAYER_TOPRUNSPEED = $28 ; Highest X velocity when Player runs 3561PLAYER_TOPPOWERSPEED = $38 ; Highest X velocity hit when Player is at full "power" 3562PLAYER_MAXSPEED = $40 ; Player's maximum speed
smb3.asm lines 3559–3562 at 09b1bd8 · upstream ↗ 2320Player_GroundHControl: 2321 LDA Player_UphillFlag 2322 BEQ PRG008_AB56 ; If Player is not going up hill, jump to PRG008_AB56 ⋮ 2324 INC Player_WalkAnimTicks ; Player_WalkAnimTicks++ ⋮ 2326 LDY #10 ; Y = 10 (Player NOT holding B) ⋮ 2328 BIT <Pad_Holding 2329 BVC PRG008_AB5B ; If Player is NOT holding 'B', jump to PRG008_AB5B ⋮ 2331 LDY #1 ; Y = 1 (Player holding B) 2332 BNE PRG008_AB5B ; Jump (technically always) to PRG008_AB5B ⋮ 2334PRG008_AB56: ⋮ 2336 ; Use override value ⋮ 2338 LDY Player_UphillSpeedIdx ; Y = Player_UphillSpeedIdx ⋮
PRG/prg008.asm lines 2320–2382 at 09b1bd8 · 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.
Checked by a second AI model, 2026-10-26.
- ^ abcdBelow the top speed, a held direction adds the suit's entry in
Player_XAccelMainplus the carry from adding itsPlayer_XAccelPseudoFracentry toCounter_Wiggly, on the ground and in the air. Each frameCounter_Wigglybecomes its high nibble minus$90, so it steps through all 16 high nibbles: computed, an$E0fraction carries on 14 of every 16 frames, so every suit but the Frog gains 1 on 14 frames in 16, about 0.88 a frame, while the Frog's entry adds 2 every frame. Pressing against the motion adds 2 the other way for every suit. With no direction held on the ground, or over the top speed on the ground, the friction entry takes 1 on each frame without a carry: 14 in 16 for Super, Fire, and Raccoon Mario ($20), 10 in 16 for small, Tanooki, and Hammer Mario ($60), and every frame for the Frog ($00). Over the top speed in the air nothing changes it, and slippery ground uses other entries. Measured in Mesen from power-on as Raccoon Mario at World 1-1's start, holding Right from rest gains 1 on 14 of any 16 frames and reaches$28(with B) on the 46th.VerifiedSouthbird's SMB3 disassemblyrevisedHow we know
1141Player_XAccelMain: ⋮ 1143 ; F = "Friction" (stopping rate), "N = "Normal" accel, S = "Skid" accel, X = unused 1144 ; Without B button With B button 1145 ; F N S X F N S X 1146 .byte -1, 0, 2, 0, -1, 0, 2, 0 ; Small 1147 .byte -1, 0, 2, 0, -1, 0, 2, 0 ; Big 1148 .byte -1, 0, 2, 0, -1, 0, 2, 0 ; Fire 1149 .byte -1, 0, 2, 0, -1, 0, 2, 0 ; Leaf 1150 .byte -1, 2, 2, 0, -1, 2, 2, 0 ; Frog 1151 .byte -1, 0, 2, 0, -1, 0, 2, 0 ; Tanooki 1152 .byte -1, 0, 2, 0, -1, 0, 2, 0 ; Hammer
PRG/prg008.asm lines 1141–1152 at 09b1bd8 · upstream ↗ 1167Player_XAccelPseudoFrac: ⋮ 1169 ; F = "Friction" (stopping rate), "N = "Normal" accel, S = "Skid" accel, X = unused 1170 ; Without B button With B button 1171 ; F N S X F N S X 1172 .byte $60, $E0, $00, $00, $60, $E0, $00, $00 ; Small 1173 .byte $20, $E0, $00, $00, $20, $E0, $00, $00 ; Big 1174 .byte $20, $E0, $00, $00, $20, $E0, $00, $00 ; Fire 1175 .byte $20, $E0, $00, $00, $20, $E0, $00, $00 ; Leaf 1176 .byte $00, $00, $00, $00, $00, $00, $00, $00 ; Frog 1177 .byte $60, $E0, $00, $00, $60, $E0, $00, $00 ; Tanooki 1178 .byte $60, $E0, $00, $00, $60, $E0, $00, $00 ; Hammer
PRG/prg008.asm lines 1167–1178 at 09b1bd8 · upstream ↗ 2384 DEY 2385 TYA 2386 ASL A 2387 ASL A 2388 ASL A 2389 ADD #$40 2390 ; Y = 40 if slippery 2391 ; Y = 46 if very slippery 2392 ; Y = ((Player_Slippery - 1) << 3) + $40 2393 TAY 2394 BNE PRG008_AB9E ; And as long as that's not zero, jump to PRG008_AB9E ⋮ 2396PRG008_AB98: ⋮
PRG/prg008.asm lines 2383–2497 at 09b1bd8 · upstream ↗ 339 ; Makes for "wobbly" raising of the airship at least.. 340 LDA Counter_Wiggly 341 AND #$F0 342 SUB #$90 343 STA Counter_Wiggly
PRG/prg008.asm lines 339–343 at 09b1bd8 · 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.
- ^With neither Left nor Right held, Mario's horizontal speed gets friction only on the ground; in the air the routine returns and he keeps his speed.CodeSouthbird's SMB3 disassembly
How we know
2413PRG008_ABA6: 2414 LDA <Pad_Holding 2415 AND #(PAD_LEFT | PAD_RIGHT) 2416 BNE PRG008_ABB8 ; If Player is pressing LEFT or RIGHT, jump to PRG008_ABB8 ⋮ 2420 LDA <Player_InAir 2421 BNE PRG008_AC01 ; If Player is mid air, jump to PRG008_AC01 (RTS)
PRG/prg008.asm lines 2413–2421 at 09b1bd8 · 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.
- ^ abcThe P-meter,
Player_Power, is seven bits. Mario runs, for the meter, on a frame he is on the ground and not sliding, with B held and his speed already$28or more. Each timePlayer_PMeterCntreaches 0, a running frame adds a step and sets it to 8, and any other frame takes one away and sets it to 24; at 0 steps the counter stays 0, so the next run adds one at once. A full meter,$7F, takes 7 steps, and each running frame at full sets the counter to 16, so the meter stays full 16 frames past the last one. WhilePlayer_FlyTimeis counting, none of this runs (flight-time). Measured in Mesen from power-on as Raccoon Mario at World 1-1's start, with Right and B held from rest the first step comes the frame after he reaches$28, then one every 8 frames to full; with B let go, it drops 16 frames later and then every 24.VerifiedSouthbird's SMB3 disassemblyHow we know
2346PRG008_AB62: 2347 LDY #PLAYER_TOPWALKSPEED ⋮ 2349 BIT <Pad_Holding 2350 BVC PRG008_AB83 ; If Player is NOT holding 'B', jump to PRG008_AB83 ⋮ 2352 ; Player is holding B... ⋮ 2354 LDA <Player_InAir 2355 ORA Player_Slide 2356 BNE PRG008_AB78 ; If Player is mid air or sliding, jump to PRG008_AB78 ⋮ 2358 LDA <Temp_Var3 2359 CMP #PLAYER_TOPRUNSPEED 2360 BMI PRG008_AB78 ; If Player's X Velocity magnitude is less than PLAYER_TOPRUNSPEED, jump to PRG008_AB78 ⋮ 2362 ; Player is going fast enough while holding B on the ground; flag running! ⋮
PRG/prg008.asm lines 2346–2375 at 09b1bd8 · upstream ↗ 981Player_PowerUpdate: 982 LDY Player_FlyTime 983 BEQ PRG008_A4E4 ; If Player is not flying (or at least high-speed jumping), jump to PRG008_A4E4 ⋮ 985 CPY #$ff 986 BEQ Sound_FullPowerRing ; If Player_FlyTime = $FF (P-Wing active), jump to Sound_FullPowerRing ⋮ 988 LDA <Counter_1 989 AND #$01 990 BEQ PRG008_A4D5 ; Every other tick, jump to PRG008_A4D5 ⋮ 992 DEY 993 STY Player_FlyTime ; Player_FlyTime-- ⋮ 995PRG008_A4D5: 996 TYA ; Y (Player_FlyTime) -> A ⋮
PRG/prg008.asm lines 981–1058 at 09b1bd8 · upstream ↗ 378 ; Decrement several adjacent counters! 379 LDX #$07 ; X = 7 ⋮ 381PRG008_A1DE: 382 LDA Event_Countdown,X 383 BEQ PRG008_A1E6 ; If counter is = 0, jump to PRG008_A1E6 ⋮ 385 DEC Event_Countdown,X ; Otherwise, decrement it! ⋮ 387PRG008_A1E6: 388 DEX ; X-- 389 BPL PRG008_A1DE ; While X >= 0, loop!
PRG/prg008.asm lines 378–389 at 09b1bd8 · upstream ↗ 1545 ; NOTE: Event_Countdown and the following 7 are all decremented together! 1546 Event_Countdown: .ds 1 ⋮ 1548 Player_TailCount: .ds 1 ; Determines display frame of tail wag 1549 Player_InAir_OLD: .ds 1 ; Stores backup of Player_InAir 1550 Player_FireCount: ; Player shoots fireball/hammer, sets sprite frame (shared with Player_FrogHopCnt) 1551 Player_FrogHopCnt: .ds 1 ; Counter used for frog hopping along the ground (shared with Player_FireCount) ⋮ 1553 .ds 1 ; $0514 unused ⋮ 1555 Player_PMeterCnt: .ds 1 ; Tick counter used to count when to increase/decrease Power Meter
smb3.asm lines 1545–1555 at 09b1bd8 · 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.
Checked by a second AI model, 2026-10-26.
- ^ abA jump takes off at
PLAYER_JUMP,-$38, minusPlayer_SpeedJumpIncindexed by the whole part of Mario's horizontal speed:-$38,-$3A,-$3C, or-$40. Measured in Mesen from power-on as Raccoon Mario at World 1-1's start, a jump from a standstill and one at the full-meter speed$38take off at-$38and-$40(the first frame's speed, one more after that frame's held-A gravity).VerifiedSouthbird's SMB3 disassemblyHow we know
3563PLAYER_JUMP = -$38 ; Player's root Y velocity for jumping (further adjusted a bit by Player_SpeedJumpInc)smb3.asm line 3563 at 09b1bd8 · upstream ↗ 1199Player_RootJumpVel: .byte PLAYER_JUMP ⋮ 1204Player_SpeedJumpInc: .byte $00, $02, $04, $08
PRG/prg008.asm lines 1199–1204 at 09b1bd8 · upstream ↗ 2608 TAX ; X = Magnitude of Player's X Velocity >> 4 (the "whole" part) ⋮ 2610 LDA Player_RootJumpVel ; Get initial jump velocity 2611 SUB Player_SpeedJumpInc,X ; Subtract a tiny bit of boost at certain X Velocity speed levels 2612 STA <Player_YVel ; -> Y velocity
PRG/prg008.asm lines 2604–2612 at 09b1bd8 · 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.
Checked by a second AI model, 2026-10-26.
- ^ abcIn the air
Player_JumpFlyFlutteradds 5 to Mario's vertical speed each update, or 1 while A is held and he rises faster than$20; a Micro-Goomba stuck to him keeps the 5 even with A held. A tail wag can then overwrite the speed (flight-time, tail-wag), and a Tanooki statue skips this routine (tanooki-statue). Measured in Mesen from power-on as Raccoon Mario at World 1-1's start, a jump with A held gains 1 a frame until the rise slows to-$20, then 5 a frame; with A pressed for one frame it gains 5 a frame from the frame after the take-off.VerifiedSouthbird's SMB3 disassemblyHow we know
2644PRG008_ACB3: ⋮ 2646 ; Player is mid air... ⋮ 2648 LDY #$05 ; Y = 5 ⋮ 2650 LDA <Player_YVel 2651 CMP #-$20 2652 BGS PRG008_ACC8 ; If Player's Y velocity >= -$20, jump to PRG008_ACC8 ⋮ 2654 LDA Player_mGoomba 2655 BNE PRG008_ACCD ; If Player has got a microgoomba stuck to him, jump to PRG008_ACCD ⋮ 2657 LDA <Pad_Holding 2658 BPL PRG008_ACC8 ; If Player is NOT pressing 'A', jump to PRG008_ACC8 ⋮ 2660 LDY #$01 ; Y = 1 2661 BNE PRG008_ACCD ; Jump (technically always) to PRG008_ACCD ⋮
PRG/prg008.asm lines 2644–2672 at 09b1bd8 · 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.
Checked by a second AI model, 2026-10-26.
- ^ abMeasured in Mesen from power-on as Raccoon Mario standing at World 1-1's start, a jump with A held rises 71 px, about four and a half tiles, and a jump with A pressed for one frame rises 21 px. Both follow from the take-off (jump-speed) and the two gravities (gravity).VerifiedSouthbird's SMB3 disassembly
How we know
3563PLAYER_JUMP = -$38 ; Player's root Y velocity for jumping (further adjusted a bit by Player_SpeedJumpInc)smb3.asm line 3563 at 09b1bd8 · upstream ↗ 2644PRG008_ACB3: ⋮ 2646 ; Player is mid air... ⋮ 2648 LDY #$05 ; Y = 5 ⋮ 2650 LDA <Player_YVel 2651 CMP #-$20 2652 BGS PRG008_ACC8 ; If Player's Y velocity >= -$20, jump to PRG008_ACC8 ⋮ 2654 LDA Player_mGoomba
PRG/prg008.asm lines 2644–2654 at 09b1bd8 · 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.
- ^Super Mario Bros. 3 keeps Mario's speeds as 4.4 fixed point: the high nibble is whole pixels per frame, the low nibble sixteenths.
Player_ApplyYVelocitycaps the fall atFALLRATE_MAX,$40, before the frame's gravity is added, so the move never exceeds 4 px a frame. Measured in Mesen from power-on as Raccoon Mario at World 1-1's start, a jump's fall levels off at 4 px a frame.VerifiedSouthbird's SMB3 disassemblyHow we know
6945 CMP #FALLRATE_MAX 6946 BLS PRG008_BFF9 ; If Player_YVelo < FALLRATE_MAX, jump to PRG008_BFF9 ⋮ 6949 LDA #FALLRATE_MAX 6950 STA <Player_YVel ; Player_YVel = FALLRATE_MAX
PRG/prg008.asm lines 6945–6950 at 09b1bd8 · upstream ↗ 21FALLRATE_MAX = $40 ; Maximum Y velocity falling ratePRG/prg024.asm line 21 at 09b1bd8 · 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.
Checked by a second AI model, 2026-10-26.
- ^The North American manual lists the items that change Mario's form: the Super Leaf makes him Raccoon Mario (spelled "Racoon" there), the Frog Suit Frog Mario, and the Tanooki Suit Tanooki Mario, besides the Super Mushroom and the Fire Flower.ManualSuper Mario Bros. 3 US manualrevised
How we know
Changes Mario into R acoon Mario.
pp. 23-24 (PDF pp. 24-25), items you can use on the map screen · archived copy ↗ Frog Suit Changes Mario into Frog Mario. … Tanooki Suit Changes Mario into Tanooki Mario. … Changes Mario into Fire Mario.
pp. 23-24 (PDF pp. 24-25) · archived copy ↗ The quote matches our archived copy.
Revised after a check by a second AI model, 2026-10-26.
- ^
PowerUp_Abilitygives each form two flags: bit 0, flight and the tail wag, for the Raccoon and Tanooki suits; bit 1, which keeps Mario from starting a slope slide, for the Frog and Hammer suits. Small, Super, and Fire Mario have neither.CodeSouthbird's SMB3 disassemblyHow we know
558PowerUp_Ability: 559 ; Small, Big, Fire, Leaf, Frog, Tanooki, Hammer 560 .byte $00, $00, $00, $01, $02, $01, $02
PRG/prg000.asm lines 558–560 at 09b1bd8 · upstream ↗ 583LevelInit_StartSliding: 584 LDY <Player_Suit 585 LDA PowerUp_Ability,Y 586 AND #$02 587 BNE LevelInit_DoNothing ; If this powerup is not able to slide on slopes, jump to LevelInit_DoNothing ⋮ 589 INC Player_Slide ; Otherwise, begin sliding...
PRG/prg008.asm lines 583–590 at 09b1bd8 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abA jump with the meter full and no flight time left sets
Player_FlyTimeto$80, which counts down every other frame, about 256 frames; when it reaches 0 the meter empties ($FF, the P-Wing's value, never counts down). In the Raccoon or Tanooki suit, the suits with the flight bit inPowerUp_Ability, each press of A in the air starts a 16-frame wag. During a wag, unless he is rising faster than-$18, his vertical speed is set to-$18while the timer is$0For more, to-$10from$0Eto$08, and to 0 from$07to$01; since the timer ticks every other frame, those two stages last 14 frames each. At 0 the tail only slows a fall (tail-wag). Measured in Mesen from power-on as Raccoon Mario at World 1-1's start, a jump at full speed with A pressed every 4 frames sets the timer to$80, climbs at-$18, then for 14 frames at-$10and 14 at 0, and the timer and meter run out 255 frames after the take-off.VerifiedSouthbird's SMB3 disassemblyrevisedHow we know
2621 LDA Player_Power 2622 CMP #$7f 2623 BNE PRG008_AC9E ; If Player is not at max power, jump to PRG008_AC9E ⋮ 2625 LDA Player_FlyTime 2626 BNE PRG008_AC9E ; If Player still has flight time left, jump to PRG008_AC9E ⋮ 2628 LDA #$80 2629 STA Player_FlyTime ; Otherwise, Player_FlyTime = $80
PRG/prg008.asm lines 2621–2629 at 09b1bd8 · upstream ↗ 981Player_PowerUpdate: 982 LDY Player_FlyTime 983 BEQ PRG008_A4E4 ; If Player is not flying (or at least high-speed jumping), jump to PRG008_A4E4 ⋮ 985 CPY #$ff 986 BEQ Sound_FullPowerRing ; If Player_FlyTime = $FF (P-Wing active), jump to Sound_FullPowerRing ⋮ 988 LDA <Counter_1 989 AND #$01 990 BEQ PRG008_A4D5 ; Every other tick, jump to PRG008_A4D5 ⋮ 992 DEY 993 STY Player_FlyTime ; Player_FlyTime-- ⋮ 995PRG008_A4D5: 996 TYA ; Y (Player_FlyTime) -> A ⋮
PRG/prg008.asm lines 981–999 at 09b1bd8 · upstream ↗ 2673 BEQ PRG008_ACD9 ; If Player_WagCount = 0, jump to PRG008_ACD9 ⋮ 2675 DEC <Player_WagCount ; Otherwise, $F0-- ⋮ 2677PRG008_ACD9: 2678 LDA Player_Kuribo 2679 BNE PRG008_ACEF ; If Player is wearing Kuribo's shoe, jump to PRG008_ACEF ⋮ 2681 LDX <Player_Suit ⋮ 2683 LDA PowerUp_Ability,X ; Get "ability" flags for this power up 2684 AND #$01 2685 BEQ PRG008_ACEF ; If this power up does not have flight, jump to PRG008_ACEF ⋮ 2687 LDY <Temp_Var1 ; Y = $80 if Player was pressing 'A' when this all began 2688 BEQ PRG008_ACEF ; And if he wasn't, jump to PRG008_ACEF ⋮ 2690 LDA #$10 ⋮
PRG/prg008.asm lines 2673–2730 at 09b1bd8 · upstream ↗ 558PowerUp_Ability: 559 ; Small, Big, Fire, Leaf, Frog, Tanooki, Hammer 560 .byte $00, $00, $00, $01, $02, $01, $02
PRG/prg000.asm lines 558–560 at 09b1bd8 · 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.
- ^On the ground,
Player_JumpFlyFlutterclearsPlayer_FlyTimeunless the suit has the flight bit, so Raccoon and Tanooki Mario keep the rest of a flight through a landing, with the meter still full, and can take off again; for the other suits a full-meter jump's timer ends when they land.CodeSouthbird's SMB3 disassemblyHow we know
2631PRG008_AC9E: 2632 LDA <Player_InAir 2633 BNE PRG008_ACB3 ; If Player is mid air, jump to PRG008_ACB3 ⋮ 2635 LDY <Player_Suit 2636 LDA PowerUp_Ability,Y ; Get "ability" flags for this power up 2637 AND #$01 2638 BNE PRG008_AD1A ; If power up has flight ability, jump to PRG008_AD1A ⋮ 2640 LDA #$00 2641 STA Player_FlyTime ; Otherwise, Player_FlyTime = 0 :( 2642 JMP PRG008_AD1A ; Jump to PRG008_AD1A
PRG/prg008.asm lines 2631–2642 at 09b1bd8 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Out of flight time, a wag of A with the Raccoon or Tanooki tail caps Mario's fall at
PLAYER_TAILWAG_YVEL,$10, and leaves a rise or a slower fall alone. Measured in Mesen from power-on as Raccoon Mario at World 1-1's start, wagging every 4 frames after a flight runs out, his fall levels off at$10, 1 px a frame.VerifiedSouthbird's SMB3 disassemblyHow we know
2683 LDA PowerUp_Ability,X ; Get "ability" flags for this power up 2684 AND #$01 2685 BEQ PRG008_ACEF ; If this power up does not have flight, jump to PRG008_ACEF ⋮ 2687 LDY <Temp_Var1 ; Y = $80 if Player was pressing 'A' when this all began 2688 BEQ PRG008_ACEF ; And if he wasn't, jump to PRG008_ACEF ⋮ 2690 LDA #$10 2691 STA <Player_WagCount ; Otherwise, Player_WagCount = $10
PRG/prg008.asm lines 2683–2691 at 09b1bd8 · upstream ↗ 2720PRG008_AD0E: 2721 LDA <Player_YVel 2722 BMI PRG008_AD1A ; If Player's Y velocity < 0 (moving upward), jump to PRG008_AD1A ⋮ 2724 CMP #PLAYER_TAILWAG_YVEL 2725 BLT PRG008_AD1A ; If Player's Y velocity < PLAYER_TAILWAG_YVEL, jump to PRG008_AD1A ⋮ 2727 LDY #PLAYER_TAILWAG_YVEL ; Y = PLAYER_TAILWAG_YVEL ⋮ 2729PRG008_AD18: 2730 STY <Player_YVel ; Set appropriate Y velocity
PRG/prg008.asm lines 2720–2730 at 09b1bd8 · 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.
Checked by a second AI model, 2026-10-26.
- ^Raccoon and Tanooki Mario swing the tail on a press of B when Down isn't held and no swing is under way:
Player_TailAttackis set to$12, 18 frames of the swing.CodeSouthbird's SMB3 disassemblyHow we know
3574Player_TailAttackAnim: 3575 LDA <Pad_Holding 3576 AND #PAD_DOWN 3577 BNE PRG008_B109 ; If Player is holding down, jump to PRG008_B109 ⋮ 3579 BIT <Pad_Input 3580 BVC PRG008_B0E2 ; If Player is NOT pressing 'B', jump to PRG008_B0E2 ⋮ 3582 LDA Player_TailAttack 3583 BNE PRG008_B0E2 ; If Player is performing tail attack, jump to PRG008_B0E2 ⋮ 3585 LDA #$12 3586 STA Player_TailAttack ; Player_TailAttack = $12 ⋮ 3588 ; Plays the tail wag sound 3589 LDA Sound_QLevel1 ⋮
PRG/prg008.asm lines 3574–3591 at 09b1bd8 · upstream ↗ 2010GndMov_Leaf: 2011 JSR Player_GroundHControl ; Do Player left/right input control 2012 JSR Player_JumpFlyFlutter ; Do Player jump, fly, flutter wag 2013 JSR Player_AnimTailWag ; Do Player's tail animations 2014 JSR Player_TailAttackAnim ; Do Player's tail attack animations 2015 RTS ; Return
PRG/prg008.asm lines 2010–2015 at 09b1bd8 · 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 Tanooki suit, a press of B while Down is held, when he isn't a statue already, queues the statue:
Player_UpdatesetsPlayer_Statueto$C0, and it counts down one a frame while Down stays held, about 3.2 seconds at most; letting go of Down, or the count reaching 1, ends it. A statue doesn't move sideways, gets 7 a frame of gravity in the air in place of the jump routine's, and skips the suit's other moves; at$60left,Player_FlashInvis set so he blinks for the rest.CodeSouthbird's SMB3 disassemblyHow we know
3319Player_TanookiStatue: 3320 LDA <Pad_Holding 3321 AND #PAD_DOWN 3322 TAY 3323 BEQ PRG008_AFE3 ; If Player is NOT pressing down, jump to PRG008_AFE3 ⋮ 3325 BIT <Pad_Input 3326 BVC PRG008_AFE3 ; If Player is NOT pressing 'B', jump to PRG008_AFE3 ⋮ 3328 LDA Player_Statue 3329 BNE PRG008_AFE3 ; If Player is transformed into a statue, jump to PRG008_AFE3 ⋮ 3331 JSR Sound_StatueSwitch ; Play statue transformation sound ⋮ 3333 LDA #$20 3334 STA Player_QueueSuit ; Player_QueueSuit = $20 ⋮
PRG/prg008.asm lines 3319–3400 at 09b1bd8 · upstream ↗ 794Player_Update: 795 LDA Player_QueueSuit 796 BEQ PRG008_A3FA ; If we don't have a suit change queued, jump to PRG008_A3FA ⋮ 798 CMP #$0f 799 BLS PRG008_A3EC ; If Player_QueueSuit < $0F (statue enable), jump to PRG008_A3EC ⋮ 801 CMP #$80 802 BNE PRG008_A3DC ; If Player_QueueSuit <> $80 (Kuribo's shoe), jump to PRG008_A3DC ⋮ 804 ; Kuribo's shoe enable! 805 INC Player_Kuribo ; Set the Player_Kuribo flag 806 BNE PRG008_A3F2 ; Jump (expectedly always) to PRG008_A3F2 ⋮ 808PRG008_A3DC: 809 CMP #$40 ⋮
PRG/prg008.asm lines 794–815 at 09b1bd8 · upstream ↗ 2238GndMov_Tanooki: 2239 JSR Player_TanookiStatue ; Change into/maintain Tanooki statue (NOTE: Will not return here if statue!) 2240 JSR Player_GroundHControl ; Do Player left/right input control 2241 JSR Player_JumpFlyFlutter ; Do Player jump, fly, flutter wag 2242 JSR Player_AnimTailWag ; Do Player's tail animations 2243 JSR Player_TailAttackAnim ; Do Player's tail attack animations 2244 RTS ; Return
PRG/prg008.asm lines 2238–2244 at 09b1bd8 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Enemies and their fireballs don't hurt a Tanooki statue:
Player_GetHurt, the enemy-contact check, and the special objects' contact check all return whilePlayer_Statueis set. Where an enemy can't otherwise be stomped, or Mario is in water, landing on it from above as a statue (or in Kuribo's Shoe) leaves an enemy flaggedOA2_STOMPDONTCAREas it was, since the routine returns; any other enemy is stomped, then squashed if a stomp would squash it, or else killed outright.CodeSouthbird's SMB3 disassemblyrevisedHow we know
5620Player_GetHurt: 5621 ; If Player is... 5622 LDA Player_FlashInv ; ... flashing invincible ... 5623 ORA Player_Statue ; ... a statue ... 5624 ORA Player_StarInv ; ... invincible by star ... 5625 ORA Player_SuitLost ; ... just lost a power-up suit ... 5626 ORA <Player_HaltGame ; ... gameplay halted ... 5627 ORA Player_HaltTick ; ... Player halted ... 5628 ORA Player_DebugNoHitFlag ; ... debug invincibility flag is set (unused) ... 5629 BNE PRG000_D9B7 ; ... then jump to PRG000_D9B7 (RTS) ⋮ 5631 JMP PRG000_DA15 ; Jump to PRG000_DA15 (skips lost/dead Japanese version code)
PRG/prg000.asm lines 5620–5631 at 09b1bd8 · upstream ↗ 3862PRG000_D267: ⋮ 3864 ; Player is in water (can't stomp in water) OR attribute 3 bit 5 is set (can't stomp anyway)... ⋮ 3866 LDA Player_Kuribo 3867 ORA Player_Statue 3868 BNE PRG000_D272 ; If in Kuribo's shoe or transformed into statue, ignore this and jump to PRG000_D272 ⋮ 3870 JMP PRG000_D355 ; Jump to PRG000_D355 (hurt Player!) ⋮ 3872PRG000_D272: ⋮ 3874 ; Enemy got stomped! ⋮ 3876 LDY ObjGroupRel_Idx ; Y = group relative index 3877 LDA ObjectGroup_Attributes2,Y ; Get object attribute set 2 3878 AND #OA2_STOMPDONTCARE 3879 BNE PRG000_D2B3 ; If OA2_STOMPDONTCARE is set (object is indifferent about stomping), jump to PRG000_D2B3 (RTS) ⋮
PRG/prg000.asm lines 3862–3904 at 09b1bd8 · upstream ↗ 4070PRG000_D355: ⋮ 4072 ; Player potentially gonna get hurt! ⋮ 4074 LDA Player_FlashInv ; If Player is flashing from getting hit recently... 4075 ORA Player_Statue ; ... or Player is a statue ...
PRG/prg000.asm lines 4070–4075 at 09b1bd8 · upstream ↗ 4769PRG007_B805: 4770 LDA Player_FlashInv ; If Player is flashing from being hit ... 4771 ORA Player_Statue ; ... if Player is a statue ... 4772 ORA <Player_HaltGame ; ... if gameplay is halted ... 4773 ORA Player_IsDying ; ... Player is dying ... 4774 ORA Player_OffScreen ; ... Player is off-screen ... 4775 ORA Player_Behind_En ; ... Player is legitimately hidden behind the scenes ... 4776 ORA <Temp_Var14 ; ... or special object is not vertically on-screen ... 4777 BNE PRG007_B843 ; ... jump to Player_Behind_En (RTS)
PRG/prg007.asm lines 4769–4777 at 09b1bd8 · 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.
- ^Out of water and not holding anything, Frog Mario hops. On the ground, when no hop is under way, his horizontal speed is set to 0, and a held direction starts a hop (
Player_FrogHopCnt=$1F), during which the Frog's acceleration entry adds 2 a frame (ground-accel). In the air, unless he is sinking in quicksand, the hop count is cleared andPlayer_GroundHControlsteers him as it does the other suits. Holding something, he moves like the other suits on the ground too.CodeSouthbird's SMB3 disassemblyrevisedHow we know
2019GndMov_Frog: 2020 JSR Player_GroundHControl ; Do Player left/right input control 2021 JSR Player_JumpFlyFlutter ; Do Player jump, fly, flutter wag ⋮ 2023 LDA Player_IsHolding 2024 BNE PRG008_AA23 ; If Player is holding something, jump to PRG008_AA23 ⋮ 2026 LDA <Player_InAir 2027 BEQ PRG008_AA00 ; If Player is NOT in mid air, jump to PRG008_AA00 ⋮ 2029 LDA Player_SandSink 2030 LSR A 2031 BCS PRG008_AA00 ; If bit 0 of Player_SandSink is set, jump to PRG008_AA00 ⋮ 2033 LDA #$00 2034 STA Player_FrogHopCnt ; Player_FrogHopCnt = 0 ⋮
PRG/prg008.asm lines 2019–2063 at 09b1bd8 · 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.
- ^Under water the Frog suit sets Mario's speed straight from the d-pad: 16 (1 px/frame) each way, doubled to 32 while A is held, and with a direction released that speed eases back toward 0 by 1 a frame; Up gives 0 while he is above the top of the screen.CodeSouthbird's SMB3 disassemblyrevised
How we know
2082Frog_Velocity: 2083 .byte 16, -16 ⋮ 2085Swim_Frog: 2086 LDX #$ff ; X = $FF ⋮ 2088 LDA <Pad_Holding 2089 AND #(PAD_UP | PAD_DOWN) 2090 BEQ PRG008_AA61 ; If Player is NOT pressing up/down, jump to PRG008_AA61 ⋮ 2093 STA <Player_InAir ⋮ 2095 LSR A 2096 LSR A 2097 LSR A 2098 TAX ; X = 1 if pressing up, else 0 ⋮
PRG/prg008.asm lines 2082–2175 at 09b1bd8 · 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.
- ^With the Fire Flower or the Hammer Suit, a press of B throws a weapon unless Mario is ducking, kicking, in a pipe, or the game is halted: Fire Mario's fireball starts downward, the Hammer Suit's hammer upward. Ducking in the Hammer Suit, the fireballs of Piranha Plants, Nippers, Fire Bros., and Fire Chomps collide with him as if he had a Starman's invincibility, which destroys the fireball instead of hurting him.CodeSouthbird's SMB3 disassembly
How we know
479 CMP #PLAYERSUIT_HAMMER 480 BEQ PRG007_A251 ; If Player is wearing a Hammer Suit, jump to PRG007_A251 ⋮ 482 CMP #PLAYERSUIT_FIRE 483 BNE PRG007_A268 ; If Player is not Fire, jump to PRG007_A268 ⋮ 485PRG007_A251: ⋮ 487 ; Player wearing a Hammer Suit or Fire ⋮ 489 LDA Player_HaltTick ; If Player is not halted ... 490 ORA Player_IsDucking ; ... Player is ducking ... 491 ORA Player_Kick ; ... Player is kicking ... 492 ORA Player_InPipe ; ... Player is in a pipe ... 493 ORA <Player_HaltGame ; ... gameplay is halted ... 494 BNE PRG007_A268 ; ... then jump to PRG007_A268 ⋮
PRG/prg007.asm lines 479–499 at 09b1bd8 · upstream ↗ 586 LDA #$01 ; A = 1 ⋮ 588 LDY <Player_Suit 589 CPY #PLAYERSUIT_HAMMER 590 SEC ; Set carry (if NOT wearing the hammer suit) 591 BNE PRG007_A2E3 ; If Player is NOT wearing the Hammer Suit, jump to PRG007_A2E3 592 ASL A ; Clears carry, also A = 2 593PRG007_A2E3: 594 STA PlayerProj_ID,X ; Set projectile as type 1 or 2 ⋮ 596 ; Set Player Projectile Y velocity 597 LDA #$03 ; A = $03 (Fireballs are thrown down) 598 BCS PRG007_A2EC ; If Player is NOT wearing Hammer Suit, jump to PRG007_A2EC 599 LDA #-$03 ; A = -$03 (Hammers are thrown up) ⋮
PRG/prg007.asm lines 586–601 at 09b1bd8 · upstream ↗ 3184 .word SObj_Fireball ; 04: Nipper fireball 3185 .word SObj_Fireball ; 05: Piranha fireball ⋮ 3192 .word SObj_Fireball ; 0C: Fire bro bouncing fireball ⋮ 3198 .word SObj_Fireball ; 12: Fire Chomp's fire
PRG/prg007.asm lines 3184–3198 at 09b1bd8 · upstream ↗ 5213PRG007_BA6E: ⋮ 5215 ; Set fireball attributes 5216 STA Sprite_RAM+$02,Y ⋮ 5218 LDX <SlotIndexBackup ; X = special object slot index ⋮ 5220 LDA <Player_Suit 5221 CMP #$06 5222 BNE PRG007_BA8F ; If Player is not wearing the Hammer Suit, jump to PRG007_BA8F ⋮ 5224 LDA Player_IsDucking 5225 BEQ PRG007_BA8F ; If Player is NOT ducking (immunity to fireballs), jump to PRG007_BA8F ⋮ 5227 LDA Player_StarInv 5228 PHA ; Save Player's Star Man invincibility status ⋮ 5230 ; Collide with it like Player were invincible! (Visually the shell protects him) ⋮
PRG/prg007.asm lines 5213–5242 at 09b1bd8 · upstream ↗ 4805PRG007_B836: 4806 LDA Player_StarInv 4807 BNE PRG007_B844 ; If Player is Star Man invincible, jump to PRG007_B844 ⋮ 4809 JMP Player_GetHurt ; Hurt Player and don't come back! ⋮ 4811SpecialObj_Remove: ⋮ 4813 ; Remove special object 4814 LDA #$00 4815 STA SpecialObj_ID,X ⋮ 4817PRG007_B843: 4818 RTS ; Return ⋮ 4820PRG007_B844: ⋮ 4822 ; Player is invincible; destroy the special object! ⋮
PRG/prg007.asm lines 4805–4824 at 09b1bd8 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Holding only Down on a slope starts a slide, except in the Frog or Hammer suit (bit 1 of
PowerUp_Ability) or Kuribo's Shoe. Each update the slope's push is added to the slide speed, which is capped at$40and then loses 1 toward 0, so it tops out at$3F.CodeSouthbird's SMB3 disassemblyrevisedHow we know
5990PRG008_BBBF: 5991 LDA Player_Slide 5992 BNE PRG008_BBE0 ; If Player is sliding, jump to PRG008_BBE0 ⋮ 5994 ; Check ability to slide ⋮ 5996 TXA ; Effect on velocity -> 'A' 5997 BEQ PRG008_BC0D ; If no effect (flat ground), jump to PRG008_BC0D ⋮ 5999 LDY <Player_Suit 6000 LDA PowerUp_Ability,Y 6001 AND #$02 6002 BNE PRG008_BC0D ; If the Player's suit CANNOT slide on slopes, jump to PRG008_BC0D ⋮ 6004 LDA Player_Kuribo 6005 BNE PRG008_BC0D ; If Player is wearing Kuribo's shoe, jump to PRG008_BC0D ⋮
PRG/prg008.asm lines 5990–6017 at 09b1bd8 · upstream ↗ 6024 CMP #$40 6025 BLS PRG008_BBFD ; If magnitude of Player_Slide < $40, jump to PRG008_BBFD ⋮ 6037 DEC Player_Slide ; Player_Slide-- 6038 BPL PRG008_BC08 ; If Player_Slide >= 0, jump to PRG008_BC08 ⋮ 6041 INC Player_Slide 6042 INC Player_Slide
PRG/prg008.asm lines 6024–6042 at 09b1bd8 · upstream ↗ 1590 Player_Slide: .ds 1 ; Positive values sliding forward, negative values sliding backward; directly sets Player_XVelsmb3.asm line 1590 at 09b1bd8 · 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-21.
Checked by a second AI model, 2026-10-26.
- ^Touching a shell as a statue or in Kuribo's Shoe kicks it. Otherwise the touch does nothing while he is already holding something; with B held he picks the shell up, and without B he kicks it. A carried shell is kicked when B is let go, except while he is in a pipe or dying. A kicked shell gets 3 px/frame (
$30) the way he faces, or for a shell on the ground away from him, plus half his speed when he moves the same way. A Bob-omb is thrown instead (bobomb-throw), and a carried shell let go against a wall dies (shell-wall-kill).CodeSouthbird's SMB3 disassemblyrevisedHow we know
4042Object_HoldKickOrHurtPlayer: ⋮ 4044 LDA Objects_State,X 4045 CMP #OBJSTATE_SHELLED 4046 BNE PRG000_D355 ; If object state is not Shelled, jump to PRG000_D355 (hurt Player!) ⋮ 4048 LDA Player_Kuribo 4049 ORA Player_Statue 4050 BEQ PRG000_D343 ; If Player is NOT in Kuribo's shoe and NOT in a statue, jump to PRG000_D343 4051 JMP PRG000_D2A2 ; Otherwise, jump to PRG000_D2A2 ⋮ 4053PRG000_D343: 4054 LDA Player_ISHolding_OLD 4055 BNE PRG000_D39F ; If Player WAS holding something, jump to PRG000_D39F (RTS) ⋮ 4057 BIT <Pad_Holding ⋮
PRG/prg000.asm lines 4042–4066 at 09b1bd8 · upstream ↗ 2794ObjectKickXVelMoving: .byte -$30, $30PRG/prg000.asm line 2794 at 09b1bd8 · upstream ↗ 2810ObjState_Held: 2811 LDA <Player_IsDying 2812 BEQ PRG000_CE28 ; If Player is NOT dying, jump to PRG000_CE28 ⋮ 2814 JMP PRG000_CF98 ; Jump to PRG000_CF98 (just draw held object) ⋮ 2816PRG000_CE28: 2817 JSR Object_ShellDoWakeUp ; Wake up while Player is holding object... 2818 BIT <Pad_Holding 2819 BVC Player_KickObject ; If Player is NOT holding B button, jump to Player_KickObject ⋮ 2821PRG000_CE2F: 2822 JMP PRG000_CEEF ; Jump to PRG000_CEEF ⋮ 2825Player_KickObject: 2826 LDA Level_PipeMove ⋮
PRG/prg000.asm lines 2810–2849 at 09b1bd8 · upstream ↗ 2934PRG000_CEB4: ⋮ 2936 ; Object kicked not against wall... ⋮ 2938 LDY #0 ; Y = 0 ⋮ 2940 LDA <Player_FlipBits 2941 BEQ PRG000_CEBB ; If Player has not turned around, jump to PRG000_CEBB ⋮ 2943 INY ; Y = 1 ⋮ 2945PRG000_CEBB: 2946 JMP PRG000_CEC6 ; Jump to PRG000_CEC6 ⋮ 2948PRG000_CEBE: ⋮ 2950 ; Object kicked, was not held ⋮ 2952 ; Make sure Player is facing object he's kicking 2953 JSR Level_ObjCalcXDiffs ⋮
PRG/prg000.asm lines 2934–2988 at 09b1bd8 · 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.
- ^Kicking a carried object other than a Bob-omb or an ice block first gives it a speed of 1 the way Mario faces and tests it against the level. If it touches a wall it dies instead, flying up at
-$40, for 100 points; otherwise the kick goes ahead (shell-carry).CodeSouthbird's SMB3 disassemblyrevisedHow we know
2880PRG000_CE79: ⋮ 2882 ; Anything besides a Bob-omb... ⋮ 2884 ; Clear Objects_KillTally 2885 LDA #$00 2886 STA Objects_KillTally,X ⋮ 2888 LDA Objects_State,X 2889 CMP #OBJSTATE_HELD 2890 BNE PRG000_CEBE ; If object's state is not Held, jump to PRG000_CEBE ⋮ 2892 ; This object is being held by Player... ⋮ 2894 LDA Level_ObjectID,X 2895 CMP #OBJ_ICEBLOCK 2896 BEQ PRG000_CEB4 ; If this is an ice block, jump to PRG000_CEB4 ⋮
PRG/prg000.asm lines 2880–2933 at 09b1bd8 · 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.
- ^Kicking a Bob-omb, lit or not, throws it instead: it keeps its normal state, bounces up at
-$20, and moves away from Mario at$28, or at$30plus half his speed when he moves that way.CodeSouthbird's SMB3 disassemblyrevisedHow we know
2794ObjectKickXVelMoving: .byte -$30, $30 ⋮ 2796 ; Set appropriate flip bits based on object's relative position to Player 2797PlayerKickFlipBits: .byte $00, $40 ⋮ 2799 ; X velocities depending on kick direction 2800BobombKickXVel: .byte -$28, $28
PRG/prg000.asm lines 2794–2800 at 09b1bd8 · upstream ↗ 2844 CMP #OBJ_BOBOMBEXPLODE 2845 BEQ PRG000_CE54 ; If this is a Bob-omb ready to explode, jump to PRG000_CE54 ⋮ 2847 CMP #OBJ_BOBOMB 2848 BNE PRG000_CE79 ; If this is NOT a Bob-omb, jump to PRG000_CE79 ⋮ 2850PRG000_CE54: ⋮ 2852 ; Bob-ombs only... ⋮ 2854 ; State remains "normal" 2855 LDA #OBJSTATE_NORMAL 2856 STA Objects_State,X ⋮ 2858 ; Set Y vel to -$20 (bounce up) 2859 LDA #-$20 2860 STA <Objects_YVel,X ⋮
PRG/prg000.asm lines 2844–2879 at 09b1bd8 · 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.
- ^ abIn this release a hit takes Mario down one step: from the Fire Flower or any suit (Raccoon, Frog, Tanooki, Hammer) back to Super Mario, from Super to small, and as small Mario he dies. In Kuribo's Shoe the hit takes the shoe and he keeps his form. A hit is ignored while he blinks from the last one, is a statue, has a Starman, has just lost a suit, or the game is halted, and while the debug no-hit flag is set.CodeSouthbird's SMB3 disassembly
How we know
5620Player_GetHurt: 5621 ; If Player is... 5622 LDA Player_FlashInv ; ... flashing invincible ... 5623 ORA Player_Statue ; ... a statue ... 5624 ORA Player_StarInv ; ... invincible by star ... 5625 ORA Player_SuitLost ; ... just lost a power-up suit ... 5626 ORA <Player_HaltGame ; ... gameplay halted ... 5627 ORA Player_HaltTick ; ... Player halted ... 5628 ORA Player_DebugNoHitFlag ; ... debug invincibility flag is set (unused) ... 5629 BNE PRG000_D9B7 ; ... then jump to PRG000_D9B7 (RTS) ⋮ 5631 JMP PRG000_DA15 ; Jump to PRG000_DA15 (skips lost/dead Japanese version code)
PRG/prg000.asm lines 5620–5632 at 09b1bd8 · upstream ↗ 5673PRG000_DA15: 5674 LDA Player_Kuribo 5675 BNE PRG000_DA32 ; If Player is in Kuribo's shoe, jump to PRG000_DA32 ⋮ 5677 LDA <Player_Suit 5678 CMP #PLAYERSUIT_FIRE ; SB: Change this to "PLAYERSUIT_SUPERSUITBEGIN" and you restore Japanese version's "always shrink" code!! 5679 BLS PRG000_DA4E ; If Player is Big or small, jump to PRG000_DA4E ⋮ 5690 LDA #$02 ; Return to Big (SB: Would be small in Japanese version!!) 5691 JMP PRG000_DA44 ; Jump to PRG000_DA44 ⋮ 5705 LDA #$00 5706 STA <Temp_Var1 ; Temp_Var1 = 0 ⋮ 5708 JSR Player_LoseKuribo ; Setup effect of Kuribo's shoe "flying off" 5709 JMP PRG000_DA47 ; Jump to PRG000_DA47 ⋮
PRG/prg000.asm lines 5673–5755 at 09b1bd8 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^A hit that doesn't kill Mario, including one that only takes Kuribo's Shoe, sets
Player_FlashInvto$71, andPlayer_GetHurtignores hits while it is nonzero.Player_Drawcounts it down each time it runs, blinking Mario in 2-tick halves.CodeSouthbird's SMB3 disassemblyHow we know
5620Player_GetHurt: 5621 ; If Player is... 5622 LDA Player_FlashInv ; ... flashing invincible ... ⋮ 5629 BNE PRG000_D9B7 ; ... then jump to PRG000_D9B7 (RTS)
PRG/prg000.asm lines 5620–5629 at 09b1bd8 · upstream ↗ 5744PRG000_DA6D: 5745 LDA #$71 5746 STA Player_FlashInv ; Player_FlashInv = $71
PRG/prg000.asm lines 5744–5746 at 09b1bd8 · upstream ↗ 423 LDA Player_FlashInv 424 BEQ PRG029_CED7 ; If Player_FlashInv = 0, jump to PRG029_CED7 ⋮ 426 DEC Player_FlashInv ; Player_FlashInv-- 427 AND #$02 428 BEQ PRG029_CED7 ; Every 2 ticks, draw Player
PRG/prg029.asm lines 423–429 at 09b1bd8 · 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.
- ^Mario's top ground speed is
$18walking and$28running (B held).CodeXkeeper0/smb1 · Jdaster64 n.d.How we know
4873MaxRightXSpdData: 4874 .db $28, $18, $10
src/prg.asm lines 4873–4874 at 1cc3c92 · upstream ↗ 5009 AND #B_Button 5010 BNE SetRTmr ; if pressed, skip ahead to set timer ⋮ 5014 INY ; if running timer not set or level type is water,
src/prg.asm lines 5000–5014 at 1cc3c92 · upstream ↗ Maximum walk speed (normal, castle cutscene) 01900 | Maximum running speed 02900
SMB PHYSICS 101 / GROUND PHYSICS, Mario table · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-27.
- ^Measured from a standstill in World 1-1, Mario reaches
$18on frame 40 walking and$28on frame 45 running, and let go at those speeds he stops in 40 and 49 frames.VerifiedXkeeper0/smb1revisedHow we know
4877FrictionData: 4878 .db $e4, $98, $d0
src/prg.asm lines 4877–4878 at 1cc3c92 · upstream ↗ 5042 LDA PlayerFacingDirsrc/prg.asm lines 5042–5047 at 1cc3c92 · upstream ↗ 4870MaxLeftXSpdData: 4871 .db $d8, $e8, $f0 ⋮ 4873MaxRightXSpdData: 4874 .db $28, $18, $10
src/prg.asm lines 4870–4874 at 1cc3c92 · upstream ↗ 5029 STA MaximumLeftSpeed ⋮ 5036 STA MaximumRightSpeed
src/prg.asm lines 5028–5036 at 1cc3c92 · upstream ↗ Measured by a script in MesenCE 2.2.1 (build 4b8a196), on . It fails if the result disagrees with the claim.
The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-25.
Checked by a second AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-25.
- ^
PlayerYSpdDatastarts a jump at −4 px/frame (rows 0–2) or −5 px/frame (rows 3–4).CodeXkeeper0/smb1 · Jdaster64 n.d.How we know
4864PlayerYSpdData: 4865 .db $fc, $fc, $fc, $fb, $fb, $fe, $ff
src/prg.asm lines 4864–4865 at 1cc3c92 · upstream ↗ 4972 LDA PlayerYSpdData,y 4973 STA Player_Y_Speed
src/prg.asm lines 4972–4973 at 1cc3c92 · upstream ↗ 04000 | 04000 | 05000
JUMPING/VERTICAL PHYSICS, Mario table, Initial Velocity (−Y) · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-27.
- ^In rows 0–1, the standing and slow jumps, held gravity is
$20/256 = 0.125 px/frame².CodeXkeeper0/smb1How we know
4858JumpMForceData: 4859 .db $20, $20, $1e, $28, $28, $0d, $04
src/prg.asm lines 4858–4859 at 1cc3c92 · upstream ↗ 6681 LDA SprObject_Y_MoveForce,x 6682 CLC 6683 ADC $00 ; add downward movement amount to contents of $0433 6684 STA SprObject_Y_MoveForce,x 6685 LDA SprObject_Y_Speed,x ; add carry to vertical speed and store 6686 ADC #$00
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.
- ^
JumpSwimSubswaps in falling gravity, never back, once speed is zero or downward, or once the jump has risen at leastDiffToHaltJumpon a frame when A is not held, or was not held the frame before.CodeXkeeper0/smb1 · Jdaster64 n.d.revisedHow we know
4757 BPL DumpFall ; or moving downwards, branch to falling ⋮ 4760 AND PreviousA_B_Buttons ; and was pressed in previous frame 4761 BNE ProcSwim ; if so, branch elsewhere ⋮ 4765 CMP DiffToHaltJump ; compare to value set here to see if player is in mid-jump ⋮ 4768 LDA VerticalForceDown ; otherwise dump falling into main fractional 4769 STA VerticalForce
src/prg.asm lines 4756–4769 at 1cc3c92 · upstream ↗ so long as they are moving upward in a jump, holding “A” will make them rise more slowly
JUMPING/VERTICAL PHYSICS · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-27.
Revised after a check by a second AI model, 2026-10-27: "Not held both this frame and last" read two ways; held gravity stays only while A is held on both frames.
- ^In rows 0–1, falling gravity is
$70/256 = 0.4375 px/frame².CodeXkeeper0/smb1How we know
4861FallMForceData: 4862 .db $70, $70, $60, $90, $90, $0a, $09
src/prg.asm lines 4861–4862 at 1cc3c92 · upstream ↗ 6683 ADC $00 ; add downward movement amount to contents of $0433 6684 STA SprObject_Y_MoveForce,x
src/prg.asm lines 6681–6687 at 1cc3c92 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-27.
- ^Measured in the game with A held, Mario's jumps peak at 66 px standing, 71 px walking, and 83 px running.VerifiedXkeeper0/smb1revised
How we know
4758 LDA A_B_Buttons ⋮ 4763 SEC ⋮ 4767DumpFall: ⋮ 4769 STA VerticalForce
src/prg.asm lines 4756–4769 at 1cc3c92 · upstream ↗ 6681 LDA SprObject_Y_MoveForce,x 6682 CLC ⋮ 6684 STA SprObject_Y_MoveForce,x ⋮ 6686 ADC #$00 6687 STA SprObject_Y_Speed,x ⋮ 6690 LDA SprObject_Y_MoveForce,x
src/prg.asm lines 6664–6696 at 1cc3c92 · upstream ↗ 4958 STA DiffToHaltJumpsrc/prg.asm lines 4957–4958 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.
Revised after a check by a second AI model, 2026-10-25.
- ^In the air
X_Physicstakes the running cap$28and acceleration$E4while Mario's speed is$19or more, and the walking cap$18with$98(or$D0whileRunningSpeedis set) below it, whatever B does.CodeXkeeper0/smb1How we know
4991X_Physics: 4992 LDY #$00 4993 STY $00 ; init value here 4994 LDA Player_State ; if mario is on the ground, branch 4995 BEQ ProcPRun 4996 LDA Player_XSpeedAbsolute ; check something that seems to be related 4997 CMP #$19 ; to mario's speed 4998 BCS GetXPhy ; if =>$19 branch here 4999 BCC ChkRFast ; if not branch elsewhere
src/prg.asm lines 4991–4999 at 1cc3c92 · upstream ↗ 5013ChkRFast: 5014 INY ; if running timer not set or level type is water, 5015 INC $00 ; increment Y again and temp variable in memory 5016 LDA RunningSpeed 5017 BNE FastXSp ; if running speed set here, branch
src/prg.asm lines 5013–5023 at 1cc3c92 · upstream ↗ Measured by a script in MesenCE 2.2.1 (build 4b8a196), on . It fails if the result disagrees with the claim.
Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^Power-ups hidden in bricks and invisible blocks change Mario: the Magic Mushroom into Super Mario, the Fire Flower into Fiery Mario, who throws fireballs with B, and the Starman into Invincible Mario. A hit turns Super or Fiery Mario back into regular Mario, who flickers and can't be hurt for a short while. An extra life comes from a 1-up mushroom or 100 coins.ManualSuper Mario Bros. instruction bookletrevised
How we know
If you come across mushrooms who have been turned … into bricks or made invisible, they reward you by … *When Super Mario or Fiery Mario are bumped into by a bad guy, they don't die … but simply return to their old regular-Mario selves. … For a short while after turning back into his regular-Mario self, Mario flickers. … During this time, he can not be killed by bad guys (he's invincible).
Mario's Friends · archived copy ↗ Fireballs ...... After you pick up the fire flower, you can use this button to throw
2. Names of Controller Parts, B button · archived copy ↗ If Mario picks up 1 up mushroom, he gets an extra life. … If Mario picks up 100 coins, he gets an extra life.
Bonus Prizes · archived copy ↗ The quote matches our archived copy.
Revised after a check by a second AI model, 2026-10-26.
- ^
Player_GetHurtjumps over a block that Southbird's comments mark as the Japanese version's code, and a comment says the Japanese version "always" shrinks Mario: in that block, any hit on a powered Mario queues small Mario, with the Frog, Tanooki, and Hammer suits flying off.Code notesSouthbird's SMB3 disassemblyHow we know
5631 JMP PRG000_DA15 ; Jump to PRG000_DA15 (skips lost/dead Japanese version code) ⋮ 5633 ;;;;;;;;;;;;;; Begin SMB3-J Only Code ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ⋮ 5635 ; SB: Lost/Dead Code -- This was the Japanese version suit loss code 5636 ; For detail why it was removed, see PRG007 LostShoe_Pattern 5637; $D9EC 5638 LDA Player_Kuribo 5639 BNE PRG000_D9F7 ; If Player is in Kuribo's Shoe, jump to PRG000_D9F7 ⋮ 5641 ; Player is NOT in Kuribo's Shoe... ⋮ 5643 LDA <Player_Suit 5644 CMP #PLAYERSUIT_SUPERSUITBEGIN 5645 BLS PRG000_DA4E ; If Player is not in one of the Super Suits, jump to PRG000_DA4E ⋮ 5656 LDY <Player_Suit ; Y = Player's power up ⋮
PRG/prg000.asm lines 5631–5671 at 09b1bd8 · upstream ↗ 5678 CMP #PLAYERSUIT_FIRE ; SB: Change this to "PLAYERSUIT_SUPERSUITBEGIN" and you restore Japanese version's "always shrink" code!!PRG/prg000.asm line 5678 at 09b1bd8 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
Sources
Code
- Southbird. 2025. “smb3: Super Mario Bros. 3 disassembly for NESASM (captainsouthbird/smb3).” Commit 09b1bd8. captainsouthbird/smb3 @ 09b1bd8 · licence, all uses
- doppelganger and Xkeeper. 2022. “smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1).” Commit 1cc3c92. Xkeeper0/smb1 @ 1cc3c92 · licence, all uses
Primary
- Nintendo. 1988. “スーパーマリオブラザーズ3 取扱説明書 (HVC-UM).” HVC-UM instruction booklet, 48 PDF pp. Nintendo. original · archived · licence, all uses
- America, Nintendo of. n.d. “NES Games (Nintendo of America release list).” Nintendo of America. original · archived · licence, all uses
- America, Nintendo of. 1990. “Super Mario Bros. 3 instruction booklet (NES-UM-USA-1).” NES-UM-USA-1 instruction booklet, 48 PDF pp. Nintendo of America. original · archived · licence, all uses
- Shigeru, Miyamoto,, Tezuka, Takashi, Kondo, Koji, Sao, and Akinori (interviewer). 2016. “Nintendo Classic Mini: NES special interview – Volume 3: Super Mario Bros.” Nintendo Classic Mini: NES special interview, Volume 3. Nintendo. original · archived · licence, all uses
- Nintendo. 1985. “Super Mario Bros. instruction booklet (NES).” Super Mario Bros. instruction booklet, pp. 1-16. Nintendo of America. original · archived · licence, all uses
Secondary
- Famitsu.com editors. n.d. “スーパーマリオブラザーズ3 [ファミコン] / ファミ通.com title page.” Enterbrain / Gzbrain. original · archived · licence, all uses
- Steve, Harris,, Semrad, Ed, Alessi, Martin, Stockhausen, and Jim. 1990. “Electronic Gaming Monthly, issue 9 (April 1990): Super Mario Bros. 3 review.” Electronic Gaming Monthly, no. 9, p. 10 ("Review Crew"). Sendai Publications. original · archived · licence, all uses
- Mean Machines editors. 1991. “Mean Machines, issue 10 (July 1991): Nintendo's Ace Line-Up.” Mean Machines, no. 10, p. 10. EMAP. original · archived · licence, all uses
- Julian, Rignall, and Mean Machines editors. 1991. “Mean Machines, issue 13 (October 1991): Super Mario Bros. 3 review.” Mean Machines, no. 13, pp. 56-59. EMAP. original · archived · licence, all uses
- Nintendo Power editors. 1990. “Nintendo Power: Super Mario Bros. 3 strategy guide (1990).” Nintendo Power special strategy guide, pp. 3-80. Nintendo of America. original · archived · licence, all uses
- Nintendo Power editors. 1990. “Nintendo Power, issue 11 (March/April 1990): Super Mario Bros. 3 feature.” Nintendo Power, vol. 11 (March/April 1990), pp. 6-13, 20, 40-41. Nintendo of America. original · archived · licence, all uses
- Nintendo Power editors. 1990. “Nintendo Power, issue 10 (January/February 1990): The Making of Super Mario Bros. 3.” Nintendo Power, vol. 10 (January/February 1990), pp. 20-23. Nintendo of America. original · archived · licence, all uses
- staff, Famicom Tsūshin editorial. 1989. “Famicom Tsūshin, no. 67 (3 February 1989): 1988 Best Hit Game Awards.” Famicom Tsūshin (ファミコン通信), no. 67 (1989-02-03), pp. 6-9; the action award is on p. 8. ASCII Corporation. original · archived · licence, all uses
- Nintendo Power editors. 1989. “Nintendo Power, issue 9 (1989-11).” Nintendo Power, vol. 9. Nintendo of America. original · archived · licence, all uses
- Sheff and David. 1999. “Game Over, Press Start to Continue (1999 edition).” Prologue 'A New Leader of the Club', pp. 3-5; chapter 'The Grinch Who Stole Christmas', pp. 190-191. CyberActive Media Group. original · archived · licence, all uses
- staff, Chicago Tribune. 1990. “U.S. Parents! Get Ready For The 3rd Invasion Of Super Mario Bros.” Chicago Tribune, 29 March 1990 (features). Chicago Tribune. original · archived · licence, all uses
- Nintendo Power editors. 1990. “Nintendo Power, issue 12 (1990-05).” Nintendo Power, vol. 12 (May/June 1990). Nintendo of America. original · archived · licence, all uses
- Nintendo Power editors. 1991. “Nintendo Power, issue 31 (1991-12).” Nintendo Power, vol. 31. Nintendo of America. original · archived · licence, all uses
- Nintendo Power editors. 1994. “Nintendo Power, issue 67 (1994-12).” Nintendo Power, vol. 67. Nintendo of America. original · archived · licence, all uses
- Davis, Ziff. 1997. “Electronic Gaming Monthly, issue 100 (November 1997).” original · archived · licence, all uses
- staff, IGN. n.d. “Top 100 NES Games: 1, Super Mario Bros. 3.” IGN Entertainment. original · archived · licence, all uses
- Jdaster64. n.d. “A Complete Guide to SMB's Physics Engine.” original · archived · licence, all uses