So this topic has come up a lot in recent conversations about Nintendo’s online service and how the Pokémon Let’s Go games are not going to allow cloud saves because of the possibility of duplicates. This I believe can be prevented even with cloud saves being available.
So let’s start with how the duplication works: The player has a friend who wants a duplicate of the Pokémon the player owns. So first of all the player saves the game to the cloud, ensuring the Pokémon can be recovered. The player goes offline and trades the Pokémon with the friend; now the friend has the Pokémon. The player then deletes the saved game (maybe even wipes the entire system) and recovers the cloud save. Now the player has access to the Pokémon again, which means both the player and the friend own the same Pokémon and the Pokémon is duplicated.
So Game Freak and Nintendo decided the solution was to prevent cloud saves for the Pokémon Let’s Go games. This is less than ideal because it means that players can lose many hours of progress. So we need a better solution.
Here’s my proposal:
- Give every Pokémon a unique ID. This can be done using a UUID, which is a standard method of making unique identifiers in the computer industry. This means if a new method of cloning is found, it can be detected.
- The game uses a server to track Pokémon. I’ll go ahead and say that offline use of the game (including trading) should still be permitted, but whenever the player has access to the internet, the game should automatically connect to the server. Use of the server should be mandatory whenever the player makes a cloud save.
- The server keeps track of who owns all Pokémon; it could potentially also maintain a blockchain-like log of all transactions so everything can be verified.
- The Switch keeps a log of all recent transactions, both sending and receiving. This log is uploaded to the server whenever the system has access to the internet. The server verifies the log and has the power to approve or reject transactions in the log. Ideally, the server also has the power to reach into cloud saves and remove sold Pokémon whenever it learns of a trade.
So what happens when a player trades a Pokémon and restores the save is this:
- The player starts by backing up their system before the trade.
- The player trades the Pokémon offline.
- Let’s assume the player wipes their system while offline, creating a worst case scenario where the system does not have a log of the trade.
- The player restores the save, temporarily duplicating the Pokémon.
- The player’s friend connects to the server and uploads the log file, “ratting out” the player.
- The server now knows the player has made the trade. It will remove the Pokémon from the cloud save and the next time the player connects will remove the Pokémon from the player’s Switch.
I will note that yes, there is a step here where the Pokémon can be temporarily duplicated – I don’t think this can be avoided if we’re going to allow offline trades. That said, I would say that this is fine – offline dupes between friends isn’t such a big deal.
What this does allow is a way for tournaments and other similar events to ensure players aren’t using duplicates: They can require that everybody connects their systems to the server, which will be able to detect and resolve Pokémon duplicates. That ensures that nobody at the event is using a duplicate of anybody else at the event.
If you want to prevent even the temporary duplication, then there is really only one solution: Make online trading mandatory. All trades happen through the server, which can ensure no duplicates are being made. Yeah it might suck a bit that you can’t make offline trades, but that’s how you really fix the problem.