Shadowrun Genesis save format notes

2012-12-19 01:08

Because it’s an awesome game, that’s why.

As with many Genesis games, you are best off ignoring the 0xff or 0×00 that’s every other byte of the nominal ROM image and just looking at the remaining bytes.

Given that, the 8K ROM consists of two 4K save blocks, each of which appears to consist of two identical 2K saves. I assume this is error detection. So each save is 0×000-0×7FF. Within that:

0×00-0×14: header
0×15-0×68: Player character
Every additional 74 bytes: Another character (there are 12, last one is Stark).

It is possible that the character records start before the name, in which case they’re still 74 bytes, but the first byte of Josha’s record is before 0×14, and the last is before 0×68. Counting from right after the name, each character has:

Stuff I didn’t figure out: 0×00-0×10
Stats: 0×11-0×19. Character sheet order, except 0×16 is something else and I don’t know what.
Skills: 0×1A-0×26. Character sheet order, except 0×20 is something else and I don’t know what.
Karma: 0×27
Other stuff: 0×28

So for instance, Joshua’s Body stat is 0×3D into the whole file, and if he’s a shaman, 0×44 is a stray 3 that I don’t know what it means in between his other stats. Karma’s at 0×53.

Nuyen are at offset 0×244 in the Stuff After The Characters, which puts it at 0×5DA-0×5DD in the file as a whole. Big-endian. Yes, the game can handle values over 24 bits, although at 620M (0×25 00 00 43) you’re really not making sense anymore.

Now, if you go change this stuff, well. You won’t end up with a save it’ll load; you get a charmingly-worded message saying there’s no save. That’s because of the checksum. The checksum is 0×630-0×633. Again, big-endian. The simple answer is to sum the bytes prior to this (0×0..0×62F), subtract 794, and save that in these four bytes. I don’t know what the 794 means, but it is perhaps not a coincidence that the sum of the first 20 bytes of the save file is also 794. (That’s the spaces with the word GAME in them.)

I mention this because the Internet is full of discussions of the checksums for the ROMs, but I couldn’t find any mention at all of the file format. Of course, now that I’ve figured this out, I’ve lost interest in trying to cheat at it, because where’s the fun in that?

(Edit: And of course, while looking something else up, I find a much more detailed description.)

Peter Seebach