(Link to video)
Submission Text Full Submission Page
This TAS of Pokémon Yellow resets while saving to screw up some memory so that it can complete the game as fast as possible. Now faster than the previous submission by 35 frames (about ~0.5 second).

Game objectives

  • Emulator used: BizHawk v1.4.1
  • Heavy glitch abuse
  • Corrupts save data

How we beat the game

Normally, when resetting the game while saving it will say that the save file is corrupted. If you reset at the perfect time it will let you load the game which has corrupted RAM. The game fills every address starting from $D162 to $D2F5 with 0xFF which will make the game think you have 255 Pokemon. Since the game only has place for 6 Pokemon, it will overwrite other addresses when you switch Pokemon beyond the 6th spot.
Previously, TASes would overwrite $D35D with a value (usually 0x76 or 0xD0) that loads bank 0x16, and puts 0x6401 (01 64) at $D36D to load the code for the Hall of Fame.
This TAS overwrites $D35D with 0xF8, loading bank 0x3C where some Hall of Fame data is, and puts 0x50F1 (F1 50) at $D36D to enter the credits routine at address 0x50F1.
The choice of 0x50F1 is motivated by the fact that both bytes occur as character values in name strings. Thus, by naming Rival as AJS× (that's a times symbol there), we get the string 80 89 92 F1 50 at $D349, and we can easily switch F1 50 over to $D36D with some Pokemon switches.
To get 0xF8 to $D35D, we enable the item menu by switching memory so that the item quantity is 255, and then throw away 8 of the 5th item so $D326 becomes 0xF8. We can then switch it over to $D35D.
(Since we used the values from the rival name and creating fitting values by tossing items, we no longer have to luck manipulate the Trainer ID which saves frames)
The resulting jump into the credits routine results in a glitched mess of the credits screen, mostly with "THE END" in it. So, enjoy.
  • Names the rival AJS× (that's a times symbol there). Memory at $D34C-D is F1 50.
  • Resets while saving at the right time to corrupt memory.
  • Loads corrupted save file. Number of Pokemon is now 255.
  • Switches 7th Pokemon with 10th. Number of items is now 255.
  • Goes to items and dumps 8 of the 5th item. $D326 is now 0xF8.
  • Switches 14th Pokemon with 22nd. $D34C-D is switched to $D3A4-5 so now $D3A4-5 is F1 50.
  • Switches 22nd Pokemon with 17th. $D3A4-5 is switched to $D36D-E so now $D36D-E is F1 50. In addition, $D326 is switched to $D35D so now $D35D is 0xF8.
  • Leave the Pokemon menu. Since the map is F8, the game loads ROM bank 3C. It reads 0x50F1 from the map pointer and thinks that it is a valid address and so executes the address, which is in the middle of the credits routine.

Other strategies we tested

  • We tried to manipulate the 0xF8 (which we created here by tossing items) with the Trainer ID, because switching items is faster than tossing them. Unfortunately that takes one pokemon switch more and the glitched items take long to load. So assuming the luck manipulation would take +0 frames it is 93 frames slower than this run.
  • Jumping to bank 0x18 and to address $4F55 executes the HoF routine as soon as you close the menu. That is because it calls address $3EB4, which is a function pointer so it depends on A which function it will execute. To execute the HoF routine A has to be 0x55. A will be the low byte of the address it jumped to (in this case we jumped to $4F55 so low byte is 0x55). At every $3EB4 call there is a LD A,#?? right before it, which means he loads the value 0x?? into A. So we have to find a $3EB4 call that is at address $xx55, but there is no. The good thing however is that in bank 0x18 starting from address $4F54 it is: 3E 15 CD B4 3E which means LD A,#15 : CALL $3EB4. We jump to $4F55 and the game thinks the 0x15 is an instruction, so it executes DEC D : CALL $3EB4 which doesn't change A so the HoF is executed. Unfortunately we can't manipulate the jump to $4F55 with the name of the rival and other ways of manipulating turn out to be slower.

Thanks

Thanks to p4wn3r and gia, for their previous runs as well as all the research they did to dissect the game.

Screenshots


feos: This was a great try. I'm proud of the effort put into disassembling this game. Unfortunately, this run does not complete/beat the game. It leaves it in an infinite loop somewhere during the THE END drawing event. The game then does not react on the B button that normally resets it after the ending, and the save that is normally created after you beat the game is not being made here. The game does not come into the finished state and does not proceed as it was finished. See these posts for more information. Rejecting.

Active player (306)
Joined: 8/21/2012
Posts: 429
Location: France
I'll vote yes for entertainment anyway, but it's another interesting case. I'll try to summarize what happens, correct me if I'm wrong. First, it doesn't just display a picture ("THE END") taken from the rom. The run manages to jump somewhere in the ending routine, so it ends up in a state that can only be reached by finishing the game when playing normally... But, due to the glitching to jump there, everything is not set up correctly, resulting in a loop (and with glitched graphics, sound, etc...). I'd say that this run reaches the end, but not the end of the end, and skips the beginning of the end ^^ *dizzy* Good luck feos for judging this one ;)
Masterjun
He/Him
Site Developer, Skilled player (1970)
Joined: 10/12/2010
Posts: 1179
Location: Germany
right after you see this pokemon, the game saves, and if you reset you see this. I hope this makes the ending valid :)
Warning: Might glitch to credits I will finish this ACE soon as possible (or will I?)
Invariel
He/Him
Editor, Site Developer, Player (169)
Joined: 8/11/2011
Posts: 539
Location: Toronto, Ontario
I voted yes to this because it aligns with my assumptions of 'game completion' means for Pokemon Yellow. I had a long blurb about whether or not this constitutes the end of the game all prepped and ready, but Masterjun clinched everything by demonstrating that at a certain point, the game save happens and all's well with the world. (Still want to write that blurb though; I should track down that thread about 'what constitutes game end?'.)
I am still the wizard that did it. "On my business card, I am a corporate president. In my mind, I am a game developer. But in my heart, I am a gamer." -- Satoru Iwata <scrimpy> at least I now know where every map, energy and save room in this game is
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
Masterjun wrote:
right after you see this pokemon, the game saves, and if you reset you see this. I hope this makes the ending valid :)
It raises the question: If someone succeeded in making a TAS of this game that only makes the game create the endgame save, but otherwise does not visually do anything to indicate that the game has actually ended, would it still count? Also: How corrupted can that save file be before it's considered not a valid endgame save? (One cannot help but wonder at which point "completing the game" changed from "playing through the game" to "execute some routine that's run when the game ends"? This is not playing the game anymore, and it kind of defeats the idea of speedrunning, which should be about playing the game with incredible reflexes.)
Invariel
He/Him
Editor, Site Developer, Player (169)
Joined: 8/11/2011
Posts: 539
Location: Toronto, Ontario
Warp, I believe that your question is exactly why there are glitched and non-glitched branches of games. I don't disagree that this feels like definition-fudging, but the only way the game knows it has been beaten is with those flags set and that state being saved. How is it different to convince the game that you have beaten it or to convince the game that you are suddenly in a different room when both results come from effectively the same tactics? How is it different than abusing a programming glitch to equip things you don't have on characters that can't use them? (Final Fantasy remake on the PSP.) I think this glitched run fulfills all of the requirements of "beating" the game, because it is able to convince the game (and not the viewer) that the game has been beaten.
I am still the wizard that did it. "On my business card, I am a corporate president. In my mind, I am a game developer. But in my heart, I am a gamer." -- Satoru Iwata <scrimpy> at least I now know where every map, energy and save room in this game is
Joined: 5/2/2006
Posts: 1020
Location: Boulder, CO
Not to confuse the matter worse, but does anyone remember the controversy surrounding a run (by FODA possibly?) that "beat" SMB1(J) using the minus world, which (invisibly) set a flag that is usually associated with beating the game. The problem was that setting this flag without any of the visuals that would normally come with it made the run feel incomplete. I kinda think it sets a bad precedent to accept that a game is beaten based on some internal value, and not something more visible. None the less, voting yes. Note sure what the correct criteria is for "complete" here, but this feels like it passes to me.
Has never colored a dinosaur.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
Invariel wrote:
How is it different to convince the game that you have beaten it or to convince the game that you are suddenly in a different room when both results come from effectively the same tactics?
We have to remember that we are making TASes for viewers, not for the games. If the "game completion" is completely nondescript to the viewer, basically indistinguishable from randomness, does it even matter if certain bits are turned on or off inside the game's data that indicate the game ending from the game's own perspective? (What I'm trying to say is that completing the game from the game's own perspective should be a minimum requirement, of course, but should it also be a sufficient requirement, or should there be something else as well?)
Invariel
He/Him
Editor, Site Developer, Player (169)
Joined: 8/11/2011
Posts: 539
Location: Toronto, Ontario
This one, Twelvepack? http://tasvideos.org/forum/viewtopic.php?t=4608 Warp, I am exclusively a viewer (which saddens me, Nobunaga's Ambition 2 calls to me, begging to be TAS'd), and it's difficult for me to forget that the point is to beat the game "as quickly as possible" while also entertaining. However, to that effect, it's not a 50/50 split. It's not "be entertaining while I beat the game" or "beat the game eventually, but make a good show of it". It's heavily weighted toward "beating the game", and less so toward "being entertaining". Does this run entertain me? As a programmer, it does. Seeing the game be beaten by moving memory around and affecting registers gets all the happy places of my heart working together. More importantly, does it beat the game? Because the only way that the game knows it has been beaten is via internal flags (as noted, it saves correctly and allows continued play with those flags set) I have to say that 'yes', it does beat the game. So, to me, the run beats the game, and entertains. That may not be so for everyone, and again, I feel I must point out that this is the glitched branch of things, but to me, the goals of the site, via the goals of the game, have been met. As to whether flipping the appropriate flags are necessary and sufficient to warrant game completion, I would also argue that they are necessary to game completion and not necessarily sufficient, and that sufficiency should be judged by the branch the run is being submitted to. (You can't complete the game without toggling the flags, but you should also see some sort of in-game confirmation that the flags have been set in the first place.)
I am still the wizard that did it. "On my business card, I am a corporate president. In my mind, I am a game developer. But in my heart, I am a gamer." -- Satoru Iwata <scrimpy> at least I now know where every map, energy and save room in this game is
Joined: 3/9/2009
Posts: 530
Twelvepack wrote:
Not to confuse the matter worse, but does anyone remember the controversy surrounding a run (by FODA possibly?) that "beat" SMB1(J) using the minus world, which (invisibly) set a flag that is usually associated with beating the game. The problem was that setting this flag without any of the visuals that would normally come with it made the run feel incomplete. I kinda think it sets a bad precedent to accept that a game is beaten based on some internal value, and not something more visible. None the less, voting yes. Note sure what the correct criteria is for "complete" here, but this feels like it passes to me.
This is pretty much why I voted no. To me, it fails to pass the smell test of whether it actually looks in any way shape or form like the ending, especially with the infinite loop preventing the ending itself from completing. The previous glitched run jumps to a point everyone easily recognizes as the ending sequence. This does not. It appears on the outside to be stuck in an infinite loop that only happens to include the "The End" image. Jumping into the middle of the ending sequence and then the ending running to conclusion, okay. But I think it should actually execute (at least part of) the ending sequence in at least a way that a regular viewer would believe it to be the game's ending.
Joined: 5/2/2006
Posts: 1020
Location: Boulder, CO
Invariel wrote:
This one, Twelvepack? http://tasvideos.org/forum/viewtopic.php?t=4608
Yes. Apologies to Phil for my incorrect attribution.
Has never colored a dinosaur.
Joined: 5/14/2007
Posts: 525
Location: Pisces-Cetus filament
Masterjun wrote:
right after you see this pokemon, the game saves
^Cirno was here. I think that would make a pretty interesting publication screenshot.
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!
ventuz
He/Him
Player (123)
Joined: 10/4/2004
Posts: 940
huh? http://www.labzerogames.com/3rdcharacter/ scroll down to Aeon character, Gameplay Inspiration
MESHUGGAH
Other
Skilled player (1889)
Joined: 11/14/2009
Posts: 1349
Location: 𝔐𝔞𝔤𝑦𝔞𝔯
Masterjun wrote:
right after you see this pokemon, the game saves, and if you reset you see this. I hope this makes the ending valid :)
I did the very same test when I casted my vote and people still bitching about the ending. Why everyone is so skeptic and super intelligent when they can't press one button (maybe 2 if you use a mouse)? please make a memory corruption rule so I don't need to read these posts
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
Former player
Joined: 3/27/2010
Posts: 270
MESHUGGAH wrote:
Masterjun wrote:
right after you see this pokemon, the game saves, and if you reset you see this. I hope this makes the ending valid :)
I did the very same test when I casted my vote and people still bitching about the ending. Why everyone is so skeptic and super intelligent when they can't press one button (maybe 2 if you use a mouse)? please make a memory corruption rule so I don't need to read these posts
Technically speaking, from a pokemon standpoint at least... The games usually end after beating the champion, going through the doors to hall of fame, hall of fame scene, and then the credits play. It's a normal in memory corruption runs to skip the champion part and still activate the hall of fame (at which the input could have generally done ended already I believe??). This run does activate a rather glitched version of the hall of fame, presumably from having no unglitched pokemon(?). It's interesting yes, does it complete the game? ... Kind of. Does it actually get you from Point A (start of game) to end of game (Point B) ... No. It does not even show the credits if the encode is all that is within this movie. Unfortunately, from saying that.. I would say this movie technically fails to even beat the game as it does not show the credits at all. Play around tases are exceptions of course, but this isn't one. Hard decision from a judge pov but this would be my case if I was one. :/
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Torn338 wrote:
Unfortunately, from saying that.. I would say this movie technically fails to even beat the game as it does not show the credits at all. Play around tases are exceptions of course, but this isn't one. Hard decision from a judge pov but this would be my case if I was one. :/
Funny thing you mentioned that. In the Spongebob Movie run, I totally skipped the credits or else the game would be stuck at the password screen. In the glitched SMW run, there isn't even a credit roll. And in the blob and his boy run, the boy actually runs past the credits somewhere in the middle of the run, yet the game hasn't end yet. So in regards to games with credits, it's not exactly a reliable way to determine when to end input.
Active player (266)
Joined: 9/14/2011
Posts: 349
ventuz wrote:
huh? http://www.labzerogames.com/3rdcharacter/ scroll down to Aeon character, Gameplay Inspiration
Gameplay Inspiration ZSNES, Braid, Snapshot, Dio Brando (Jojo’s Bizarre Adventure), Sakuya (Tohou series), Double (Skullgirls), Time-Space Beam glitch (Super Metroid), Omega Tom Hanks (MUGEN), Gameboy Pokemon Yellow TASes (TASVideos.org), Hounds of Tindalos (Lovecraft), Prince of Persia: The Sands of Time, Super Time Force
It's undreamed someone in Skullgirls developing team knows here. Aeon's ability does have a common feature with TAS(rewinding time, slowdown, ...), along with Braid and Prince of Persia(which are also on list). Very obscure ending, by the way.
Editor, Player (44)
Joined: 7/11/2010
Posts: 1022
Masterjun wrote:
right after you see this pokemon, the game saves, and if you reset you see this. I hope this makes the ending valid :)
Hmm, what interests me is the other details of that save file. (Pokédex 152 is impossible in normal play, but a common side effect of the glitch used; badges 5 is interesting, and one less than is normally possible without memory corruption; but I suspect what people are interested in is whether Unknown Dungeon is unlocked, which may be nontrivial to work out.)
Spikestuff
They/Them
Editor, Publisher, Expert player (2292)
Joined: 10/12/2011
Posts: 6337
Location: The land down under.
There is only one screenshot I like up there and since Gengar gets shown much MUCH later...
WebNations/Sabih wrote:
+fsvgm777 never censoring anything.
Disables Comments and Ratings for the YouTube account. Something better for yourself and also others.
Player (12)
Joined: 6/17/2006
Posts: 501
MESHUGGAH wrote:
Masterjun wrote:
right after you see this pokemon, the game saves, and if you reset you see this. I hope this makes the ending valid :)
I did the very same test when I casted my vote and people still bitching about the ending. Why everyone is so skeptic and super intelligent when they can't press one button (maybe 2 if you use a mouse)? please make a memory corruption rule so I don't need to read these posts
Personally I only have access to encodes, hence why I can't check the save data. Good to know the game saves. Also, I'm going back on previous opinion, since I forgot to consider the contents of the save data: the completed game flag in the save data appears to me to be a perfect and self-sufficient criteria to determine if the game was beaten, so considering this I'd classify this run as valid even if the end of the credits doesn't happen. I agree that a memory corruption rule would be great; this situation will happen more and more often in the future.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
SmashManiac wrote:
Good to know the game saves. Also, I'm going back on previous opinion, since I forgot to consider the contents of the save data: the completed game flag in the save data appears to me to be a perfect and self-sufficient criteria to determine if the game was beaten, so considering this I'd classify this run as valid even if the end of the credits doesn't happen.
Even though the game enters in an infinite loop, making it impossible to fully finish, return to the main menu and continue with the saved game?
Experienced player (758)
Joined: 6/17/2008
Posts: 146
Warp wrote:
SmashManiac wrote:
Good to know the game saves. Also, I'm going back on previous opinion, since I forgot to consider the contents of the save data: the completed game flag in the save data appears to me to be a perfect and self-sufficient criteria to determine if the game was beaten, so considering this I'd classify this run as valid even if the end of the credits doesn't happen.
Even though the game enters in an infinite loop, making it impossible to fully finish, return to the main menu and continue with the saved game?
You can power cycle the console to get back to the title screen and continue with the saved game. IIRC this is how a regular non-glitched completition in RBY works, too - to proceed from the "THE END" screen to continue your save, you need to either soft reset or cycle power.
Player (42)
Joined: 12/27/2008
Posts: 873
Location: Germany
Here I am, risen from the darkness! \o/ Nice run, Masterjun and Fractal, you've done a very nice job reverse engineering the game to find the routine that prints the credits. I didn't try this approach some months before because it was a strange ending, if you override the map script pointer with that address the game just prints the credits, technically you're still in your room, and of course since the map script function executes forever, the credits get in an infinite loop. And it looks like you called the middle of the routine, resulting in a garbled mess. I really don't know what to do with this run, this game's become a complete mess already. EDIT: To clarify, ending through normal gameplay goes like this: 1 - Ash enters Hall of Fame 2 - Hall of Fame script is called, makes Ash move, talk to Oak and calls ending sequence. 3 - Ending sequence prints the credits 4 - Ending sequence returns and game waits for reset. The previous run starts the ending from step 2, it calls the HoF routine and from there it proceeds normally. This run instead starts from step 3, it (clumsily) calls the ending routine, and the game never waits for a reset in step 4, the credits are called again and again, because that's how map script routines work. Do I think the ending is invalid because it doesn't follow that sequence? Absolutely no, if that was the case a run that simply goes to the "wait for reset" phase is a valid ending. I think it's subjective whether the credits, or the data saving, or the normal gameplay sequence is the most important.
Joined: 2/16/2005
Posts: 462
@Warp We already have a precedent of using a "glitched" branch for a run that completes the game while with glitches that circumvent the central goal of the game. Typically that branch is used for memory corruption or major OOB abuse. These put the game into a completed state but the game doesn't feel 'beaten' since the central goal was circumvented instead of conquered. That "glitched" branch basically serves as a warning to viewers that they may not find the game to be 'beaten' once it has been 'completed'. I think publishing this run under the 'glitched' branch is appropriate.
This signature is much better than its previous version.
Noxxa
They/Them
Moderator, Expert player (4139)
Joined: 8/14/2009
Posts: 4083
Location: The Netherlands
"glitched" would imply the other run isn't horribly broken. That does not really work here.
http://www.youtube.com/Noxxa <dwangoAC> This is a TAS (...). Not suitable for all audiences. May cause undesirable side-effects. May contain emulator abuse. Emulator may be abusive. This product contains glitches known to the state of California to cause egg defects. <Masterjun> I'm just a guy arranging bits in a sequence which could potentially amuse other people looking at these bits <adelikat> In Oregon Trail, I sacrificed my own family to save time. In Star trek, I killed helpless comrades in escape pods to save time. Here, I kill my allies to save time. I think I need help.
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
asteron wrote:
That "glitched" branch basically serves as a warning to viewers that they may not find the game to be 'beaten' once it has been 'completed'.
I love that pun!
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.