EDIT: The rerecord count should be 40365 according to the lsnes message window when the movie is loaded, but shows up as just 1 for some reason.

Details

  • Emulator used: lsnes rr2-β17
  • Aims for fastest time
  • Manipulates luck
  • Takes damage to save time
  • Abuses programming errors
  • Finishes with suspiciously high item collection percentage
  • Saves the animals?

cpadolf's comments

Recently a set of discoveries in the Super Metroid speedrunning community involving the fabled Space/Time beam led some runners to beat the current any% TAS, obviously something had to be done about that. This new TAS beats the current any% TAS by 23446 frames, or about 6.5 minutes (thereby turning it into a low% run instead of an any% run), and finishes with an ingame time of about 06:15 (although it's displayed as 00:05, more on that later). This substantial improvement comes from using an entirely new route and a new way of finishing the game involving arbitrary code execution, a phenomenon that seems to become more and more common in the TAS communtiy. As an aside, with the timing used for runs in the real time speedrunning community this run is about 12:30.
The point of the route is to get to Gold Torizo as fast as possible and use the so called "GT Code" which instantly gives Samus most of her upgrades and a lot of ammo, enabling the glitching that takes place afterwards. There are basically two routes for doing this, both of which were fully run through and optimized. The first one is to go to Kraid in order to receive the Varia Suit that will take you through norfair and LN without having to collect a bunch of energy tanks. This is the one that was used by Saturn in his GT code run, and is used by the real time speedrunners (minus the hi-jump boots which can be skipped with some tricky kago balling and walljumping during the lava dive before LN). The second one is to skip out on Kraid and instead use the somewhat unknown and never before (to my knowledge) constructively used pause glitch that keeps Samus from dying as long as the game is constantly being paused. The second option turned out to be faster by about 30 seconds despite the game only being able to run for about 1 second per 2 seconds of paused time.
In order to make it all the way to GT with the pause abuse a reserve tank had to be collected as Samus has to have at least 1 energy when riding on an elevator to keep from dying, and to refill on energy before using the PB in the Gold Pirate room in LN as the game can't be paused after a PB has been placed. Because of the time saved by avoiding an extra pause a lot of extra drops were farmed and damage avoided throughout the run in order to minimize the amount of pauses. An interesting side effect of the pause glitch is that the game clock stops running while Samus health is 0, which makes the ingame clock about 20 seconds lower than it should be by the point that GT is reached, therefore displaying a 00:05 at the end instead of 00:06.
With that I'll leave it over to amaurea and total to get into the more technical stuff of the glitching in the run.

amaureas comments

Some of the first TASes of Super Metroid made use of a glitched beam combination called the "Murder beam", which was activated by shooting a charged shot to the left with all the beams equipped, even the incompatible Plasma and Spazer beams. That combination results in a sort of area-of-effect damage that keeps damaging nearby enemies forever, and was used in the Mother Brain fight until it was discovered that it was faster to just shoot optimally charged normal beams.
Since then, no glitched beams have been used in TASes here, though two other non-crashing beam combinations were known: The zero range, zero-damage, rapid-fire "chainsaw beam", and the seriously glitched space-time beam (uncharged plasma, spazer and ice), which could bring the bosses back to life, retile the rooms, reset items, or trigger the escape sequence. But despite the known potential of the space-time beam it was not used here, possibly due to it being emulated differently by the previous generation of snes emulators. Its most powerful effects may have been thought to be emulation errors.
This TAS uses not only the space-time beam, but also another beam previously thought to be useless: The charged space-time beam. After performing a trace log while firing the various glitched beam combinations, I found that out of the 8 possible glitched beams, the three known beams (murder, chainsaw and space-time) jumped to ROM data, while the remaining 5 all jump to RAM. That is why the former beams were reliable enough to use, and why the latter beams would always lead to a crash: RAM contents are variable, but rarely contain sequences of bytes that when interpreted as machine code do anything safe. In particular, more than half of all RAM values are 0, which when interpreted as an instruction means BRK, aka "hang forever".
But on the other side, while ROM is unchangable, the player can to some extent control the content of RAM. Many of the glitched beams jump to interesting RAM locations, but the one used in this TAS (but not the only potentially useful one) is the charged space-time beam, which jumps to ram location 0x900a0a, where we can find Samus' super missile count, followed by her power bomb count and selected item etc. These are all under the player's control, and have a large enough range that it is possible to perform some interesting operations.
For example, a super missile count of 32 corresponds to the instruction JSR (jump to subroutine), which lets us jump to a location of our choice based on the power bomb count. The most promising targets are the gamepad auto-read registers at location 0x4218 to 0x421f, which contain the current button presses of four gamepads, effectively giving us 8 consecutive bytes which we can freely choose, and which we can update every frame. Reaching these registers would be enough to let us execute arbitrary code, and take total control over the game.
However, both the super missile and power bomb counts are 2-byte variables, and what forms the address to jump to is the second byte of the super missile count and the first byte of the power bomb count. Jumping to 0x4218 using JSR would require 0x18 in the second byte of super missiles, and 0x42 in the first byte of power bombs, for a total of 6176 super missiles and 66 power bombs. Which would take a while to get. So we can't jump there directly. With reasonable ammunition counts, we can hope to jump to addresses 0x0000, 0x0100, 0x0200, 0x0300, ..., 0x3200. That's a lot to choose from, but most of them are hard to influence and contain large stretches of repetetive bytes, such as tile maps etc. But at least two of these are suitable: 0x0400 (OAM data), and 0x0b00 (position and scroll-related variables). The former is what I used in this demonstration video, but it is quite fickle, and requires the right enemies at the right position in the room. The second one I had given up on after almost making it work, because I thought Samus' relative screen position could never get much larger than 256, which would not get me the bytes I needed:
     b00 height       stand=(15,ORA,A),jump=(13,ORA,A),aimdown (0a,bad),crouch=(10,BPL,nop)
     b01 00
     b02 coltype      L=BRK, R=ORA, U=COP, D=ORA, so R or D are OK,  though both modify A.
     b03 00
     b04 x_screenrel low  practially any value
     b05 x_screenrel high nonzero only if Samus is off-screen
     b06 y_screenrel low  typically between 2c and c0
     b07 y_screenrel high
The first 4 bytes here are not useable, but can be made equivalent to harmless operations that bring us to 0x0b04. There we have 4 bytes in a row related to the Samus' screen-relative x and y position. If these could take any value, then we could use this to perform a jump to 0x4218. But when I first investigated this, I thought both these scroll values would be between 0 and 255 (i.e. Samus inside the screen) or at least not values much higher than that. That would make 0x0b05 and 0x0b06 zero, as indicated in the excerpt from my notes above, and would limit us to the same kind of restricted jump that brought us here in the first place.
But total pointed out that I had forgotten out-of-bounds travel (OOB), where it is possible to get almost arbitrarily far outside the screen. That made this method an easy and reliable (to a TASer anyway) method: Position Samus such that her screen-relative position is (x,y) = (0x1182,0x??37), where the ??-part is irrelevant. This corresponds to the machine code
     $90/0B04 82 11 37    BRL $3711
Which finally brings us to the gamepad auto-read registers! At that point we have total control over the game: We could for example set up a jump from the last register to the first one, trapping the game inside this 8-byte register range (this is what I did in my OAM example). But total found a more efficient setup, as he will explain.
See the Super Metroid game resources page for a more detailed analysis of the glitched beams.
Potential improvements: While we investigated the other glitched beams, we were not exhaustive, and they may be usable for gaining control earlier. This includes the standard murder beam, if fired in another direction than left. It might also be possible to gain control without the use of glitched beams at all, by triggering a glitched door transition while out of bounds (for example using the X-ray gltich). I've discussed this with PJBoy, but we didn't find a concrete way of realizing this. To execute larger amounts of arbitrary code, it will be useful to use the manual gamepad registers instead, as the current method only lets us execute about 2-3 instructions per frame.

total's comments

Now that we've finally managed to direct the game to execute code from controller registers using the methods explained by amaurea we need to make sure that we can stay in control for long enough to change the game state and do any other modifications that might be needed to keep the game from crashing. This can be done as explained earlier by crafting a loop that keeps code execution within the controller registers but in this case there's a slightly more efficient method using the games own programming against it.
So what we can do now is to overwrite the function pointer in memory for the charged space-time beam (the one that right now points to 0x0a0a where our first entry point is) with 0x4218. This has the effect that for the following frames as long as the space-time beam projectile still exists, when the game runs code to update it, it will no longer be using the chain of super missile and power bomb count and positional requirements but instead helpfully enter the controller registers as a subroutine. This gives us plenty of controllable bytes each frame since we only need one byte to return control back to the game.
Below is the final five frames of meaningful input using four controllers and some quick notes on what they do (the 0-3 buttons are extra bits that can be set, but does not represent a button on the controller):
   ...Su...A.L.0..3|....ud...XL.0...|B...ud.r.X....2.|.Ys......XLR0.2. 
   LDA #$4218
   STA $0C68
   PLY
   RTS
As explained above, this is our first chance to run our own code and we'll use it right away to overwrite the function pointer so the game will keep calling into the controller registers no matter our ammo or position. Before returning back to the game we'll also have to clean up the stack so we return back to the right place.
   ..s..dl.A.L.0..3|....u..rA..R0...|B...ud.r........|.........XL..... 
   LDA #$26
   STA $0998
   RTS
This sets 0x0998 in RAM to 0x26 which changes the gamestate and tells the game that we've just finished it, and it will now start a fadeout into the ending.
   B.......A.L.0..3|BY.Su.....L....3|B...udlr........|.Ys......XLR012.
   LDA #$80
   STA $7ED821
   RTS
Since we still have a few frames to work with while the game is fading out, there's some small details we can do while we're waiting for the ending to start. So why not be nice and make sure our animal friends make it out safely.
   BY..udlrA.L.0..3|....u..rAX..0...|B...ud.r...R..2.|.........XL..... 
   LDA #$12CF
   STA $09C8
   RTS
And this increases our missile count to get a nice item completion percent.
   .Y......A..R01..|................|.Ys.........01..|................ 
   STZ $0C40
   RTS
Before returning full control to the game, we delete the charged space-time beam projectile to make sure the game does not try to call into the controller registers again.
It should be noted that instead of overwriting the function for the beam handling code, there are a few other pointers that can be overwritten to keep in control of the game that will persist through door transitions and does not need an active fired beam projectile. It is not used in this case since it would require quite a bit more code to setup and was not needed in this case where we just need to end the game.
As mentioned before this run also uses the uncharged space-time beam a few times. First to exit Golden Torizo's room without fighting him and also resetting the super missile in the room, and finally to create a door transition block that will place us out-of-bounds in the next room which is needed to be able to manipulate the screen-relative position enough to be able to execute code.
The way this works is that when you fire the uncharged space-time beam, the game jumps into the middle of a routine in ROM that does a memory copy into RAM. But since we're entering that routine from the wrong place and with non-intended values in the X and Y registers, this routine will copy a whole lot more data than it is supposed to. It will end up overwriting data for events, items collected, bosses defeated and so on which is what makes it possible to collect the same super missile pack three times. An even more destructive thing happens as well though, it will also overwrite room data with "garbage" blocks where some of these will be valid door transition blocks. We abuse this by using these to first escape GT's room and fight, and last to quickly get out-of-bounds in the room left of GT's room where we can finally get into position to fire the charged space-time beam and ending the game.

Thanks to

Big thanks to all of the Super Metroid speedrunning community for their recent efforts in glitching the game, as well as all the people actively contributing to the TASvideos forum thread. Special thanks to hero of the day for suggesting the use of the pause glitch to skip going to kraid.

Noxxa: Judging.
Noxxa: This is a quite unique run. It uses a debug code to aid in reaching its end goal faster, which is arbitrary code execution. We have had varying precedents on runs using cheat codes that were accepted, and that were rejected. These cases all differ in multiple fields, including whether the debug code or cheat code is conventionally accessible in gameplay, whether they are intentionally put in the game for the player to use, and how much of an impact they have on gameplay. But in the end, this just turns out to be an entirely unique case. This is because the run does not just clear the game like a normal playthrough - it takes over control of the game code to trigger the ending.
The movie rules contain a rule against cheat codes, so if the rules are to be followed, this run would be rejected. However, we need to look at the spirit of the rule here. Normally, cheat codes are used to make gameplay easier - make it simpler to finish the game. However, in this case, the run is not ordinarily "finishing the game". It does not actually make "gameplay" easier, because what it actually affects here can barely be called "gameplay". In odd instances such as these, where the game is not being conventionally played or finished, we can make an exception to this rule.
So putting aside the use of the debug code, we are met with a nice, entertaining and well-received run which finishes the game fast. Accepting for Moons. This run will not obsolete any previous run - the current any% ("X-Ray glitch") seems to hold enough merit on its own to keep publication, as it is a more "true" run which completes the game without arbitrary code execution or use of debug codes.
Ilari: Processing.


Sir_VG
He/Him
Player (40)
Joined: 10/9/2004
Posts: 1913
Location: Floating Tower
I have but one word to describe this run. WHAT?! "Yes vote" is a 2 word alternative.
Taking over the world, one game at a time. Currently TASing: Nothing
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11478
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Radiant wrote:
I don't think there's a meaningful difference between a "debug code" and a "cheat code". Both are basically there to make testing the game easier in development, and neither is a part of normal gameplay.
This.
Dooty in the DKC2 thread wrote:
PizzaBoy wrote:
This run uses a trick that is erroneously called in-game cheat to collect all 75 Kremkoins on Pirate Panic.
Just curious, but what do you mean by this? Is it not a cheat?
All cheats on this game are performed in the character select screen, pressing down a lot of times (I think it's twelve times?), so this is more like a shortcut to play the Lost World when you don't want to worry about the bonus rooms.
Also that. If it's also achieved by glitching the game into using the possibilities hidden under cheats, it's OK. Calling them directly as they were intended to be called by developers (debug codes) or players (cheat codes) is not OK.
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: 3/8/2014
Posts: 36
I would argue that those specific examples are subject to opinion really. I've heard it referenced as a glitch, a cheat code, a dev code, and apparently in the TAS itself as a shortcut. The realtime community has actually banned it in 102% and any% (it's faster to use the code in any%, play the lost world stages and defeat krool2) but they have a separate category that utilizes it called True Ending. Likewise, the realtime Super Metroid community has divorced runs that use GT Code into its own categories as well for the exact same reasons, so one would assume that the TAS community would do the same. As far as replacing runs and having too many category branches goes, TASvideos currently has two any% runs published, two low% runs, and the Xray TAS falls into both of those fields on top of it all. Gametime TASing may lose its luster soon as well with the discovery that the same pause glitch used in this new TAS can be used to manipulate the Gametime to hilariously low numbers. Not only that, but the new arbitrary code discoveries can manipulate those numbers to be whatever the player decides upon. The two low% runs were both originally declined for being superfluous and brought back with the inclusion of the vault (and then published with moons instead????). If you want to be picky with the categories, there's a lot more fluff than just adding an arbitrary code run. There are a lot of things that ultimately come down to opinions about a lot of runs, people all have preferences. Some people dislike general glitching of games, some people dislike save corruption, some people dislike out of bounds, some people dislike using 4 controllers to use 16 buttons a piece to execute arbitrary code. You're never going to make everyone happy, especially those who have a deep, deep misunderstanding and general ignorance on the subject (I saw someone mention the idea of using arbitrary code in place of GT Code to give you everything which is obviously counter-intuitive at best, impossible at worst). Also the idea of forcing the TASers into making it into a "rickroll" is dismissive, insulting, and not even possible with the tools available. Rules change overtime to reflect the direction of the new developments that rise up. SDA banned Out of Bounds at a time and now its accepted. SDA banned resets to save time and now its accepted..
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11478
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Probably the rules must be changed to "cheat/debug codes that make the game harder, or more entertaining, are allowed, others are not". Because yes, we use cheat codes that unlock characters, difficulties, level sets, endings... It's a game after all, made for enjoyment. Once you get right what brings more enjoyment, you can build the right rules around that. That would make sense in all cases: Konami code makes Contra run stupid and dull, GT code makes the any% super metroid look easier, cheat for 10 lives makes Battletoads easier. But the same codes can make the games harder/more entertaining if used in right conditions, as we see here. Saying that, I still feel uneasy while thinking of allowing directly entering cheat/debug codes that JUST cut some time out of the run. Because with some exceptions, it still messes up the whole clarity concept.
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.
Senior Moderator
Joined: 8/4/2005
Posts: 5777
Location: Away
Why must it so often be Super Metroid for submissions that challenge the status quo, ugh. Anyway, this is a very interesting case. People may oppose the particular techniques used in this run (any of them or all at once), but like Tub said, it is the unique combination where every dubious, unconventional, controversial technique works to the run entertainment's immediate favor. To summarize: 1) it deserves recognition for ending a very well-explored game in a (yet another) groundbreaking way that coincides with the current trend that definitely sets it apart from non-tool-assisted completions; 2) the way it is completed is the fastest known and the fastest possible from power-on; 3) it uses ACD which is a very polarizing technique for viewers and players alike; 4) it uses a leftover debug code and, furthermore, accesses it the conventional way, thus technically cheating; 5) it abuses pause screen, yet another shunned technique, in an efficient and non-offensive way; 6) for what it is, it remains entertaining through and through, never showing any boring parts except those in the beginning (i.e. technically unskippable); 7) a "more legitimate" version that finishes the game in the same way would be both longer than the current any% and have little to no unique content relative to the other runs, sans the actual ending trigger. I think it should be published. But, due to this run only making maximum sense the way it is, it should also be published the way it is. At the same time, I don't think it should obsolete any of the current categories, at least directly, as it's not directly comparable with any of them. In fact it's as different from them as currently possible without turning to arbitrary goals. And for the record, I dislike all the controversial techniques used in this run, yet I do enjoy the result. It's not the most entertaining SM run for me, but it's way more entertaining than the X-Ray any% for sure. I voted yes without hesitation. Also, I don't believe in precedent rules, and I think every run should be adequately and fairly judged on its own merits.
Warp wrote:
Edit: I think I understand now: It's my avatar, isn't it? It makes me look angry.
Joined: 2/14/2007
Posts: 128
Tub wrote:
About the GT code: When we reach the point of arbitrary code execution, all gloves are off, and I don't think it's important to keep restrictions such as "play on hardest difficulty", "don't use cheat codes" and similar. Those rules were made to keep the gameplay interesting, but this run isn't really about the gameplay, is it?
Just wanted to pop in to say that I completely agree with Tub, and that I would support this as a general rule for all game runs that execute arbitrary code.
Active player (437)
Joined: 4/21/2004
Posts: 3517
Location: Stockholm, Sweden
For the record, I just posted for two reasons: I support this run and couldn't care less if we have 100 categories. As long as each category is entertaining and unique enough to warrant its own category which is the case here. My other reason is for my beloved friend moozooh, I've missed you :(((
Nitrogenesis wrote:
Guys I come from the DidyKnogRacist communite, and you are all wrong, tihs is the run of the mileniun and everyone who says otherwise dosnt know any bater! I found this run vary ease to masturbate too!!!! Don't fuck with me, I know this game so that mean I'm always right!StupedfackincommunityTASVideoz!!!!!!
Arc wrote:
I enjoyed this movie in which hands firmly gripping a shaft lead to balls deep in multiple holes.
natt wrote:
I don't want to get involved in this discussion, but as a point of fact C# is literally the first goddamn thing on that fucking page you linked did you even fucking read it
Cooljay wrote:
Mayor Haggar and Cody are such nice people for the community. Metro City's hospitals reached an all time new record of incoming patients due to their great efforts :P
Senior Moderator
Joined: 8/4/2005
Posts: 5777
Location: Away
AngerFist wrote:
My other reason is for my beloved friend moozooh, I've missed you :(((
<3 Chances are I'll return to IRC sometime in early April or so!
Warp wrote:
Edit: I think I understand now: It's my avatar, isn't it? It makes me look angry.
ALAKTORN
He/Him
Former player
Joined: 10/19/2009
Posts: 2527
Location: Italy
Garrison wrote:
the realtime Super Metroid community has divorced runs that use GT Code into its own categories as well for the exact same reasons, so one would assume that the TAS community would do the same.
I guess we could have a “GT code” and a “non GT code” branch or whatever, but if we accept the GT code run first, then no one will want to TAS the slower non GT code run… wait… Garrison? I know you, I used to watch your DKC2 races
Player (206)
Joined: 2/18/2005
Posts: 1451
Nice run. Considering that it aims to trigger the games ending as fast as possible by any means, I don't think it should matter whether it uses the GT code in this case, since it's a hidden one that likely wasn't intended to be used by the players. It also allows to use the pause glitch with good purpose for the first time in a run, and the quick obtainment of the SpaceTime Beam, on which you guys did an amazing research job, makes for a very unique and unexpected finish. All in all this is the fastest glitched SM run, and clearly more entertaining than the X-Ray one, so it's obviously a yes vote. I agree though that the latter should keep it's own category, due to its unique glitched low% completion.
See my perfect 100% movie-walkthroughs of the best RPG games on http://www.freewebs.com/saturnsmovies/index.htm Current TAS project (with new videos): Super Metroid Redesign, any% speedrun
Joined: 7/2/2007
Posts: 3960
Garrison wrote:
Also the idea of forcing the TASers into making it into a "rickroll" is dismissive, insulting, and not even possible with the tools available.
I once got tricked into downloading an SNES ROM that implemented a rickroll. Admittedly a fairly low-res one, and the music was MIDIfied, but it was recognizable. As for making that the end of an arbitrary-code-execution TAS, I'd be more interested in seeing something like turning Samus into NES Samus in sprite and physics.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Joined: 10/1/2013
Posts: 98
Location: My Basement
The end was amazing, but the journey there was yawn-inducing. Meh.
nesrocks
He/Him
Player (246)
Joined: 5/1/2004
Posts: 4096
Location: Rio, Brazil
Run run run run run run glitch run glitch glitch GLITCH GLITCH GLIIIIIIITTTTTTTTTTTTTT BOOOOOOOOOOOOOOOOOOOOOMMMMMMMMM!!!!!!!!!!!!!!!! yes vote
Joined: 5/14/2007
Posts: 525
Location: Pisces-Cetus filament
SmashManiac wrote:
This whole debate about the GT Code is ridiculous. Some people will consider it OK and some other people won't and there's no way to convince everybody to go on the same side since the whole debate is based on imprecise definitions and opinions. The only way to go that makes sense is to publish this run in a separate category in order to please both groups.
Garrison wrote:
the realtime Super Metroid community has divorced runs that use GT Code into its own categories ... so one would assume that the TAS community would do the same.
This.
feos wrote:
Radiant wrote:
I don't think there's a meaningful difference between a "debug code" and a "cheat code". Both are basically there to make testing the game easier in development, and neither is a part of normal gameplay.
This.
That is a really weak argument because we have hundreds of published movies featuring heavy glitches that aren't part of normal gameplay.
feos wrote:
Dooty in the DKC2 thread wrote:
PizzaBoy wrote:
This run uses a trick that is erroneously called in-game cheat to collect all 75 Kremkoins on Pirate Panic.
Just curious, but what do you mean by this? Is it not a cheat?
All cheats on this game are performed in the character select screen, pressing down a lot of times (I think it's twelve times?), so this is more like a shortcut to play the Lost World when you don't want to worry about the bonus rooms.
Also that. If it's also achieved by glitching the game into using the possibilities hidden under cheats, it's OK. Calling them directly as they were intended to be called by developers (debug codes) or players (cheat codes) is not OK.
If the discussion in this very thread has proven anything, it's that that's debatable.
Floogal wrote:
Tub wrote:
About the GT code: When we reach the point of arbitrary code execution, all gloves are off, and I don't think it's important to keep restrictions such as "play on hardest difficulty", "don't use cheat codes" and similar. Those rules were made to keep the gameplay interesting, but this run isn't really about the gameplay, is it?
Just wanted to pop in to say that I completely agree with Tub, and that I would support this as a general rule for all game runs that execute arbitrary code.
I disagree. When arbitrary code is executed in a TAS to trigger the ending of a game early with the intention of finishing it as fast as possible, the gameplay up to that point is meaningful and should be as interesting as possible.
ALAKTORN wrote:
Garrison wrote:
the realtime Super Metroid community has divorced runs that use GT Code into its own categories as well for the exact same reasons, so one would assume that the TAS community would do the same.
I guess we could have a “GT code” and a “non GT code” branch or whatever, but if we accept the GT code run first, then no one will want to TAS the slower non GT code run…s
Who are you to say that there won't be anyone interested in working on such run? Can you see into the future? Edited: Fixed a typo.
AzumaK wrote: I swear my 1 year old daughter's favorite TASVideo is your R4MI run :3 xxNKxx wrote: ok thanks handsome feos :D Help improving TASVideos!
Editor, Player (44)
Joined: 7/11/2010
Posts: 1029
OK, so I'm one of the few people who wasn't entertained, and I voted No. (Just finished watching it.) If this were the fastest way to complete the game, I'd be interested just on that metric. This run, however, doesn't complete the game, because it uses a cheat code. (IIRC last time this came up, someone looked into the code, and confirmed that it looked entirely intentional.) I don't believe there's a difference between cheat and debug codes; they're basically the same thing, given that the purpose of most cheat codes is for testing the game, and then those codes are left in the game for players to discover. The code in Super Metroid wasn't discovered for ages, but the same is true of many other cheat codes in games, too. (WRT the comparisons with Earthbound, IMO this is worse than Earthbound. Using memory corruption to access a debug feature is different from just using the debug feature outright. To give a parallel with NetHack, the game I'm most experienced with: in NetHack, you can't complete the game in debug mode; I'd consider it legitimate to use memory corruption to access debug mode, use it to teleport to the end of the game, then to turn it back off and win, but not to start the game in debug mode and then use total control to turn it off before ending the game. The difference is that in one version, you're using controls that aren't part of the game; in the other, you're using control that are part of the game to access some pre-existing code that happens to do what you want.) Total control is something I find interesting. Using a cheat code along the way to gaining it, though, is less interesting; I know that when I develop games, I care less about making debug features stable/reliable than the game itself. (NetHack even has a debug feature to crash the game, for instance, and it's easy to cause internally inconsistent states using it.) In this case, though, the cheat code isn't connected to the total control, which means that there's an easy way to "fix" the total control in this case; simply don't use the cheat code, instead gathering the required components manually. As for the run up to that point, it defeats everything I find interesting about Super Metroid. It reminds me most of the RBO run (you're trying to reach Lower Norfair first), but it doesn't have the routing challenges of RBO, because it's using a glitch to substitute for the energy tanks. Instead, what does it do? It gets the Super Missiles that most categories get, the Power Bombs that most categories get, and about the only thing nonstandard about the route (apart from going to Lower Norfair first, and even that's done along what IIRC is a relatively common route for reaching Lower Norfair) is that skips the Charge Beam (and it only gets to do that because of the cheat code; the Charge Beam is an item that is required to perform the total control glitch). The pause glitch and the total control itself are the only things I see in the run that are different from the other categories. (Also, the duplicating of Super Missiles with the Space-Time Beam is amusing, but disappointing in that it means that the route doesn't have to go find Super Missile packs that might be different from the usual ones.) This disappoints me so much compared to how a total control run that didn't use the cheat code. Total control is a worthy goal in any game, IMO, even if it's slower than a glitched-any% or even no-large-skips any% completion (although in this case, I think it's uncontroversially faster than no-large-skips). The route would IMO be rather more interesting than this one, too; given that the Space-Time beam allows duplication of pickups, the category for the non-glitched part of the run is "obtain the Charge, Ice, and Plasma Beams, and the Spazer, as quickly as possible", and those are scattered to diverse corners of the map. Aiming to get some items, while not caring about others, is often interesting in games (see Metroid Prime 2 low%, for instance). I'm not an expert on Super Metroid, but I did look up a guide someone else has written about how to get certain items as early as possible without regards for others, and it contains interesting advice along the lines of "getting the Ice Beam after the Super Missiles is possible, but very tight on energy". In fact, quite possibly such a run would use both the pause glitch (if it turns out to be the fastest way to get an early Ice Beam), and the X-Ray glitch (if that turns out to be the fastest way to get the Plasma Beam). Pretty much the main issue is just to do with whether the Plasma Beam is so far away that the run would end up too close to standard as a result (The guides I'm reading say that it requires defeating Draygon but not Phantoon, which would be interesting, but it'd be disappointing if it turns out to be nonetheless faster to get the Gravity Suit like normal. l'm optimistic, though, because Phantoon is such a long boss.) So in other words: this run is too similar to the standard runs for me to start with, then it uses a new glitch which is interesting but outstays its welcome a bit and makes the routing less interesting, then it cheats (meaning it doesn't even complete the game), and then it gets total control. This is so disappointing when it could have been so much more.
Player (26)
Joined: 8/29/2011
Posts: 1206
Location: Amsterdam
Zeupar wrote:
feos wrote:
Radiant wrote:
I don't think there's a meaningful difference between a "debug code" and a "cheat code". Both are basically there to make testing the game easier in development, and neither is a part of normal gameplay.
This.
That is a really weak argument because we have hundreds of published movies featuring heavy glitches that aren't part of normal gameplay.
The context is that (a) we all know that using cheat codes is against site rules, but (b) some people argue that using debug codes is fine because debug codes are somehow different from cheat codes. I do not believe there is a meaningful difference. So in my opinion: if you want to argue that this run uses a cheat code but we should make an exception, you may have a point and we should discuss that. If instead you want to argue that what this run uses is, because of some bureaucratic technicality, not a cheat code, then I'd call that a really weak argument.
Joined: 7/2/2007
Posts: 3960
Ehh, I'm inclined to say that the "arbitrary code execution" TASes should be limited only in that they must accomplish everything via controller input. Everything else is fair game. I really do think they're on a different level compared to the rest of the site.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Player (150)
Joined: 11/27/2004
Posts: 688
Location: WA State, USA
Radiant wrote:
The context is that (a) we all know that using cheat codes is against site rules, but (b) some people argue that using debug codes is fine because debug codes are somehow different from cheat codes. I do not believe there is a meaningful difference.
I think in part the justification for using the GT Code is the fact that its very inclusion in the game (ie the final product) was accidental, meaning that it should have been removed in the development process but wasn't, thus making it a programming oversight worth exploiting. The fact that it initially forces Samus into a state with an invalid beam combination (all five beams equipped) that would crash the game and activates a couple specific unused equipment bits (iirc) is evidence that it was a testing mechanism from a non-trivially earlier stage in development, and not something that was meant to assist the end consumer in any way. But really in the end my justification is that resulting TAS is very novel and quite entertaining.
Nach wrote:
I also used to wake up every morning, open my curtains, and see the twin towers. And then one day, wasn't able to anymore, I'll never forget that.
adelikat
He/Him
Emulator Coder, Site Developer, Site Owner, Expert player (3573)
Joined: 11/3/2004
Posts: 4754
Location: Tennessee
Derakon wrote:
Ehh, I'm inclined to say that the "arbitrary code execution" TASes should be limited only in that they must accomplish everything via controller input. Everything else is fair game. I really do think they're on a different level compared to the rest of the site.
That's a good point, and I think I agree.
It's hard to look this good. My TAS projects
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11478
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
That's weird how people defend use of GT code and don't suggest any fixes to the rules. Guys, on what grounds should we allow it? If the rules are wrong, and some cheat/debug codes must be allowed that yet aren't, post suggestions how to account for that. Otherwise it's just ignoring the rules and going nowhere. EDIT: Personally, I would vote for this one obsoleting the current glitched any% just by entertainment alone, even if speed differences are irrelevant with so different conditions. But I don't have a perfect solution for the debug code issue.
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: 5/14/2007
Posts: 525
Location: Pisces-Cetus filament
Radiant wrote:
Zeupar wrote:
feos wrote:
Radiant wrote:
I don't think there's a meaningful difference between a "debug code" and a "cheat code". Both are basically there to make testing the game easier in development, and neither is a part of normal gameplay.
This.
That is a really weak argument because we have hundreds of published movies featuring heavy glitches that aren't part of normal gameplay.
The context is that (a) we all know that using cheat codes is against site rules, but (b) some people argue that using debug codes is fine because debug codes are somehow different from cheat codes. I do not believe there is a meaningful difference. So in my opinion: if you want to argue that this run uses a cheat code but we should make an exception, you may have a point and we should discuss that. If instead you want to argue that what this run uses is, because of some bureaucratic technicality, not a cheat code, then I'd call that a really weak argument.
I was referring to feos' argument, though I probably didn't make that clear enough. The part of his post I quoted in which he bolded and supported a part of your reasoning implies that he argues one of two things (or both): a) That debug codes not being part of normal gameplay is a good reason to not use them. b) That debug codes not being part of normal gameplay is the main point that proves that they are equivalent to cheat codes. Both are really weak arguments.
adelikat wrote:
Derakon wrote:
Ehh, I'm inclined to say that the "arbitrary code execution" TASes should be limited only in that they must accomplish everything via controller input. Everything else is fair game. I really do think they're on a different level compared to the rest of the site.
That's a good point, and I think I agree.
That's worrying. Do you really think TASes in which arbitrary code is executed to trigger the ending of a game early with the intention of finishing it as fast as possible shouldn't be limited by these rules? While I think this particular movie should be published as a separate branch (Gold Torizo Code) as an exception to one of those rules, I would be strongly against them not applying to TASes that execute arbitrary code as part of the process of completing a game as fast as possible, for the reason I stated in my previous post.
feos wrote:
That's weird how people defend use of GT code and don't suggest any fixes to the rules. Guys, on what grounds should we allow it? If the rules are wrong, and some cheat/debug codes must be allowed that yet aren't, post suggestions how to account for that. Otherwise it's just ignoring the rules and going nowhere.
It's not weird because the rules don't need any fixes to publish this run. There are several published movies that are exceptions to the movie rules. This would just be a new exception.
feos wrote:
Guys, on what grounds should we allow it?
The final product being entertaining, as several people have argued within this topic.
feos wrote:
Personally, I would vote for this one obsoleting the current glitched any% just by entertainment alone, even if speed differences are irrelevant with so different conditions. But I don't have a perfect solution for the debug code issue.
That is a very bad idea for the reasons stated by moozooh in his first post in this topic. Publishing this movie as a separate branch is the perfect solution you are looking for.
AzumaK wrote: I swear my 1 year old daughter's favorite TASVideo is your R4MI run :3 xxNKxx wrote: ok thanks handsome feos :D Help improving TASVideos!
Banned User
Joined: 3/10/2004
Posts: 7698
Location: Finland
ais523 wrote:
So in other words: this run is too similar to the standard runs for me to start with
I don't like at all how this run completes the game, but I have to object to that particular point. While the beginning is obviously the same as other runs, this is pretty much by necessity. However, by the end it becomes completely different (completely different route, different techniques), so I think this particular part of your objection is not valid. However, I like your notion that the run jumping to an end routine via arbitrary code execution isn't actually completing the game. I think there's merit in that idea. (It's a big like if arbitrary code execution were to be used to show the "game over" screen of a game. Ok, it showed the screen, but it didn't really complete the game, did it?)
Former player
Joined: 2/19/2007
Posts: 424
Location: UK
Wow, that's a long and well-argued post, ais523! I agree with some of what you say: It would be more satisfying not to have the GT code as a prerequisite, and I think a non-GT version of this TAS would be very interesting to see. I definitely think such a TAS should be made. But I also think the current version has merit:
  • This is the no holds barred, fastest known way to reach Super Metroid's end state. That is, if we had an imagninary infinitely fast computer and used that to brute force the shortest input sequence that reaches the ending, then as far as we know, it would end up with this strategy. All the other categories are formed by adding restrictions to this one.
  • We have had a lot of discussion about which controller inputs constitute cheating, and which do not. I think this is putting things in the wrong terms. There isn't any absolute cheating or not cheating. What matters is whether you achieve the category's goals or not. Just like using a bicycle would be cheating in a footrace, it is fully allowed in a bicycle race. Similarly, using, say, the Konami code would be no problem as long as the category allows it. So the debate should instead be over the questions
    • Does the any% category allow any and all tricks?
    • Does it allow the GT code in particular?
    • If not, is this TAS entertaining enough to be published in a category that does allow it?
    I think that having certain implicit restrictions in the any% category makes sense, but lately the majority opinion seems to have shifted to "any% should be the absolutely, objectively fastest possible completion". But in any case, the response to this movie is positive enough that it's hard to see how it could not qualify for a moon, and hence be published in a category that does allow the GT code.
  • GT code is a category in unassisted speedruns, and these can now beat the current X-ray TAS route. I think most viewers who saw that would wonder how fast such a speedrun could be done with tools, and this video answers that question.
On a side note, I do not agree that this TAS is too similar to existing ones - in fact, I think this is the one that stands out as most different from the others. Due to showcasing one new and two rarely seen glitches while going woefully unprepared to the most hostile environment in the game. But this is simply due to giving different weights to different things, I guess. Though as I said, I'd really like to see a no-GT charged spacetime be published too. But that would be in a slower category than the current TAS.
Tub
Joined: 6/25/2005
Posts: 1377
ais523 wrote:
(IIRC last time this came up, someone looked into the code, and confirmed that it looked entirely intentional.) I don't believe there's a difference between cheat and debug codes; they're basically the same thing, given that the purpose of most cheat codes is for testing the game, and then those codes are left in the game for players to discover.
Not quite. It was certainly a code that was intentionally put in for debugging. The code is very straightforward, it's not a weird side-effect of a bug or something. But it was not meant for players to discover. Because if you use it without extensive knowledge of the code, it crashes the game. The fact that it remains accessible is an oversight from the developers, i.e. a bug.
feos wrote:
That's weird how people defend use of GT code and don't suggest any fixes to the rules.
Mostly because no fixes are required. http://tasvideos.org/MovieRules.html
Cheats, debugging codes, and arcade continues are not allowed [..] These rules are not strict, but are motivated by the same concept as the guideline that says you should play on the hardest difficulty. [..]
Since this code allows a route that's more difficult than the GT-less run would be, I'd say that this case is already covered in the rules; we just need to agree whether the exception applies here or not. But several people have suggested or agreed on the suggestions to keep ACE runs in separate categories, but to remove any restricting rules from these categories.
m00
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11478
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
I consider all my questions solved now. Exceptions are allowed case-by-case, this is such a case, DKC2 and Earthbound are such cases.
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.