Any updates to Pokémon support?

This is gonna be a long one, but there’s a lot to unpack. I’m sorry in advance for the length.

TLDR, there’s some misconceptions about how much actually comes in for donations, and Pokemon is really hard for various technical reasons

It hasn’t even been 2 full months. We aren’t even halfway through February yet. It definitely is not “quite a bit into 2025”

No, it has been in beta testing since then. Because support is still in beta, because the servers are very unstable, incomplete, and buggy. They aren’t sitting there fully complete, they still need a lot of work put into them

You misunderstand both what the donation goal means and how much actually comes in (which is understandable, I don’t think this information is posted anywhere?)

The donation goal was set to be as the estimated bare minimum for a single person to work on the project full time. “Estimated bare minimum” means that obviously it would not apply to all situations, and that it’s just enough to not die in the process. It also has to encompass all of our running costs, which are very high due to this being a very large network we have to emulate with hundreds of thousands of users, and all of our legal fees for the LLC

The number shown on the website is also largely inaccurate, the real tangible amount coming in is much lower. The number on the website is just a tally of all the Stripe subscriptions marked as “active”, it doesn’t take into account things like subscriptions marked as “active” but not “completed” (meaning the money is being added to the total before it even leaves a bank), doesn’t take into account Stripe’s overhead fees, doesn’t take into account cases where someone is going to cancel before being charged (IE, if the tracker said there was $100 being donated, but half the people decided that they wanted to cancel before being charged, then in reality that’s only $50), and doesn’t include any taxes (for reference, in 2023 when we were barely meeting the goal, oftentimes falling short, we had to pay around $10,000 in taxes, which was around 1/3 of the total donations that came in for that year. That number is going to be much higher this year). So really a lot less is actually tangible to us, a lot we don’t even see and even of what we do see most goes to running costs or towards taxes with the rest being saved for emergencies

I definitely understand your view on this, but it’s not that simple unfortunately. We only move things out of beta when we are confident in the overall stability of the servers/feature implementations. Even if those things are not entirely perfect or accurate we have still moved them into a public release, but we do not move things that are just simply unstable or lacking majority features for standard gameplay in a title. For example, we would not have released Mario Kart 7 just because we got login working, but lacked actual matchmaking or if the matchmaking/overall connection to the server was unstable. Doing so would do far more harm than good

As you’ve said we are a small team made up almost entirely of volunteers. Having more people come on as full/part time is part of our long term plans, and is actually something I’ve been talking with some people internally about and will be discussing with my accountant, but with the new experience of having been full time and seeing the real requirements for that, and learning all the laws/complications related to international employment as a US-based LLC (a LOT of our core team members is in different countries), doing so may take some time

As for why Pokemon is taking a while, there’s 2 answers to that:

  1. Small team size/availability

  2. Pokemon is just hard

As noted our team size is pretty small, most of which being volunteers working on their own time. It might seem like the team is larger than it actually is because of how many people have the Developer role on Discord, but in reality there’s only around 10 core team members (the other people have the role just as a shortcut to get those people access to our private dev channels, not necessarily because they do any work here). On top of that, the core team is like a “revolving door” of sorts. People come and go, both in terms of actual team status and in availability. Lots of our team are students or have day jobs for example, and so they take large periods of time off from working here. I would estimate that we only really have about 3-4 active devs at any given time. Of those devs, most also have specific specialties they work in which just don’t translate over to other areas. For example, I am not a web developer. I am not good at it, it’s not where my training is. That’s why we have dedicated web devs on the team. Likewise, not everyone on the team has the proper training/knowledge/interest in game server development. We don’t actually have very many people on the team who are able to do so (this number is increasing, thankfully, but it’s a slow process and takes a while to get everyone up to speed), and even those who do know how to may not be equipped to work on a certain platform. So there’s just a limited amount of people, and time, to work on things. Not to mention that there’s much more that we do besides game server development. We spend a lot of time working on research and documentation as well, and we also spend a lot of time working on our tooling (we have to make many tools in-house since we’re the only ones seriously working in this space), and one of our goals is to make our networking libraries support non-Nintendo games on platforms besides the Wii U/3DS (Nintendo did not make NEX from scratch, they licensed Rendez-Vous from Quazal and modified it. So we have the goal of making our libraries as compatible as possible, for projects like GoCentral which are custom Rock Band 3 servers for the Wii, PS3, and Xbox 360)

As for Pokemon specifically, it’s hard. Just plain and simple. In order for us to support a game, we need to know how to communicate with the game. In NEX this is done through a selection of “protocols”, all of which have different “methods”, and to communicate information about a request/response a standard RMC setup is used. So to support Pokemon, we first need to know which protocols it uses, what methods in those protocols, what the request/response structures of those methods looks like, and then finally understanding the context of the data in the request/responses. Historically the way we gather such information is through various means, such as:

  1. Debug symbols leftover in the game and standard reverse engineering

  2. Fuzzing and using the Debug NEX protocol

  3. Scanning for a games DDL trees

In many cases games share protocols. Nintendo/Quazal made a standard selection of them to cover basically all basic needs of a game, from authentication, to matchmaking, to data object storage, etc. Since these protocols are common to many games, it means that we have many different reference points to work off of. Even if GameA lacks usable data, GameB might have the data we need, which then applies back to GameA

Typically the way this process goes is:

  1. Check for DDLs. These are the holy grail for us, as it’s essentially debug information left in the game for the exact structure of a protocol including it’s methods, down to the real names of methods/types and their fields. That gives us a MASSIVE starting point and a LOT of context (oftentimes just having the real name of a method and it’s fields gets us like 90% of the way towards understanding how that method works). However not all games have DDLs, and in fact most 3DS titles had them stripped

  2. If a game lacks DDLs or is missing a specific protocol/method, or has modified an existing protocol (even though Nintendo/Quazal offer standard protocols, game devs were free to modify them), we would use the Debug NEX protocol. This gives us only the real method names, no structures, but it’s a good starting point for understanding larger context. However not all games had this protocol enabled, and now that the official servers are offline there’s no way to use it again

  3. Then we start standard reverse engineering. We disassemble the games in tools like Ghidra and work our way through things. If we’re lucky then a game will have its symbols still. These symbols give real names to disassembled functions, which includes the functions name and parameter types. This doesn’t give us field names, but it does help us build a general structure of methods/protocols even without DDLs (which is how I documented the many changes in Xenoblade). This process can be done even without symbols (Dani has done it many times) but symbols give us a huge head start

Pokemon lacks DDLs, has no symbols, and not only does it have extensions/modifications to existing protocols it’s one of the few games which uses entirely custom ones which are not applicable to other titles so we have no other reference point for the protocols to work off of. We are essentially flying blind with Pokemon in some regards, making it very annoying to work with. Not only that, but we also have to take into account things like cheat protection since in the past the official servers had issues with hacked GTS entries that would do things like crash consoles. Overall the Pokemon titles are going to be very annoying, and likely time consuming, to get fully working in a non-broken state. It’s for a similar reason that Mario Kart 7 lacks it’s ranking support at the moment, since that game uses a much older version of the ranking protocol that we have virtually no knowledge on due to lack of DDLs, symbols, and references etc.

Given our limited man power, large scope, and the difficulty of the Pokemon games, we often have to prioritize other things above it (and many other games for that matter). We understand that this can sometimes upset people who believe a certain game should be prioritized, but we weigh the pros and cons of what to work on compared to all tasks on our table. For instance lately we’ve been more focussed on stability/security/infrastructure updates than actual game servers. This is because we want to strengthen our foundations in which we build games off of. There have been some cases of more games making their way into testing, but these are almost always smaller/simpler games used as a way to test said updates, or they were worked on by someone outside of the main core development team (for example Yo-Kai Watch was worked on by our only Jr Dev on their own)

If your goal is Pokemon, I would very highly recommend AGAINST donating. As I said things are very unstable and incomplete atm. We put it into very early beta testing just to see what did and didn’t work atm, and it’s clear a lot of it is not stable

5 Likes