IFIDs and Hugo

I have the IFID Generator on the TADS website open in the other tab right now. I was going to assign an IFID to my Hugo game that I will be releasing tonight or tomorrow morning for the Hugo Open House, but I notice it says that IFIDs are for new interactive fiction projects “written in TADS or any other Babel-aware authoring system.”

As far as I know, Hugo is not Babel-aware. Is there any use at all for an IFID if the system doesn’t support it? I’m sure IFIDs are useful as metadata, but I haven’t found them particularly useful to the end-user browsing the IFDB. If there is going to be no metadata anyways, should I include an IFID?

Actually, Hugo is a signatory to the treaty (see section 1.3).

The treaty does have instructions for “a Legacy Hugo story file”, but that’s not what you want since you’re making a new game. IFID’s are quite useful to the end user, especially for programs like Zoom on OS X (iTunes-like interface, uses IFIDs to find cover art etc.).

Finally, IFDB won’t accept a game without an IFID, and I’m not sure about if-archive, but I doubt they’d accept one either.

The Treaty gives no information on how new Hugo games should announce their IFID. If a Hugo game is wrapped in a Blorb file then an IFmd chunk would be able to provide the IFID. For a plain .hex file, though, it would seem the legacy IFID is the only way to go.

However, my main reason in posting this is to point out that the Treaty’s description of how to find a legacy Hugo IFID is incorrect, or at least clashes with both the reference implementation and IFIDs on the IFDB. Contrary to what the Treaty says, the IFID is not an MD5 hash. Instead, it matches the following printf()-style format string:

HUGO-%d-%02X-%02X-%s

The values for the integers are the first three bytes of the file, and the string is the 8 bytes found at offset 3 in the file (which is a string representing a date; presumably the date of compilation).

So your Hugo file has an IFID just by virtue of being a Hugo file, and its IFDB can be calculated by the above method.

As far as I know, Hugo games can’t be wrapped in a Blorb file, unless perhaps the packaging is done manually. But even if a Hugo game were somehow bundled with Blorb, the Hugo interpreters wouldn’t be able to open it (the only possible exception being the new Hugor interpreter, but I doubt it can open Blorbs either, since I haven’t heard anything to that affect, and I’ve been on the Hugo discussion board).

Thanks for the advice. Unfortunately, I already used the TADS random generator to get an IFID number, which I put in the banner of my second release and added to the IFDB. Should I change it?

Nope. Your IFID is fine. It doesn’t need to be generated in any specific way, though using the current date is recommended in order to avoid possible clashes with other games. Just remember that you need different IFIDs for every new build of your game.

The Blorb specification does provide a chunk type for Hugo games, but you’re right that if an interpreter can’t play it there’s no point in doing it. It might be worthwhile to see if Kent Tessman would be willing to provide Blorb support for Hugo, which would allow it to support iFiction records as described in the Treaty of Babel. I would be willing to add support to read Blorb-encoded Hugo stories to Gargoyle, provided Ben Cressey is not opposed.

My reading of the Treaty indicates that you should. There are two general sections on generating IFIDs for projects: new projects and legacy projects. IFIDs for new projects are meant to be generated by the design system itself (2.2.1: “A design system should assign each different published work a unique ID code”). Legacy projects should use the legacy system described in the Treaty (see 2.2.2).

Because Hugo does not (apparently) provide IFIDs by itself, your project would fall under the legacy category and use the method described by the Treaty—although it should probably actually use the method I described above.

There is a very practical reason to do this, too, so you don’t feel you’re doing something just because a standard mandated it. IFIDs that the Treaty describes are able to be extracted from story files by other programs, without human intervention. As an example, I wrote a small IF launcher that displays the author & title for each work. It tries to read embedded metadata (e.g. from a Blorb file), but if there is none, it extracts the story’s IFID and uses a lookup table to discover the author & title. With a user-generated IFID that is simply placed somewhere in the banner, this program would never be able to find the IFID and thus never be able to display metadata.