Part 0: Introduction
Ever since I was a kid, I have been deeply passionate about Pokémon. I got my first Pokémon game in January of 2011 and I don’t think that there has been a time since that I haven’t been playing through at least one Pokémon game.
Since then, Pokémon has evolved from just being a game I enjoyed playing to being somewhat of a learning tool. I remember being on the playground during summer school and encountering the infamous “MissingNo” in a hand-me-down copy of Pokémon Yellow and wondering- “Why does this work?” Similar questions popped into my mind after watching videos on the “Mew Glitch” and “Beating Pokémon Yellow in 0:00”.
Alas, as a pre-teen with very little computer science knowledge, these questions would go unanswered.
A young Austin, shortly after getting Pokémon SoulSilver for his birthday.
As I grew older and started studying computer science, I began researching why these glitches worked- and how people learned to exploit them in positive ways.
I began watching videos on how the GameBoy CPU worked, and what Assembly code was in my free time. This all culminated in 2019 when I found the world of Arbitrary Code Execution. Usually, Arbitrary Code Execution (often abbreviated to ACE) is a very bad thing. In modern-day electronics, ACE exploits can be used to gain personal data, brick devices, and more. However, on an older system such as the GameBoy, it’s safe to explore.
ACE, in short, is a form of exploit that causes the CPU to run code from unintended areas- most often within RAM. By modifying RAM in a purposeful way, we can write and run our own code on unmodified hardware. One of my favorite examples of ACE is used in Super Mario Bros. 3 any% Speedruns, where Koopa shells are placed in specific X coordinates and cause the game to jump to the credits. One of my favorite YouTube videos from Retro Game Mechanics Explained goes into great detail about how and why it works.
This is genuinely one of my favorite YouTube videos. I highly recommend it!
In the summer of 2020, I created my first ACE program: a randomization script for the English releases of Pokémon Gold and Silver. Looking back on it, it is far from perfect, but I was extremely proud of it at the time. This program was written directly in a .txt file and transferred manually to a copy of Gold one byte at a time. In retrospect, I have no idea how I didn’t accidentally corrupt the save file during testing. I remember struggling through a lot of issues and asking a lot of questions online, but it was a fantastic learning experience.
One of the videos I recorded to showcase my ACE program in 2020.
Around this time, I also was finishing up a different Pokémon project. Starting in 2017, I began the ultimate Pokémon challenge of “Catching ‘em all” and added a personal challenge of requiring every Pokémon be caught in their first game. One of my favorite features of the Pokémon franchise is the ability to send your Pokémon forward into the next generation. This feature was added in the third generation of Pokémon and has been a staple ever since. The fact that you can take a Pokémon from the GameBoy Advance and bring it all the way to the Nintendo Switch is so cool to me.
Unfortunately, the original two generations of Pokémon did not have the ability to transfer to the third, meaning they were effectively locked. This changed in 2016 when the first two generations were re-released on the 3DS, with the added ability to send Pokémon to the, at the time, most recent generation. It was these re-releases that inspired me to begin this challenge in the first place.
The custom spreadsheet I created to track my progress- many High School class periods were spent working on this.
In the fall of 2020, I started my first college semester and that’s what my time was fully dedicated to learning. Whether it be through my classes or watching ACE showcases and glitch explanations during my free time. As I worked toward my degree in Computer and Electrical Engineering, I began noticing how many topics I already had some knowledge about thanks to my time with ACE. I realized that there was a genuine application for knowing Assembly, and how older consoles worked.
This all culminated in March of 2022 when I saw a YouTube video called “Trade Pokémon between Gen 3 and Gen 1/2, and more! - Pokémon Gen 3 to Gen X” by Lorenzooone. This video showcased a homebrew program that would trade Pokémon between Generation 1/2 and Generation 3, finally closing the gap. I was extremely impressed, but there were a few things that I personally would have changed. Mainly, most transfer methods don’t use trading and instead just send the Pokémon directly from one game to the other. Initially, I was going to message Lorezooone, asking if they would be able to implement it. Ultimately though, I thought- “why don’t I make my own transfer program? Then I can make it exactly how I want”.
And that’s exactly what I did. I grabbed a fresh EPCOT notebook that evening and wrote the following:
And thus, what would eventually be known as Poké Transporter GB was born.