Introduction

With all the attention Gen I glitchless is getting recently, I thought it would only be fair to look at Gen II glitchless as well, given that the current publication is almost 13 years old.

Goal choice

This run aims to complete Pokémon Crystal in the least amount of time without using any glitches.

Version choice

Pokémon Crystal is similar in Gold and Silver overall, with many small differences throughout the games. In general, Gold/Silver has (~10) more mandatory fights, while Crystal has more required story elements (e.g. Burned Tower) and overworld movement (e.g. Squirtbottle). Crystal also got some visual upgrades compared to Gold and Silver. Good examples are Ice Path and Lance's Elite Four room.
I also believe Crystal to be the fastest version of the three. Note however that the time of this run is not directly comparable to the published run due to emulator differences, and it's very hard to make a fair comparison at this point.

General strategy

Battle Pokémon

This run uses Cyndaquil as a starter, and later switches to Raikou for the rest of the game.
Cyndaquil and Totodile are the realistic starter options, Chikorita is bad against literally everything in the first part of the game (Falkner, Bugsy, Rockets) and therefore not an option. Cyndaquil has a slower start due to Tackle being worse than Scratch and Rage, but makes up for it with Ember and its high base Special Attack, and comes out ~25s ahead up to Ecruteak.
Using one of the legendary beasts costs time to catch it, but is well worth it. Not only do they make fights faster due to their high base stats and level, but they also save time due to fewer level-ups. Each level-up costs ~2.7 seconds for the jingle and stat display alone, without factoring in any learned moves or experience bar movement animation. Skipping the level-ups between 21 and 40 alone saves more time than it costs to catch them. Entei is slightly better in fights than Raikou, but it struggles for PP more and has a longer cry sound, making it slower overall.

General overworld movement

The main and obvious rule is to take the least number of steps. Tall grass and spinning trainers can generally be ignored in any pathing decisions for this run, as I can just luck-manipulate my way around them.
One interesting aspect of Gen II movement are turn frames. They happen whenever the player changes direction while not moving, and allow the player to turn in place. They cost 8 frames, and are avoided whenever possible. That means that starting any movement by goings straight is always faster. Also, it doesn't matter which direction you turn in turn frames, afterwards you can walk in any direction. This is used in this run to show where turn frames are: whenever you see the character turn in a weird direction, it's a turn frame.

General battle strategy:

The most basic and obvious strategy is to minimize the number of turns needed in each battle. Critical hits cost extra time due to the additional text box, so are avoided if possible. Very or not effective moves cost about double the time that critical hits do, so they are even more to be avoided, but still way better than using an extra turn in the fight. For enemy moves, failing to hit is generally faster than using a stat-changing move, which itself is faster than failing a stat-changing move.
Each attack has a damage range from 217/255 to 255/255. Due to integer rounding, only 255 results in max damage, with a 1/39 chance. Max damage is only needed a few times throughout the run at the beginning where damage and HP are low and every point of damage matters.
Especially in the early fights, the amount of damage you do also matters for the HP drain animation. Depending on how your damage aligns with the enemy's max HP, it can take more or less time overall to fully drain over multiple turns.

Badges

Badges give two types of boosts, stat boosts and type boosts. The type boosts are a 1.125x damage multiplier for the corresponding Gym's type, and these are quite helpful throughout the run, without any quirky behavior. The stat boosts are a 1.125x stat multiplier, and are given by specific Johto Gyms. The two important one for this run are the Attack boost by Falkner and the Special Attack boost by Pryce.
One interesting discovery I made while making this run is that the Special Defense boost which is meant to be given by Clair does not actually work as intended, it is instead given whenver you have Pryce's badge and the boosted Special Attack stat of your Pokémon is in a certain range.
Another quirk with these boosts is that they don't always apply to crits. The way crits work in this game is that in addition to being a 2x damage multiplier, they ignore any stat boosts unless your attack stat level is higher than the opponent's defense stat level. That means that the Gym badge stat boosts are not applied to crits, unless you used a stat-changing move or an X item, effectively making the first use of those options stronger than normal.

Route details

Opening

The game options are changed using the known "fast-options" trick that already worked in Gen I to change all options at once.
Choosing Girl costs 9 frames over choosing Boy: 4 for selecting it, and 5 more on the SS Aqua because of longer text. The difference is not significant over the course of the run however, and Girl turned out to align better for early luck manipulation for me.
The time is set to 3:52. It's important to start at night in order to be able to catch Poliwag. The 52 minutes part is not necessary, but changes the game to the friendlier looking daytime palette quicker for better watchability.
The name is chosen to be "I". Setting a custom name costs some time, but shorter name are faster to display, so it saves time whenever they appear often enough.
Any other options like day of week and DST are irrelevant and left to the default (fastest) option.

Elm's Lab

DVs are not super important (it needs at least 15 Atk, 6 Def, 10 Spd, 14 Spc) since Cyndaquil will only be used in the beginning, so it's easy to get one that's good enough.
There's a small movement optimization when talking to Elm's aide to minimize the time he spends walking towards the player. Positioning yourself to minimize NPCs movement is a common theme that happens multiple times.

Rival fight 1

Scratch always hits, and the HP are important for later, so I can't allow Totodile to use it. Totodile hitting with Leer is faster than missing with Leer, and lowering Cyndaquil's Defense is irrelevant. Cyndaquil itself also uses Leer to lower Totodile's defense. This saves two crits and therefore time. Leer is generally a surprisingly useful move to save time in this run, unlike in Gen I where crits ignored stat changes making these moves completely useless.

Route 30

I catch a Poliwag for HMs Surf, Whirlpool and Waterfall. Poliwag is the ideal choice since it can learn all three moves and only knows one move when caught so it can learn them without wasting time with overriding an existing move. The clock is set so that the night ends directly after catching Poliwag.

Route 31

The forced mom call can be pre-empted by calling mom yourself, but it ends up being slower unless you need to use the menu anyway.

Violet Gym

Abe's Spearow is always faster, always uses Peck and always hits. I'm spending a turn using Smokescreen just to not lose to it. Using Leer saves one crit, but it makes very little difference compared to 4-turn KO without it.
Ron's Pidgeys go down in two hits, whereas Falkner's Pidgey of the same level does not. This is because in Gen II, trainers have fixed DVs across all their Pokémon, and Falkner's are just better than a generic Bird Keeper. Falkner also has a different AI and his Pokémon have different move sets, causing his Pidgey to always use Mud-Slap instead of the much preferred Tackle.
While the 1/256 misses for moves that "always" hit which existed in Gen I were patched so Mud-Slap always hits, any secondary effects still have the same bug in Gen II, allowing Pidgey's Mud-Slap to not reduce the Accuracy in 1/256 of cases. Not reducing the Accuracy is desirable to save the time for the extra line of text that would show up.
Again Leer is used to speed up the fight, for Pidgeotto it even reduces the turns from 4 to 2, saving a whole turn.

Mart

This run only visits a Mart once, in Violet City, as it is the only Mart beside Goldenrod which sells both items of interest: Escape Rope and X Attack. I buy 6 Escape Ropes, which allow to save time exiting caves and dungeons. 6 is all the Escape Ropes you could possibly want to use during the run. I also buy 2 X Attacks, which will speed up fights later in the run. They will be used in situations were it saves at least one turn, of which there are only two, so it works out nicely. They would also save small amounts of time in other situations, but I don't have money to buy more, and it's not worth the additional time investment visiting another mart.

Route 32

While it may look like it makes sense to talk to the Slowpoke Tail NPC from the side, it would incur an additional turn frame afterwards, while there are none when you run into his vision, since you never leave the moving state.

Union Cave

Unlike in Gold and Silver, all trainer battles are optional in Crystal.

Azalea Town

Getting poisoned by Koffing in the Slowpoke Well is faster than it missing, and Kurt heals you right away so it doesn't cost any time afterwards.
Thanks to Cyndaquil evolving earlier and Ember being super effective, Azalea Gym is where Cyndaquil gains most of the time on Totodile.
Rival's Croconaw can be KO'd with exactly 3 max crit Embers plus two burn damage turns. The max crit + burn Ember on Croconaw is the single lowest probability event manipulated in this run, worse than both Cyndaquil's and Raikou's DVs.

Ilex Forest

The route to catch the Farfetch'd takes more steps than the obvious route, but ends up being faster due to fewer interactions with Farfetch'd.
Quilava learns Cut which will also help in the upcoming rival fight. It is taught in front of the bush so that it can be used directly from the menu and save a small amount of time.

Goldenrod City

First priority is getting the bike, to speed up any overworld movement. The bike is useful for any movement longer than 8 steps, so basically everywhere.
Unlike in Gold/Silver, it's required to talk to Floria in order to get the Squirtbottle, so it's necessary to make a detour before entering the gym.
I'm picking up Spearow to teach it HM Fly later. It's faster than catching a Pokémon ourselves.
The second gate house is also a good opportunity to deposit the Egg before it hatches and wastes time, since the PC is very close to our path.

Ecruteak City

Freeing the legendary beasts is mandatory in Crystal unlike in Gold/Silver, which makes it even more appealing to use one for this run.
Rival's Haunter only likes to use Lick and Spite, and Spite is faster. I'm running low on Ember PP though, so it can only reduce it by 2 or I'd run out in this fight. Also, just as in the second Rival fight, Ember is used to burn Croconaw and allow for a 3 turn KO.
After releasing the hounds, I Escape Rope out to avoid talking to Eusine again. I go right back to Route 37 to catch the Raikou I just released. Raikou will be the main battle Pokémon for the rest of the run.
The movement in the grass to catch Raikou may look weird, but is necessary since you can't encounter any Pokémon within the first few steps into a new area. The encounter is triggered on the turn frame, not while moving.
Raikou has perfect Attack and Special DVs, which are necessary for the later fights. Due to its high base speed, its Speed DV does not matter at all, it could be 0 and I'd still outspeed Red's Espeon.
Doing the menuing directly before the first Kimono fight saves two frames. A turn frame is necessary to face the right way, so it's necessary to wait two frames to stop moving before you're able to turn, and these can be used productively by menuing at that time.
With Raikou, the main focus of the battles has shifted from using as few turns as possible to managing PPs and avoiding crits and super effective moves whenever possible.
In Morty's Gym, you can skip the second trainer by just walking around it using a different path through the maze.

Route 38

One of the trainers is spinning on a consistent cycle, which will always block our path and requires the player to wait for a short while.

Olivine City

Gentleman Alfred is the perfect example to show how much faster talking to trainers is compared to getting seen. While he looks far out of the way, it still saves a few frames talking to him.
When crossing to Cianwood, I minimize the steps taken in the water since surfing is slower than biking, so you want to start surfing as late as possible and land again as early as possible.
I teach Strength to Raikou as it is useful in battle, and Surf to Poliwag, and start surfing from the menu to save some frames.

Cianwood City

When moving boulders using Strength, you retain control while the pushing animation is playing, which can be used to push multiple boulders at the same time, or just spin around while waiting.

Mahogany

Unlike the other special Pokémon encounters, the Red Gyarados has to be caught or KO'd, you cannot flee. Since I don't need it for anything and catching it is slower, I KO it.
More quirky movement tech: Whenever you use stairs, it counts as stopping moving, so you need to move forward for your first step to avoid a turn frame. Because of this, it matters which direction you enter stairs from to avoid wasting time.
The heal Lance gives also refreshes your PP. From this point on will be a long stretch without being able to fill up PP, so which move is used where is planned out so that I exactly have enough. At the end of this stretch, Raikou will have 0 PP for all its moves.
The order in which you defeat the Electrodes doesn't matter as long as you do the bottommost one first or last.
The bike shop calls after a fixed number of steps you took on a bike. It does not cause a turn frame.
The fight against Pryce shows how I'm going out of my way to avoid super effective moves, due to large amount of time they cost, even accepting critical hits over it.

Olivine Gym

Jasmine is done last due to the bad type matchup Raikou has. Every move Raikou has is ineffective. Steelix is the worst, with 200 base defense and only non-effective Strength to damage it. Using an X Attack brings the turn count down from 5 to 3. Even though this fight is slow, it's the only bad fight and not worth going out of our way to learn a different move (like Hidden Power) for.

Radio Tower

The Radio Tower consists of lots of low level Rocket Grunts to chow through. On the forth floor is another consistently rotating trainer which requires some wait time to avoid.
Unfortunately you can't Escape Rope out of the Radio Tower, so you need to walk back down the whole way. Twice.
Before the forth Rival fight, I teach Iron Tail to Raikou, which will round out its type coverage a lot. I waited until now to get the most use out of Quick Attack before I overwrite it to conserve PP.
After defeating Team Rocket, I get the Radio Card. You could get it way earlier, but it's now on our way so it saves time to get it now.

Ice Path

The ability to push multiple Rocks at the same time is used to push the boulders more quickly. Only one boulder needs to be pushed down to solve it, as long as you fall down the right hole.

Blackthorn City

After Cooltrainer Darin, Raikou is completely out of PP for all its moves.
All test questions except the last have two right and one wrong answer. The mechanics are deliberately opaque, but it does not have any further significance other than answering correctly 5 times.

Route 27

All trainers can be avoided by tactical surfing. One more consistent spinner requires some waiting. The heal house is used to finally refill all PP to prepare for the Elite Four.

Victory Road

One non-obvious small optimization is triggering the fifth Rival fight on the left tile instead of the right. While it adds two steps to the player's movement, it reduces the Rival's movement by two, and the player is faster using the bike.

Elite Four

Bruno's Hitmonchan always uses Mach Punch, it is a priority move and always hits, forcing Raikou to take some damage.
Karen's Umbreon is one of the very few Pokémon in this run which do not KO in one hit. I let Umbreon reduce Raikou's accuracy, but it doesn't affect the remainder of the fight.
Lance's Dragonites would also survive a hit, but using our second and last X Attack puts all of them in OHKO range.

Kanto

All of Kanto is done without refreshing PP once, so it's again important to plan which move to use where, sometimes incurring avoidable crits in order to preserve PP.
On the SS Aqua, we encounter the only time the gender affects the gameplay in any way during this run, by prompting the rescued girl to emit 5 additional characters of dialog.
After landing in Kanto, it's faster to fly to Vermilion rather than biking from the pier.
Kanto is fairly open and allows for lots of different routes and possibilities. The general strategy is to do the Gyms whenever they are closest on our way through the main Kanto story line of bringing the Power Plant back online.
There are multiple different optimal paths through Sabrina's teleport maze. I use two different ones for in and out. It's also notable that there's a route with fewer teleports, but more walking time, which ends up slower.
After running into the Rocket in Misty's Gym, it's not actually necessary to collect it in order to enable the Misty cutscene in Route 25, and it turns out to be faster to do it later. Also, all trainer fights in Misty's Gym can be skipped by surfing around them.
Even though the player starts in Vermilion, the Gym is closest only on our second visit before clearing the Snorlax, so I slot it Surge there.
Brock is just a small detour after exiting Diglett's Cave. You need to at least visit Pewter City so that it's possible to fly back there later, but at that point it's faster to just do the Gym there and then.
Blue is the last Gym because Crunch is required to OHKO Exeggutor, and Arcanine can only be OHKO'd using Spark at level 61 or above.

Red

Red has multiple Pokémon which won't KO in one turn, but using X items would not have reduced the total number of turns required, so it was not worth shopping for.
Red's Espeon gets fully paralyzed to avoid it using Psychic, which would cost even more time, partly due to the bugged Special Defense badge stat boost.
Red's Snorlax only is a two turn KO thanks to the side effect of Iron Tail, lowering its defense and enabling the badge stat boost on the second turn. Red's Venusaur is the same case as the Snorlax, but with Crunch and lowering the Special Defense instead.

A note on timing and console verification

While this page states this run's time is 2:48:50, the actual time it would take when played back on console is 2:48:39.703. The reason for this is that the concept of a "frame" is variable on a GB, and BizHawk's input frames don't align with them, yet it calculates time as if they were evenly spaced.
Unfortunately, this same discrepancy makes a console verification of this run rather unlikely, because of the real-time clock. Since BizHawk's frames are longer, and its emulated RTC is bound to the number of frames, its RTC ticks slightly faster than on an actual console, inevitably causing desyncs over time.
The correct solution to the RTC issue is probably to base BizHawk's RTC on the number of emitted audio samples instead, but I'm not sure it would solve all the problems with Gen II console verification.

Masterjun: Judging.
Masterjun: Replaced movie with one that works on an updated core.
Masterjun: I think I don't need to talk about the technical quality of the run. The submission text and the thread replies describe the amount of thought and testing that went into making this run.
People mentioned they wanted this run to obsolete the current Pokémon Gold TAS because the games were similar and that TAS is very old. First off, the age of a TAS does not matter when deciding whether to obsolete similar games. It is an exception to let different games obsolete each other when they are very similar. However, the Cystal and Gold versions are quite different in a lot of ways. This is why I decided this run will be a new entry. If the goal is to obsolete the old Pokémon Gold TAS, it should be made on either the Gold or Silver version.
Accepted to Moons as a new entry.
Spikestuff: Publishing.


TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15576
Location: 127.0.0.1
This topic is for the purpose of discussing #6395: MrWint's GBC Pokémon: Crystal Version in 2:48:36.03
EZGames69
He/They
Publisher, Reviewer, Expert player (4460)
Joined: 5/29/2017
Posts: 2761
oh my lord, I wasnt expecting this so soon. havent watched it yet but I will definitely do it in a bit. I'm much more nostalgic for the 2nd gen games than 1st gen, so I'm excited to see this.
[14:15] <feos> WinDOES what DOSn't 12:33:44 PM <Mothrayas> "I got an oof with my game!" Mothrayas Today at 12:22: <Colin> thank you for supporting noble causes such as my feet MemoryTAS Today at 11:55 AM: you wouldn't know beauty if it slapped you in the face with a giant fish [Today at 4:51 PM] Mothrayas: although if you like your own tweets that's the online equivalent of sniffing your own farts and probably tells a lot about you as a person MemoryTAS Today at 7:01 PM: But I exert big staff energy honestly lol Samsara Today at 1:20 PM: wouldn't ACE in a real life TAS just stand for Actually Cease Existing
Alyosha
He/Him
Editor, Emulator Coder, Expert player (3821)
Joined: 11/30/2014
Posts: 2829
Location: US
GBHawks RTC is already cycle based, just do you know, if that helps at all.
Skilled player (1040)
Joined: 7/24/2013
Posts: 175
Alyosha wrote:
GBHawks RTC is already cycle based, just do you know, if that helps at all.
Interesting. To be honest, I know you have been making great progress on it, but haven't looked at GBHawk much yet. The main reason is that gambatte is a stand-alone library, while GBHawk is tightly integrated into BizHawk. The way I create TASes, I use libgambatte as a C++ library directly, which allows for way more flexibility in how you run the emulation (e.g. breaking and savestating at arbitrary cycles, running multiple instances at once, programmatic access to all the internals, etc.). It wouldn't be impossible with GBHawk, but a whole lot more cumbersome to get the instrumentation I need, since I have to deal with .NET/Mono, and cut away the irrelevant parts of the rest of BizHawk. I also have some reservations regarding emulation speed (though to be fair I haven't run real comparisons yet). Since I rely on heavy brute-forcing, execution speed is key, and from what I can tell the way you implemented GBHawk is that it emulates very eagerly (e.g. updating the RTC every cycle), while gambatte follows a lazy evaluation approach (e.g. updating the RTC only when somebody wants to read it). While the eager evaluation certainly has its advantages in accuracy and ease of understanding, emulation speed is likely not one of them. To be clear, for normal emulator usage this is likely plenty fast enough either way, but when your TAS quality is a function of how many CPU hours you have poured into crunching all possible states, it makes a difference. That being said, I'd be interested to hear what the future plans of GBHawk vs. Gambatte in BizHawk are. I'd be sad to see Gambatte support go away, but I can see how it may be desirable from the perspective of BizHawk as a software project.
EZGames69
He/They
Publisher, Reviewer, Expert player (4460)
Joined: 5/29/2017
Posts: 2761
There’s still a few issues that I personally have with GBHawk, one of them being the faster loading times (dont know if that was fixed yet.). I highly doubt support for gambette will be dropped anytime soon.
[14:15] <feos> WinDOES what DOSn't 12:33:44 PM <Mothrayas> "I got an oof with my game!" Mothrayas Today at 12:22: <Colin> thank you for supporting noble causes such as my feet MemoryTAS Today at 11:55 AM: you wouldn't know beauty if it slapped you in the face with a giant fish [Today at 4:51 PM] Mothrayas: although if you like your own tweets that's the online equivalent of sniffing your own farts and probably tells a lot about you as a person MemoryTAS Today at 7:01 PM: But I exert big staff energy honestly lol Samsara Today at 1:20 PM: wouldn't ACE in a real life TAS just stand for Actually Cease Existing
Alyosha
He/Him
Editor, Emulator Coder, Expert player (3821)
Joined: 11/30/2014
Posts: 2829
Location: US
The Pokemon folks have a fixed RTC for their Gambatte branch, but their codebase is quite different from that in BizHawk so I deemed it to tedious to try to implement. Might want to contact them if you are interested. Going forward GBHawk will have an accuracy advantage over Gambatte unless someone makes the effort to fix up Gambatte . You can already see the difference in sprite-scroll PPU timing and other tests. Gambatte will remains more or less as it is , which is acceptable for TASVideos standards but isn’t likely to be hardware accurate for many cases. But yeah GBHawk is considerably slower then Gambatte , speed just isn’t a primary goal, plus C# is slow. Also the loading times are the same, frame count is different only because frames are ended at different points (I feel like I should make a copy-paste thing since I keep having to repeat this.)
Fortranm
He/Him
Editor, Experienced player (878)
Joined: 10/19/2013
Posts: 1121
Interesting to see a Crystal run using the same Pokemon for battle as the HGSS runs do. Would Graveler or any other legendaries still be the best choice for G/S since you don't need to go to Burned Tower and fight the rival?
TiKevin83
He/Him
Ambassador, Moderator, Site Developer, Player (155)
Joined: 3/17/2018
Posts: 358
Location: Holland, MI
Holy crap you're killing me Wint, we were just talking in PSR about how Crystal would be a good project for after Blue Glitchless a few weeks ago! The RTA folks expected Toto and Entei to be a better combo, but I could definitely see cry length being a big question. I'll have to give this one a thorough look over asap.
TiKevin83
He/Him
Ambassador, Moderator, Site Developer, Player (155)
Joined: 3/17/2018
Posts: 358
Location: Holland, MI
And yes as Alyosha mentioned there's a good chance we could resync this to console verify if we port Gifvex's RTC code to BizHawk's Gambatte.
Skilled player (1040)
Joined: 7/24/2013
Posts: 175
It would be interesting to hear about the different strategies that were considered. Since I made this basically in a bubble, I only used and tested the strategies I could come up with, and I can tell you whether I actually tested it and determined it being slower or just not thought about it at all. E.g. Totodile vs. Cyndaquil I extensively tested, I created semi-optimized runs until Ecruteak for both of them. Raikou vs. Entei I didn't create full runs for, but convinced myself that Raikou will be faster by mapping out all the fights in a spreadsheet, and doing back-of-the-envelope calculations on how much Entei could save in battles vs. how much Entei will lose due to needing to refresh PPs more often. Also note that resyncing will be a complete recreation of this TAS, since the same inputs will not result in the same RNG outcomes. Given a week of time or so for number crunching, it should be possible to create a new version which looks just like this one on a different Gambatte version.
TiKevin83
He/Him
Ambassador, Moderator, Site Developer, Player (155)
Joined: 3/17/2018
Posts: 358
Location: Holland, MI
Oh trust me I'm aware of the pains of resyncing given your first 2 links about attention to gen 1 glitchless ;)
TiKevin83
He/Him
Ambassador, Moderator, Site Developer, Player (155)
Joined: 3/17/2018
Posts: 358
Location: Holland, MI
Wsopboy in the RTA community has forwarded some suggestions: It may be faster to use the PC at 29:00 from the side (4 steps) vs the current egg deposit PC (6 steps and a turn frame) It may be faster to nickname poliwag (20 name appearances/120 frames vs the time to nickname) It may actually be faster period to use the Girl. Exarion and wsop referred to luckytyphlosion's prior comments about Girl sprite lag being a second faster than the boy's. But this has not been confirmed. The RTA community also generally believed that it was faster to be seen by Alfred, but had not ever properly timed this, so if it's been confirmed that it's faster to talk to him that makes sense. edit: another find Instead of teach surf to poli(down 1), teach strength to raikou(up 1), use surf from menu(down 1). what you can do is teach strength to raikou first, then teach surf to poli, saving an input. It may also save an input later on teaching Iron Tail.
Skilled player (1040)
Joined: 7/24/2013
Posts: 175
TiKevin83 wrote:
It may be faster to use the PC at 29:00 from the side (4 steps) vs the current egg deposit PC (6 steps and a turn frame)
I straight up didn't know you could interact with the PCs from the side. Yes, this is for sure faster.
TiKevin83 wrote:
It may be faster to nickname poliwag (20 name appearances/120 frames vs the time to nickname)
Yep, renaming only costs ~60 frames. I guess I just grossly underestimated the amount of times it comes up and never bothered to check.
TiKevin83 wrote:
It may actually be faster period to use the Girl. Exarion and wsop referred to luckytyphlosion's prior comments about Girl sprite lag being a second faster than the boy's. But this has not been confirmed.
I did some testing for any sprite lag differences when investigating this because I thought something like this could be the case, but I couldn't find any conclusive evidence. Girl was faster some of the time, Boy was faster other times. Just because I couldn't find any bias in my tests doesn't mean it doesn't exist of course, just that it's hard to control for all the other variables, and any effect is likely very subtle.
TiKevin83 wrote:
The RTA community also generally believed that it was faster to be seen by Alfred, but had not ever properly timed this, so if it's been confirmed that it's faster to talk to him that makes sense.
I have re-tested it just to double-check. Talking to Alfred is confirmed 4-5 frames faster than getting seen.
TiKevin83 wrote:
Instead of teach surf to poli(down 1), teach strength to raikou(up 1), use surf from menu(down 1). what you can do is teach strength to raikou first, then teach surf to poli, saving an input. It may also save an input later on teaching Iron Tail.
It's not actually faster right away, it came out a frame slower in my testing (I think since you introduce 3 neutral frames in order to be able to repress Down/A when moving the cursor, the extra item menu scroll costs more than the Party menu scrolls). However, I believe you are right that it will speed up learning Iron Tail and is therefore faster overall. I'll include these if I end up redoing this.
Editor, Expert player (2073)
Joined: 6/15/2005
Posts: 3282
Looks technically good. A few questions though: - How many rerecords do you estimate it took to bot this? - Did Pokerus ever factor into your route? I don't see a mention of it anywhere. - Did you consider poison deathwarping? There is one spot I can think of, and that is in the Goldenrod Radio Tower after beating the impostor manager. That would also allow you to fight a grunt with one Pokemon (around 1:18:58 in the video) instead of the scientist with three.
Skilled player (1040)
Joined: 7/24/2013
Posts: 175
FractalFusion wrote:
How many rerecords do you estimate it took to bot this?
I stopped trying to track this after it has been pointed out that these numbers are wholly incomparable to anything else and just skew the statistics. Not counting any of the investigation and test runs, it has taken about 2-3 days of wall clock time, with 8 simultaneous Gambatte instances continuously running, saving and loading savestates. It's probably more than any of my previous submissions due to optimizations I made (e.g. the multithreading support), but I can't attach any meaningful number to it.
FractalFusion wrote:
Did Pokerus ever factor into your route? I don't see a mention of it anywhere.
No. Pokérus doesn't do anything useful in Gen II. I never added any explicit checks against it either though, and I'm not sure it would even waste time in this run considering I never visit a Pokémon Center. The same is true for shinies btw, I didn't add any specific protections against finding them, but they would naturally be sorted out as being slower.
FractalFusion wrote:
Did you consider poison deathwarping? There is one spot I can think of, and that is in the Goldenrod Radio Tower after beating the impostor manager. That would also allow you to fight a grunt with one Pokemon (around 1:18:58 in the video) instead of the scientist with three.
I only considered deathwarping at the beginning, and deemed it not worth since I want to catch Poliwag with one of the Pokéballs I get. I see the the instance where you want to use it, and I haven't tested it, but I imagine it will be fairly slow because of all the setup that's required. You'd need to (1) visit the Pokécenter you want to warp back to, (2) get poisoned, which will cost at least an extra turn in a previous fight since you OHKO everything, and that is assuming you can find a trainer you have to fight anyway which is in the right spot given the amount of steps you need to take, and (3) get rid of all the other 3 Pokémon in your party (and later get them back for the HMs; or have them faint as well). My rough estimations make it seem unlikely that this saves time compared to chowing through two additional Pokémon (~26s) and going back down the Radio Tower (also ~26s). It's possible that it's faster if the stars align (dumping the other Pokémons in the Radio Tower PC when entering, and picking them back up before leaving (~18s each), finding a trainer the exact right distance away which can poison you (~6sec), etc.), but I'd need to check in way more detail.
Editor, Expert player (2073)
Joined: 6/15/2005
Posts: 3282
MrWint wrote:
FractalFusion wrote:
How many rerecords do you estimate it took to bot this?
I stopped trying to track this after it has been pointed out that these numbers are wholly incomparable to anything else and just skew the statistics.
Are you referring to TASVideos statistics? Because if you are, then I could care less about whether its statistics are skewed. What I liked most about your submissions were the rerecord counts running in the hundreds of millions, if only to clearly demonstrate how much more optimized your TASes are over just about everything else.
MrWint wrote:
No. Pokérus doesn't do anything useful in Gen II.
OK. I wasn't sure whether the 2x boosted EV/Stat Exp. from Pokerus would have made a difference at any point since Cyndaquil is mostly at low levels (boosted EV is unlikely to change the stat at low levels) and when you get Raikou at LV40, you OHKO the vast majority of Pokemon from then on without using criticals. Though now that we're talking about Pokerus, I'm wondering whether the 2x boosted EV make a difference in other games. The only thing I know for sure is that Pokerus doesn't matter for the current route in Pokemon Diamond/Pearl glitched. ---- By the way, I noticed that even though Pokemon Crystal reduces the number of mandatory battles compared to Gold/Silver (by 9, if I counted correctly), Crystal is still a pretty long game. There are 81 mandatory battles in the pre-league portion of the game alone (23 in post-league), which is a pretty large number (though Diamond/Pearl glitchless has 97, counting double battles as 2). Especially long is the Goldenrod Tower section; that section alone has 24 mandatory battles, more than the entire post-league! So even though I do appreciate all the new strategies that were implemented since my really outdated TAS of Pokemon Gold, I find Gen 2 TASes rather boring, especially now that catching Raikou is clearly the way to go. I'm saying this in case anyone was wondering why I never bothered with improving my outdated TAS from 13 years ago. And yes, I agree that my outdated TAS should be obsoleted in favor of this TAS. This TAS is far better optimized, on a far better emulator (the one I made mine on was so broken that the system time affected sync, seriously), and on a version of the game which in my opinion is better.
TiKevin83
He/Him
Ambassador, Moderator, Site Developer, Player (155)
Joined: 3/17/2018
Posts: 358
Location: Holland, MI
The rerecord count likely won't ever be a sensible number in any modern Pokemon gen 1-2 TAS again. Yellow NSC and Blue Glitchless both had undocumented rerecords done in other frameworks before the final inputs were pushed into BizHawk. The A* algorithm we use for encounter manip searching churned through at least a few hundred million paths to find Blue's L3 Male Nido, and none of that is documented in rerecord count. And it shouldn't be, because those kinds of iterations aren't even comparable across different path search algorithms. I agree with the idea of having this obsolete Gold for TASVideos. My opinion would likely change if Gold were much more thoroughly optimized.
Skilled player (1040)
Joined: 7/24/2013
Posts: 175
FractalFusion wrote:
Are you referring to TASVideos statistics? Because if you are, then I could care less about whether its statistics are skewed. What I liked most about your submissions were the rerecord counts running in the hundreds of millions, if only to clearly demonstrate how much more optimized your TASes are over just about everything else.
The main problem, and the reason why I don't do it, is that the higher re-record count does not necessarily correlate to a better optimized run. There are huge diminishing returns on it. To illustrate my point, the draft run I did without much optimization took about 100x less time to create, but only was ~1600 frames slower than the submitted run, and the majority of the improvement did not come from better RNG but routing improvements (using different moves, movement optimizations I missed, using an additional Escape Rope I forgot etc.). So a run with an astronomical rerecord count can easily be beaten with just a slightly better route. Manual rerecords are worth way more since the human behind them makes directed decisions, whereas 99.99% of automated rerecords are completely unnecessary and just a machine stupidly following instructions. I don't want to discourage anyone from trying to beat this run by intimidating them with an inflated number, because it's not all that important in the end.
FractalFusion wrote:
OK. I wasn't sure whether the 2x boosted EV/Stat Exp. from Pokerus would have made a difference at any point since Cyndaquil is mostly at low levels (boosted EV is unlikely to change the stat at low levels) and when you get Raikou at LV40, you OHKO the vast majority of Pokemon from then on without using criticals. Though now that we're talking about Pokerus, I'm wondering whether the 2x boosted EV make a difference in other games. The only thing I know for sure is that Pokerus doesn't matter for the current route in Pokemon Diamond/Pearl glitched.
I maybe was a bit too dismissive when creating this run, it is a purely beneficial mechanic. The main issue is that you can only get it after Goldenrod, so it doesn't apply to Cyndaquil where it would be most useful, and Raikou has barely any chance to benefit from it either due to the OHKOs. It definitely wouldn't save a turn (the net effect is only about 2-5 points of damage), but it may have saved a crit or two I missed. I had it in the back of my head when routing, but never seriously considered it because the situation never arose. ---- Coming back to the console verification discussion, I took a look at the gambatte-speedrun version as suggested by Alyosha. The whole situation is a bit messy, since BizHawk's gambatte version is stuck in 2012, and missed a lot of upstream changes from sinamas' original version, so they are quite different. I took a stab at updating BizHawk's Gambatte version (fork) somewhat successfully (in that no hardware tests I tried showed regressions and the console-verified Blue and Yellow run still synced) with changes from sinamas and gambatte-speedrun. This makes it closer to other versions again and hopefully easier to integrate future changes as well. I should also be able to port gifvex's cycle-based RTC code, but I don't have the means to do any console verification myself at the moment, so I wouldn't know whether it actually improved the situation, I can only check that I don't make it worse. So in order for this to work, I'd have to have somebody help me do some hardware tests on the builds to make sure it's working correctly (TiKevin83, can you help me with this?), and it would also be great to hear from the BizHawk people (Alyosha?) whether such a pull request would even be accepted.
Alyosha
He/Him
Editor, Emulator Coder, Expert player (3821)
Joined: 11/30/2014
Posts: 2829
Location: US
I'd definitely accept a PR for an updated gambatte, it would be great to be more in line with gambatte-speedrun. Just make sure you are being extra careful with savestates, as in my experience savestate bugs can be hard to track down in gambatte.
TiKevin83
He/Him
Ambassador, Moderator, Site Developer, Player (155)
Joined: 3/17/2018
Posts: 358
Location: Holland, MI
I'm more than happy to do console verification tests (I have a crystal cart too), and I have bizhawk and libgambatte building from source on my machine so I can test experimental changes. I'm more than happy to jump in BizHawk IRC and help with porting the RTC stuff, I did a little bit myself already but not in your fork.
Joined: 7/10/2016
Posts: 10
Very cool to see this TAS has been made. The Alfred thing, as well as the Victory Road rival are both obvious optimizations over what RTA routes currently do; I'm not sure how no one had caught them, but fresh eyes are always nice for these things.
MrWint wrote:
It would be interesting to hear about the different strategies that were considered. Since I made this basically in a bubble, I only used and tested the strategies I could come up with, and I can tell you whether I actually tested it and determined it being slower or just not thought about it at all.
I had given some thoughts to gifvex and TiKevin83 when they brought up a Crystal glitchless TAS before, but I would have bet the losing end of both the Totodile/Cyndaquil and Entei/Raikou decisions. I hadn't put a whole lot of thought in to either though; only that getting Hidden Power for Raikou (as the RTA route does) would be slower than Entei for TAS. But Raikou appears to lose far less time in battles than I would have guessed without Hidden Power. One idea I don't see mentioned is catching an Abra, which I'm almost certain is faster. You get to save 1 trip from Goldenrod <-> Route 36 (teleport to Violet after Squirtbottle most likely), and you can enter the center next to Rock Tunnel to teleport there later on for the EXPN Card quest. I don't know which Kanto route is faster; you can go through Rock Tunnel instead of Route 9, which puts you right next to the center, but you fight a different trainer going that route (Hiker Jim's Machamp instead of Camper Dean's Golduck). If I get a chance, I'll try to take a deeper look to see if anything else stands out, but catching Abra is the only obvious thing I can see right now.
MrWint wrote:
I did some testing for any sprite lag differences when investigating this because I thought something like this could be the case, but I couldn't find any conclusive evidence. Girl was faster some of the time, Boy was faster other times. Just because I couldn't find any bias in my tests doesn't mean it doesn't exist of course, just that it's hard to control for all the other variables, and any effect is likely very subtle.
The specific lag is backsprite lag in battle, since the girl's backsprite is not compressed, and doesn't need to be decompressed. Luckytyphlosion indicated in the past that this did result in taking a frame longer for the boy each instance, but I am not 100% sure how he came to that conclusion. One other minor note, that your botting setup may take care of anyway, is that switching AI is bugged (due to CheckTypeMatchup), and code flow depends on the type of the move the AI selected (rather than the player's type). In some cases, this can cause the amount of lag to vary by up to 6-7 frames after the player selects a move (FindEnemyMonsThatResistPlayer and FindAliveEnemyMonsWithASuperEffectiveMove are computation-intensive routines that may or may not be triggered). I'm not actually sure which battles are relevant in the route, but at least being aware of this may help avoid losing frames in a handful of places.
Skilled player (1040)
Joined: 7/24/2013
Posts: 175
Quick update: The console verification setup is working, TiKevin83 has just successfully synced a full run on console. I'll need to redo the whole TAS though on the updated version of BizHawk to make it console-verifiable, which I'll do in the next week, also incorporating the optimizations mentioned in this thread. So please hold off on judging this submission, a new movie is on the way.
Alyosha
He/Him
Editor, Emulator Coder, Expert player (3821)
Joined: 11/30/2014
Posts: 2829
Location: US
Awesome! I like seeing this kind of technological progress, keep pushing the limits! Hopefully we can get a new BizHawk release ready for the new submission.
TiKevin83
He/Him
Ambassador, Moderator, Site Developer, Player (155)
Joined: 3/17/2018
Posts: 358
Location: Holland, MI
For posterity, a YT backup of the first successful sync stream. https://youtu.be/1FBJHVGfStY I'm waiting to do a quality-driven console encode until MrWint is satisfied with optimizations and streaming those tests. In order to achieve this level of synchronization, MrWint, Gifvex, Extrems, and I had to improve the precision of our transform script to send inputs to GBI and verify that each input was being sent during the correct part of each frame. MrWint's emu updates also allowed us to have RTC accuracy to the degree necessary to emulate real cartridge behaviors, like the RTC running .2 seconds too fast over the 2 hours and 49 minutes in the prototype.
Samtastic
He/Him
Player (154)
Joined: 11/30/2012
Posts: 775
I always like to see TASes of my childhood games whenever it's Mario, Crash Bandicoot, Pokemon or even Oddworld they will always be superior. I give this a yes vote.
Enjoys speedrunning, playing and TASing Oddworld games! Has TASed: Oddworld: Abe's Oddysee in 12.06.13 (with Dooty) Oddworld: Adventures II in 20.03.78 (with Dooty) Oddworld: Abe's Exoddus 100% in 2:08:28.4 (with Dooty) Oddworld: Abe's Oddysee 100% in 1:05:01.65 Oddworld: Abe's Exoddus in 37:18 Oddworld: Abe's Exoddus in 37:15 Oddworld: Abe's Exoddus 100% in 2:!5.44.12 Oddworld: Abe's Oddysee any% in 13:01.3 Oddworld: Abe's Oddysee any% in 12:59.95 Oddworld: Abe's Oddysee 100% in 1:04:16.27 Oddworld: Abe's Oddysee 100% in 1:04:01.07 Currently working on: Waiting for Windows TAS Tools to work so I can TAS PC version of Exoddus.