Tool Assisted Speedrun Using Game Boy Interface

The video above shows the first successful full sync of Crystal Glitchless, which is longer than any other published console verification on TASVideos by more than an hour.  This was made possible by a combination of efforts from TASVideos members and Pokemon Speedrunners and has allowed MrWint’s Pokemon Crystal TAS to be verified on original hardware using Game Boy Interface.

MrWint used rapid prototype TASes to iteratively tune the real time clock estimate, so they’re waiting to produce higher quality console captures until fully satisfied with the optimization of the TAS.  MrWint’s original submission to TASVideos can be found here:

Here’s a bit of history and how the team was able to overcome some of the challenges:

Emulator Accuracy

Console verification efforts require perfect emulation of the target console. When the Pokemon Speedrunning community needed perfect emulation of Gen 2 to verify specific RNG patterns, Gifvex improved their Gambatte-Speedrun emulator to perfectly handle the different cartridge model used in Gen 2 (MBC3) which includes a real time clock. MrWint was able to port Gifvex’s RTC improvements from the emulator used in the speedrunning community (Gambatte-Speedrun) to BizHawk so that it can be used for TASing. Many other improvements were ported from Sinamas’s emulator, the original Gambatte which was recently resurrected and which Gambatte-Speedrun is built on.

Console Playback

With the new improvements in hand, MrWint exported a TAS for TiKevin83 to test using Extrems’ Game Boy Interface. But nothing ever works perfectly the first try. Over the course of 32 minutes, the Real Time Clock in TiKevin83’s original Crystal Cartridge drifted enough to cause differences in Crystal’s RNG, desyncing the run. MrWint, TiKevin83, and Gifvex were able to reverse engineer an idea of how far off the clock was by analysis of the gift Spearow Kenya’s random stats. In doing so they also discovered that this Crystal Cart’s dead battery caused the values in SRAM (save data) to match BizHawk defaults by sheer coincidence. MrWint was then able to update the TAS file with an offset to correct for the drifting RTC and build a new prototype run around the drift. This massively improved the length of syncing to almost two hours. Some minor issues were found in the conversion factors used for Game Boy Interface to time inputs on console by exact Game Boy CPU clock cycles. The conversion assumed inputs would be noticed at the start of each frame, but this assumption failed for one of the over six hundred thousand frames in the TAS. Extrems also suggested tuning an offset in the conversion which accounts for a mode switch in the GBA BIOS. After correcting those conversions, the run was able to be verified in its entirety.

Thanks again to MrWint, Gifvex, and Extrems for their work on this retro TAS project and thanks to tikevin83 for writing up this article for RetroRGB, as I (Bob) wouldn’t have been able to do it justice.

Liked it? Take a second to support Bob on Patreon!