This is a completely new type of a Super Mario World run. It beats the game by getting the THE END [dead link removed] 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"
"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" [dead link removed]
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)
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.
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
[dead links removed]
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.
Accepting this movie as a new 'ram corruption' category. See this
post for details.