Introduction
The categories for Generation I of Pokémon games have shifted towards being all about the glitches, and efforts to limit which glitches are allowed to show more actual gameplay have been largely ineffective (see the current any% publication).
Since I feel partly responsible for this shortcoming, I'll try with this submission to fix it.
That said, creating this run took way longer than I anticipated or care to admit.
The routing alone took months before even starting the first frame of the run, and small improvements came up constantly requiring to re-do parts of it.
This is submission is the fifth complete start-to-finish attempt I created, the previous four I re-did because of obvious routing improvements I noticed along the way.
About the run
Goal choice
The goal of this run is to collect all 150 obtainable Pokemon in both versions and obtain the diploma.
No glitches are allowed.
Why glitchless?
The main purpose of this submission is to show more of the actual gameplay and variety, which remain unexplored in other categories just because using glitches is faster.
The whole dual GB setup wouldn't make any sense when allowing glitches, you'd be faster just not trading at all, and end up with a solo Catch 'Em All run.
And history has shown that trying to limit the amount of glitches does not work, the games are too broken and you'll always find ways around it.
Why Coop Diploma?
First of all, I think it's just a fun category, and something most people have not seen as a category.
The concept has been explored before, but there was no polished route developed yet, largely because the possibilities for how to go about things are so vast.
I considered doing any% glitchless at first, but the route for this is mostly fixed and everyone has probably seen it.
A TAS wouldn't add much to it.
In Coop Diploma, you get to do things you wouldn't do in other categories, like fishing, trading, gambling, etc.
It shows off most of the things the game has to offer at some point during the run.
Also, I always wanted to explore the dual GB capabilities of BizHawk.
There aren't too many dual GB TASes around, and Pokémon Red/Blue is a game that can actually benefit from these capabilities.
Having to sync the games up in the middle of the run poses an extra routing challenge.
Emulator Choice/Rant
This run uses BizHawk's dual GB capabilities, and runs on BizHawk 1.7 and later.
Due to how dual GB is implemented in BizHawk, it was unavoidable to use the new frame timing introduced in BizHawk 1.7.
This frame timing can cause issues that have been discussed before, but being forced to use it gave me some more insight in which problems actually occur.
The main issue arises when the joypad input is split between frames.
The Gameboy polls the joypad in two stages with 4 bit each, one for the directional keys and one for the buttons.
If they end up on different sides of the arbitrary frame boundary, weird things happen.
You need to press your directional keys on a different frame than the buttons, even though they are used at the exact same time.
In the worst case, multiple joypad polls happen on the same frame, so there is no input frame for you to do the inputs you want, and you need to wait frames until it fixes itself or work around it by using a different set of inputs that doesn't run into this problem.
That's enough of a rant over technical details, I'm happy to have the choice of frame timing at least in the single GB case.
The route
Instead of forcing you to read through the comments here and then match them with the corresponding point in the run, I've created an annotated encoding of the run that contains general information and optimization details, at the top of this submission text.
Big shoutouts to BizHawk at this point for making it easy to create recordings from your input files.
The video was created entirely with tools that BizHawk provides without any editing in post.
The bars and overlays are done using a lua script, and the subtitles are actual subtitles in the movie (I excluded them in the submitted file).
The encoding is done with custom ffmpeg parameters to scale the video (to allow 720p60 playback on YouTube) and to mix the audio streams (hearing one game in each stereo channel is not the most pleasurable experience).
Used tools and resources
This movie, like all my previous movies, was not created in BizHawk, but in a piece of code I wrote to automatically run Gameboy emulation and create BizHawk-compatible movies.
This has the advantage that you have full fine control over every CPU cycle, you can inspect the running Gameboy emulation arbitrarily and create automation to complete common tasks or overcome random events.
The main disadvantages are that you need complete in-depth knowledge about the game's internals, including ROM addresses for different operations and interesting events, and that it takes a lot of time, likely more than it'll take when doing manual inputs in BizHawk.
You can find the code I used for this movie (and all previous movies) on GitHub, but be warned that this is not a polished or easy-to-use piece of software.
It expects you to create a program that creates the run, with no option to do inputs manually while it's running.
Tools that made creating this run a whole lot easier:
Pokanalysis - Easy and convenient tool to look at maps and encounter tables.
Its coordinate system for maps seems like such a small thing, but saves so much time counting squares when defining routes.
pokered - Disassembly of Pokémon Red and Blue. Invaluable for finding out the actual game mechanics and important ROM addresses. The whole approach would be infeasible without a disassembly.
BGB - Gameboy emulator with an awesome debugger. Lets you test out stuff very easily, find interesting RAM addresses and follow the disasssembly through actually running the game.
BizHawk - Supports dual GB emulation even though there's no real demand, just because it's cool to have it. Without this the run wouldn't be possible.
fsvgm777: Site parser mistakenly recognised it as NES, I changed it to the proper GB.
Noxxa: Judging.
Noxxa: This is really a quite amazing run. It takes routing to unparalleled levels, considering the way both runs have to interact with each other and have to sync up with each other on occasion. It is not just trading between the games out of necessity to fill the Pokédex in both games, but it is also taking into account what Pokémon would be faster to trade over instead of capture in both versions, while keeping the number of trades required even for both games. And having to determine which version to catch (or obtain in other ways) which Pokémon in if they are going to be traded over. And taking into account that one game has to reset for a third Eevee and one of the starter lines. The way the run is handling getting 300 Pokédex entries in total across both games is absolutely astounding, to say the least.
This run is also unique in another way, in that it is a completely glitchless Pokémon Red or Blue TAS, whereas all currently published Generation 1 TASes are very heavily glitched. This provides a nice contrast to those runs, as it shows off a lot of what the game has to offer that other runs never show. The eight gyms are challenged in a proper order, often skipped areas such as Rocket Hideout are entered and cleared correctly, rarely seen features such as trading with NPCs are shown off, and the run even features some slot machine action. This run also shows that the seemingly practically impossible goal of catching them all and getting the diploma without glitches is actually quite possible in a reasonable time frame with two games. Now, I think I have written enough words and paragraphs about this run. Accepting for Moons as a new category.
Spikestuff: Publishing.
Welp, time to "Phone a friend".
Welp, time to "Phone a friend".