Cutsceneless encode:

Details

  • Emulator used: Bizhawk 1.6.0
  • Aims for fastest time
  • Manipulates luck
  • Takes damage to save time
  • Abuses programming errors
  • Still saves the animals

About the run

Not long after the making of the Arbitrary Code TAS total found another way to trigger the ending early. When you get far enough OoB X-Ray starts behaving oddly and writes over a lot of RAM addresses. The further down you are the more gets overwritten, and getting far enough down allows the escape sequence to be triggered (and the trigger to save the animals!). This lead to an improvement of 7102 frames over the previous run, and a run which definitively obsoletes both the ACE TAS and the previous X-Ray TAS (although I have hopes that the former can be utilized in the future as a starting point to make something interesting with the usage of arbitrary code execution).
Besides that there's not much to say. Nothing particularly new happens until the very end, and I didn't manage to find any improvements over the old X-Ray TAS in comparable parts except for an odd quirk I found when making the 100% run that reduces the door lag slightly when escaping the Bomb Torizo, and everything else beside the OoB stuff is fairly straight forward.

Thanks to

Big thanks to total for finding the X-Ray glitch (or rather, finding that you could trigger the ending with it), as well as for providing me with a lua script for hitbox detection that helped a lot when navigating OoB. Also thanks to the Super Metroid speedrunning community for pushing this category further and further

feos: I did numbers, and they are going to be surprising for some people.
  • 17 people want this submission to obsolete the 2 glitched runs.
  • 12 people want this submission to not obsolete anything else.
  • 5 people want it to obsolete the in-game time run as well.
There's also the very in-game time run's submission thread, where 46 people want that run to be published alongside to the real-time one, and 15 people don't want it. And the judge's decision was to publish it as a separate branch.
So the community's decision was back then to have that run separately, and now it's to not touch it. However, if a new version of the real-time run is made, that issue will be brought back up, since these 2 are the runs with the most content overlap. It's just currently, Saturn's movie is way more up-to-date than Tako & Kriole's.
So I'm accepting this submission to Moons, to obsolete "GT code, game end glitch" and "X-Ray glitch" by the "game end glitch" title. If some real playaround-style arbitrary code movie is made, all the content from the ACE run will most likely be seen again there, and even more, so that people don't miss it for too long.
As for the borderline between this (and the 2 glitched) runs, and all the rest - it is killing Mother Brain. Glitched runs skip that, as well as bosses, other runs don't. Killing Mother Brain is the thing that is obviously intended by the developers, and required to beat the game, so doing so means the run used the intended route. Ignoring it means it used the unintended (glitched) route.
Guga: Processing...

Fog
Experienced player (626)
Joined: 4/5/2014
Posts: 459
Wyatt wrote:
Well, it clearly should obsolete 1978. X-ray glitch done better, and all. I withhold judgement on 2558: While the time improvement is undeniable, it's FAR less entertaining, and doesn't honestly strike me as comparable.
It manipulates RAM to trigger the ending sequence. If that isn't comparable, I don't know what is.
Joined: 2/28/2009
Posts: 99
i love super metroid submission threads
Glitcher
He/Him
Joined: 3/24/2007
Posts: 216
Location: London, U.K.
I second the dual obsoletion request. I think some of these games could use less categories anyway.
Former player
Joined: 2/19/2007
Posts: 424
Location: UK
Nicos wrote:
This run manage to showcase the Xray scope glitch and then manage to showcase some ACE
This run does not execute arbitrary code. It just corrupts memory. Corrupting memory is the first step towards ACE, but it isn't sufficient. Arbitrary code execution doesn't mean "runs some nonsense code". It means that you can make the console execute whatever string of instructions you choose. I still think this TAS should obsolete both movies, but that isn't because this one uses ACE (it doesn't), it's because it's the fastest, and the goal of the previous fastest movie was to be fast, not to use ACE (which was just an incidental detail). I hope we'll have a proper ACE run eventually - i.e. one where the payload is the point, not the speed. Oh, and yes vote, of course.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
amaurea wrote:
This run does not execute arbitrary code. It just corrupts memory. Corrupting memory is the first step towards ACE, but it isn't sufficient. Arbitrary code execution doesn't mean "runs some nonsense code". It means that you can make the console execute whatever string of instructions you choose.
Does the CPU execute unintended opcodes in RAM that were put there by the runner (usually through glitches in the game, but it doesn't really matter exactly how)? If yes, I'd classify that as arbitrary code execution. Non-ACE memory corruption would be when data in RAM is corrupted somehow, and this causes the game to do unintended things, but those corrupted values are never executed as opcodes by the CPU.
Emulator Coder
Joined: 3/9/2004
Posts: 4588
Location: In his lab studying psychology to find new ways to torture TASers and forumers
Warp wrote:
amaurea wrote:
This run does not execute arbitrary code. It just corrupts memory. Corrupting memory is the first step towards ACE, but it isn't sufficient. Arbitrary code execution doesn't mean "runs some nonsense code". It means that you can make the console execute whatever string of instructions you choose.
Does the CPU execute unintended opcodes in RAM that were put there by the runner (usually through glitches in the game, but it doesn't really matter exactly how)? If yes, I'd classify that as arbitrary code execution.
Super Metroid seems to have game ending sequences laying around throughout its code (or lucky coincidences). Shoot certain walls with certain beams, or get Samus into certain walls, and suddenly the game goes into one of its prescripted scenarios/sequences. Regular players trying out certain glitches constantly run into the game doing weird things like this without intentionally trying to put certain values somewhere. I once got all the items in the game to reset just by shinesparking into a particular spot in Crateria. I wasn't even trying to do anything weird.
Warning: Opinions expressed by Nach or others in this post do not necessarily reflect the views, opinions, or position of Nach himself on the matter(s) being discussed therein.
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11272
Location: RU
Warp wrote:
Does the CPU execute unintended opcodes in RAM that were put there by the runner (usually through glitches in the game, but it doesn't really matter exactly how)? If yes, I'd classify that as arbitrary code execution. Non-ACE memory corruption would be when data in RAM is corrupted somehow, and this causes the game to do unintended things, but those corrupted values are never executed as opcodes by the CPU.
There are execution pointers you know. A game stores them in RAM and uses them to jump to instructions to execute. If one corrupts the pointer address, the game will jump to wherever it points it to, and execute there as a code. Even if it's data, or some non-existent values such as in open bus. They will be executed until they end and some sane code starts, or until such false code makes it jump to something sane. That can be called "executing false code", but not "executing arbitrary code". And it isn't directly related to executing RAM as opcodes. As long as human can't directly affect/manipulate what is being executed, it's not ACE.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
Well, if the CPU is executing ROM routine X, and then some memory corruption makes it jump to ROM routine Y, then it's not IMO arbitrary code execution. It's simply affecting which part of the existing program the CPU will execute. For it to be arbitrary code execution, the CPU would have to interpret and execute data entered by the player as machine code.
Techokami
He/Him
Joined: 6/23/2008
Posts: 160
Nach wrote:
I once got all the items in the game to reset just by shinesparking into a particular spot in Crateria. I wasn't even trying to do anything weird.
...go on.
Tub
Joined: 6/25/2005
Posts: 1377
Nach wrote:
Super Metroid seems to have game ending sequences laying around throughout its code (or lucky coincidences).
It has this one memory address that indicates the current state of the game: "intro", "menu", "playing" etc. It has one value for "end sequence". If you manage to set that value, the next frame the end sequence plays. There seem to be a lot of memory corrupting glitches in SM, overwriting huge portions of the RAM. Any other game would usually crash if you do that. In SM, if you manage to activate the end sequence, all is well: the end sequence is loaded from ROM, the corrupted RAM contents don't matter any more. So there's still just one end sequence, but a pretty good chance for heavy memory corruption to successfully trigger it without crashing.
Nach wrote:
Shoot certain walls with certain beams
Some of the glitched beams just execute a giant memcpy() each frame the projectile is alive, which is part of the reason the murder beam lags so much.
Nach wrote:
I once got all the items in the game to reset just by shinesparking into a particular spot in Crateria. I wasn't even trying to do anything weird.
Do elaborate. I don't believe I've seen a way to trigger memory corruption with the shinespark before.
m00
Former player
Joined: 2/19/2007
Posts: 424
Location: UK
Warp wrote:
Does the CPU execute unintended opcodes in RAM that were put there by the runner (usually through glitches in the game, but it doesn't really matter exactly how)? If yes, I'd classify that as arbitrary code execution.
No, it's arbitrary code execution if the player can make the game run whatever code he wants. If he can only specify a limited number of instructions to run, after which control is lost, then that's not arbitrary code execution. It's just a code execution exploit. "Arbitrary" in this sense means "unrestricted", not "random".
Wikipedia wrote:
It is the most powerful effect a bug can have because it allows an attacker to completely take over the vulnerable process.
"Arbitrary code execution" and "total control" are synonyms. So if you can use a glitch to end the game, but not make the characters dance polka across the screen, then it's not ACE.
Nach wrote:
I once got all the items in the game to reset just by shinesparking into a particular spot in Crateria. I wasn't even trying to do anything weird.
That's very interesting. The only shinespark bugs I'm aware of that come anywhere near being able to do this are the yapping maw shinespark glitch and the lava/sand shinespark glitch. But after some investigation, they seem to be dead ends, either doing nothing or crashing the game without doing anything interesting. Your shinespark glitch sounds like it could let one execute arbitrary code without the GT code, and probably more quickly too. Either directly or by first giving you all the beams and then using the standard methods.
Techokami
He/Him
Joined: 6/23/2008
Posts: 160
amaurea wrote:
"Arbitrary code execution" and "total control" are synonyms. So if you can use a glitch to end the game, but not make the characters dance polka across the screen, then it's not ACE.
I am greatly amused by the concept of the example you have given. It needs to happen.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
amaurea wrote:
Warp wrote:
Does the CPU execute unintended opcodes in RAM that were put there by the runner (usually through glitches in the game, but it doesn't really matter exactly how)? If yes, I'd classify that as arbitrary code execution.
No, it's arbitrary code execution if the player can make the game run whatever code he wants. If he can only specify a limited number of instructions to run, after which control is lost, then that's not arbitrary code execution. It's just a code execution exploit. "Arbitrary" in this sense means "unrestricted", not "random".
Then we disagree.
Emulator Coder
Joined: 3/9/2004
Posts: 4588
Location: In his lab studying psychology to find new ways to torture TASers and forumers
Tub wrote:
Nach wrote:
I once got all the items in the game to reset just by shinesparking into a particular spot in Crateria. I wasn't even trying to do anything weird.
Do elaborate. I don't believe I've seen a way to trigger memory corruption with the shinespark before.
Getting the game to reset items is a well known bug in the game: http://www.samus.co.uk/super_metroid/reset_glitch_emulator.shtml And I've seen it happen elsewhere in other ways than what is described there. As for what happened to me, I tried doing the Shinespark entry to the Ghost Ship, and I crashed into the pillar that has a missile pack on it in the middle of the room prior (and I think somehow claimed the missile pack at the same time). Next thing I know, the map is all blue, and items I picked up already were now available again. I did not notice any graphical glitches occur or slow downs.
Warning: Opinions expressed by Nach or others in this post do not necessarily reflect the views, opinions, or position of Nach himself on the matter(s) being discussed therein.
Skilled player (1432)
Joined: 7/15/2007
Posts: 1468
Location: Sweden
Afaik that is one of the oldest and most widespread myths about the game, but no one has ever been able to reproduce it. I'd definitely require some solid proof before i believe that happened.
Agare Bagare Kopparslagare
Patashu
He/Him
Joined: 10/2/2005
Posts: 4017
Cpadolf wrote:
Afaik that is one of the oldest and most widespread myths about the game, but no one has ever been able to reproduce it. I'd definitely require some solid proof before i believe that happened.
Could it be emulator dependent?
My Chiptune music, made in Famitracker: http://soundcloud.com/patashu My twitch. I stream mostly shmups & rhythm games http://twitch.tv/patashu My youtube, again shmups and rhythm games and misc stuff: http://youtube.com/user/patashu
Skilled player (1637)
Joined: 11/15/2004
Posts: 2202
Location: Killjoy
Is this trick doable in an RTA?
Sage advice from a friend of Jim: So put your tinfoil hat back in the closet, open your eyes to the truth, and realize that the government is in fact causing austismal cancer with it's 9/11 fluoride vaccinations of your water supply.
Joined: 11/16/2009
Posts: 68
If you mean the trick in this submission, there are runs by console runners that are almost exactly the same (they get one energy tank because it's faster for a console runner to do so than to wait for the wavers to get back to the x-ray door. The out of bounds sequence is also slightly different.) The fastest I know of is just under four and a half minutes slower than this submission.
Player (64)
Joined: 4/17/2014
Posts: 69
Definite yes vote, utter eye candy
Nothing to fear but fear itself - Franklin D. Roosevelt
Editor, Experienced player (608)
Joined: 11/8/2010
Posts: 4012
That was funny. And a solid improvement over the published run. Yes vote!
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11272
Location: RU
feos wrote:
As I finished with all regular encodes now, I will start putting things together for the 'gameplay only' encode. BizHawk script: Download SuperMetroid-DoorlessCapture.lua
Language: lua

while true do -- Items, Doors, Elevators istop = memory.readbyte(0x7E0009) dstop = memory.readbyte(0x7E05F5) estop = memory.readbyte(0x7E0E18) if istop+dstop+estop == 0 or istop+dstop+estop == 0x6F then client.unpause_av() else client.pause_av() end emu.frameadvance() end
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Joined: 9/22/2011
Posts: 42
this has nothing to do with the run itself, but for "gameplay only" encodes, I think it would look way better if there was some transition. At least run the game for ~20 frames after the video "should" stop, and resume ~20 frames before gameplay begins again, so you would see the "item get" window open and then immediately close for example (instead of just immediate jump cut, which is particularly shocking for the elevators). If you wanted to get super fancy then you could even crossfade, but that's probably way overkill :P good work on the run!
Designer of Copy Kitty, a game about giant robots and explosions
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11272
Location: RU
I and Guga were speaking about not making a cutsceneless encode at all, since it's rather short anyway, but with OoB script instead.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 14888
Location: 127.0.0.1
This movie has been published. The posts before this message apply to the submission, and posts after this message apply to the published movie. ---- [2600] SNES Super Metroid "game end glitch" by Cpadolf in 12:54.71
Guga
He/Him
Joined: 1/17/2012
Posts: 838
Location: Chile
feos wrote:
I and Guga were speaking about not making a cutsceneless encode at all, since it's rather short anyway, but with OoB script instead.
And here they are: Modern HQ MKV: http://www.archive.org/download/CpadolfsSnesSuperMetroidgameEndGlitchIn1254.71/supermetroid-tas-gameendglitch-cpadolf_hitbox.mkv Compatibility MP4: http://www.archive.org/download/CpadolfsSnesSuperMetroidgameEndGlitchIn1254.71/supermetroid-tas-gameendglitch-cpadolf_hitbox_512kb.mp4