Submission #8564: GobouLePoissonBoue's GBA Pokémon Radical Red "Minimal Grind Mode, in-game codes" in 59:54.01

(Link to video)
Game Boy Advance
Minimal Grind Mode, in-game codes
BizHawk 2.8
214661
59.7275005696058
12187
PowerOn
rr3.01.gba
Submitted by GobouLePoissonBoue on 8/24/2023 1:47:29 PM
Submission Comments
Pokémon Radical Red finished in 59:54.006 by GobouLePoissonBoue.
  • Patch used for this ROM-hack: v3.01 (11th of July 2022 release)
This movie is the second fully complete TAS of a Pokémon ROM-hack, the first one being my own Pokémon Emerald Rogue TAS which aimed at finishing an Adventure as fast as possible on Hard Mode, thanks to a pre-made SaveRAM.
There were no attempts at TASing Pokémon Radical Red on any patch before my TAS. Therefore, this is the fastest completion of this ROM-hack in a TAS.
The v3.01 patch of Radical Red was used instead of the latest v4.0 patch, and this was done for multiple reasons. The first one is the much, MUCH faster HP bars. During the movie I enable an even faster option, making HP bars deplete instantly. The second reason is because the 3.01 version contains mechanics and glitches that were removed or patched in later patches, such as being able to search for a Pokémon in the water while being on land, or the A+B Party swap feature/glitch (will be explained later).

Game objectives

  • Emulator used: BizHawk 2.8
  • Uses in-game codes to obtain certain advantages
  • Waits during name selection screen to obtain a specific trainer ID
  • Abuses glitches to skip certain trainers
  • Manipulates RNG to get the right Pokémon from a randomized Egg
  • Skips a majority of the game by overwriting a bunch of RAM data with Pokémon data
  • Defeats the Elite Four with a team that becomes unbeatable thanks to glitch abuse

About the ROM-hack

Let me present to you one of the most popular modern Pokémon ROM-hacks. Here's Pokémon Radical Red, a ROM-hack made by soupercell! This is a difficulty hack set in the Kanto region, with most of the mechanics up to Gen 9 (only on latest patch), including: moves, abilities, Pokémon, battle mechanics, items, DexNav, Portable PC and battle gimmicks. Most of those up-to-date mechanics are present thanks to the wonderful CFRU engine made by Skeli!
This game is very difficult. You will have to make good use of your knowledge in order to overcome opposing trainer teams, and you'll have the immense availability of tools and strategies at your disposal to outpower or outplay the AI. To help you build your Pokémon, a lot of Quality of Life changes were added, such as free nature/ability change, a portable move relearner, and many more cool new little additions to make grinding much less painful. If you were looking for a challenge, Radical Red will give you a run for your money!
This hack features multiple difficulty modes and a few game options:
  • Easy Mode
  • Default Mode
  • Restricted Mode
  • Hardcore Mode
  • Randomizer options such as learnsets, abilities, Pokémon or scaled encounters
  • Minimal Grinding Mode
I had decided to play on Default difficulty and enable Minimal Grinding Mode. I've enabled this option since it makes every Pokémon have 31 IVs in every stat, and it completely removes EVs from the game, which made the TAS much easier to make since I wouldn't need to take IVs and EVs into account.
We will now get into more interesting topics, about the movie in itself.
Before this however, I'll need to unveil one crucial detail.

The RNG

This hack has a pretty interesting characteristic: most of the RNG in battle is pre-determined, by an RNG seed (generated upon pressing A on Charizard title screen, should be the initial seed) that will presumably generate the numbers of a PRNG known as the Mersenne Twister. This is only speculation though, as I haven't dived much into figuring out the way this RNG works. I've had a lot of experience with the RNG in this hack, and this is how I think it works.
Unfortunately, this means I'll have to work with the RNG that the game gives me, with no way to save and reset fast enough to save enough time (that would take almost 40 seconds). However I've gotten quite lucky fortunately, and aside from the Brock and Cerulean City Burglar battles you don't really need excellent RNG to get a decent time.
By the way, wild encounter mechanics are different: you can walk indefinitely without encountering any Pokémon, as opposed to vanilla Fire Red. This is pretty useful since I won't need to enable the Infinite Repel skill, despite obtaining it very early.

Explanation of glitches used

This TAS abuses a lot of glitches in order to reach the Hall Of Fame as fast as possible. Here are the ones I used in this TAS.

DexNav out-of-range glitch

When searching for a Pokémon with the DexNav, there's no time limit that'd make a Pokémon disappear. This was a feature on the 2.2b version, and was fixed quickly after since it was stupid broken.
Anyway... while there isn't a time limit, there is still a 21-tile distance limit before a Pokémon disappears. That means once the player gets 21 tiles away from the rustling grass that contains the Pokémon you're searching, the Pokémon will disappear and a textbox will be generated.
This textbox is the important part: it takes priority over tile scripts, such as the Mt. Moon nerd interruption that prompts a dialogue and a battle. Those scripts won't be played when the player walks on those tiles and gets 21 tiles away from encounter spots at the same time, saving a whole lot of time since battles and events can be skipped.

Rage boost glitch

This one is really straightforward: Rage will boost the user's Attack by two stages instead of one in Radical Red. I abuse this during the Brock battle only once.

A+B swap "glitch"

Why can this feature be called a glitch? The v3.0 update included a new feature, allowing players to swap Pokémon in their party quickly simply by pressing Select or A+B in the party menu. However it was found to be broken mechanically, and us Beta Testers weren't aware that there were two button inputs you could use this feature. As such, in the v3.01 update only the Select shortcut was removed. The A+B shortcut was still available, albeit not intended to be still present since the feature was supposed to be removed entirely. As of version 4.0 of the hack, this feature is entirely removed.
Now, why is this glitch important and how is it abused in the movie? This is very simple: the A+B swap feature can be used in the middle of a battle, to swap the current active Pokémon with another in the party, without needing to waste a turn. But that's not really how it works. In fact, when you swap your active Pokémon in slot 1 with a Pokémon in slot 2, you only swap the Pokémon, while the stats, ability, item, types or moves stay the same as Pokémon 1's. Basically, you only swap the "current active Pokémon in battle" status between two Pokémon. So once the Pokémon 2 you swapped faints, you can switch back Pokémon 1 into the battle, which means your Pokémon 1 essentially gets 2 HP bars at the cost of another Pokémon's.
But that's the part where things get really out of hand; even while fainted, Pokémon 2 can still be swapped with Pokémon 1. However if the fainted Pokémon 2 faints again, the game will softlock since it cannot find a sprite. You can avoid that by opening the party menu once to refresh the in-battle scene, before going to the party menu a second time and swap both Pokémon with the A+B swap glitch. So what does this mean? You guessed it, infinite HP bars.
The glitch is abused two times in the run to save time in battles: in the Cerulean City Puzzle Battle to get two Fletchling HP bars, and during every Elite Four battle as I heavily exploit Qwilfish's Prankster + Destiny Bond combo.

Route 25 script corruption glitch

In Pokémon Radical Red, there is active rain in Route 25's overworld. So each time you enter the route, the rain has to be loaded. Rain in the overworld seems to be loaded before the scripts and NPCs during the transition between Route 24 and Route 25, so basically it must be before put your foot on Route 25.
I abuse this by overworking the game, simply by walking back and forth very quickly between Routes 24 and 25. By making the rain load as it's about to stop and doing so multiple times, the game will start lagging a lot, making the rain load more and more slowly, until scripts cannot be fully loaded before the player sets foot on Route 25.
However my goal is to skip as many trainers as possible. To do that, I battle the first Hiker in the bottom part of the path, then execute the glitch as fast as possible, allowing me to skip two of the four mandatory trainer battles on the route and leaving only the Lass at the end of the path left for me to battle. The two trainers are skipped since their NPC sprites disappear. Why those in particular? Well, the GBA loads sprites from bottom to up, and luckily the trainers I can skip are all at the bottom of the path. Weirdly enough, those two would only disappear if I only battle the Hiker I mentioned earlier. Luckily again, this Hiker only has a Nosepass, and it doesn't paralyze me with Discharge.
Lastly, before battling the Lass at the end I must open the Bag menu before engaging in the battle because it stops the corruption entirely. It is necessary to do so since every script on the route is corrupted, and trying to start a trainer battle will interrupt the pre-battle transition and leave the game softlocked.

HP overflow

That glitch is simple enough: by acquiring a Pokémon that has more HP than its max HP values allows to, using a healing item on the Pokémon will heal the Pokémon back to 0 HP. If this was the last non-KO Pokémon in your party, then your entire party will be KO.
This will be useful for the next glitch, which is arguably the highlight of this TAS and the key to skip such a large part of the game.

Introducing...

The Expanded Party Glitch

Simply enough, the bullshit I'll be pulling with the Expanded Party Glitch is a mix of multiple glitches.
If you're familiar with Pokémon glitches, you may have heard about the Pomeg Glitch and its sub-glitches:
  • Have a party of three or more Pokémon, with the second-to-last one(s) being fainted and the first one ready to have its HP overflow to zero;
  • Engage in any battle, switch to your last Pokémon and win/flee the fight with that last Pokémon;
  • Put your last Pokémon in the PC;
  • Make your first Pokémon have its HP overflow (or underflow, if using Pomeg Berry) to zero in one way or another, in order to have a party with only KO'd team members.
At this point, entering any battle will make the player send a "?" Pokémon, unless the save file is reloaded or a new non-fainted Pokémon joins the team. This is because after exiting the battle with the last Pokémon in your party, the game remembers that the last Pokémon that had entered battle was in the last slot of your party. Which means that if you enter a battle after this with only fainted Pokémon in your team, the game will try to send the Pokémon in the last slot since it's the Pokémon that was sent in battle last. If the game is saved and reset, the game will forget about the slot and default to slot 1. If a new healthy Pokémon enters the team, the game won't need to remember the slot that was saved in memory.
Anyway, in order to execute the Expanded Party Glitch in Radical Red there is only one option: using the HP overflow glitch, since Pomeg Berry mechanics aren't broken anymore in the CFRU engine that Radical Red is based on. To do that there are two ways:
  • Method one: Hatch any kind of Egg since it weirdly enough has a chance to hatch with an HP value over maximum HP;
  • Method two: Make an in-game trade with certain NPCs to receive a Pokémon that has more HP than its maximum HP value.
However, only one of the two methods can be used depending on your game mode. If you're on Minimal Grinding Mode like I am in this TAS, you'll have to use method two. Those weird HP mechanics are very likely caused by IVs and stat calculation, hence why Minimal Grinding Mode being enabled or not is important since it makes all IVs be perfect.
Another thing to note is that using the HP overflow glitch will inevitably take a lot of time since the Pokémon's HP must be healed from its current amount to 65536 (basically zero since HP value is zero-indexed, so you overflow from 65535 to 0 HP), at a speed of one HP per frame. This takes roughly 18 minutes and 17 seconds of gameplay and this is the biggest timeloss in the TAS. This is also extremely boring; and as such, I wasted some time to nickname my Pokémon to tell the viewer to skip to a certain timestamp.
Now that the player is in a battle, they send a "?" Glitch Pokémon. It is nothing but a empty shell of only "00" bytes, an empty spot in your party. Viewing its summary in the party menu will allow the player to scroll in an expanded party of 256 Pokémon, since the game counts 0 healthy party members after exiting the "?" Pokémon's summary and you cannot scroll in a party of 0 Pokémon, which makes the game interpret the 0 as 256.
While scrolling in this expanded party, it is only natural that you can switch your current active Pokémon, the one that's in slot 1 aka the "?" Glitch Pokémon, with another one in your expanded party.
But, before I start talking about switching, I'll explain what's going on in this expanded party. Take a look at the the Pokémon data structure of the Gen 3 games. All six slots in your party follow a 100-byte pattern that stores the data of your Pokémon, from memory addresses 02024284 to 020244DC (non-inclusive). But here in this situation, since the game counts 256 Pokémon in your party, it will interpret the next 100*250 (25,000) bytes as party Pokémon data, even though the memory addresses after 020244DB correspond to other miscellaneous data, such as trainer card data, player info, play time, last Pokémon Center you've visited, data of Pokémon in your PC boxes, etc. This means your expanded party includes data from slot 1 starting at 02024284 to slot 256 ending at 0202A683. It should also be noted that all Pokémon follow the GAEM data substructure pattern in Radical Red.
So now, let's talk about what the TAS exploits. As you might know, in Pokémon battles you can switch out the Pokémon in slot 1 to whichever slot you want to switch into, in any occasion you want to switch Pokémon in any battle. Naturally, this means the 100-byte data of the Pokémon in slot 1 will get swapped with the 100-byte data in the slot of the Pokémon you switched into in the RAM. To know whether a Pokémon is fainted or not and decide whether it can be switched into or not, it checks the 2-byte hex value stored in bytes 87 and 88, in little-endian order. If it's zero, the Pokémon is fainted and cannot be switched into. It seems like I'm only explaining logic here, and I actually am.
But this is exactly what I'm abusing. I've already established that each of the 25,600 bytes between memory addresses 020244DC and 0202A684 (non-inclusive) is interpreted as Pokémon data in the expanded party even though it normally isn't, since a party can only contain up to six Pokémon. So any slot that doesn't have bytes 87 and 88 empty is a Pokémon that can be switched into, and each of the 100 bytes in that slot is going to be swapped with the data of Pokémon in slot 1.
It is without any surprise however that after you switch one of these Pokémon into battle, you instantly lose since the game will believe you don't have any healthy Pokémon left in your party.
For now, I'll leave for later the rest of the explanation and how the TAS right here exploits the glitch exactly, along with the target memory addresses. I'll explain the run, step by step, in the following section.
Here we go!

Run info, step-by-step explanation of the movie

Let's begin with, well, the beginning.

Intro sequence

A lot of time is spent at the beginning. We'll want to get a specific trainer ID, 02307. I wait some frames before starting the Oak cutscene since that's what determines the moment I get my target ID, then I have to wait for about 2000 frames before I reach the frame on which I get my desired ID number. To make the wait less boring I gave a shoutout to multiple users along with complimenting the viewer. I love you all <3 I also name myself Gobou for obvious reasons and name my Rival just Green as it's the fastest option, and the text speed is instant anyway.

Pallet Town

I enable the Minimal Grinding Mode option and start inputting the in-game codes as soon as I possibly can. Woyaopp gives me Rare Candies and Pomeg Berries after talking to a Youngster in Viridian City, while DexAll unlocks every Pokémon on the DexNav, as if you had seen every Pokémon in thr PokéDex. I choose my Pokémon to be from the Johto region and claim an Adamant Totodile. Rival battle is beaten in six turns and I unfortunately attack last on the sixth turn, making my Totodile eat its Oran Berry due to damage taken. Upon exiting Pallet Town, there's an NPC that might randomly block your way to tell you about not using the Eclipse GBA emulator. I got lucky enough for the event not to happen.

Viridian City

I arrive in Viridian City, grab the Parcel, claim my Candies from the Younger, then go back to Pewter City and immediately come back to Viridian City. Straightforward enough. I must catch a Pikipek in order to trade for a Farfetch'd in Vermilion City, but my RNG is rough with me. I wait a lot of time before finding my 5% encounter in the grass.

Route 2

After obtaining the DexNav, it's time to catch a Sentret with the Double-Edge Egg Move. Which means I have got to encounter five Sentrets with the Dexnav, then get lucky enough to find a Sentret with Double-Edge since the DexNav allows Pokémon to know Egg Moves after your 5th encounter with them. I need a +Speed nature on Sentret and the Run Away ability that'll turn into Adaptability upon evolution, too. Thankfully that wasn't too slow. I then give Rare Candies to my Pokémon to level them up to the current Level Cap (15) and teach Headbutt to my Sentret, that'll evolve into Furret shortly after. I then switch the position of Totodile and Furret in my party to have Furret lead and exit the menu faster by cancelling a nickname prompt, which brings me to the overworld again.

Viridian Forest

I use the DexNav out-of-range glitch to skip the Brendan battle that's supposed to happen there.
Here's a screenshot showing where exactly I can have a DexNav encounter tile (red crosses) in order to skip the Brendan battle:
I then battle a Lass and have to waste two turns during the battle instead of OHKOing everything in sight, in order to get the right RNG for the Brock battle. One turn against Togepi and one turn against Audino, which don't make me lose too much time thankfully. I get the Infinite Repel skill which actually won't be used at all, then I just have to use one Headbutt for the Bug Catcher at the end of the forest.

Pewter City

I immediately head into the Museum to battle Falkner, and all of his Pokémon are easily OHKO'd. I then buy a randomized Egg that might contain any of the Pokémon listed in the official documentation about Wonder Eggs (minus the Noibat-Sevii and Gen 9 Pokémon obviously since those were introduced in the v4.0 update). Also yes that is my own document lol
Unimportant things aside, I buy this Egg because I need to hatch a Drowzee from it. This is the fastest way for me to obtain a Pokémon with Psychic Surge and the Egg should hatch as I reach Vermilion City. Perfect timing! This Drowzee will be useful in order to prevent Agatha's Marshadow from using Shadow Sneak. I go to the Gym, change my lead to Totodile and start the battle. This is a 6-turn battle in which I abuse Rage to get an easy +2 Attack boost and quickly KO every Pokémon with Aqua Jet without caring about Speed drops. Unfortunately Geodude-Alola paralyzes me, but it didn't get worse than just the status condition. After exiting the Gym, I use Rare Candies to level my Furret up to the new Level Cap (22), then I need to use the DexNav out-of-reach once more to skip the script that makes an Aide give me the Dynamax Band and some Wishing Pieces.
Here's another screenshot showing which tiles I can have a DexNav encounter tile on in order to skip this script:

Route 3

A pretty simple and efficient method is used to get past the trainers I need to defeat: getting their HP down to zero. Mind-blowing, I know.

Mt. Moon

Back to more serious things, I travel through Mt. Moon by avoiding trainers and wild encounters fairly easily, then battle a Rocket Grunt. After this easy win, I use the DexNav out-of-range glitch again to skip the Super Nerd Miguel battle.
Here's a screenshot showing where exactly I can have a DexNav encounter tile in order to skip this battle:
I now need to defeat Archer in order to unlock another Level Cap. After waiting a few frames to manipulate Impidimp's Ability (can be either Prankster or Frisk), I take out his Pokémon easily enough with Headbutts while still making sure I can beat his Mightyena safely, with a Quick Attack and a Double-Edge.

Route 4

On the way to Cerulean City I grab the Power-Up Punch TM from a Black Belt.

Cerulean City

I immediately go to the Pokémon Center to heal my Furret ans enable the Instant HP bar option. The HP depletion is very fast but not fast enough! And then I head into the Move Relearner's house and engage in his Puzzle Battle. I choose to lead with Buneary, swap the Phanpy's Focus Sash with Buneary's Silk Scarf, then choose Fletchling and swap its Life Orb with Mienfoo's Muscle Band to avoid Life Orb's HP loss and messages. This is an 8-turn battle in which Buneary KOes the first two Pokémon easily thanks to its Focus Sash, then it needs to faint to let Fletchling clear the rest. Before diving head first into the battle with my Fletchling I need to use the A+B swap glitch, to keep an additional full HP bar in order to handle the Brave Bird recoil. I live on 1 HP thankfully. Now I go to a specific spot in Cerulean City to use the DexNav glitch once again to skip the Rival battle there. I won't need the Pokérider that he'd gift me, as this is an item that allows the player to Fly anywhere but I'd only ever need it once.
Here's a screenshot once again showing the tiles I can have a DexNav encounter on in order to skip the battle:
I now level up my Furret to the final Level Cap of this TAS run (27), then I teach Power-Up Punch to my Furret.

Route 24

I defeat the Nugget Bridge trainers easily (except Mawile, which needs two attacks to be KO'd), then use the DexNav glitch one last time to skip the Rocket Grunt that awaits at the other end of the Nugget Bridge.
Here's a screenshot:

Route 25

As I've explained before when detailing the Route 25 script corruption glitch, I defeat a Hiker then walk back and forth between Routes 24 and 25 to trigger the script corruption. This makes some NPCs disappear but not all, so I still need to stop running to avoid a spinning Youngster and slow down for a bit to get past a running Youngster, then I open Bag menu right next to the Lass at the end of the path to stop the corruption and OHKO her Pokémon with ease. I help Bill, obtain the S.S. Ticket that will never be used at all and head back to Cerulean City to battle the burglar Rocket Grunt. Before this battle however I move my Totodile's Oran Berry to Furret since it'll be needed in order to survive our own Double-Edge. This is a 5-turn battle, which is easy as long as you get the right damage rolls. Two Power-Up Punch KO Persian-Alola while I take Snarl damage, then the rest is OHKO'd with Headbutts and a Double-Edge, which leaves Furret at very low HP.

Route 6

And it's useful to keep Furret healthy since I'll need it for the Camper battle at the end of the path. However after taking the Doduo with Headbutt I need to faint from Double-Edge damage, in order to set up the Expanded Party Glitch. Static on Electrike also paralyzes Furret, but this is only a small timeloss.
Oh, also the Egg finally hatches into a Drowzee. It'll be used later, and only during the Agatha battle.

Vermilion City

That's when the fun truly begins. I immediately grab a Good Rod and trade my Pikipek for a Farfetch'd-Galar that has more current HP than its maximum HP value. Now I go to that little pond of water on Route 6 and level up Farfetch'd-Galar to Lv. 24. This is needed since catching Qwilfishes will grant Exp. Points, and Lv. 24 is just enough for our bird to prevent it from leveling up in battle. Leveling up from Rare Candies is simply incredibly faster. I also swap Farfetch'd-Galar's position with Furret's for the Expanded Party Glitch setup.
I register my Good Rod and start fishing for two Qwilfishes that have Prankster. During the second Qwilfish battle I make sure to switch to the Qwilfish I just caught in order to continue the set up for the Expanded Party Glitch. After that, I use the portable Move Relearner option in the party menu in order to teach Hydro Pump and Destiny Bond to the first Qwilfish and Destiny Bond to the second one. I then deposit my Qwilfishes, Drowzee and Totodile in my portable PC and nickname my last two Pokémon to tell the viewer to skip to the 46:39 timestamp since there'll be nothing going on until then.
Now I only have a Farfetch'd-Galar with 64/63 HP and a fainted Furret. I use an Oran Berry on Farfetch'd-Galar to make the HP overflow from 64 HP all the way to 0. This is 18 minutes and 17 seconds of absolutely nothing, so the viewer is advised to skip to the suggested timestamp (46:39). After the HP value finally reaches zero, I start a wild encounter and send the "?" Glitch Pokémon in battle. After viewing its summary, I swap its position with Furret's.
Why Furret? Why a swap? Well, allow me to explain. As I've stated before: in the RAM, switching out to a Pokémon swaps the 100 bytes of the slot of your active Pokémon with the 100 bytes of the slot of the Pokémon you're switching to. The "?" Glitch Pokémon is an empty shell full of "00" bytes, an empty Pokémon made with empty bytes. That means the bytes of the Pokémon at the slot you're trying to switch to will become a bunch of "00". Which is cool, but not interesting.
I've also stated at the very beginning of the Expanded Party Glitch explanation that the whole bullshit I'm doing with this glitch is a mix of multiple glitches. This is more true than ever, since I'll be using the A+B Swap Glitch to swap the positions of the "?" Glitch Pokémon and Furret. It is necessary that Furret is placed in the second slot of the normal party before starting the wild battle, because I would've been completely unable to switch Pokémon if swapped the "?" Glitch Pokémon in slot 1 with a Furret in slot 2 of the expanded party.
So, yes, a swap was very needed. Because putting Furret in slot 1 will swap the 100 bytes of Furret instead of the 100 empty bytes of the "?" Glitch Pokémon. But what exactly do we want to swap those 100 Furret bytes with?
Here's the big reveal: at RAM addresses 02025548 and 02025549 are to be found the two bytes that store the values of the map of the last Pokémon Center you've visited. Address 02025548 is the bank ID, which should always be 03 to be valid since city IDs are always in bank 03, and address 02025549 is the map ID, which is the ID of the Fly point corresponding to the Pokémon Center in question. An invalid combination will default to Blaine's Gym for some odd reason, and let me remind you that his Gym has doors that are locked before you answer his quizzes.
The goal is simple: change the values at addresses 02025548 and 02025549 to 03 and 09 respectively since 09 is the ID of the Indigo Plateau Fly point. How do we achieve that though? Well, in the expanded party those bytes are located near the start of the 100-bytes pattern that slot 48 uses, and more precisely, they correspond to the trainer ID bytes of slot 48. This basically means that swapping the bytes of Furret with the bytes of slot 48 will put our 02307 trainer ID in that spot, and upon blacking out we'll appear in the Indigo Plateau Pokémon Center.
For a more detailed explanation: the two bytes storing the 02307 ID in hex are 0903 when stored in big-endian order. However the Pokémon data bytes are all stored in little-endian order, which means that the bytes storing the 02307 ID in hex is stored as 0309. This is the same order as the map values stored at addresses 02025548 and 02025549: 03 (bank), then 09 (Fly point ID).
But there's one crucial detail left to explain: why is the switch to slot 48 even possible in first place? Well believe it or not, the "current HP" bytes (bytes 87 and 88) of the slot are usually empty when starting a new game. However after saving for the first time, many of the bytes in that RAM area become not empty anymore. But I've never saved so how did this happen? That's simply because the save prompt before starting the Cerulean City Puzzle Battle actually changes the bytes there, even if you refuse to save. That's all.

Elite Four & Champion

I'm currently in the Indigo Plateau Pokémon Center with one badge and a Lv. 27 active Level Cap. Which is cool, but I still need to defeat the whole Elite Four and the Champion. I'll simply abuse the A+B Swap Glitch in order to have infinite HP bars on a Qwilfish with the Prankster + Destiny Bond combo. We good for now?
So I wait a little bit before closing Nurse Joy's last textbox in order to roll the right Lorelei team, since her team is decided whenever you first enter the Indigo Plateau building. I want the Rain Team since it doesn't prompt an annoying Hail damage message on every turn. Furret got consumed by the Expanded Party Glitch, so I withdraw my two Qwilfishes from the portable PC along with my Drowzee, and only have to deposit my Farfetch'd-Galar.
Time to battle the Elite Four, with such underleveled Pokémon.

Lorelei

This one's pretty straightforward. I lead with my two Qwilfishes, but use the A+B Swap Glitch to swap my second Qwilfish with Drowzee, making the Drowzee faint instead of my second Qwilfish and giving the latter a chance to come back into battle whenever needed. Then all I need to do is to keep abusing the A+B swap glitch to Destiny Bond my way through and revive my Qwilfish indefinitely. Sometimes I don't need to open the party menu twice before doing the swap: this is because when a fainted Pokémon faints again, the game will look for a sprite to start the faint animation, the Mega/Primal icon can be the one that the game chooses instead of the enemy sprite (that's also a small time save since you don't need to refresh the in-battle scene before doing the swap).

Bruno

Again, really simple since I just abuse the A+B Swap Glitch for the whole Elite Four. I choose the Urshifu lead team since I'm not going to lose time getting Taunted. I sometimes have to wait some frames before sending another Qwilfish into battle, because the AI might choose a priority move and Prankster isn't fast enough to counter those.

Agatha

That is when things get funky. I battle the the Zoroark lead team since her Grimmsnarl lead team has a Prankster + Taunt deadly combo and I KO both of her first Pokémon easily, despite Zoroark Taunting me on the first turn. Once Marshadow comes I have to send Drowzee, in order to set Psychic Terrain. This is because no matter how hard I tried, Marshadow would always spam Shadow Sneak against my low-level Qwilfishes. After switching to Qwilfish, Marshadow uses two Bulk Up, wasting some of my time, but then with some Destiny Bond shenanigans everything goes fine.

Lance

Aside from the Dragonite that could use Extreme Speed, there's not much to be said here. I battle the Garchomp team in order to avoid getting Taunted by his Arrodactyl lead during the first turn. Just need to avoid taking not super effective/super effective hits since the additional effectiveness textbox takes some frames.

Champion

Lastly, the champion. While most of his Pokémon are taken down pretty easily, the Ditto at the end is scary. It's the reason I needed to teach Hydro Pump to my first Qwilfish: I get 2HKO'd by Hydro Pump, allowing me to win with a Destiny Bond KO instead of resorting to PP stalling.

Final comments

The final cutscene plays, and the movie ends at the Hall of Fame screen when my trainer data is shown. This was pretty close; I was six seconds away from not being able to beat Pokémon Radical Red in under one hour.
This TAS is the result of a bit more than two years of research, playing, and learning how glitches work in Radical Red. Almost the entirety of the glitches and the way they were used here comes from myself only; I learned the day before this submission was published that Kyotora, a ROM-hack speedrunner, found many ways to abuse the A+B Swap Glitch before I did, even though I wasn't aware of it.
Furret routing was already pretty popular so I don't really need to credit anyone, but the Psychic Terrain idea to shorten the Agatha battle comes from Ash, one of my best friends (even though she doesn't feel she deserves the credit).
Additional credits go to everyone I've been mentioning in the first minute of the TAS for the moral support <3 And Skeli for making the CFRU engine, soupercell for creating this wonderful ROM-hack, Dekzeh for being a great nuzlocker.
This TAS, once again, is the result of a lot of patience and effort, and I wouldn't have done it if I didn't love this ROM-hack as much as I do. My passion led up to me becoming an Admin + Beta Tester in the Radical Red server, and I must say. It's a good feeling to be part of history. But making history while doing what you love the most, is an even greater feeling. I really believe that this TAS could be improved in many ways, such as trying to find the right trainer ID faster. I don't have much hope for the TAS/Speedrunning side of Radical Red since this is only a ROM-hack. But I've done my part and that's what matters the most to me.

arkiandruski: Claiming for judging.
arkiandruski: Thank you for this run. I can tell a lot of thought and effort went into it.
Since the run uses codes, it can't be accepted for Standard under our rules. It would be allowed if the codes added content that couldn't be reached otherwise, but the codes used are for making the game easier, so it will have to qualify for Alternative or the Playground. From my mind, minimal grinding mode could be accepted as a difficulty setting and qualify for Standard without the codes.
For Alternative, there are a few more hurdles that need to be crossed. The run has to be entertaining, it has to provide unique content, and it has to have a clearly defined goal. For the goal, the run is clear. It's a fastest completion, even if under circumstances that disqualify it for Standard. For unique content, I'm not sure how this run would compare to a fastest completion without the codes, but it is also the first run for the game on this site. Recently, we've found it to be better to have a record for the games so we tend to be a little more lenient with first runs with the idea that others will come later to improve on it. While this isn't the same situation, I will say that the hack itself provides many unique mechanics and requires different strategies than a run on Fire Red would. It is also a hack with good standing within the community, and for that, I believe this hack should be represented.
As for entertainment, there are not enough votes or comments in the thread to get a strong idea of community opinion, so I will have to mostly go off my own judgement. This run features one long section in the middle where all we do is watch numbers go up in a menu. Also, the extra berries and candies could be seen as cheap. When taken in perspective from the view of the entire run, this still counts for a small part. The rest of the run is solid Pokémon playing with a few smart strategies, and gives a good tour of the game world.
So with that in mind, I believe this run qualifies for Alternative. Since the hack is still in beta, any runs of later builds with comparable gameplay will obsolete it. Also, this might possibly be obsoleted by a run on Minimal Grinding mode or Normal difficulty. We'll decide on that when we have a run of that type to compare it against.

Spikestuff: Processing...
Last Edited by Spikestuff on 11/12/2023 10:59 AM
Page History Latest diff List referrers