I’m a big fan of the Pokémon franchise.

When it first came to the US, I was at just the right age of childhood for its megalithic multimedia-ness to consume me. I sunk hundreds of hours into each of the games, I collected the cards, I watched the cartoon—I even had a Pokémon fansite on Maxpages.com! (If you’ve never heard of Maxpages, imagine Geocities, but even less professional and even more overrun by little kids.)

At one point, my obsession was so great that I wanted to make a Pokédex website—a site that would list all 150 Pokémon and all of their Pokédex entries from each of the games. I even went as far as borrowing an “HTML For Dummies” book from one of my parents’ friends, so I could do it all myself the right and proper way.

… But I was just a dumb ten year old with better things to do (like playing Pokémon games for another billion hours, probably), so I didn’t get very far. Making a Pokédex website would stay a childhood dream in the back of my mind for the rest of my life.

As I grew older and became a more hardcore/competitive gamer, I eventually found out about the wonderful world of competitive Pokémon battling—and thus I spent years on and off playing in fanmade battle sim programs against other people online. NetBattle in gen 3, Shoddy Battle in gen 4, and Pokémon Showdown in gens 6 and beyond.

Even as my interest waned in the rest of the multimedia franchise, I kept playing the games—both the official Game Freak ones published by Nintendo, and the unofficial battle sims promoted by Smogon. Not all the time, of course—like any hobby, this one had its high points and its low points of activity. But every few years another big Nintendo game would come out, reigniting my enjoyment of the series.

At some point in mid 2016, I was playing through one of the official games, planning on catching a Cresselia soon, and wondering which Nature to Synchronize for. Cresselia is a Pokémon that had been competitively viable in several generations already, across many different formats—VGC, OU, UU, Doubles—with different Natures at the tops of the rankings in different formats (or even in the same format over long periods of time). I wanted to make sure that whichever Nature I caught, it had a high chance of being competitively viable not just now, but in future generations as well.

Since 2014, Smogon has published monthly usage stats for Pokémon Showdown, in the aptly named https://www.smogon.com/stats/ file directory. So, all the data was already out there for me to be able to figure out what I wanted. But… Take a look at some of the files in that directory. Go ahead, I’ll wait.

It’s… all just raw text. Nothing in any one file is linked to any other file. Sure, the data’s all there, but analyzing it the way I wanted would be a gargantuan manual effort. Jeez, they don’t even make it easy to compare month-to-month rises and falls in the stats! And that’s one of the most basic use cases for these files that I can think of!

It was roughly then that I realized, “Wait a minute, the data’s all there… in these files with standardized formatting… and I’m a professional software engineer.”

Fast forward a couple years and a couple hundred hours of design, development, and tracking down obscure resources, and we have Porydex: a fully-indexed and easily-searchable repository of Pokémon Showdown usage stats, with an emphasis on tracking data over time, and fully integrated with a Pokédex of data ripped directly from the main games themselves.

I’m really proud of this thing. Not only is it one of the biggest projects I’ve ever completed, but it’s functional and useful and has lots of really cool features that similar websites (veekun.com, pikalytics.com) don’t even come close to matching. Such as:

  • Stat charts over time! For Pokémon usage, lead usage, ability/item/move usage on a specific Pokémon, and ability/item/move usage on all Pokémon cumulatively.
  • Direct support for all ten languages that Pokémon games are currently released in! Because I rip data straight from the game ROMs, that also includes all the translations of Pokémon names, move names, and so on. (But not the website menus themselves, because sadly I am still a monolingual American.)
  • Egg move breeding chain lists! And they’re fully comprehensive! A chain is only possible with Smeargle? Included. A chain is only possible by transferring up a Pokémon from XD: Gale of Darkness with an exclusive Tutor move? Included.
  • Pokémon and move data for every generation, not just the latest gen! (Seriously, I don’t know why so many Pokédex websites do that.)
  • Type matchup lists that take into account a Pokémon’s ability, or a move’s special effects! (Yeah, I know, this is overkill. But it’s also pretty cool, right?)

And plenty of other neat things, but the rest isn’t as unique as what I already listed above.

I’ve been working on Porydex for almost four years now, and only in its third year did it start coming close to my original vision for it—and there’s still so much more I’d love to add. Like maybe a page of dynamically generated speed tiers based on usage, or some kind of integration with the Pokémon Showdown Damage Calculator. Or even just better UI integration between the “stats” half of the site and the “dex” half of the site. But no matter how much work remains to be done (and there will always be more work to be done), I consider the Porydex project a massive success.

Sometimes, childhood dreams do come true.