Emulator: VBA-rr v22
This is an improvement to the published run made originally by gia that wasn't submitted. More information about it can be seen in his youtube video here: http://www.youtube.com/watch?v=7yXTpnUCh5Q
As far as I know, no .vbm of that movie was posted, shortly after that run was made I managed to recreate the presses file but kept it to myself as I was hoping that run would be submitted. Some months have passed and it seems the author doesn't have the intention to submit it here, so I'm submitting my own version (*puts on bullet proof vest*) because it looks like people want to have this published in TASVideos.org and asked me to submit this.

Objectives

  • Aims for fastest completion of the game
  • Extreme glitch abuse (not afraid to destroy the game)
  • Luck manipulation
  • Corrupts save data

What happens here

In order to understand, it's recommended to have familiarity with programming and some knowledge of GBC assembly and other aspects of the platform.

Relevant memory addresses

  • Trainer ID: 0xD358-0xD359
  • Map function (little endian): 0xD36D-0xD36E
  • Current map: 0xD35D
  • Party Pokémon general data: 1st one is at 0xD16A, has a size of 44 bytes
  • Party Pokémon OT name data: 1st one is at 0xD272, has a size of 11 bytes
  • Party Pokémon nickname data: 1st one is at 0xD2A4, has a size of 11 bytes
  • Pokédex data: everything from 0xD356 to 0xD31B, inclusive (38 bytes).
  • Inventory: 0xD31C (amount) and an array starting at 0xD31D with 20 elements of 2 bytes (item type and quantity) in the end of your normal inventory there's an 0xFF that indicates the CANCEL option, so this takes up at most 42 bytes.
The process to finish the game:
  • When the title screen opens, frames are waited to manipulate the trainer ID to be 0x64D0, there are other values that work but this is the fastest.
  • After the usual intro, picking the names ASH and BLUE because they are faster, we spawn in the room and hard reset mid-save to corrupt the data.
  • After the reset, the entire area destined to contain the data for pokémon in the party is full of 0xFF and is thus, corrupted. This includes the byte that counts the number of pokémon you have, so the game thinks you have 255 pokemon and will let you scroll the cursor and perform switches far after the usual limit of 6 pokemon.
  • Notice that for a max of 6 pokémon, the region that contains the party data will work fine, the general data for a pokémon will never overlap with its nickname or OT name. For more than that, this no longer holds because the difference in size will cause overlaps at some positions. When a switch occurs, the game will first switch the general data and then the other two, because of the coincidence of these two regions, interesting RAM manipulation can take place.
  • Switch 2nd pokemon (1st, 2nd, ..., 9th also work, the only difference is that the 1st is slower by 2 frames) with the 10th. This will set the entire pokedex region to FF, completing it and sets the inventory counter to 255 items. Because of the irregular 152 pokedex, a glitched description will appear at the end that doesn't need a click to cancel and input can be terminated sooner.
  • Switch 12th with 13th. 0x64 goes to address 0xD384 and 0xD0 goes to 0xD385.
  • Switch 11th with 13th. 0x64 goes to address 0xD32C and 0xD0 goes to 0xD32D, after this the 11 byte data is changed and the overlap causes it to be the region where 0x64 is, so after this last switch it goes to 0xD342.
  • It's impossible to get 0xD0 the right position with only pokémon switches, so we open the inventory and do an item switch to bring 0xD0 from 0xD32D to 0xD331.
  • Switch 11th with 12th. 0xD0 goes to 0xD35D (current map), 0x64 goes to 0xD36E, there's also a 0x01 that goes to 0xD36D, it's a byte that come before the trainer ID that, for our purposes, always contains 1.
After that, you can close the menu and the game will be completed, this is because Pokémon Yellow comes in an MBC5 GBC cartridge, this cartridge contains a lot of ROM that the GBC cannot handle all at once, so it's separated in chunks called banks. MBC5 has a main bank, which is always loaded into the gameboy and occupies positions 0x0000-0x3FFF and 63 other banks that the game can choose one of them to put in the active memory, at addresses 0x4000-0x7FFF. Having D0 as current map will force the game to load the bank which contains the function for the Hall of Fame walking cutscene, there are other values that work, but some of them mysteriously make ASH wait 16 frames to start walking, whereas D0 and some others don't. Additionally, having 0x0164 at the map function addresses will make the game execute a call to a function at this address and start executing stuff at 0x6401 (the data is little endian). Since this is an address from the bank area, what will be executed depends on the bank loaded, but with the previous setting, the machine will eventually start executing the hall of fame cutscene and grant you the completion of the game.
Through disassembly, I've verified that this function at some point switches to bank 60 and calls 0x4F26, which rolls the credits immediately without talking to OAK and that the map F8 can load this bank. However, with the above method we can only call addresses that terminate with 0x01, and going to 0x4F01 will get you a ret instruction on the way, and the procedure will return before reaching the credits. This can be circumvented with more manipulation of the RAM, but unfortunately, ended up slower than this attempt because of extra switches.
I also could notice that forcing the machine to jump to address 0x41c6 at bank 28 will start the pokedex rating sequence, however no map at 0xD35D can load this bank, the values for the bank which map loads are 256 bytes whose location starts at address 0x43e4 in bank 63.

Nach: Tremendous improvement, now you literally skipped the entire game. Accepting.

Brandon: Publication underway.


Editor, Experienced player (885)
Joined: 1/23/2008
Posts: 529
Location: Finland
Warp wrote:
if a password were used to jump right to the end of the game, this would be rejected, but because it's achieved with savegame corruption, it becomes ok; I'm not sure I agree that there's such a relevant difference
The way I see it is that save corruption works only in a handful of games and can have vastly unpredictable results. It also takes TAS-precision to use save corruption successfully at all. Passwords on the other hand are just commonday. This run is a nice improvement, so voted yes.
Mitjitsu
He/Him
Banned User
Joined: 4/24/2006
Posts: 2997
Warp wrote:
What is the mysterious 152th pokemon?
MissingNo? Anyway, I think the entire universe just imploded.
Joined: 2/20/2010
Posts: 209
Location: I'm in space
Warp wrote:
... However, since I personally detest savegame corruption as a technique (if a password were used to jump right to the end of the game, this would be rejected, but because it's achieved with savegame corruption, it becomes ok; I'm not sure I agree that there's such a relevant difference) I find it hard to vote "yes" on good conscience. It would feel like letting a criminal go based on a minute technicality. You know he's guilty, but you have to let him go because of the law.
Yeeeaah I kinda also feel like this is more or less a "grey-area" sort of technique in terms of legitimacy, but for a different reason; I think that a game's failure to atomically create a save - IMHO at least - is hardly a programming error, cuz the exceptionally rare real-time case in which the player accidentally resets during a 2-frame save process is so unlikely to happen, that it's probably not worth the programmer expending the effort to recognize and deal with that situation. THAT SAID, I vote yes simply because I think the result is totally awesome in this case. Chrono Trigger is my favorite run on the site, but also a major savegame corrupter. I consider it to be the ultimate example of the "whatever, it's awesome, <3" voting criterion, and I think that criterion deserves its fair share of weight.
Oh, play it cool. Play it cool. Here come the space cops.
Banned User
Joined: 3/10/2004
Posts: 7698
Location: Finland
In the end I decided to vote yes. This is technically a good improvement on the existing run, and a lot of work has been done to end up with this. However, you all know my personal distaste about the savegame corruption technique, so be it noted once again. But please let's not discuss about that anymore (at least not in this thread), as it has been discussed to death already.
Hoandjzj
He/Him
Experienced player (613)
Joined: 4/6/2010
Posts: 240
It was too fast o.O!!!
Joined: 12/29/2007
Posts: 489
Warp wrote:
What is the mysterious 152th pokemon?
Believe it or not, it's actually Scyther. Watch the movie, and after the credits end and the game resets, get the Pokedex. Slot #152 is listed as Scyther, right after Mew. Why? No idea.
Joined: 6/16/2011
Posts: 48
Epic. Freaking. Win. Definitely a yes from me.
Joined: 7/30/2011
Posts: 129
Location: Watching a TAS in the basement...
Another RBY glitch run. That's just great. YES!!!!!!!!!!!!!!!!!!!!!!!
I am the future ruler of the world! My forum: http://elderyoshisisland.forumotion.com/
Brandon
He/Him
Editor, Player (191)
Joined: 11/21/2010
Posts: 914
Location: Tennessee
Encodes added to the submission text. :)
All the best, Brandon Evans
Dwedit
He/Him
Joined: 3/24/2006
Posts: 692
Location: Chicago
No more "Champions are honored for their exploits here" message I see...
Skilled player (1652)
Joined: 11/15/2004
Posts: 2202
Location: Killjoy
Warp wrote:
What is the mysterious 152th pokemon? Anyways, I'm not sure what I should vote. I know this is just an improvement to an already-published run, and it's definitely not worse than it (taking into account the goal), so the obvious vote would be yes. However, since I personally detest savegame corruption as a technique (if a password were used to jump right to the end of the game, this would be rejected, but because it's achieved with savegame corruption, it becomes ok; I'm not sure I agree that there's such a relevant difference) I find it hard to vote "yes" on good conscience. It would feel like letting a criminal go based on a minute technicality. You know he's guilty, but you have to let him go because of the law.
This is what to use your No vote for. You explained why you (would have) voted no. I'm all for No votes when they are well thought out and explained. Don't be upset when it doesn't turn the tide, however... EDIT: Saw you voted yes, but I'd still say people should feel free to vote no when they have a reason.
Sage advice from a friend of Jim: So put your tinfoil hat back in the closet, open your eyes to the truth, and realize that the government is in fact causing austismal cancer with it's 9/11 fluoride vaccinations of your water supply.
Jungon
He/Him
Player (50)
Joined: 4/2/2009
Posts: 376
Location: Porto Alegre - Brazil
Are you saving these tricks up so you can win GB TAS of the year every year??? XD Yes vote anyway, it's much faster.. >_>
*Jungon*/*Johnnyz* smilie weirdo =P ^^ o.o @__@ +D
Brandon
He/Him
Editor, Player (191)
Joined: 11/21/2010
Posts: 914
Location: Tennessee
I'm sorry guys, but I forgot to put the handle setting on for the streaming encode. I'll redo it shortly...man am I out of my groove.
All the best, Brandon Evans
Joined: 2/6/2011
Posts: 130
So let me get this right, the Pokedex have a built in calculator in case you're bad in math so Ash just divided by 0 and won the game?... that has to deserve a Yes vote indeed.
Warepire
He/Him
Editor
Joined: 3/2/2010
Posts: 2178
Location: A little to the left of nowhere (Sweden)
I am currently in a state of complete WTF. The previous TAS at least had a few seconds of sanity in it. Yes vote. Great improvement.
Active player (428)
Joined: 9/7/2007
Posts: 329
Wow this skips the hall of fame room. So does that mean that Ash's room IS the hall of fame? Anyways, yes vote.
Joined: 6/26/2011
Posts: 167
Certainly a sign of the craziness of this run's glitching when even stairs (and, evidently, walls) were deemed superfluous. And now that the run is so short that the video is over two-thirds intro, I'm certain that this run will -TM8 TM8 nROCKET8 8 V8 i z t 1d 1 error.-
First a movie gets submitted, and ends up accepted despite breaking rules other runs have been rejected for. And when I vote less than spectacularly on this movie, I become the victim of harassment and threats. Yay, favoritism.
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15584
Location: 127.0.0.1
This movie has been published. The posts before this message apply to the submission, and posts after this message apply to the published movie. ---- [1860] GBC Pokémon: Yellow Version "save glitch" by p4wn3r in 01:09.63
Joined: 11/28/2004
Posts: 138
That was a complete mindfuck of a movie
The best time you have is the time you share with other people.
Editor, Expert player (2073)
Joined: 6/15/2005
Posts: 3282
Now that I think about it, I prefer this screenshot to the "1 error" or the garbled dialog before the credits: If no one has a problem with it, I'll replace it. (But not right away. I'll wait a couple days.)
Joined: 7/5/2011
Posts: 13
Location: Mississippi
I was on my way to tell you that this run seemed similar to the one gia did months ago, then I read your information, and realized you are right. Very well done improvement, p4wn3r.
ALAKTORN
He/Him
Former player
Joined: 10/19/2009
Posts: 2527
Location: Italy
FractalFusion wrote:
Now that I think about it, I prefer this screenshot to the "1 error" or the garbled dialog before the credits: If no one has a problem with it, I'll replace it. (But not right away. I'll wait a couple days.)
I don’t like it, I think Zeupar’s one is perfect
Joined: 12/29/2007
Posts: 489
I prefer the "1 error" because it's unique to this run. The screwed up inventory occurs in all the other runs of this category.
Brandon
He/Him
Editor, Player (191)
Joined: 11/21/2010
Posts: 914
Location: Tennessee
I still can't comprehend why everyone like's Zeupar's screenshot:
  • It's not unique to the run.
  • It's post game play.
  • It has nothing to do with the glitch that created this massive improvement.
I believe my screenshot fits with the publisher guidelines much better than Zeupar's. FractalFusion's is nice, but I didn't even notice the Ash thing until I looked at it for a while. By the way, I'm sorry to report this, but there are some problems with the downloadable encode and the 512kb. For the DE, I encoded it in 7:6 instead of 1:1, and for the 512kb, I encoded with handheld = false, removing aspect correction. The former should be fixable with a mere MP4Box call (Which for some reason never works for me), but the 512kb will take more. That said, one could just fix the DE and have archive.org derive a 512kb from it. Can anyone give this a shot? Grunt? Edit: Replaced, re-deriving. Thanks, Ilari!
All the best, Brandon Evans
Jungon
He/Him
Player (50)
Joined: 4/2/2009
Posts: 376
Location: Porto Alegre - Brazil
.....And I came here to make compliments about the '1 error' screenshot... >__> It is as WTF as the run, ... but this one with Ash x64, .. it's not worse. xP if he has 64 Ashes, it has only two possibilities: 1- He cloned himself 63 times.. or: 2- He smoked too much .. >D
*Jungon*/*Johnnyz* smilie weirdo =P ^^ o.o @__@ +D