Let's solve this IFID clash

Turns out there are two old Infocom games that currently share the same IFID: suspended-r5-sXXXXXX.z3 and zork1-r5-sXXXXXX.z1 (listed here) both use IFID ZCODE-5-------. This causes some problems, in particular in Spatterlight which uses IFIDs generated by Babel to tell games apart.

The obvious solution is to detect this particular version of Suspended (or Zork I) and give it a different IFID. But it would be nice if we all could agree on what this new IFID should be.

Any suggestions?

The game files with no serial numbers (“XXXXXX”) are “old”, in the sense that they probably date from the 1980s. But I believe that they are all user hacks or damaged copies – with the exception of the zork.z1 file, which is a first-release Zork as far as I know.

It will always be possible to modify a game file to make the IFID come out however you want. I’m not sure that the spec needs to deal with this case, even for vintage modified files.

While that is undeniably true, I think it makes sense to make an exception for this particular case, as the clashing games are both listed in The Obsessively Complete Infocom Catalog, which makes them kind of official. Any cataloguing tool that relies on Babel or IFIDs is likely to encounter them.

EDIT: When I think about it, as they are in effect “effaced” original releases, the only difference being the serial number, they should be detected as those original releases and get their IFID.

I can take them out again if it makes life easier. :)

2 Likes

I’m afraid that won’t help in this particular case. Putting the toothpaste back in the tube and all that.

Anyway, I’ve pushed a workaround for Spatterlight, so now that at least detects suspended-r5-sXXXXXX.z3 as Suspended r5 s830222.

Why not calculate an actual checksum instead of using the header value but only in the specific case of header values known to be used by hacks and such? For story files with a valid checksum this is the same, while others can use the calculated value instead.

2 Likes

I didn’t realize that babel does that automatically. Very helpful for me. Thanks

1 Like