Have you ever imagined Mario going through all the levels at Sonic's speed? Well, you don't have to imagine anymore, you'll see it with your own eyes!
- Emulator used: BizHawk 2.6.3
- Allow Left+Right / Up+Down
- Core BSNES
- Abuses programming errors
- Heavy glitch abuse
- Corrupts memory
- Complete all exits
The Run 🟢
This is a TAS that completes all 96 exits in Super Mario World using arbitrary code execution. I wrote some code in the game's memory that allowed me to give Mario maximum speed, both left and right.
The process of how the code was written in memory is the same as my
glitchfest with arbitrary code execution, so I won't go into details here.
The code was very simple: pressing L on controller 1 sets Mario's speed to 7F and pressing R sets the speed to 80. The address responsible for Mario's speed is $7B and the maximum values ​​that we can have are those mentioned (7F is the maximum to the right and 80 is the maximum to the left). In short, Mario travels to the right at a speed of 127 pixels per frame and to the left at 128 pixels per frame.
The code is this:
LDA $18
AND #$10 ;|check if R (controller 1) is pressed
BNE ace1
LDA $18
AND #$20 ;|check if L (controller 1) is pressed
BNE ace2
RTL
ace1:
LDA #$80 ;|set 80 in $7B if $18 equals 10
STA $7B
RTL
ace2:
LDA #$7F ;|set 7F in $7B if $18 equals 20
STA $7B
RTL
In short, that's it. No addresses other than the code have been changed.
Important things:
- Mario jumps very high when his speed is between 110 and 119 (decimal). I used this to my advantage;
- At high speeds, Mario can pass through walls without dying. You will see this several times in this TAS.
This may be a bit of a controversial category because of the use of arbitrary code execution, but I find it fun to watch Mario blast through every level like a lightning bolt! I also believe that there are several improvements in this TAS and it could be faster, but I didn't have much free time to think about the best possible strategies for each level.
My thanks to the great Noise de Gole for teaching me a lot about arbitrary code execution and you for watching :)
feos: Claiming for judging.
feos: At the end of the day I can't consider this movie a playaround. If it was, there would be some combination of changing the existing game with some entirely new payload, and both would have the goal of being subjectively exciting in their creativity. Creativity is the whole nature of the playaround goal.
The goal of this movie is on the contrary rather objective - getting all exits as fast as possible - but the game itself is tweaked to help with it... in a subjective way.
Playarounds are judged by entertainment, and speed oriented goals need to be clear and solid to go to Alternative. But the part where ACE is used to hack the game to be faster is not very solid, according to
my view and to the viewer feedback that this submission got.
There's no definitive way to hack this game to make it optimal for the "all exits" speed goal: as long as we have total control, we can force the game to only execute code that we consider as "an event of using an exit", but there's no way to clearly define that even on the game code level! If it's just about internal flags, then setting them directly via ACE is not allowed for "full completion", but this movie is not "full completion" either! So we arguably should allow setting those flags, and then there's nothing else that would have to happen in the run. Or if we count "passing through an exit physically" as "an event of using an exit", then we also remember that inside the game every such event is compound, and it's only up to us how exactly we want to slice it - in order to only execute that part.
So since this doesn't work as a playaround or as a speed goal, the only class I can send this to is
Playground.