After having played for +130 hours the videogame Vampire Survivors, when the follow up, Vampire Crawlers was recently released, I had to play it.
Now, +20 hours of playtime later I was able to finish it once, and again, like I did with Vampire survivors, I wanted to fiddle around with the savegames, to see if I could modify the game coins (I'm not willing to go through the insane grinding required to tweak the gems). Using the tiny NodeJS editor I built for the first game, I've also been able to create one for the new title. you can find it here: https://github.com/Kartones/vampire-crawlers-savegame-editor.
Sometimes, we forget to test the easiest path first. Vampire Survivors's checksum logic was simple: you empty the checksum field in the (JSON) savegame data, modify whatever you want, and then recalculate the new checksum with the whole JSON contents. With Vampire Crawlers, I initially tried similarly, but I couldn't reproduce a correct hash (easiest case: empty checksum and recalculate should generate the original checksum again). I tried a few SHA algorithm variants, but nothing was working.
Then, out of ideas, I began attempting to reverse engineer the logic (it is a Unity title, so potentially easy if the DLLs are .NET, not IL2CPP). I was going deeper into the rabbit hole, when I decided to first try something simpler: Search online if there was any information about the savegames... and voila! I found this article that mentioned simply leaving an empty checksum value to port a savegame from XBox Game Pass to Steam. A quick test later, confirmed that it works (at least as of 2026-05-14).
I fixated too much on my idea of the developer maybe using the same technique as the last time, but I forgot to test the most trivial case: is the checksum actually required?
In any case, a fun albeit quick project. Just above 100 lines of code, and most of it reused from the original editing tool.