Combining PC and Nintendo Switch, I've spent hundreds of hours playing Diablo III. But sadly there is no cross-platform account support, so my progress in the console (way ahead of PC because I can and did play offline a lot) can't be merged. And this videogame is one of the few that are actually played best in console for two reasons: controls are really really good (so nice that I prefer them to mouse and keyboard), and the aforementioned offline play (PC requires persistent online connectivity even if you play alone).
I also love emulation, and recently the Switch emulation scene has advanced too much, at least regarding the yuzu emulator, that I decided to try it with Diablo III. It works so well that I set a small goal for myself: If I'm able to somehow hack or edit the game to "recover" my account experience levels at minimum, I'll stop playing it on the physical console and play via the emulator (complete with the Pro Controller and all, of which I have one).
My first approach was the easiest experiment, trying Cheat Engine. I attached it to the
Yuzu.exe process and selected "
All" as value type. I tried searching for money and was really trivial finding the correct memory address. Having confirmed that it can be used to alter the game, I then went seeking the jackpot: trying to change the experience (to quickly level up again my hundreds of paragon levels). A search yielded some results, but none of them were the real storage for experience, as they were reset back to the original value either after a while or after obtaining more experience points.
Now, how could experience levels work, if they are not the number of points you have? well, they might be what I call "inverted value" or "remainder value": not the experience you have but instead how much is missing for the next level. Each time you level up your current experience resets to 0, and you need an amount X, which decrements upon killing enemies and completing quests. If you search that decrementing X, very often will give you what you seek. For Diablo III, this was the key. You can find the actual amount inside the character inventory, at your character details, scrolling down on the list. Note that Cheat Engine will find 3 values (at least did in my case, in multiple tests), so play around changing one at a time until you find which one controls the actual XP value; Then set it to 1, freeze the memory address, and you're done: 1 kill -> 1 level increase (normal and then paragon).
But, is there any editor?
A friend of mine found that there are savegame editors for the console versions. They are sometimes of no use unless you have a modded device as saves are encrypted or at least signed, but seems that at least in Diablo III's case people know how to circumvent encryption, so after making a backup of the savegame files I tried D3Edit.
It is a Python 3 script, but the GUI (despite pretty basic) requires tkinter, which is not in the base Python install, so if you use Linux do:
sudo apt-get install python3-tk
And if you use Windows, when installing Python ensure the
tcl/tk option checkbox is marked.
With that I can confirm that it works and allows a greater deal of edits: character and paragon levels, money, all resource types, and there's an inventory editor. The items editor also works, but is a bit unintuitive (up to the point that I thought editing items was broken). You first need to "add an item", choosing the rarity, type, subtype and number of affixes. Then, after saving/adding it, will appear on the left-most list, and once you click it, you will be able to modify the affixes. For many items, with the "safe mode" checkbox active I was still not able to add affixes to new items, so you should disable/uncheck it.
And also you can add other types of items, like pets (I had +15 on my account). Just have in mind that
x-y damage in weapons and
x-y armour for shields and gear are a must as by default every item has really low stats for damage/armour. And of course be careful to not spoil the entertainment, as after all the greatest fun (addiction?) of the game is finding better loot and constantly improving your character's equipment.
After this experiments, I've decided to switch to the emulated version (pun intended). I can play at minimum as well as in the real console and have room to explore alternatives if I get bored (maybe improve the item editor?). Plus I can go back to the PC version if I want some online multiplayer.