Inform is driving me insane: why does declaring a room work in one place, but not another?

Given that what you posted is an excerpt and people are pointing out that this excerpt compiles, the issue may owe to name ambiguity between the objects in this excerpt and other objects elsewhere (maybe involving “Gibson” or “InteleTek”).

While it’s a pain, you could guarantee (well, as much as one can even say “guarantee” where software is concerned) avoiding such issues with:

A room is usually privately-named. 
Inteletek-storefront is a room. Printed name is "InteleTek Storefront".
Understand "InteleTek", "Storefront" as Inteletek-storefront.

The privately-named bit is optional, but means that inteletek-storefront won’t be added to the dictionary as something the player can use at the command line… and given that, by default, only the first 9 characters are significant, with a prefix is long as “inteletek-” you’d probably want to either go with privately-named or Use DICT_WORD_SIZE of 13 or more.

Edited to add: it might well be the case that you won’t add any commands acting on rooms, i.e., wouldn’t be adding any Understand statements with [room] tokens. In this case, creating dictionary entries corresponding to your rooms becomes optional. (But if they’re privately-named and don’t have dictionary entries associated with them, you’d lose the ability to use SHOWME on them in test versions of your game.)

or, with this recent clue on accessing an object’s internal name from @drpeterbatesuk , this should let SHOWME work for most cases…

Section internal names (not for release)

Use DICT_WORD_SIZE of 25.

To say the/-- internal name of (o - object): (- print (object) {o}; -).

A room has a text called the internal-name.
Understand the internal-name property as describing a room.

when play begins:
  repeat with r running through rooms begin;
    let name be "[internal name of r]";
    if name matches the regular expression "^\(I_(.+)_U\d+\)$" begin;
      now name is the text matching subexpression 1;
      replace the text "_" in name with "-";
      now the internal-name of r is the substituted form of name;
    else;
      say "couldn't match [name].";
    end if;
  end repeat;
2 Likes