This run is based on the video by YouTube channel ChickasaurusGL which shows a faster way to enter Hall of Fame in the Japanese version of Gen I Pokémon games.
About the game choice
I chose Pocket Monsters: Red (r0) because all other games avaible for the glitch are significantly slower for the task, except for the v1.0 of Red version, which was only 1 frame slower.
About the glitch
The glitch involves the use of the first byte of the Trainer ID and the Trainer Name bytes, which are necessary to trigger the call to the function that triggers Hall of Fame. In order to do so, some luck manipulation was necessary. Then, the SRAM was corrupted by turning off the game, which allowed to access the Pokémon list, in which some entries are swapped in order to manipulate the game memory. The result was accessing Hall of Fame without having to also use the glitch on the item list.
Additional note
Due to the controversy recently emerged, I request the judge to wait to have an answer from FractalFusion, who is the original discoverer of the glitch exploited in this run.
Noxxa: Replaced submission file with a 24-frame improvement.
ThunderAxe31: I decided to cancel this submission because the credits are not executed perfectly since the game freezes at "THE END" screen and doesn't save the progress. From my research, it looks like it is possible to fix this, but I'm unable to do so with my current knowledge. Also, the v1.0 of the game can be beaten faster by using the same glitch, without taking in account the above-mentioned problem.
Joined: 8/14/2009
Posts: 4090
Location: The Netherlands
Improved by 21 more frames (better luck manipulation at the start): User movie #35573467782282346
If you're fine with it, I can replace the submission with this (with myself added as co-author).
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.
Please change the ROM name in the submission from the ambiguous "Pocket Monsters Aka (Japan).gb" to the GoodGB name "Pocket Monsters - Red Version (J) (V1.1) [S].gb", as the ROM with this filename on the internet is usually "Pocket Monsters - Red Version (J) (V1.0) [S].gb", which does not sync correctly. (It causes a crash in-game)
As for the run... wow. I did not think that it would be possible to make this faster, but... you did it. Yes vote!
I made this a couple years ago on Pokemon Red JP V1.0, getting a final time of 3602 frames:
http://tasvideos.org/userfiles/info/35593301208919904
Note that it was done with the Equal Length Frames setting as False (GB -> Settings -> Equal Length Frames -> False). I don't know if this, or the V1.0 version, changes anything. IIRC the V1.0 version was slightly different in how it handled saving.
I made this a couple years ago on Pokemon Red JP V1.0, getting a final time of 3602 frames:
http://tasvideos.org/userfiles/info/35593301208919904
Note that it was done with the Equal Length Frames setting as False (GB -> Settings -> Equal Length Frames -> False). I don't know if this, or the V1.0 version, changes anything. IIRC the V1.0 version was slightly different in how it handled saving.
Great job. Why didn't you submitted it?
By the way, I'm a bit confused. In the userfile page you wrote: "also known as "Pocket Monsters Aka (Japan) (Rev A)" ", but the (Rev A) version is actually a different ROM.
So to be sure, here are the respective SHA1:
Pocket Monsters Aka (Japan):
0623AD12F48C259447980D68BD85DDBF8204B2CD
This is relative to the movie you posted.
Pocket Monsters Aka (Japan) (Rev A):
EF74C79CDED14204AC79E77F4964D9CB25003120
This is relative to the movie in my submission.
Anyway, I managed to implement your method in my (Rev A) run, improving it to 3632 3628 frames: http://tasvideos.org/userfiles/info/35595312275440046
Which is still slower to your movie. So I wonder how this matter should be handled? Can my new file be replaced in the submission or should be created a new submission for the v1.0 of the game?
Also, does this mean that I'm not going to be mentioned as author of the run?
By the way, I'm a bit confused. In the userfile page you wrote: "also known as "Pocket Monsters Aka (Japan) (Rev A)" ", but the (Rev A) version is actually a different ROM.
Sorry, that's my fault. I fixed it in the description.
ThunderAxe31 wrote:
Great job. Why didn't you submitted it?
Because I didn't care to submit it and there wasn't much interest in it when I posted a VBA version of it two years ago.
By the way, how many frames did you have to delay to get one of the two necessary trainer IDs?
Joined: 8/14/2009
Posts: 4090
Location: The Netherlands
FractalFusion wrote:
By the way, how many frames did you have to delay to get one of the two necessary trainer IDs?
7 frames in the current submission. (Five frames delay before soft-reset, then two frames in the menu)
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.
By the way, how many frames did you have to delay to get one of the two necessary trainer IDs?
7 frames in the current submission. (Five frames delay before soft-reset, then two frames in the menu)
In the movie file I provided in my last post, the total delay is 3 frames, 2 in main cutscene and 1 in title screen, just like in your movie (FractalFusion).
Because I didn't care to submit it and there wasn't much interest in it when I posted a VBA version of it two years ago.
Well, I've got interest in it. So please submit your movie, and then I will cancel my submission right away. Since the same trick can be executed faster on a different version of the game, my submission does not make sense anymore.
Joined: 8/14/2009
Posts: 4090
Location: The Netherlands
Spikestuff wrote:
Just mainly been observing this topic.
Isn't FractalFusion's TAS falsified due to how he set his GBHawk's core up by setting Equal Length Frames?
No.
For one, the submission has Equal Length Frames set to false as well. Second, alternative timing emulator settings do not necessarily invalidate a run - see also Advanced Bus Timing for DeSmuME runs. Third, several Pokémon runs already use the same setting, such as most current MrWint publications. (And likely other GBHawk publications as well.)
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.
Just mainly been observing this topic.
Isn't FractalFusion's TAS falsified due to how he set his GBHawk's core up by setting Equal Length Frames?
I've already checked. FractalFusion's run is faster because he used a different Trainer Name, which is faster to insert for the (v1.0); implementing the same improved trick on the (Rev A) resulted in an improvement, but not reaching his time, due to the different Trainer Name necessary for having an equivalent effect.
Nice improvement, but by now the gameplay is pretty much almost non-existent. I can't really say I was "entertained" due to the mostly incomprehensible run, so I voted no, but please do not take offense on that or anything. I still think runs like this should be published for record keeping, but in terms of entertainment its rather hard to grasp what's going on.
Some questions.
- At the end of the credits in both TASes, the end screen glitches out and it is not possible to press a button to go back to the title screen. Is the game considered to have completed properly then? (I didn't follow previous discussion too closely, and it was a long time ago anyways.)
- I said at first that the difference between the two versions was from saving. That is wrong. Difference in saving only comes in when comparing Pokemon Red or Green J to Pokemon Blue J or Pokemon U versions. The only difference between V1.0 and V1.1, as far as I know, are the positions of the code in memory, which are important here, since the trainer name corresponds to code that jumps to one of the calls in the ROM code.
- I am not aware of any improvements to the 3602-frame V1.0 movie right now. Are there any ideas for improvement?
- Is there a particular consensus about whether V1.0 or V1.1 should be used? If there is no consensus that V1.1 should be used, and assuming the 3602-frame movie wins out in the end, is it possible just to replace this submission's movie file with that one? I don't particularly care who is author.
Some questions.
- At the end of the credits in both TASes, the end screen glitches out and it is not possible to press a button to go back to the title screen. Is the game considered to have completed properly then? (I didn't follow previous discussion too closely, and it was a long time ago anyways.)
Its not up to me to decide, but I think there are probably no problems, since the game ending cutscene and then the credits are correctly triggered.
FractalFusion wrote:
- I said at first that the difference between the two versions was from saving. That is wrong. Difference in saving only comes in when comparing Pokemon Red or Green J to Pokemon Blue J or Pokemon U versions. The only difference between V1.0 and V1.1, as far as I know, are the positions of the code in memory, which are important here, since the trainer name corresponds to code that jumps to one of the calls in the ROM code.
No problem, I've already noted this.
FractalFusion wrote:
- I am not aware of any improvements to the 3602-frame V1.0 movie right now. Are there any ideas for improvement?
I am trying hard, I have no real ideas by now.
Maybe some way to avoid the necessity to for the first pokémon list swap, or using a warp glitch instead of the function call.
And what about the PC in Ash's room?
FractalFusion wrote:
- Is there a particular consensus about whether V1.0 or V1.1 should be used? If there is no consensus that V1.1 should be used, and assuming the 3602-frame movie wins out in the end, is it possible just to replace this submission's movie file with that one? I don't particularly care who is author.
I do.
You brought a better run, and that's not an improvement based on mine. So you should be the only one getting credit for it. Also, you're the original discoverer of the glitch.
I don't want to look like one trying to steal other's work; I created this run just because no one looked wanting to do it, despite the fact that the instructions to do it were public.
Still, this solution doesn't look very good; it would be better if someone comes up with an even better run. I ask to have some days to try and improve my run.
At the end of the credits in both TASes, the end screen glitches out and it is not possible to press a button to go back to the title screen. Is the game considered to have completed properly then?
Its not up to me to decide, but I think there are probably no problems, since the game ending cutscene and then the credits are correctly triggered.
I'd be careful with this.
Simply calling a print_credits routine does not count as beating the game.
For reference, see this submission.
So I think a full technical explanation (such as in this post) is mandatory.
Warning: Might glitch to creditsI will finish this ACE soon as possible
(or will I?)
At the end of the credits in both TASes, the end screen glitches out and it is not possible to press a button to go back to the title screen. Is the game considered to have completed properly then?
Its not up to me to decide, but I think there are probably no problems, since the game ending cutscene and then the credits are correctly triggered.
I'd be careful with this.
Simply calling a print_credits routine does not count as beating the game.
For reference, see this submission.
So I think a full technical explanation (such as in this post) is mandatory.
I understand, that's why is said "ending cutscene", which is the script prior to the credits.
But I also note in the links you posted, that the credits should also end correctly, thus the game should soft-reset when pressing B at the end, and this does not happen here.
Does the game count this as "beated" after a hard reset then? ie. Mewtwo cave is open, Hall of Fame is available at PC, and whatever other post-credit effects appear.
I just discovered how to prevent the graphical glitch to "THE END" screen, tough the game will still freeze: instead of swapping Pokémon 7 with 8, swap 6 with 8.
But as I said, this only corrects the graphical part of the problem; the game will still freeze and not save the progress.
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).
Indeed, he is correct. The hall of fame screen and the credits are executed with a CALL at line 28, whereas lines 46-48 of HallofFameRoomScript2 save your game at the very end.
Now what line 28 (predef HallOfFamePC) does is set register A to hex 55, then call 3E6D (on Pokemon Red U). What this submission does is mimic this as follows:
- The player name (which is at D11D/F11D) corresponds to code.
- The map pointer is set to D101 (or F101).
- Once control is hijacked by the changed map pointer, it jumps to D101/F101 and executes the player name:
-- Coming in, register A is already set to 0x01.
-- Subtract 0xAC from register A, so it becomes 0x55.
-- JUMP or CALL to any address currently in ROM, that calls 3E8B (predef on Pokemon Red J V1.1). This submission wanted to call 34CD so the player name was chosen accordingly.
And that's about it. The movie I uploaded is pretty much the same thing.
Unfortunately, as described above this only executes predef HallOfFamePC and not HallofFameRoomScript2, which explains why it glitches out at the end and doesn't save the game or terminate correctly.
So this submission might be rejected on the basis of not completing the game (like what happened to this submission). In any case, I see the game going to the hall of fame screen and to the credits (like almost all the other TASes do), and that's all I really care about as far as completion of the game is concerned.