TASVideos

Tool-assisted game movies
When human skills are just not enough

Submission #3413: Masterjun's SNES Super Mario World "glitched" in 02:36.4

Console: Super NES
Game name: Super Mario World
Game version: USA
ROM filename: Super Mario World (U) [!].smc
Branch: glitched
Emulator: (unknown)
Movie length: 02:36.4
FrameCount: 9384
Re-record count: 7130
Author's real name: Julian N.
Author's nickname: Masterjun
Submitter: Masterjun
Submitted at: 2011-12-29 02:54:30
Text last edited at: 2013-02-18 20:31:06
Text last edited by: Masterjun
Download: Download (1550 bytes)
Status: published
Click to view the actual publication
Submission instructions
Discuss this submission (also rating / voting)
List all submissions by this submitter
List pages on this site that refer to this submission
View submission text history
Back to the submission list
Author's comments and explanations:
This is a completely new type of a Super Mario World run. It beats the game by getting the "THE END" screen in the 2nd level (Yoshi's Island 3).

After the discovery of a new glitch by あんた (anta), our Skype TASing community was trying to understand what happened in the .smv. Since he only uploaded the .smv and a japanese documentation, we had to find it out by ourselves.

Game objectives

  • Emulator used: Snes9x 1.43 v17
  • Aims for fastest time
  • Uses game-breaking glitches
  • Heavy luck manipulation
  • Achieves credits early

The "credits glitch"

Quote from p4plus2's documentation:

"spit sprite position = yoshi X position + offset to spit object(index by Y which is the direction) normally, this would store to the sprites X position, however, because the sprite index is #$FF It writes to #$E4 + #$FF which is #$01E3. This is the stack address that is corrupted. If yoshi is facing left he must be at the position #$86, and if he is facing right it should be #$66."

p4plus2's documentation of the "credits glitch"

bahamete's post about the "credits glitch"

Mister's post about the "yoshi eats a null sprite" glitch

Addresses which have to be manipulated

RAM Address needed Value Description
$7E:148C #$7C RNG 1 | See explanation below
$7E:148D #$92 RNG 2
$7E:148E #$F7 RNG 3
$7E:00E8 #$86 X position of sprite #04 (it's Yoshi in this case) (freezes when the sprite disappears, though you shouldn't have him disappear)
OAM Address needed Value Description
$01:02D4 #$26 X position of some score numbers onscreen (freezes when it disappears)
$01:02FC #$A3 X position of the "smoke" effect (like when a fireball goes into a wall) (freezes when it disappears)
$01:02FD #$F0 Y position of the "smoke" effect (same as above) (sets to #$F0 when it disappears)
$01:0304 #$81 X position of a Mario tile that appears when Mario is on Yoshi and he is in the turning animation (freezes when it disappears)
$01:0305 #$39 Y position of the same Mario tile as above (freezes when it disappears)
$01:0308 #$B0 X position of a cape tile (freezes when it disappears)
$01:0309 #$F0 Y position of a cape tile (sets to #$F0 when it disappears)
$01:030C #$60 X position of a cape tile that appears when mario is flying (freezes when it disappears)

Those addresses starting with "01" are just OAM Addresses. OAM is a chunk of memory that stores the data about the sprite tiles to draw onto screen.

RNG:

The Random Number Generators (RNGs) change with certain events. We have to change the RNG 1197 times for it to work in our favor. When a koopa spawns, it's called once (when the RNG is "called", it changes). Before going into the pipe in YI3, three koopas appear; this leaves the RNG to be called a remaining 1194 times. This is where the fish come in. When a flopping fish bounces on the floor, it calls the RNG three times. So, that means the fish need to bounce 396 times (to call the RNG 1188 more times). After the fish manipulation, there are exactly six koopas that spawn. After they spawn, the RNGs are set perfectly in order for me to activate the credits.

There are also some OAM addresses that have more than one possible values, they have to have the same bytes of opcode and they also have to not affect the A register.

OAM Address Bytes of Opcode Description
$01:02FA 2 Will be the right value when you shoot a fireball with X
$01:02FE 2 Will be the right value when you shoot a fireball with Y
$01:0300 4 X position of a koopa shell tile
$01:0302 3 Will be the right value when you pick up a shell
$01:0306 2 Nearly always right
$01:030A 2 Nearly always right
(actually you can change the bytes of the opcode, only the number of bytes between two required values is important)

Stage by stage comments

Yoshi's Island 2

We can't manipulate the addresses here since they would reset in the overworld.

Yoshi's Island 3

If you jump on a p-switch and then get the "pressed" p-switch in Yoshi's mouth on the right time, you will spawn a fish if you spit out the p-switch fast enough. Also, there can only be eight fishes in the room. After this room, I went back to the Yoshi block. I spawned two Yoshi's by hitting the block with Mario and the p-switch at the same time. I jumped on one Yoshi, got the p-switch in his mouth and let him die, so the second - invisible - Yoshi becomes visible and have a null sprite in his mouth. Then I go right to perform a PI (Powerup Incrementation) so i get a cape, to manipulate some values.

Other comments

Potential Improvements

Maybe the part with the fishes can be improved, since its heavy luck manipulation. Also, maybe there is a faster strategy to get all the right values.

Suggested Screenshots

Thanks to

  • Our Skype TASing community, for being able to help each other.
  • あんた (anta), for the discovery of this awesome glitch.
  • p4plus2 and smallhacker, for their awesome work exploring the glitch.
  • DarkMoon and Kaizoman666, for helping me writing this submission text.
  • bahamete, for creating some helpful lua scripts.
  • Mister, for helping me with YI2 :P.


adelikat: Judging
Accepting this movie as a new 'ram corruption' category. See this post for details.
Dacicus: Publication underway

Similar submissions (by title and categories where applicable):