Shadowrun Genesis save format notes

2012/12/19

Categories: GeekStuff

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

As with many Genesis games, you are best off ignoring the 0xff or 0x00 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 0x000-0x7FF. Within that:

0x00-0x14: header
0x15-0x68: 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 0x14, and the last is before 0x68. Counting from right after the name, each character has:

Stuff I didn’t figure out: 0x00-0x10
Stats: 0x11-0x19. Character sheet order, except 0x16 is something else and I don’t know what.
Skills: 0x1A-0x26. Character sheet order, except 0x20 is something else and I don’t know what.
Karma: 0x27
Other stuff: 0x28

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

Nuyen are at offset 0x244 in the Stuff After The Characters, which puts it at 0x5DA-0x5DD in the file as a whole. Big-endian. Yes, the game can handle values over 24 bits, although at 620M (0x25 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 0x630-0x633. Again, big-endian. The simple answer is to sum the bytes prior to this (0x0..0x62F), 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.)