BlueCrab wrote:That said, for various reasons, the Sylverant site actually does have a way to generate SN/AK pairs for the PC version, so...
hmm. Buying is obviously my preference, but if it's not available for sale I wouldn't really consider it piracy. So what would be the process for setting that up? And how would offline backup of characters work?
Random thought: Would a Dreamcast SN/AK work on the PC version?
BlueCrab wrote:It'd almost assuredly be possible to write such a program if one tried hard enough. That said, I don't know that anyone's looked too terribly much into how the save files are encrypted in the first place to attempt it.
I'd actually be interested in taking a crash at that sometime, although the limit of my console development experience is XNA (Xbox 360). That was using C# and/or Visual Basic .NET, but usually I work on C++ if possible. I'll write in Java if I absolutely have to. Right now my time is limited because I'm technically a student, and right now I am working on a tool for custom Minecraft maps. My only experience when it comes to conversions is in regards to a MIPS compiler I once had to write, but I imagine that with the right resources figuring out how to crack a VMU file would be good to at least try. If such a tool could be created not only would it be possible to transfer a character from a public serial to a private serial, but it would also be possible to transfer between versions. For example, taking a Dreamcast save to PC and vice versa.
I'm aware that Dreamcast development tutorials exist, but would that be the place to start for figuring out the VMU's encryption? Or is there somewhere else I should look? Or would it be better to take a look at how the PC version encrypts the save assuming it does so at all?EDIT:
I found some Hitachi SH-4 manuals here: https://1drv.ms/u/s!ArrGQHt5Dxc663ljLgS ... B?e=lXDAw0
Looks like they use C and C++, which is great, although at a glance it doesn't seem very relevant to the VMU. I also found some tools related to the VMU here: https://www.deco.franken.de/myfiles/myfiles.html
and it looks like that uses ASM (assembly) which I have experience in, but is architecture specific so is a pain to work in. But, at issue here is how the data is stored, not how the game file is written, which could be different. Even if I could figure that out I'd have to know how the game uses the SN and AK together to decrypt the save file, and for all I know it could also use data from the Dreamcast disc as well although that seems unlikely. Considering how fast loading and saving is though, if I had to guess, it's probably a simple cipher like letter substitution in which case you'd need to be able to read the VMU data and then figure out what kind of offset the SN/AK creates.
I was curious, so I took a look at my last save backup in a HEX editor. Each save, the character and the guild card, has both a VMI and VMS file. The VMI file is 1 kb each, while the VMS is 8 kb for the character and 15 kb for the guild card. Interestingly, the VMI contains mostly plain text readable by Notepad++ and, in fact, the hex values are nearly identical. The difference seems to be because the file name is different. Comparing two different characters there are only an additional 3 hex values that are different, but they are likewise the same between the character and guild card. I confirmed that by changing the file names and comparing. When comparing the files for two different characters with the same file name there are a total of 18 differences between the character's VMU file, where each character has a different name and a different SN/AK. Comparing the .VMI file, on the other hand, is probably where the real encryption is. Nothing is readable in plain text, although both files match after offset 00001970/OC where everything is set to zero. There's also a break on offset 00000270 for both files where everything is zero, and everything before that break appears to be exactly the same. This at least tells me that the encrption doesn't cover the entire save file, but it's still a fair amount of data that's completely different.
Comparing my last backup from level 26 to my backup from level 17 it looks like there are just as many differences, or so it appears at a glance, but then I noticed that there's a pattern of what stays the same. For example, the entry from 00001880/00 and 00001970/00 - literally, the first hex entry per line - is exactly the same. There has to be a reason why some things are the same and other things aren't.
For a proper check, I should create a two new characters using the same SN/AK on the same disc version to identify differences and see what happens if I edit each hex value to match the other to see what change that results in. Making two with the same as the first two might also be helpful. Once I map our what each of those hex values do I could then figure out what happens with specific differences in inventory and/or level. I would then need to create a new character on a new SN/AK repeating the steps as before. If I am lucky maybe only a few small things change between attempts and then maybe I can find a pattern. The math of that pattern might then be identified.
P.S. - I have no intention of exploiting what I figure out to cheat. I just want to understand how to convert characters so that it might someday be possible to recover my original characters from two decades ago.
BlueCrab wrote: Sure, it'd be possible to rebalance things -- but probably an awful lot of work. Where you might run into more problems is in dealing with newly added items in the later versions.
That's a fair point. If someone did put in the effort to put the later content on a modified Dreamcast disc (assuming the way zones and mobs are stored are the same, thus giving a reference point for file conversion as needed) you'd still have to contend with new items with potentially different gameplay mechanics. In that case you'd still have a balance issue of later consoles potentially having items that cannot be shared with older consoles meaning that to play together you'd need a way to either prevent them from being dropped/used in such sessions, or a way to prevent older consoles from picking up what would be a bugged item.
Personally, if I was going to put in the effort for such a thing, I'd be more interested in putting the effort into a tool to take a character between versions. In that case all you'd have to do is delete any items that are unavailable on the other platform. Or maybe have those items stored in a temp file to be put back into the save when converted back.
BlueCrab wrote: Even 10 years ago, things were pretty dern peaceful on Sylverant. I'm sure the small community does have a lot to do with that, of course.
Huh, I wonder why that is. Then again, now that I think about it, even other old MMOs from the Era such as Everquest and Final Fantasy 11 felt less toxic than the atmosphere in modern MMOs so maybe it has to do with the casual player mindset. Not that being a casual in and of itself makes one toxic, but there could still be a correlation somewhere in that.