Using "all" and "every" in names of things

I’m trying to implement something like the following:

[code]Attic is a room. “Who knows what treasures you’ll find in Great Uncle Larry’s attic?”

The vintage record is in Attic. The description of the record is “This is a vinyl record of ‘Every Little Thing She Does is Magic,’ by the Police.”
Understand “every” as the vintage record.

The battered VHS tape is in Attic. The description of the tape is “This VHS tape contains the first season of ‘All in the Family.’”
Understand “all” as the tape.[/code]
As you can see, I’d like for the player to be able to refer to the record and tape by the first words in their titles (especially since I might implement more records and tapes).

However, this causes the (obvious in retrospect) problem when the player tries to pick up just the record and then drop just the tape:

[code]Attic
Who knows what treasures you’ll find in Great Uncle Larry’s attic?

You can see a vintage record and a battered VHS tape here.

x record
This is a vinyl record of “Every Little Thing She Does is Magic,” by the Police.

get every
vintage record: Taken.
battered VHS tape: Taken.

x tape
This VHS tape contains the first season of “All in the Family.”

drop all
battered VHS tape: Dropped.
vintage record: Dropped.
[/code]
Is there a way to override the normal usage of “all” and “every” in Inform 7 when the record and tape are present?

Not easily. The “all” words are built into the parser at a low level, and there’s no facility for replacing them conditionally.

You’d have to modify the I6 code in three places (Descriptors(), NounDomain(), ChooseObjects()) where it checks against the ALL1__WD and ALL3__WD constants.

The behavior you want would be surprising to players, anyhow. It’s really a situation where the best technical solution is “Don’t name an object that”.

That’s kind of what I was suspecting. I’m not prepared to work at that low a level in I6, so I’ll have to go with the “Don’t name an object that” solution.

Thanks!