(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.

Editor, Skilled player (1938)
Joined: 6/15/2005
Posts: 3246
Anyway, my opinion. I don't really care much about this TAS because it has very little worth to me (Masterjun did all the work creating it in BizHawk; I was only there to advise him on how to pull off the jump to the credits routine using just name characters). Besides, this TAS only affirms what everyone already knows; the Pokemon Yellow warped branch is absurd to the point of having lost any semblance of meaning in its existence. Chances are that a branch has ended up this way if there are philosophical arguments over what warrants game completion. Glitches have a way of dissolving the integrity of a game/TAS. The issue cannot be simplified to just "memory-corruption glitches" vs. "lesser game-breaking glitches" vs. "casual/benign glitches", since glitches come with a spectrum of effects. So I submitted this partly to show how broken Pokemon Yellow warped can be. Masterjun also wanted it submitted really quickly after I explained the new method, so it was because of him too. Also, I wanted to get the BizHawk "non-improvement" out of the way. Oh, and sorry about the short encodes. Because of what I said three sentences up, we had to rush the encodes, so they may be lacking in a few areas.
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'.
To me, it is the other way around; viewers may not find the game to be "completed" (the TASes warp right to the end so one may feel that something is missing) once it has been "beaten" (the TASes break the game so badly).
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
First, the game doesn't react on the B button during the ending screen after this movie, while it does after the previous published TAS. Second, as I reset and select Continue, I see this (VBA/BizHawk): http://higgs.rghost.ru/45165815/image.png Doesn't look like something was completed/beaten in BizHawk a few minutes ago, right? Will read the thread carefully now. EDIT: Masterjun feos: what I found out was that the save doesn't actually happen, it just happened that I accidentaly had the save from the other movie still in bizhawk (no idea how that happened) Masterjun feos: BUT what happens is that the game TRIES to save, but fails feos the case with this run is the same as this: you can put food in your mouth and chew it, after you swallow it we can say you have eaten it. if you keep chewing endlessly, we can't say you've eaten it, right? feos soft lockup feos can the game ignore soft reset in any circumstances? feos natt: Masterjun kind of says his pokemon run does wait for reset that is ABSs (but it ignores B that acts like a reset in normal run) natt one way to look at it: if the game sets up the ABSs interrupt at the beginning, and if the code at that interrupt vector just blindly restarts the machine, then it is going to be highly unlikely that the ABSs reset will fail to happen, even though it's software I conclude that after this run the game does not return from the ending sequence and does not wait for reset (that normally can be done by pressing B, and ABSs just forces it to restart the same way the Reboot button would). Only the event #3 mentioned by p4wn3r occurs here. The game does not get into the completed/finished state. It freezes somewhere in between with no way to proceed, soft lockup. I will reject this movie due to these reasons if no one disproves my logics.
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.
TASVideosGrue
They/Them
Joined: 10/1/2008
Posts: 2738
Location: The dark corners of the TASVideos server
om, nom, nom
Player (79)
Joined: 8/5/2007
Posts: 865
Harsh judgment here, but I support the judges' (usual) erring on the conservative side of accepting movies. Yeah, you heard me right. Bobo "Carmen Sandiego in 2 hours and Beetle Mania in 45 minutes" the King.
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
Now do you have anything to say regarding the matter?
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.
Masterjun
He/Him
Site Developer, Skilled player (1970)
Joined: 10/12/2010
Posts: 1179
Location: Germany
Oh well, I guess there is nothing that can be done about this. May the VBA submission forever last on this page. I completely understand that the problem is that this movie doesn't save, so we should at least have the other submission which has the save that shows something. This run is only displaying the THE END with the game going all crazy with the routine. I guess only displaying it is not enough. That however brings up the question about that save in the current movie after the credits. It indeed shows 152 Pokemon and stuff but... well you can't even start it - it freezes. I'm against a Bizhawk run that just doesn't save time over the current run, because it just doesn't show anything new and it does that while losing time. When losing a few frames in this run (for changing the rival name) you can change the output (e.g. it runs the credits with glitched characters except copyright and THE END), but it would never wait for a reset or save the game. I'm out, bye.
Warning: Might glitch to credits I will finish this ACE soon as possible (or will I?)
BigBoct
He/Him
Editor, Former player
Joined: 8/9/2007
Posts: 1692
Location: Tiffin/Republic, OH
I'd like to get my dissenting opinion on this decision on the record. I do see what you're getting at with regard to the end of the game, feos. However, the glitched Super Mario World run does something very similar (corrupts memory to jump straight to the "The End" screen) and the decision was to accept it. What makes this run so different from that one? Is it just that Pokemon Yellow should make an autosave and this run doesn't do that?
Previous Name: boct1584
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
It's not the save that determines whether the game was finished or not. It's comparing how the game normally acts when it is finished and how it acts after a glitched run. Otherwise we will literally be able to trick the system by calling some kind of a false ending. SMW normally allows you to do NOTHING after the game is finished. And it does not change after the glitched run. Pokemon (as we already know) allows resetting and makes a save. Masterjun says this save is in fact corrupted in the p4wn3r's run. But the game DOES PROCEED in general the same way it does as if it is actually beaten. Slight glitches during the process do not lock it up. This run brings it to the infamous infinite loop that does not allow to proceed normally. If there were no infinite loop in this TAS, I think I would consider it completely legit. Trying to make a save, but having the glitched data, skipping this action and still moving forward - this is what is acceptable to me. PS: I'm always open for discussion and want to see my decision reconsidered if it was wrong. However, I still think it was right. Will investigate the hell out of MESHUGGAH's posts about game endings. He did some to Battletoads, he must know.
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.
BigBoct
He/Him
Editor, Former player
Joined: 8/9/2007
Posts: 1692
Location: Tiffin/Republic, OH
Thanks for explaining. Your points are all very good.
Previous Name: boct1584
Player (42)
Joined: 12/27/2008
Posts: 873
Location: Germany
I feel a little sad because my post was used to reject the submission, but well, it happens. A judge has to give a clear verdict: accept or reject. Although I abstained from voting, I think I would side with feos if pressed against the wall. I don't think the SMW run is a good comparison because there the input ends with the game in its final state and it shows it is there with the end screen. Here this doesn't happen, the game is not in the final state, as can be seen clearly from the infinite loop. I remember from previous tests that depending on where I called the credits routine the game would let me even examine the TV if I pressed A. So, the SMW run is not a counter-example to feos' criterion. People could say that while it may not be a well defined ending, it looks like one. My problem with this is that deciding if it looks like an ending is actually more difficult and more subjective than deciding if it is an ending. IIRC this is the first Yellow submission where people have doubted the game's completion. And in this line of reasoning, SMW is actually a precedent against this run, since it was accepted because the ending routine was accurate without concern for the ones that thought it didn't look like an ending. I disagree that this decision leaves a VBA run published forever. You could say that the category is useless and have a code injection playaround obsolete it. Surely, since console verification became possible, the site has been turning towards more accurate emulators (even if such emulators might have performance-reducing architectural choices that make SNES games run at 50% speed on my 2009 laptop). However, we all know that even crappy emulators are very accurate at well-known games, so the difference for RBY, if it exists, is minimal. Don't get me wrong, I'm 99% sure that the published run has no chance of synching on GB hardware, but I'm also not sure if any current emulator can do that, because this game's entropy depends heavily on timing. I have no issue with obsoleting runs on inaccurate emulators, if you can justify it well. If it was proven that a Bizhawk run would sync on hardware, it's perfectly fine and there would be few complaints, it would still be a demand of accuracy AFAIK unprecedented, but I'd be totally fine with it, I would just ask why this requirement wasn't made before for SMW, where the accurate emulator existed at the time of submission. If you can't prove the verification works, then we should obsolete runs every time inaccuracies are fixed. This has very obvious drawbacks that I won't bother discussing here.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
By the way, some people on the higher ranks have in the past entertained the idea a couple of times that perhaps gamegenie/whatever cheats could perhaps be allowed. This whole debacle shows why that would be a really, really bad idea. Pokemon Yellow happens to be a very special game in that after a bit of meddling around, corrupting saves and whatnot, you basically gain the ability to use any kind of cheats without having to use any cheating device (emulated or not.) Thus this demonstrates really well why legitimately allowing cheat devices on all games would be a really bad idea: The entire idea of speedrunning would be completely destroyed. If the goal is to finish the game as fast as possible, and a cheat device would allow you to make the program do anything you want, the only possible use for it would be to make the game immediately jump to the extreme end of the game, because that's the goal. Thus there would be nothing to watch, really, except possibly a "the end" screen. This idea can be reversed: If we don't allow cheating devices, one of the reasons being that it makes the whole concept of "speedrunning" completely moot, then why should we allow glitch abuse that effectively amounts to the same thing? Just because it's doing it by abusing bugs in the game doesn't render the end result much different. There's still no "speedrun" to speak of, just a jump to the very end. What's there to watch? Technical prowess, sure. Entertainment? Not so much, I'd say.
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
That's what a Demo tier would be for.
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.
Player (42)
Joined: 12/27/2008
Posts: 873
Location: Germany
Warp wrote:
This idea can be reversed: If we don't allow cheating devices, one of the reasons being that it makes the whole concept of "speedrunning" completely moot, then why should we allow glitch abuse that effectively amounts to the same thing? Just because it's doing it by abusing bugs in the game doesn't render the end result much different. There's still no "speedrun" to speak of, just a jump to the very end. What's there to watch?
You raise an interesting point, but you put it too simple. People in the past didn't suggest using cheat codes to complete the game in the title screen, they proposed them as a tool to complete otherwise impossible goals, but they still wanted to maintain the gameplay. Not allowing them is a question of arbitrariness. If you're going to use a code, which one? How do you decide which one is the best to use? If 50 people submitted 50 movies completing a game in the fastest way possible using 50 different codes, how do you decide which to accept and which to reject? If you're missing too much entertainment by disallowing cheats, then make a hack, change some stuff so that it doesn't look like the original and submit a movie, the run will be judged on its merits as a run of a hack. There's still no reason to use cheat codes. Game breaking glitches in official games are different, by playing a good dump on an accurate emulator we can assure with reasonable certainty that everyone who has a copy of the game could theoretically perform them without looking for obscure hacks or using third-party devices. If the glitch is dumb to the point of destroying all value in the movie, some people might still be entertained just by knowing that it's possible to skip the whole game, in this situation we can always publish it separately. If it doesn't entertain, reject it and tell the author to ignore the glitch in the future. Anyway, simply let it come forward and be judged, like all the others. There are really two messages here: one is that the specific Pokemon Yellow run that uses save corruption is uninteresting and doesn't deserve publication, which is sound criticism, and the other is that some speedrunning "spirit" makes this run and any other that abuses game skipping glitches equivalent to cheat codes, which is problematic.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
p4wn3r wrote:
and the other is that some speedrunning "spirit" makes this run and any other that abuses game skipping glitches equivalent to cheat codes, which is problematic.
Not so much a "speedrunning spirit", but simple viewer entertainment. The most usual reason for someone to watch a speedrun (tool-assisted or not) is to see the game played through at incredible speed. Skipping to the end just isn't. It's a simple question of pragmatism.