Introduction

I always thought I wouldn't do a save-corruption run of this game. The fact that there is so little room for improvement that all runs would basically look the same, the fact that the published movie was done on a now-obsoleted emulator known to lag less so that every new run will likely appear slower, and also the bad submission history are not exactly inviting to take on this category.
After jlun2 raised my interest in save corruption lately, I experimented with the different game versions, and stumbled over a 10 frame improvement for the current Yellow run by optimized menuing (details below). But it felt cheap submitting a run like this, so I decided to look for more improvements, a different route that might be even faster and is worth submitting. After spending way too much time on it and many disappointing routes (I had an alternative Yellow route that is exactly 2 frames slower and a Red route that is 3 frames slower), I was about ready to give up and submit the 10 frame improvement (now with a little more confidence in its optimality) when I finally got it working. In the end it was a fun challenge, it basically comes down to a logic puzzle at this point that you need to solve, rather than playing a game.

Categories

  • Aims for fastest completion of the game
  • Heavy glitch abuse
  • Manipulates luck
  • Corrupts save data
  • Corrupts memory
Used emulator: BizHawk 1.8.0 (syncs on 1.1.0 - 1.6.1 and 1.8.0+)

About the run

Goal choice

This run tries to finish the game as fast as possible, with no restrictions.

Emulator Choice

This movie uses the pre-1.7 frame timing and syncs on all pre-1.7 versions as well as 1.8 which allows to adjust the timing method. Note that the emulator used in the published movie had less lag (due to emulation inaccuracies), which makes the total times not directly comparable. It can be best compared with Masterjun's submission, which is a re-sync of the published movie, making this run 66 frames faster.

Version Choice

I did quite a lot of testing with every Gen I version I could find. Firstly, the save corruption and the following memory corruption to end the game is possible in all of them, I'm pretty sure every single one can be beaten in less than 2 minutes. While the save corruption part is the same in all versions, the following memory manipulation to trigger the end of the game differs and makes some versions faster than others, due to differences in how the game memory is laid out.
The major difference is the memory alignment, separating between Japanese and non-Japanese versions. The general organization of the RAM is the same in all versions, but Japanese names only take up 6 bytes, while non-Japanese take up 11 bytes. This shifts all following data differently, and also makes switching the party Pokémon around behave differently (since the nickname and the OT name are being swapped as well). This happens to make getting the right bytes to the right places more difficult in the Japanese version, since the length of the Pokémon data (44), the length of the name (6) data and the length of the item data (2) are not relative prime, which means it's not possible to get any byte to any address just by switching these. It turns out to be a major problem for all Japanese versions, which makes their manipulation slower than the non-Japanese versions. (It's not impossible, though, you can always toss items or use the 1st Pokémon slot and use the species list to do exact byte manipulations.)
Since the relevant ROM addresses are the same for all international releases, the only question left is whether to use Yellow or Red/Blue. This really just came down to whichever version happens to have the faster route: R/B allows for more menuing optimizations and has a faster startup sequence, while Yellow's memory manipulation is easier. For the longest time I thought that Yellow would be faster, until I finally found a quick route for R/B, that turned out to be even faster.

How skipping to the end works

When resetting the game while saving, it is possible to end up with a loadable save state where the complete party Pokémon data is filled with 0xff. This makes the game think we have 255 Pokémon in your party, which allows us to swap Pokémon after the 6th and thereby manipulate the following RAM areas. Specifically, we can change the ID of the current map (at $d35e) and the pointer to the map script (at $d36e) to execute the Hall of Fame cutscene and end the game right away.
The Hall of Fame code is the same in all versions of the game, but can be located at different places inside the ROM. There are two possible ways to jump into it, either calling the HallofFameRoomScript to run the full cutscene (as seen in the current publication), or by jumping directly into HallofFameRoomScript2, which starts the Dex rating sequence immediately (as seen here). Note that it's not possible to jump any further into the sequence, such as executing the credits directly, since the ending bit of HallofFameRoomScript2 is actually needed to finish off the game as expected, by restarting after a button press (otherwise it would loop in the credits like seen here).

Memory manipulation mechanics

Memory manipulation will happen mostly by switching Pokémon in your party. When two Pokémon A and B are swapped, four things happen in this order:
  • The species is swapped (1 byte): $d164 + A <-> $d164 + B
  • The Pokémon data is swapped (44 bytes): $d16b + 44*A <-> $d16b + 44*B
  • The Pokémon OT name is swapped (11 bytes): $d273 + 11* A <-> $d273 + 11*B
  • The Pokémon nickname is swapped (11 bytes): $d2b5 + 11*A <-> $d2b5 + 11*B
Note that these memory areas are exactly back to back with 6 Pokémon in your party. With more than 6, however, they overlap, which can lead to some memory segments being moved around multiple times during one swapping operation, and allows more sophisticated memory manipulation.
Our goal is to change the following addresses:
  • The map script pointer at $d36e, which is affected by the 12th Pokémon data or the 23rd OT name or the 17th nickname
  • The current map ID $d35e, which is affected by the 12th Pokémon data or the 22nd OT name or the 16th nickname

Optimizations

This run uses a lot of minor time savers, especially while menuing, most of which involve pressing multiple buttons on the same frame.
In most menus, the game allows you to press the up/down key together with the A key to move one element while simultaneously confirming, saving some frames (the concrete amount depends on the scroll lag of the menu). This seems so obvious that I was quite embarrassed to find out about it only as of lately. Note that this only works in R/B and not in Yellow.
In some menus (specifically the item menu in this run), you can scroll faster by pressing other keys while scrolling up/down. This works because the game only checks for some newly pressed key, not the up/down key specifically. That means by pressing left and right alternatingly while holding up/down, you can save a frame for each scrolled item compared to tapping the up/down key. This does work in Yellow as well (and would by itself allow for a 10 frame improvement over the published movie).

Route

Intro

  • The Trainer ID is manipulated to be 0x64bd, which is used as the map script address later. Other values work as well, this one is the fastest to manipulate, costing 17 extra frames. This is the only luck manipulation in this run, and brute-forcing it accounts for over 99% of the run's rerecords.
  • The player is given a default name ("RED"), it is not relevant in this run.
  • The enemy is also given the default name "JOHN". Part of the name will be later scrolled through in the item menu, and JOHN causes less lag frames, saving 30 frames over the second-fastest option "GARY".
  • After the intro, the game is immediately save-corrupted and loaded up again.

Memory manipulation

  • Before the memory manipulation is started, I take a step downward. This changes the block-relative y coordinate from 0 to 1, reducing item scroll lag and therefore saving 8 frames.
  • First, the 4th Pokémon is switched with the 13th. This does not do any immediate good for us, but prepares important memory areas, specifically filling the 13th Pokémon data with all 0xff (from the save-corrupted 4th data) and filling the 4th nickname with all 0s (from the empty item list).
  • Next, swapping the 11th and the 12th. This moves all interesting bytes (including the manipulated Trainer ID) into the item data.
  • Next, swapping the 10th and the 13th. This uses the first preparation swap to do two things: It sets the item count to 16 (allowing us to swap items around) and it sets the number of caught Pokémon to 64 (which is important for Oak's Dex evaluation text).
  • Now, the items are moved around: the 1st item, containing what will later be the map ID 0xcf, is moved to slot 5, and the 3rd item, containing one half of the trainer ID, is moved to slot 13 to align it with the script pointer.
  • Using to more swaps (17 with 22 and 23 with 18), the aligned bytes are put in the right places, ending up with a map ID of 0xcf and a script pointer of 0x64bd.
  • After the menu is closed, everything is set up and the input file ends. Everything after this point does not need any inputs.

The end

  • Map 0xcf is the 2nd floor of the Silph Co. building, which happens to be on the same ROM bank (0x16) as the Hall of Fame room, so the script pointer 0x64bd executes code at $16:64bd, which is inside the HallofFameRoomScript2, starting the Dex rating sequence immediately.
  • Even though we have 255 Pokémon in our party, the first species is set to 0xff so that none are registered in the Hall of Fame.
  • The number of caught Pokémon is 64, which causes an Oak text that doesn't require any button presses. Also, it seems the first line was one character too long, and the translators thought "Hmm, what to do... I know! Let's remove one 't' from the word 'getting' nobody will ever notice". I guess I should be thankful, since this run depends on this text not being any longer :D

Noxxa: Judging.
Noxxa: Accepting as an improvement to the published movie.
Spikestuff: Publishing. Meow~

Editor, Expert player (2313)
Joined: 5/15/2007
Posts: 3856
Location: Germany
This is geting even better? No glitch message? :o
Editor, Experienced player (608)
Joined: 11/8/2010
Posts: 4012
Zeupar wrote:
What two publishers? I only see one sharing your pedantic stance (that being ThatGugaWhoAgree, no less!). Anyway, don't you think coming up with good arguments for why screenshots shouldn't be taken after input (especially in this particular case) would be better than "HERP DERP, 2 publizeups agre with mah so imma r8, even thought dem 'proof' i Linc don't back it up"?
No need to be so juvenile. The second publisher I was thinking of had posted in another thread about this, which I'm having trouble finding. Publishers select the final screenshots, and if they don't publish screenshots that take place after the movie, then why should they suddenly start doing it now, especially for a case as small and unimportant as this one? Also, why attack Guga? He's allowed to have an opinion too. None of your random insults are helping your argument or making you look any better.
Zeupar wrote:
By the way, I recommend you being careful when using sentences starting with "we don't want".
We, meaning the publishers and all of us who like to follow site rules and guidelines instead of constantly vying for exceptions. Why have rules if you can make an exception for everything?
Zeupar wrote:
Do you think it would be good or not? I'm confused.
I think it would be funny and showcase the impressive final time, as you do. But it's not from the movie itself and it conflicts with the guidelines I listed, so it shouldn't be used for publication.
Joined: 5/14/2007
Posts: 525
Location: Pisces-Cetus filament
So, let me get this straight: You have no compelling arguments for why screenshots after the final input shouldn't be used beyond "because it's what publishers normally do"?
CoolKirby wrote:
No need to be so juvenile. Also, why attack Guga? He's allowed to have an opinion too. None of your random insults are helping your argument or making you look any better.
Random insults? Really? Anyway, I didn't attack Guga. I was just making a joke about his previous username. No need to be so susceptible. ThatGugaWho>_>, if you felt offended, please speak out!
Zeupar wrote:
By the way, I recommend you being careful when using sentences starting with "we don't want".
We, meaning the publishers and all of us who like to follow site rules and guidelines instead of constantly vying for exceptions.
Making up fallacies won't help your stance or make you look any better. Anyway, we can argue about this all that you want, but please use private messaging from now on.
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!
Noxxa
They/Them
Moderator, Expert player (4139)
Joined: 8/14/2009
Posts: 4083
Location: The Netherlands
CoolKirby wrote:
Publishers select the final screenshots, and if they don't publish screenshots that take place after the movie, then why should they suddenly start doing it now, especially for a case as small and unimportant as this one?
Why not? It's uncommon, as generally in most runs there are not a lot of interesting points post-game completion or even post-input, but I fail to see a reason why to refuse picking screenshots from after input if there is good screenshot material in there.
CoolKirby wrote:
We, meaning the publishers and all of us who like to follow site rules and guidelines instead of constantly vying for exceptions. Why have rules if you can make an exception for everything?
CoolKirby wrote:
But it's not from the movie itself and it conflicts with the guidelines I listed, so it shouldn't be used for publication.
There is no rule for picking screenshots within movie input range, and even the guidelines you quoted and linked to do not state anything about this. You cannot break a rule or guideline if it does not exist. And yes, you can make exceptions to guidelines if you can find interesting screenshots in other ways. They're just guidelines, there is no strict requirement to follow them.
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.
Editor, Skilled player (1939)
Joined: 6/15/2005
Posts: 3247
BKM version, for those who want to run it in BizHawk but can't run BizHawk 1.7.0+: http://tasvideos.org/userfiles/info/17318584383593842
MrWint wrote:
The major difference is the memory alignment, separating between Japanese and non-Japanese versions. ... This happens to make getting the right bytes to the right places more difficult in the Japanese version,
Yeah, but the fact that so many more convenient bytes can be written into name fields (since, you know, it isn't English) more than makes up for it. Five bytes worth of instructions launching the Hall of Fame can be encoded into a single name. I know this because I made a movie in VBA (over a year ago) that beats the game in less than 1m1s, doing exactly that.
Skilled player (1019)
Joined: 7/24/2013
Posts: 175
I did consider the possibilites added by the characters, but there are important bytes that can't be represented, namely the higher byte of the HoF sequence address (0x7b in Red/Green, 0x7d in Yellow, 0x7e(?) in Blue (don't quote me on that one)), which are tiles used for the framing. The only source for these bytes is the Trainer ID, which is a pain to get to the right place. I admit I haven't considered using the names as code instead, which is a great idea I can see working out. I'd love to see this movie of yours.
Buddybenj
He/Him
Joined: 1/12/2013
Posts: 166
Location: USA
Great job on the improvement! Also I like how Pokémon Red is used and the more accurate BizHawk timing.
ALAKTORN wrote:
I agree with Zeupar. The screenshot is not part of the input, but it’s part of the movie; what does it matter if the input ends earlier?
Agreed. But I still think the screenshot should not give away the "GOLD TEETH" or the "Ho! This is geting even better!" EDIT: Now that I think about it there are not many interesting screenshots that don't include those two things.
Projects: Interested in TASing N64 Mario Golf. GBA Mario Tennis: Power Tour is on hold.
Editor, Skilled player (1939)
Joined: 6/15/2005
Posts: 3247
MrWint wrote:
I'd love to see this movie of yours.
Here's the movie then: http://tasvideos.org/userfiles/info/17319790281107650
Pocket Monsters - Red Version (J) (V1.0) [S].gb
Emulator: VBA v22 Basically, it works like this: - Manipulate the trainer ID first byte (D2D8) to be D1 or F1. Then D2D7 will read 01 D1 or 01 F1, little endian for the jump into RAM where we want to execute. - Name the player よッヘマぼ . This corresponds to
D6 AC       SUB AC
CD 9D 3D    CALL 3E9D
at D11D. - Do the save and reset thing to corrupt memory. - After reloading the game, open the Pokemon menu. - Switch the 7th and 8th Pokemon. This gives a HoF end message that does not require input. - Switch the 9th and 10th Pokemon. This moves 01 D1/F1 at D2D7 to D2AB. - Switch the 15th and 26th Pokemon. This moves D2AB to D2ED, the address to an execution pointer, when closing the menu. - Close the menu. The game reads D101 (F101) off the above address and jumps there. There are 00 bytes (NOP) until D11D, which it executes, resulting in the HoF. The instructions place 0x55 into the A register (01 SUB AC -> 0x55), then jumps to 3E9D, which seems to be a warp manager that uses the A register. I don't know if such action is considered an acceptable ending for TASVideos (a more extreme version that glitches the end credits directly was rejected in the past), especially since the end is a bit glitchy. Also, I think my movie is improvable.
Joined: 12/29/2007
Posts: 489
FractalFusion wrote:
I don't know if such action is considered an acceptable ending for TASVideos (a more extreme version that glitches the end credits directly was rejected in the past), especially since the end is a bit glitchy.
If, once the credits start rolling, you can turn off the game and have a save file that would do something like display the Hall of Fame entry on the player's PC, then it's acceptable as the game has undeniably reached its end state. ...On another note, does anything of that sort happen in this run? It sounds like the fact that a save file is indeed created should be enough, but said file always crashes upon hitting Continue. (The rejected submission never created any save file.)
Joined: 9/1/2014
Posts: 58
Speed wise it's definitely good, lacks the entertainment of the other runs, but it is definitely up there with the speed goal.
Enjoys speedruns but hasn't actually tried making any yet.
Former player
Joined: 6/30/2010
Posts: 1093
Location: Zurich, Switzerland
I know that improvements from nothing but Japanese text are not valid here, but would this rule apply in the situation of these games?
Current project: Gex 3 any% Paused: Gex 64 any% There are no N64 emulators. Just SM64 emulators with hacky support for all the other games.
Patashu
He/Him
Joined: 10/2/2005
Posts: 4017
andypanther wrote:
I know that improvements from nothing but Japanese text are not valid here, but would this rule apply in the situation of these games?
IMO the appropriate rule is 'if a version of the game is faster due to different glitches, you can use that version'.
My Chiptune music, made in Famitracker: http://soundcloud.com/patashu My twitch. I stream mostly shmups & rhythm games http://twitch.tv/patashu My youtube, again shmups and rhythm games and misc stuff: http://youtube.com/user/patashu
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11271
Location: RU
FWIW, screenshots used for Battletoads (used as an example by CoolKirby) all are from PAST the movie. Just not too far away, they demonstrate the very glitch the movie sets up. After it was set up, the movie ends, so there's not sensible way to combine 2 concepts: showcase the run and be within input length. That discussion started after I actually used a screenshot that was completely irrelevant to the run, but had some odd and extremely funny (to some, including me) relation to what was happening in the run.
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.
Skilled player (1019)
Joined: 7/24/2013
Posts: 175
FractalFusion wrote:
MrWint wrote:
I'd love to see this movie of yours.
Here's the movie then: http://tasvideos.org/userfiles/info/17319790281107650
Pocket Monsters - Red Version (J) (V1.0) [S].gb
Emulator: VBA v22 Basically, it works like this: - Manipulate the trainer ID first byte (D2D8) to be D1 or F1. Then D2D7 will read 01 D1 or 01 F1, little endian for the jump into RAM where we want to execute. - Name the player よッヘマぼ . This corresponds to
D6 AC       SUB AC
CD 9D 3D    CALL 3E9D
at D11D. - Do the save and reset thing to corrupt memory. - After reloading the game, open the Pokemon menu. - Switch the 7th and 8th Pokemon. This gives a HoF end message that does not require input. - Switch the 9th and 10th Pokemon. This moves 01 D1/F1 at D2D7 to D2AB. - Switch the 15th and 26th Pokemon. This moves D2AB to D2ED, the address to an execution pointer, when closing the menu. - Close the menu. The game reads D101 (F101) off the above address and jumps there. There are 00 bytes (NOP) until D11D, which it executes, resulting in the HoF. The instructions place 0x55 into the A register (01 SUB AC -> 0x55), then jumps to 3E9D, which seems to be a warp manager that uses the A register. I don't know if such action is considered an acceptable ending for TASVideos (a more extreme version that glitches the end credits directly was rejected in the past), especially since the end is a bit glitchy. Also, I think my movie is improvable.
Thanks for sharing this. At 3E9D is the equivalent of what is called the "Predef" function in the disassembly, which is basically a jump table. Predef 0x55 is The exact predef called in the Hall of Fame code (line 28, behind some fancy macros). I worked under the assumption that this is not a valid ending (as described in the submission text). I'd say line 28 until line 59 need to be executed (which could be translated to the respective byte addresses for the different versions) in order to have a "valid" ending experience (that is: credits, saving, reset on button press). Jumping to a "proper" address is a bit harder to do, since there is no predef for it and (as I said above) one of the bytes is not directly representable. Anyway, your run is great. I wonder if it's possible to use the rival's name (2nd and 3rd character) for the script pointer instead of the Trainer ID. The saved swap may or may not be worth the time spent naming him.
ALAKTORN
He/Him
Player (99)
Joined: 10/19/2009
Posts: 2527
Location: Italy
FractalFusion wrote:
MrWint wrote:
I'd love to see this movie of yours.
Here's the movie then: http://tasvideos.org/userfiles/info/17319790281107650
Pocket Monsters - Red Version (J) (V1.0) [S].gb
Emulator: VBA v22
Can someone encode this?
Spikestuff
They/Them
Editor, Publisher, Expert player (2299)
Joined: 10/12/2011
Posts: 6339
Location: The land down under.
ALAKTORN wrote:
FractalFusion wrote:
MrWint wrote:
I'd love to see this movie of yours.
Here's the movie then: http://tasvideos.org/userfiles/info/17319790281107650
Pocket Monsters - Red Version (J) (V1.0) [S].gb
Emulator: VBA v22
Can someone encode this?
Aye, aye. Link to video
WebNations/Sabih wrote:
+fsvgm777 never censoring anything.
Disables Comments and Ratings for the YouTube account. Something better for yourself and also others.
ALAKTORN
He/Him
Player (99)
Joined: 10/19/2009
Posts: 2527
Location: Italy
^I’m not sure why Fractal never spoke about that… it looks like it should be the published movie.
Editor, Skilled player (1939)
Joined: 6/15/2005
Posts: 3247
MrWint wrote:
At 3E9D is the equivalent of what is called the "Predef" function in the disassembly, which is basically a jump table.
I see. The versions actually have different locations for Predef function in their ROM. J Red is at 3E9D, J Green is at 3E8B, and J Blue is at 3EB1. The Japanese Blue version is faster than Japanese Red (even though intro takes a bit longer) because of faster save process.
MrWint wrote:
I wonder if it's possible to use the rival's name (2nd and 3rd character) for the script pointer instead of the Trainer ID. The saved swap may or may not be worth the time spent naming him.
Naming the rival takes like 150 frames, doesn't it? One swap is far shorter than that, and you'd still need to get to the 26th Pokemon.
ALAKTORN wrote:
^I’m not sure why Fractal never spoke about that… it looks like it should be the published movie.
It's not exactly amazing or anything. It doesn't visibly do anything that this submission (or the previous one) doesn't do, other than giving the player a name. It is in a language that most people here don't understand. I was also not interested in generating any further controversy.
Skilled player (1019)
Joined: 7/24/2013
Posts: 175
FractalFusion wrote:
MrWint wrote:
I wonder if it's possible to use the rival's name (2nd and 3rd character) for the script pointer instead of the Trainer ID. The saved swap may or may not be worth the time spent naming him.
Naming the rival takes like 150 frames, doesn't it? One swap is far shorter than that, and you'd still need to get to the 26th Pokemon.
It takes about extra 65 frames in the UE version (+the naming itself), but you're probably right, the one extra swap will cost less (~57 frames in UE).
Joined: 12/29/2007
Posts: 489
@FractalFusion: It's amazing because it's a new faster movie in this already contested and very fast category. You might as well say that the current SMB1 movie doesn't visibly do anything different from the previous SMB1 movie that was 1 frame slower. --- Reading through some previous posts, it looks like the main controversy here is whether or not so-and-so input file counts as beating the game. Looking at the reasons for why the "skip to THE END" submission was rejected, it seems pretty simple: there was no end-game save file created. Considering that the game keeps track of Hall of Fame records, determining whether or not the game has been beaten should be straightforward: check to see if a Hall of Fame record has been recorded in the final save file. If it has, then you're good to go. Looking at the above posts, it seems like Fractal's JP Red submission beats this one, and he claims that a JP Blue submission would be even faster than JP Red. Assuming that all the runs create a proper end-game save file, why not go ahead and submit a JP Blue movie?
Skilled player (1019)
Joined: 7/24/2013
Posts: 175
This is a questionable definition, since saving the HoF is done independently from saving the acutal game (which is what lets you restart in Pallet Town if you load the save). The HoF save is done during the Dex rating sequence, before the credits, and the actual save is done after the credits, before resetting the game on button press. FractalFusion's run does the HoF save (repeatedly), but never reaches the actual save. Afaik there is no strict definition on what is required to count as a valid ending. We only have what the published run does as what is allowed and what this submission does as what isn't, with a gray area inbetween. Considering the submission history, I stuck to the conservative side and do everything the published run does for a valid ending. FractalFusion's Red (J) run is in the gray area, which I considered invalid when making this run.
Joined: 12/29/2007
Posts: 489
^I think I'm misunderstanding something. What's the difference between a file from after the HoF save and a file from after the final save? If I recall correctly (might be mixing up from other gens; if so correct me), it's possible to soft reset the game in the middle of the credits and still have everything saved with the player resuming in Pallet Town. I wasn't aware there were any additional saves created after the credits at all.
Skilled player (1019)
Joined: 7/24/2013
Posts: 175
It's not possible to soft reset during the credits at all, since the joypad input is not read. After all your party Pokémon were shown in the HoF cutscene (and before the player is shown and the Dex is rated), the game saves the HoF data (code, l. 80), and only the HoF data. The actual save happens after the whole credits are over (code, l. 52). If you reset before the credits finish, the game will not save and you will not start again in Pallet Town (except your previous save happens to start out there of course). It's very easy to test for yourself, complete the game (or grab any TAS that does), and reset during the credits, see where it puts you.
Joined: 12/29/2007
Posts: 489
^Ah, that makes more sense. Really, FractalFusion's run doesn't perform the final post-credits save? It seems to run through the credits themselves just fine, so there must be something going on in the background I'm not aware of.
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 14887
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. ---- [2687] GB Pokémon: Red Version "save glitch" by MrWint in 01:09.95