Introduction

Well, that didn't take long. After finishing my first any% TAS on Pokémon Blue (here), I read some comments about how this run is all the same as the save corruption run (here), just with 35 minutes of extra padding to get to that point. In a way they were right, all recent first generation Pokémon TASes are corrupting the inventory to use it as a hex editor, shifting the right bytes to the right places and therefore tricking the game into playing the final cutscene. This makes them look all the same in the end: you scroll through a glitched inventory screen that is filled with hilarious items (e.g. "GARY x97") and swap them around.
It got me thinking whether there may be an alternative way to manipulate the bytes. Sure enough, I found one, which isn't that surprising, considering the multitude of game-breaking glitches that this particular game features. More surprising is the fact that it is actually a lot faster to do than the inventory glitching.
I recommend to watch the movie before reading the technical details below. The movie contains almost none of the usual graphical glitchiness and obvious game breaking that the previous movies had, which lets the end seem rather sudden and magical.

Categories

  • Forgoes save data corruption
  • Aims for the fastest completion time
  • Heavy luck manipulation
  • Heavy glitch abuse
  • Contains speed-entertainment tradeoffs
Used emulator: BizHawk 1.4.1

About the run

I mainly re-used the infrastructure I already had from my last Pokémon Blue TAS. Most of the reasoning behind the general properties and choices made is described in the submission text (here) and is still valid for this movie.

Version choice

Unlike the previous run, this run is indeed version dependent. The route strongly depends on Bellsprout, which can only be found in the Blue version (the Red version has Oddish instead). Bellsprout and Oddish differ in their stats, which are highly important as will be described later. Other than that, there is no significant time advantage for any of the versions.

General Luck manipulation

Luck manipulation is a vital part in any Pokémon TAS, understanding and manipulating the random number generator (RNG) is important to get favourable outcomes quickly.
The game uses two addresses for random numbers, 0xFFD3 and 0xFFD4. Both of them are determined using the value of a hardware register (named DIV) and are considered to be unpredictable. Most of the time, only the value of 0xFFD3 is important, 0xFFD4 is rarely used throughout the game. Since the values change rather erratically and there are only 256 of them, it is quite easy to get the value you want for 0xFFD3 by simply brute-forcing some different input sequences.
The real problem occurs if you need to consider 0xFFD4 as well. Luckily, it is used only in three places thoughout the entire game:
  • determining the high byte of the Trainer ID when starting a new game
  • determining the species of a wild encounter
  • determining the initial first trash can in Vermilion gym.
Only the second point is a concern in this run. In each RNG cycle, 0xFFD3 is incremented by DIV, while 0xFFD4 is decremented by DIV, which makes their sum almost constant (DIV can change slightly inbetween the two operations, and there are carry values to consider). The sum 0xFFD3 + 0xFFD4 therefore has a special name, called the D-Sum. The D-Sum is known to slowly decrease in the overworld, while it increases during battles and menus.

Encounter mechanics

When moving in high grass, the game checks for an encounter after every step. Each area has its own encounter rate, which ranges from around 3% to 12%. Furthermore, each area has a list of 10 possible encounters with fixed probabilities. That is, each slot has a fixed chance, independent from the area you are in, only the encounter you get in that specific slot varies. For example, the encounter list for route 25 looks like this:
Slot Nr.EncounterValue rangeChance
1 Lvl 8 Caterpie 0x00 - 0x32 51/256 (~20%)
2 Lvl 9 Metapod 0x33 - 0x65 51/256 (~20%)
3 Lvl 13 Pidgey 0x66 - 0x8C 39/256 (~15%)
4 Lvl 12 Bellsprout0x8D - 0xA5 25/256 (~10%)
5 Lvl 13 Bellsprout0xA6 - 0xBE 25/256 (~10%)
6 Lvl 12 Abra 0xBF - 0xD7 25/256 (~10%)
7 Lvl 14 Bellsprout0xD8 - 0xE4 13/256 (~5%)
8 Lvl 10 Abra 0xE5 - 0xF1 13/256 (~5%)
9 Lvl 7 Kakuna 0xF2 - 0xFC 11/256 (~4%)
10Lvl 8 Weedle 0xFD - 0xFF 3/256 (~1%)
The encounter rate of route 25 is 0x0F (~5.86%). If you step in high grass in route 25, the values of 0xFFD3 and 0xFFD4 are considered: If the value of 0xFFD3 is lower than the encounter rate 0x0F, you get an encounter. The value of 0xFFD4 determines the species: Depending on the value range which 0xFFD4 lies in, you get the respective encounter.
That means if you want to encounter a Lvl 14 Bellsprout, you need 0xFFD3 to be between 0x00 and 0x0E and 0xFFD4 to be between 0xD8 and 0xE4. Therefore, your D-Sum must be between 0xD8 and 0xF2. This makes manipulating encounters the hardest luck manipulation in this game. There is no way to change your D-Sum quickly, and if it is not in the desired range, there is no other way than to wait for the D-Sum to slowly change in order to get it where you want it. This is especially problematic if you need multiple consecutive encounters: After your first encounter, your D-Sum is always in a certain range (the range you needed it to be for that encounter), which might be not nearly where you need it for the second encounter. For specific encounter combinations, you therefore have no other option than to wait around for several seconds to manipulate the D-Sum.
The problem gets even worse if you need the encounters to have specific stats. The DVs of wild encounters are randomly determined right after the encounter species is chosen, which makes it arguably the hardest thing to manipulate.

Hard luck manipulations featured in this run

  • manipulating the Trainer ID to be 0x2E5E (1/65536; ~0.0015%)
  • manipulating Charmanders DVs to be exactly 7 Attack, 6 Defense, 12 Speed, 9 Special (1/65536; ~0.0015%)
  • manipulating 4 consecutive encounters in route 25:
    • Lvl 12 Bellsprout with Special DV 0 (350/1048576; ~0.03%)
    • Lvl 14 Bellsprout with low Defense and HP DVs (~0.1%)
    • Lvl 9 Metapod (714/65536; ~1%)
    • Lvl 12 Bellsprout with low Defense and HP DVs (~0.4%)

Speed-entertainment tradeoffs

This run follows the usual speed-entertainment tradeoff used for this game, which is forgoing red bar: If a fighting Pokémon is at low health, is produces a constant warning sound that disables all other sound effects and therefore saves time, but the constant beeping is a major annoyance. Unlike the previous run, it does not follow the character naming convention, as the player name is actually an important part of the used route.

Glitches used in this movie

Three of the used glitches were also used in the previous run, I will list them here for completion. A more comprehensive description of them can be found in the previous submission text. The fourth glitch is the newly introduced one that allowed for the great time savings and will be discussed in detail.

Brock skip glitch

Uses save and reset to to skip fighting Brock.

Skipping mandatory trainers (Trainer-Fly)

Uses the Trainer-Fly glitch to disable all trainers in an area and therefore skip them. Used to skip all Mt. Moon trainers.

Encountering arbitrary Pokémon or Trainers (Trainer-Fly)

Re-entering an area after using Trainer-Fly and fighting another trainer produces a wild encounter, the species of which is determined by the special stat of the last fought Pokémon. Used in this run to catch the otherwise unobtainable Pokémon Mew.

Transform glitch

While this gltich is known for a long time, its effects were not well-explored. It is triggered by using the move Transform on an enemy that has more moves than the own Pokémon. If the last move is swapped with the first one while transformed, the original moves will be swapped as well, except that the last transformed move does not exist in the original move list. Therefore, after the swap, the first move slot is empty, a fact that is not well handled by the game. The game expects every Pokémon to have at least one move, so it lets you use the non-existing move in battles.
Disclaimer: The following paragraphs contain technical details of the glitch's mechanics and require a basic understanding of programming and assembly language. If you are not interested, you can skip this part. The bottom line is that tricky arbitrary code execution is performed to trigger the ending cutscene when the move is used.
Since there is no valid data defined for that move, it reads data from other areas that are not meant to be move parameters. This results, at least for this particular version of the game, in a damaging move of the glitch type "Cooltrainer♀" with base power 102, ~20% accuracy, 13 PP and the animation of Fissure. The real use of it, however, lies in its move effect. After a successful attack, the glitch effect 0x74 is triggered, which executes code starting from 0xF928. The address 0xF928 is in a memory segment called "Echo RAM", and is a replicate of the actual RAM address 0xD928.
To exploit this, the goal is to manipulate the memory content starting from 0xD928 to spell out assembly that
  • tricks the game into running the ending cutscene
  • does not crash the game in the process
The following table shows the RAM map of that particular memory region:
Addresses Content Comment
0xD928 - 0xD953 Data of 4th enemy Pokémon This will be the data of Squirtle, since the last trainer with four Pokémon will be the Nugget Bridge rival. Luckily, Squrtle's data does not crash the game, but it's not useful, either.
0xD954 - 0xD97F Data of 5th enemy Pokémon No trainer had a 5th Pokémon, so the data is all 0s. Not dangerous, not helpful.
0xD980 - 0xD9AB Data of 6th enemy Pokémon All 0s as well. Not dangerous, not helpful.
0xD9AC - 0xD9ED Trainer name for the 6 enemy Pokémons The trainer name is always set to the player's name. Limited manipulation is possible here and will be used.
0xD9EE - 0xDA2F Nickname for the 6 enemy Pokémons Empty names, not useful.
0xDA30 - 0xDA31 Pointer to data of current area trainers Potentially dangerous, an area is needed the trainer pointer of which doesn't trigger fatal assembly. No real manipulation potential.
0xDA32 - 0xDA3F Misc. data (e.g. Cinnabar Island gym quiz) Always 0
0xDA40 - 0xDA45 Game time in hours, minutes, seconds, frames Potentially dangerous, the in-game time must be chosen to not crash the game. No real manipulation potential.
0xDA46 - 0xDA7F Misc. data (e.g. Safari Zone/Daycare data) Always 0
0xDA80 - 0xDA95 Species of the 20 Pokémon in the current box Dangerous, the end of list marker 0xFF reads as assembly "RST 38" which crashes the game and must be avoided.
0xDA96 - 0xDAB6 Data of 1st boxed Pokémon This is where the most manipulation potential is. The Trainer ID and the DVs can be fully manipulated, and the experience, EVs, etc. at least to some extend.
The ultimate manipulation goal is to write 0x76 to address 0xD35E. This address holds the current map, and 0x76 is the Hall of Fame room. Since this will happen during a battle, and after each battle the map is reloaded, this is everything that is necessary to trigger the ending cutscene.
The manipulation opportunities are quite limited, however, especially early in the game. The best options are the Trainer name, the Trainer ID and the stored Pokémon's EVs and DVs. We will consider them in reverse order: The EVs and DVs are the last useful information that is stored, so it needs to be the ending of the routine: We want to execute
LD (HL) 0x76
RET
which spells out to
0xDAB0   0x36   // lower byte of Special EV value
0xDAB1   0x76   // Attack and Defense DVs
0xDAB2   0xC9   // Speed and Special DVs
What we need to achieve up to this point is getting the value 0xD35E into the registers hl, which means putting 0xD3 into h and 0x5E into l. Register l can be filled using the Trainer ID:
LD l, 0x5E
spells out to
0xDAA2   0x2E   // high byte of Trainer ID
0xDAA3   0x5E   // low byte of Trainer ID
There is not much room left for manipulating h to 0xD3. The best option is to use the Trainer name, but since the available assembly is limited by the characters in the alphabet here, some trickery is required.
The name used in this run is "BD♀(pk)RT", where (pk) is the special character that displays the first half of the text "pkmn".
It spells out to the following assembly
ADD a,c
ADD a,e   // after this operation, a happens to have the value 0xD3
PUSH af   // pushes af onto stack
POP hl    // pop stack into hl, essentially copying af to hl. h now has the desired value 0xD3.
SUB a,c   // undo all changes that were made to a. It's necessary because the name occurs four
SUB a,e   //  times and subsequent occurences would otherwise corrupt h's value.
All other assembly operations are only required to not crash and not mess up the value of hl, which is luckily quite easy to achieve.
For this setup to work, we therefore need to do the following
  • Have a Trainer ID of 0x2E5E (11870 in decimal)
  • Name the player "BD♀(pk)RT"
  • Manipulate Charmander to have 7 Attack DV, 6 Defense DV, 12 Speed DV, 9 Special DV
  • Catch Mew and get it to level 10 to learn Transform (Ditto knows Transform, too, but is way harder to obtain)
  • Get Charmeleon to have 0x36 as the lower byte of its special EV. This is where having Bellsprout instead of Oddish is important.
  • Store Charmeleon in a box
  • Perform the Transform glitch
  • Hope that the game doesn't crash
The last point in the list is added because of an undesired side effect that the use of that glitch move can have, which is commonly called the "TMTRAINER effect". It is caused in the following way: Even though the move itself is perfectly stable and harmless, its name is not. There is no name for the move, so the game looks for it past the actual move name list. Where it ends up is determined by the number of end of string symbols (0x50) in the game's RAM at that point, which is highly unpredictable. This random portion of RAM (20 bytes) is then copied to the name buffer and from there to the string buffer. This last copy operation is where the problem occurs: the programmers assumed that each name always ends with an end of string sybmol, so the copy operation continues until it is found. The random move name that is picked from the memory may not have such a symbol, so the game copies far too many bytes, overwriting other important memory areas, glitching out the game and most likely crashing it.
A full trace log of the actual code executed during this run can be seen in the trace log below.
Trace log:
F928:B1        OR C            SP:dfed A:28 B:00 C:e6 D:00 E:01 F:00 H:f9 L:28  Cy:69752
F929:00        NOP             SP:dfed A:ee B:00 C:e6 D:00 E:01 F:00 H:f9 L:28  Cy:69756
F92A:00        NOP             SP:dfed A:ee B:00 C:e6 D:00 E:01 F:00 H:f9 L:28  Cy:69760
F92B:00        NOP             SP:dfed A:ee B:00 C:e6 D:00 E:01 F:00 H:f9 L:28  Cy:69764
F92C:00        NOP             SP:dfed A:ee B:00 C:e6 D:00 E:01 F:00 H:f9 L:28  Cy:69768
F92D:15        DEC D           SP:dfed A:ee B:00 C:e6 D:00 E:01 F:00 H:f9 L:28  Cy:69772
F92E:15        DEC D           SP:dfed A:ee B:00 C:e6 D:ff E:01 F:40 H:f9 L:28  Cy:69776
F92F:2D        DEC L           SP:dfed A:ee B:00 C:e6 D:fe E:01 F:40 H:f9 L:28  Cy:69780
F930:21 27 91  LD HL,#9127h    SP:dfed A:ee B:00 C:e6 D:fe E:01 F:40 H:f9 L:27  Cy:69784
F933:37        SCF             SP:dfed A:ee B:00 C:e6 D:fe E:01 F:40 H:91 L:27  Cy:69796
F934:2E 5E     LD L,#5Eh       SP:dfed A:ee B:00 C:e6 D:fe E:01 F:10 H:91 L:27  Cy:69800
F936:00        NOP             SP:dfed A:ee B:00 C:e6 D:fe E:01 F:10 H:91 L:5e  Cy:69808
F937:0C        INC C           SP:dfed A:ee B:00 C:e6 D:fe E:01 F:10 H:91 L:5e  Cy:69812
F938:30 00     JR NC,F93Ah     SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69816
F93A:00        NOP             SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69824
F93B:00        NOP             SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69828
F93C:00        NOP             SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69832
F93D:00        NOP             SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69836
F93E:00        NOP             SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69840
F93F:00        NOP             SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69844
F940:00        NOP             SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69848
F941:00        NOP             SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69852
F942:00        NOP             SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69856
F943:98        SBC A,B         SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69860
F944:88        ADC A,B         SP:dfed A:ed B:00 C:e7 D:fe E:01 F:40 H:91 L:5e  Cy:69864
F945:23        INC HL          SP:dfed A:ed B:00 C:e7 D:fe E:01 F:00 H:91 L:5e  Cy:69868
F946:1E 1E     LD E,#1Eh       SP:dfed A:ed B:00 C:e7 D:fe E:01 F:00 H:91 L:5f  Cy:69876
F948:19        ADD HL,DE       SP:dfed A:ed B:00 C:e7 D:fe E:1e F:00 H:91 L:5f  Cy:69884
F949:11 00 2C  LD DE,#2C00h    SP:dfed A:ed B:00 C:e7 D:fe E:1e F:10 H:8f L:7d  Cy:69892
F94C:00        NOP             SP:dfed A:ed B:00 C:e7 D:2c E:00 F:10 H:8f L:7d  Cy:69904
F94D:18 00     JR F94Fh        SP:dfed A:ed B:00 C:e7 D:2c E:00 F:10 H:8f L:7d  Cy:69908
F94F:1D        DEC E           SP:dfed A:ed B:00 C:e7 D:2c E:00 F:10 H:8f L:7d  Cy:69920
F950:00        NOP             SP:dfed A:ed B:00 C:e7 D:2c E:ff F:50 H:8f L:7d  Cy:69924
F951:16 00     LD D,#00h       SP:dfed A:ed B:00 C:e7 D:2c E:ff F:50 H:8f L:7d  Cy:69928
F953:18 00     JR F955h        SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69936
F955:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69948
F956:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69952
F957:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69956
F958:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69960
F959:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69964
F95A:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69968
F95B:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69972
F95C:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69976
F95D:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69980
F95E:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69984
F95F:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69988
F960:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69992
F961:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69996
F962:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70000
F963:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70004
F964:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70008
F965:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70012
F966:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70016
F967:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70020
F968:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70024
F969:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70028
F96A:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70032
F96B:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70036
F96C:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70040
F96D:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70044
F96E:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70048
F96F:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70052
F970:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70056
F971:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70060
F972:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70064
F973:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70068
F974:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70072
F975:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70076
F976:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70080
F977:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70084
F978:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70088
F979:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70092
F97A:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70096
F97B:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70100
F97C:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70104
F97D:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70108
F97E:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70112
F97F:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70116
F980:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70120
F981:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70124
F982:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70128
F983:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70132
F984:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70136
F985:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70140
F986:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70144
F987:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70148
F988:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70152
F989:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70156
F98A:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70160
F98B:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70164
F98C:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70168
F98D:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70172
F98E:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70176
F98F:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70180
F990:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70184
F991:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70188
F992:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70192
F993:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70196
F994:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70200
F995:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70204
F996:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70208
F997:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70212
F998:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70216
F999:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70220
F99A:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70224
F99B:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70228
F99C:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70232
F99D:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70236
F99E:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70240
F99F:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70244
F9A0:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70248
F9A1:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70252
F9A2:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70256
F9A3:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70260
F9A4:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70264
F9A5:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70268
F9A6:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70272
F9A7:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70276
F9A8:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70280
F9A9:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70284
F9AA:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70288
F9AB:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70292
F9AC:81        ADD A,C         SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70296
F9AD:83        ADD A,E         SP:dfed A:d4 B:00 C:e7 D:00 E:ff F:10 H:8f L:7d  Cy:70300
F9AE:F5        PUSH AF         SP:dfed A:d3 B:00 C:e7 D:00 E:ff F:10 H:8f L:7d  Cy:70304
F9AF:E1        POP HL          SP:dfeb A:d3 B:00 C:e7 D:00 E:ff F:30 H:8f L:7d  Cy:70320
F9B0:91        SUB C           SP:dfed A:d3 B:00 C:e7 D:00 E:ff F:30 H:d3 L:30  Cy:70332
F9B1:93        SUB E           SP:dfed A:ec B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70336
F9B2:50        LD D,B          SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70340
F9B3:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70344
F9B4:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70348
F9B5:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70352
F9B6:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70356
F9B7:81        ADD A,C         SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70360
F9B8:83        ADD A,E         SP:dfed A:d4 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70364
F9B9:F5        PUSH AF         SP:dfed A:d3 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70368
F9BA:E1        POP HL          SP:dfeb A:d3 B:00 C:e7 D:00 E:ff F:30 H:d3 L:30  Cy:70384
F9BB:91        SUB C           SP:dfed A:d3 B:00 C:e7 D:00 E:ff F:30 H:d3 L:30  Cy:70396
F9BC:93        SUB E           SP:dfed A:ec B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70400
F9BD:50        LD D,B          SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70404
F9BE:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70408
F9BF:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70412
F9C0:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70416
F9C1:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70420
F9C2:81        ADD A,C         SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70424
F9C3:83        ADD A,E         SP:dfed A:d4 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70428
F9C4:F5        PUSH AF         SP:dfed A:d3 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70432
F9C5:E1        POP HL          SP:dfeb A:d3 B:00 C:e7 D:00 E:ff F:30 H:d3 L:30  Cy:70448
F9C6:91        SUB C           SP:dfed A:d3 B:00 C:e7 D:00 E:ff F:30 H:d3 L:30  Cy:70460
F9C7:93        SUB E           SP:dfed A:ec B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70464
F9C8:50        LD D,B          SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70468
F9C9:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70472
F9CA:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70476
F9CB:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70480
F9CC:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70484
F9CD:81        ADD A,C         SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70488
F9CE:83        ADD A,E         SP:dfed A:d4 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70492
F9CF:F5        PUSH AF         SP:dfed A:d3 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70496
F9D0:E1        POP HL          SP:dfeb A:d3 B:00 C:e7 D:00 E:ff F:30 H:d3 L:30  Cy:70512
F9D1:91        SUB C           SP:dfed A:d3 B:00 C:e7 D:00 E:ff F:30 H:d3 L:30  Cy:70524
F9D2:93        SUB E           SP:dfed A:ec B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70528
F9D3:50        LD D,B          SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70532
F9D4:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70536
F9D5:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70540
F9D6:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70544
F9D7:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70548
F9D8:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70552
F9D9:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70556
F9DA:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70560
F9DB:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70564
F9DC:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70568
F9DD:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70572
F9DE:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70576
F9DF:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70580
F9E0:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70584
F9E1:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70588
F9E2:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70592
F9E3:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70596
F9E4:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70600
F9E5:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70604
F9E6:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70608
F9E7:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70612
F9E8:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70616
F9E9:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70620
F9EA:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70624
F9EB:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70628
F9EC:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70632
F9ED:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70636
F9EE:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70640
F9EF:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70644
F9F0:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70648
F9F1:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70652
F9F2:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70656
F9F3:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70660
F9F4:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70664
F9F5:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70668
F9F6:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70672
F9F7:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70676
F9F8:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70680
F9F9:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70684
F9FA:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70688
F9FB:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70692
F9FC:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70696
F9FD:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70700
F9FE:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70704
F9FF:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70708
FA00:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70712
FA01:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70716
FA02:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70720
FA03:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70724
FA04:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70728
FA05:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70732
FA06:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70736
FA07:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70740
FA08:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70744
FA09:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70748
FA0A:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70752
FA0B:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70756
FA0C:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70760
FA0D:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70764
FA0E:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70768
FA0F:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70772
FA10:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70776
FA11:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70780
FA12:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70784
FA13:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70788
FA14:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70792
FA15:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70796
FA16:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70800
FA17:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70804
FA18:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70808
FA19:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70812
FA1A:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70816
FA1B:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70820
FA1C:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70824
FA1D:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70828
FA1E:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70832
FA1F:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70836
FA20:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70840
FA21:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70844
FA22:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70848
FA23:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70852
FA24:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70856
FA25:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70860
FA26:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70864
FA27:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70868
FA28:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70872
FA29:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70876
FA2A:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70880
FA2B:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70884
FA2C:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70888
FA2D:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70892
FA2E:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70896
FA2F:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70900
FA30:56        LD D,(HL)       SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70904
FA31:89        ADC A,C         SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70912
FA32:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70916
FA33:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70920
FA34:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70924
FA35:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70928
FA36:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70932
FA37:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70936
FA38:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70940
FA39:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70944
FA3A:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70948
FA3B:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70952
FA3C:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70956
FA3D:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70960
FA3E:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70964
FA3F:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70968
FA40:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70972
FA41:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70976
FA42:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70980
FA43:1A        LD A,(DE)       SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70984
FA44:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70992
FA45:06 00     LD B,#00h       SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70996
FA47:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71004
FA48:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71008
FA49:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71012
FA4A:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71016
FA4B:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71020
FA4C:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71024
FA4D:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71028
FA4E:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71032
FA4F:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71036
FA50:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71040
FA51:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71044
FA52:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71048
FA53:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71052
FA54:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71056
FA55:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71060
FA56:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71064
FA57:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71068
FA58:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71072
FA59:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71076
FA5A:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71080
FA5B:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71084
FA5C:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71088
FA5D:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71092
FA5E:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71096
FA5F:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71100
FA60:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71104
FA61:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71108
FA62:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71112
FA63:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71116
FA64:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71120
FA65:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71124
FA66:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71128
FA67:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71132
FA68:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71136
FA69:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71140
FA6A:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71144
FA6B:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71148
FA6C:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71152
FA6D:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71156
FA6E:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71160
FA6F:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71164
FA70:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71168
FA71:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71172
FA72:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71176
FA73:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71180
FA74:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71184
FA75:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71188
FA76:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71192
FA77:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71196
FA78:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71200
FA79:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71204
FA7A:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71208
FA7B:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71212
FA7C:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71216
FA7D:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71220
FA7E:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71224
FA7F:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71228
FA80:01 B2 FF  LD BC,#FFB2h    SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71232
FA83:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71244
FA84:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71248
FA85:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71252
FA86:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71256
FA87:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71260
FA88:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71264
FA89:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71268
FA8A:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71272
FA8B:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71276
FA8C:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71280
FA8D:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71284
FA8E:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71288
FA8F:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71292
FA90:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71296
FA91:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71300
FA92:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71304
FA93:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71308
FA94:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71312
FA95:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71316
FA96:B2        OR D            SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71320
FA97:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:80 H:d3 L:30  Cy:71324
FA98:3A        LD A,(HL-)      SP:dfed A:00 B:ff C:b2 D:00 E:ff F:80 H:d3 L:30  Cy:71328
FA99:14        INC D           SP:dfed A:00 B:ff C:b2 D:00 E:ff F:80 H:d3 L:2f  Cy:71336
FA9A:00        NOP             SP:dfed A:00 B:ff C:b2 D:01 E:ff F:00 H:d3 L:2f  Cy:71340
FA9B:14        INC D           SP:dfed A:00 B:ff C:b2 D:01 E:ff F:00 H:d3 L:2f  Cy:71344
FA9C:14        INC D           SP:dfed A:00 B:ff C:b2 D:02 E:ff F:00 H:d3 L:2f  Cy:71348
FA9D:2D        DEC L           SP:dfed A:00 B:ff C:b2 D:03 E:ff F:00 H:d3 L:2f  Cy:71352
FA9E:34        INC (HL)        SP:dfed A:00 B:ff C:b2 D:03 E:ff F:40 H:d3 L:2e  Cy:71356
FA9F:2D        DEC L           SP:dfed A:00 B:ff C:b2 D:03 E:ff F:00 H:d3 L:2e  Cy:71368
FAA0:0A        LD A,(BC)       SP:dfed A:00 B:ff C:b2 D:03 E:ff F:40 H:d3 L:2d  Cy:71372
FAA1:05        DEC B           SP:dfed A:00 B:ff C:b2 D:03 E:ff F:40 H:d3 L:2d  Cy:71380
FAA2:2E 5E     LD L,#5Eh       SP:dfed A:00 B:fe C:b2 D:03 E:ff F:40 H:d3 L:2d  Cy:71384
FAA4:00        NOP             SP:dfed A:00 B:fe C:b2 D:03 E:ff F:40 H:d3 L:5e  Cy:71392
FAA5:15        DEC D           SP:dfed A:00 B:fe C:b2 D:03 E:ff F:40 H:d3 L:5e  Cy:71396
FAA6:BB        CP E            SP:dfed A:00 B:fe C:b2 D:02 E:ff F:40 H:d3 L:5e  Cy:71400
FAA7:05        DEC B           SP:dfed A:00 B:fe C:b2 D:02 E:ff F:50 H:d3 L:5e  Cy:71404
FAA8:20 05     JR NZ,FAAFh     SP:dfed A:00 B:fd C:b2 D:02 E:ff F:50 H:d3 L:5e  Cy:71408
FAAF:04        INC B           SP:dfed A:00 B:fd C:b2 D:02 E:ff F:50 H:d3 L:5e  Cy:71420
FAB0:36 76     LD (HL),#76h    SP:dfed A:00 B:fe C:b2 D:02 E:ff F:10 H:d3 L:5e  Cy:71424
FAB2:C9        RET             SP:dfed A:00 B:fe C:b2 D:02 E:ff F:10 H:d3 L:5e  Cy:71436

The route

Intro

The Trainer ID is manipulated to be 0x2E5E, a requirement for the Transform glitch setup. It needed 31 total frames of delay to achieve, which is the shortest delay possible for this ID. The player is named "BD♀(pk)RT", which is also part of the setup. This will cost some seconds over the course of the run, as each displayed letter delays the game by one frame, making shorter names faster. The rival's name is set to default, renaming it would take longer than the time saved by a shorter name.

Pallet Town

I pick Charmander and manipulate its DVs to be exactly 7 Attack, 6 Defense, 12 Speed and 9 Special; another part of the setup. As a result, Charmander's stats are not as high as they could be, and the trainer fights will therefore take longer compared to the published run. Also, when giving Oak the parcel, it is acutally faster to stand to the left of him instead of the front when talking to him. While this results in 3 additional steps, it makes Gary's walking animation 2 steps shorter, and since NPCs move only half as fast as you, it saves 15 frames. Even the developers hadn't thought of this it seems, as all the NPC rotations in that cutscene assume that you are standing in front of Oak.

Pewter City

I buy 1 escape rope and 2 Pokéballs at the mart. The Pokéballs will be used to catch Abra and Mew. Also, Brock skip glitch is performed.

Mt. Moon

I visit the Pokécenter to set the teleport location and use the escape rope to initiate Trainer-Fly and skip all the trainers in the third floor. A hidden Ether is picked up that will be used at the end of the run.

Cerulean City

I visit the Pokécenter again to set the teleport location and proceed by clearing the Nugget Bridge.

Route 24

I catch Abra and immediately trigger the second and last Trainer-Fly.

Route 25

The Hiker is fought to set up for the arbitrary encounter glitch. Now, a whole lot of encounters are used to finish the setup of the Transform glitch: A Lvl 12 Bellsprout is manipulated to have a Special DV of 0 and therefore a Special stat of 21, the number required to encounter Mew. It is killed to increase the Special EV of Charmeleon by 70 (This value is the reason Oddish doesn't work, as it has 75 base special). Mew is manipulated to have an Attack DV of 15 to make the upcoming fights faster, and is caught using the last Pokéball. Mew is switched to the front of the team, and is used to kill the Lvl 14 Bellsprout encounter. Next up is a Lvl 9 Metapod, which is killed using all three Pokémons to split up its EVs and give Charmeleon exactly 8 Special EV, which brings its lower byte to 0x36, the exact value needed as part of the setup. The last encounter is a Lvl 12 Bellsprout, which is manipulated to have bad defensive stats and is killed by Mew to reach level 10 where it learns Transform. Having finished the setup, Abra is used to teleport back to Cerulean City.
Note that the so-called "3 Step Rule" is used in this game and requires you to walk at least 3 steps between two consecutive encounters.

Cerulean City

Charmeleon is stored in the box as the last setup step, and then we are heading out to route 4.

Route 4

A wild Rattata is used to perform the Transform glitch. In order to make the glitch move usable, the Ether from Mt. Moon is used on it to restore its PP. After successfully using the glitch move in another encounter, I end the battle by fleeing and due to the successful setup, the ending cutscene starts. I need to wait 3 seconds before actually using the move to progress the in-game timer enough in order to successfully execute the code.

turska: Judging.

turska: Movie file replaced with an improvement by the author. The new movie is 902 frames faster.

turska: A massive improvement to a run that was already insane. Accepting for publication as an improvement to the published movie.
Spikestuff: (jumps out of bed) Mine.... Sorry for the delay I had to struggle with school... focusing on the final dumps now.


Former player
Joined: 6/30/2010
Posts: 1107
Location: Zurich, Switzerland
Spikestuff wrote:
andypanther wrote:
Now how about a gen II run?
Mean like Gold/Silver :3
A glitched TAS would be amazing, but I would be hyped for any new TAS of gen II. Just to remind, the only run of that gen that is currently published is from 2006!
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: 4045
MrWint wrote:
I already thought about a G/S/C run as well, since there seems to be no run of it (not counting the glitchless run), but I don't know much about the glitches in this generation, yet, and they are not as well explored as in Gen I afaik. Also, it appears to be harder to gather information about it (e.g. I wasn't able to find any reliable information on the glitch used in the video you linked). There will be a lot of research to do first, but I may be up for it in the near future.
I suggest you approach TheZZAZZGlitch ( http://www.youtube.com/user/thezzazzglitch ) and PM him. He is an experienced glitch hunter in RBY and GSC (he helped demonstrate an arbitrary execution glitch in gold with the coin case, for example) and knows his stuff
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
Skilled player (1743)
Joined: 9/17/2009
Posts: 4986
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
MrWint wrote:
I already thought about a G/S/C run as well, since there seems to be no run of it (not counting the glitchless run), but I don't know much about the glitches in this generation, yet, and they are not as well explored as in Gen I afaik. Also, it appears to be harder to gather information about it (e.g. I wasn't able to find any reliable information on the glitch used in the video you linked). There will be a lot of research to do first, but I may be up for it in the near future.
Here's an interesting post on TASVideos about G/S/C glitches: Instant victory glitch + Map distortion
Post subject: Re: Pokemon blue: YouTube HD
Skilled player (1743)
Joined: 9/17/2009
Posts: 4986
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
antd wrote:
http://youtube.com/watch?v=LiM1uGUviDM
http://i762.photobucket.com/albums/xx262/jlun2/misleadingtitle_zps1abd55bc.png 1. It looks like the title was made specifically to attract attention with "OMG AMAZING" in front of it for no real reason. 2. Speedrun? Last time I complained, people were quick to point out that there was a TAS logo in front. But I don't see that now. Infact, other than the description, which says "by MrWint gb tas", there's not much to tell the viewers that it's indeed a TAS.
This run follows the usual speed-entertainment tradeoff used for this game, which is forgoing red bar: If a fighting Pokémon is at low health, is produces a constant warning sound that disables all other sound effects and therefore saves time, but the constant beeping is a major annoyance. Unlike the previous run, it does not follow the character naming convention, as the player name is actually an important part of the used route.
Uh....but I thought you had to wait 3 seconds for the ingame timer to go up. Wouldn't that make this tradeoff not a factor for this run?
Post subject: Re: Pokemon blue: YouTube HD
Spikestuff
They/Them
Editor, Publisher, Expert player (2656)
Joined: 10/12/2011
Posts: 6449
Location: The land down under.
jlun2 wrote:
antd wrote:
http://youtube.com/watch?v=LiM1uGUviDM
http://i762.photobucket.com/albums/xx262/jlun2/misleadingtitle_zps1abd55bc.png 1. It looks like the title was made specifically to attract attention with "OMG AMAZING" in front of it for no real reason. 2. Speedrun? Last time I complained, people were quick to point out that there was a TAS logo in front. But I don't see that now. Infact, other than the description, which says "by MrWint gb tas", there's not much to tell the viewers that it's indeed a TAS.
And then compare it to mine.
Spikestuff wrote:
Creating new temp. Link to video
image (went through YouTube's "magical" conversion (it was originally png))
WebNations/Sabih wrote:
+fsvgm777 never censoring anything.
Disables Comments and Ratings for the YouTube account. Something better for yourself and also others.
Post subject: Re: Pokemon blue: YouTube HD
Skilled player (1743)
Joined: 9/17/2009
Posts: 4986
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Spikestuff wrote:
And then compare it to mine. image (went through YouTube's "magical" conversion (it was originally png))[/url]
Admittedly, I didn't even noticed the "Temp Encode" until I saw the image. Infact, the first thing I saw was "[TAS] GB Pokémo", with "TAS" visible even though the video was cropped. :P
Joined: 11/21/2012
Posts: 53
Location: France
Too nice ;) i vote yes.
"Si le mal existe en ce monde, il se cache dans le cœur des hommes." "If there is evil in this world, it lurks in the hearts of man." Edward D. Morrison - Tales of Phantasia
Site Admin, Skilled player (1255)
Joined: 4/17/2010
Posts: 11495
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
We are this submission away from the third empty queue in history, and turska isn't around...
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.
Editor
Joined: 3/31/2010
Posts: 1466
Location: Not playing Puyo Tetris
feos wrote:
We are this submission away from the third empty queue in history, and turska isn't around...
Almost. Metal Warriors got submitted. Does TASVideos break if we have no queue?
When TAS does Quake 1, SDA will declare war. The Prince doth arrive he doth please.
Editor, Player (44)
Joined: 7/11/2010
Posts: 1029
hegyak wrote:
feos wrote:
We are this submission away from the third empty queue in history, and turska isn't around...
Almost. Metal Warriors got submitted. Does TASVideos break if we have no queue?
I know that some sort of manual intervention by the admins is needed whenever the queue decreases in pagecount, at least from 3 to 2 or 2 to 1. I don't know if 1 to 0 is special.
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15629
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. ---- [2457] GB Pokémon: Blue Version "warp glitch" by MrWint in 28:07.28
Joined: 2/21/2008
Posts: 255
9 minute improvement on a 30 minute run? Are there special condition for the major improvement badge/icon?
"The guy was fatally injured and wants to be covered by God's tears (rain) before he dies. God is too busy to bother because it wastes frames." Frames 16:26
Joined: 2/3/2013
Posts: 320
Location: Germany
xnamkcor wrote:
9 minute improvement on a 30 minute run? Are there special condition for the major improvement badge/icon?
Setting the "Major improvement" flag is usually task of the publisher and a subjective decision. Looking at the obsoleted movies, not even 30mn+ improvements have been marked so far. Maybe the flag gets set by someone later on... Edit: Yeah, feos did so.
All syllogisms have three parts, therefore this is not a syllogism.
Site Admin, Skilled player (1255)
Joined: 4/17/2010
Posts: 11495
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
The guy who sets the flag needs to know where it is needed, so please poke me in such cases.
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.
Patashu
He/Him
Joined: 10/2/2005
Posts: 4045
MrWint wrote:
I already thought about a G/S/C run as well, since there seems to be no run of it (not counting the glitchless run), but I don't know much about the glitches in this generation, yet, and they are not as well explored as in Gen I afaik. Also, it appears to be harder to gather information about it (e.g. I wasn't able to find any reliable information on the glitch used in the video you linked). There will be a lot of research to do first, but I may be up for it in the near future.
Just as an update, werster and RingRush have been looking into glitch hunting/tweaking usage of glitches in Gen II: twitch.tv/werster So if you're still interested you could check that out, contact them and talk, etc EDIT: Werster just beat the elite four using a glitched route + instant victory glitch and it didn't crash!! This means he should be able to go on and beat Red. This is a great proof of concept that means the game can be fully beaten like this.
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
Spikestuff
They/Them
Editor, Publisher, Expert player (2656)
Joined: 10/12/2011
Posts: 6449
Location: The land down under.
Patashu wrote:
EDIT: Werster just beat the elite four using a glitched route + instant victory glitch and it didn't crash!! This means he should be able to go on and beat Red. This is a great proof of concept that means the game can be fully beaten like this.
Livestream Version He might upload a YouTube version soon.[/url]
WebNations/Sabih wrote:
+fsvgm777 never censoring anything.
Disables Comments and Ratings for the YouTube account. Something better for yourself and also others.
Post subject: Re: #4064: MrWint's GB Pokémon: Blue Version in 28:07.28
Joined: 9/21/2013
Posts: 2
Location: France
Hello, subscribing on the forum because some details of this video trouble me
TASVideoAgent wrote:
The EVs and DVs are the last useful information that is stored, so it needs to be the ending of the routine:
Why? Why don't you try to execute those two instructions as soon as possible? The RET will get you back where you want anyway. If I'm right (but I guess I'm not, you have thought way more than me about this), that would save you a lot of trouble. Can't you try to somehow have those values on that squirtle?
TASVideoAgent wrote:
The last point in the list is added because of an undesired side effect that the use of that glitch move can have, which is commonly called the "TMTRAINER effect". It is caused in the following way: Even though the move itself is perfectly stable and harmless, its name is not. There is no name for the move, so the game looks for it past the actual move name list. Where it ends up is determined by the number of end of string symbols (0x50) in the game's RAM at that point, which is highly unpredictable. This random portion of RAM (20 bytes) is then copied to the name buffer and from there to the string buffer. This last copy operation is where the problem occurs: the programmers assumed that each name always ends with an end of string sybmol, so the copy operation continues until it is found. The random move name that is picked from the memory may not have such a symbol, so the game copies far too many bytes, overwriting other important memory areas, glitching out the game and most likely crashing it.
Can't you exploit this like any regular buffer overflow? I.e., trying to erase the return value of current function in order to execute arbitrary code. How is it unpredictable? Is there really no way to predict it? Thanks for this awesome TAS, anyway :)
Post subject: Re: #4064: MrWint's GB Pokémon: Blue Version in 28:07.28
Skilled player (1041)
Joined: 7/24/2013
Posts: 175
Perdu wrote:
TASVideoAgent wrote:
The EVs and DVs are the last useful information that is stored, so it needs to be the ending of the routine:
Why? Why don't you try to execute those two instructions as soon as possible? The RET will get you back where you want anyway. If I'm right (but I guess I'm not, you have thought way more than me about this), that would save you a lot of trouble. Can't you try to somehow have those values on that squirtle?
I'm not sure whether I understand your question. The data structure that represents a boxed pokemon is fixed, it is made by the programmers, I can't change where each value is stored in memory. All I can do is manipulate the stats of it in a clever way. Some values are easy to manipulate (like the DVs), others can't be manipulated easily (like the Health, it depends on the level and levelling is slow). The last easy-to-use values in this structure are EVs and DVs (see http://datacrystal.romhacking.net/wiki/Pok%C3%A9mon_Red/Blue:RAM_map for a RAM map). The RET will bring me back to where I want, correct, but there is no RET until I manipulate one. And since these are the last useful values, it's the natural place for a RET to go. Using more pokemon would allow for more manipulation potential, but is unnecessary in this case and slower.
Perdu wrote:
TASVideoAgent wrote:
The last point in the list is added because of an undesired side effect that the use of that glitch move can have, which is commonly called the "TMTRAINER effect". It is caused in the following way: Even though the move itself is perfectly stable and harmless, its name is not. There is no name for the move, so the game looks for it past the actual move name list. Where it ends up is determined by the number of end of string symbols (0x50) in the game's RAM at that point, which is highly unpredictable. This random portion of RAM (20 bytes) is then copied to the name buffer and from there to the string buffer. This last copy operation is where the problem occurs: the programmers assumed that each name always ends with an end of string sybmol, so the copy operation continues until it is found. The random move name that is picked from the memory may not have such a symbol, so the game copies far too many bytes, overwriting other important memory areas, glitching out the game and most likely crashing it.
Can't you exploit this like any regular buffer overflow? I.e., trying to erase the return value of current function in order to execute arbitrary code. How is it unpredictable? Is there really no way to predict it?
Yes, in theory you can exploit it like any buffer overflow to manipulate the RAM contents. You cannot, however change the game code. Unlike on home computers, the game's code is not loaded into RAM, but is read and executed directly from ROM. All you can do is mess with the data, which is not as useful. You still need a weak point in the ROM code to redirect the code flow into RAM areas. Also, to use it productively, you would need to know every last bit of the game's assembly, which bytes of data correspond to what and how to manipulate them. There are way easier methods of arbitrary code execution in this game.
Skilled player (1041)
Joined: 7/24/2013
Posts: 175
I just noticed that the category of this movie was changed to "glitched". Can anybody tell me why, was there a recent change in policy (my previous movie was not marked as such)? If that is the "glitched" category, is there a "normal any%" or "glitchless" category as well, I thought the categories were "save corruption", "any%" and "151 Pokemon".
Post subject: Re: #4064: MrWint's GB Pokémon: Blue Version in 28:07.28
Joined: 9/21/2013
Posts: 2
Location: France
MrWint wrote:
I'm not sure whether I understand your question. The data structure that represents a boxed pokemon is fixed, it is made by the programmers, I can't change where each value is stored in memory. All I can do is manipulate the stats of it in a clever way. Some values are easy to manipulate (like the DVs), others can't be manipulated easily (like the Health, it depends on the level and levelling is slow). The last easy-to-use values in this structure are EVs and DVs (see http://datacrystal.romhacking.net/wiki/Pok%C3%A9mon_Red/Blue:RAM_map for a RAM map). The RET will bring me back to where I want, correct, but there is no RET until I manipulate one. And since these are the last useful values, it's the natural place for a RET to go. Using more pokemon would allow for more manipulation potential, but is unnecessary in this case and slower.
My question was: why are you using the *last* useful value, when you could use any of them? Is it the fastest way to have these values stored in the memory?
Site Admin, Skilled player (1255)
Joined: 4/17/2010
Posts: 11495
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
MrWint wrote:
I just noticed that the category of this movie was changed to "glitched". Can anybody tell me why, was there a recent change in policy (my previous movie was not marked as such)? If that is the "glitched" category, is there a "normal any%" or "glitchless" category as well, I thought the categories were "save corruption", "any%" and "151 Pokemon".
Post #355723 Post #355818 Changed your previous movie to "glitched" since it heavily corrupts memory and cuts significant amounts of gameplay that can be still seen in the "any%" version.
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.
Post subject: Re: #4064: MrWint's GB Pokémon: Blue Version in 28:07.28
Skilled player (1041)
Joined: 7/24/2013
Posts: 175
Perdu wrote:
My question was: why are you using the *last* useful value, when you could use any of them? Is it the fastest way to have these values stored in the memory?
I'm using all of the useful values. What I meant was that I'm using the last useful value for the RET instruction. this way I have all the other useful values available for manipulation. If I used an earlier value as ret, I would miss out on som manipulation potential. Also, all these instructions are executed during a single frame, so having a few instructions more or less won't change the number of frames, most of the time the CPU is waiting for VBlank (i.e. a new frame) anyway in order to continue.
feos wrote:
MrWint wrote:
I just noticed that the category of this movie was changed to "glitched". Can anybody tell me why, was there a recent change in policy (my previous movie was not marked as such)? If that is the "glitched" category, is there a "normal any%" or "glitchless" category as well, I thought the categories were "save corruption", "any%" and "151 Pokemon".
Post #355723 Post #355818 Changed your previous movie to "glitched" since it heavily corrupts memory and cuts significant amounts of gameplay that can be still seen in the "any%" version.
Thank you for the information. So the categories did get changed, there is a new "any%" category now, that disallows arbitrary code execution/memory manipulation.
Post subject: Re: #4064: MrWint's GB Pokémon: Blue Version in 28:07.28
Site Admin, Skilled player (1255)
Joined: 4/17/2010
Posts: 11495
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
feos wrote:
"glitched" since it heavily corrupts memory
MrWint wrote:
A better way may be banning arbitrary code execution, including memory manipulation, like the 151 Pokemon run does. This way it would be defined in a way you can actually work with, plus it is consistent with the current obsoletion chains.
Heavy deliberate memory corruption, opposite to glitches that don't reprogram the game, is what Memory corruption tag is for. It is just equal to arbitrary code execution.
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.
Joined: 12/29/2007
Posts: 489
Not sure if it's too late for this, but isn't the screenshot for this published run a little boring? It doesn't show off anything that makes this run unique. Now obviously showing off the "-" move (Cooltrainer move) would spoil the surprise, so here's a few alternate suggestions that would still make a viewer think "What is going on in this screenshot?" without direct spoilers: - Screenshot of "Mew learned Transform!" - Mew transforming into Rattata - The player switching to send out Abra in the middle of a battle
Editor, Expert player (2080)
Joined: 6/15/2005
Posts: 3284
Which screenshot do you think is good?