Removing "other" determiner/definite article from being understood

In the minimal Inform 7 story:

The World is a room.
The cat is a thing in the World.

The parser will understand: “take cat”, “take the/this/that/those/a cat”. (These little words are technically called “determiners”.)
The parser will also understand “take all cat” and “take every cat”, which is fine.

But the parser will also accept “take other cat”, and I’d really like to get rid of this behaviour for the game I am working on.

Background: The game is set in a world full of real things and “other” mirror images, not realized by separate objects but by changing the descriptions of the real things. I want to use “other” in understand rules, such as: “Understand ‘other cat’ as the cat [only] when the cat is otherly.” This won’t work, because “other cat” will always be understood as the cat.

Is there any way of removing the “other” determiner/article from the rules? Or another way of doing what I want?


The easiest way I can think of is using an I6 inclusion. Are you okay with that? (If necessary I could toss it in an “Other Removal” extension to hide the gory details.)


The second-easiest way is also an I6 inclusion. :)


Puh. I’m moderately experienced in Inform 7, but I’ve never touched I6 and kept my eyes closed whenever that came up. I don’t want to impose on you, but that’s nothing I could ever do on my own - but if it’s not too much work and you could help me… I think I’d actually prefer an inclusion to an extension.

Same as my answer above. :slight_smile: I’m okay with putting in I6 code, though I’ve shied away from it, mainly out of stubbornness.

Try this, then.

Include (-
Constant AGAIN1__WD     = 'again';
Constant AGAIN2__WD     = 'g//';
Constant AGAIN3__WD     = 'again';
Constant OOPS1__WD      = 'oops';
Constant OOPS2__WD      = 'o//';
Constant OOPS3__WD      = 'oops';
Constant UNDO1__WD      = 'undo';
Constant UNDO2__WD      = 'undo';
Constant UNDO3__WD      = 'undo';

Constant ALL1__WD       = 'all';
Constant ALL2__WD       = 'each';
Constant ALL3__WD       = 'every';
Constant ALL4__WD       = 'everything';
Constant ALL5__WD       = 'both';
Constant AND1__WD       = 'and';
Constant AND2__WD       = 'and';
Constant AND3__WD       = 'and';
Constant BUT1__WD       = 'but';
Constant BUT2__WD       = 'except';
Constant BUT3__WD       = 'but';
Constant ME1__WD        = 'me';
Constant ME2__WD        = 'myself';
Constant ME3__WD        = 'self';
Constant OF1__WD        = 'of';
Constant OF2__WD        = 'of';
Constant OF3__WD        = 'of';
Constant OF4__WD        = 'of';
Constant OTHER1__WD     = 'another';
Constant OTHER2__WD     = ',other';
Constant OTHER3__WD     = ',other';
Constant THEN1__WD      = 'then';
Constant THEN2__WD      = 'then';
Constant THEN3__WD      = 'then';

Constant NO1__WD        = 'n//';
Constant NO2__WD        = 'no';
Constant NO3__WD        = 'no';
Constant YES1__WD       = 'y//';
Constant YES2__WD       = 'yes';
Constant YES3__WD       = 'yes';

Constant AMUSING__WD    = 'amusing';
Constant FULLSCORE1__WD = 'fullscore';
Constant FULLSCORE2__WD = 'full';
Constant QUIT1__WD      = 'q//';
Constant QUIT2__WD      = 'quit';
Constant RESTART__WD    = 'restart';
Constant RESTORE__WD    = 'restore';
-) instead of "Vocabulary" in "Language.i6t".

This just replaces a chunk of code from the I6 templates—specifically the chunk of the “language” file that defines words the parser cares about. It replaces the word other with ,other, with a comma in front of it; words containing commas and periods will never be recognized by the I6 parser, since it treats commas and periods as separate words.


Like a charm! Thank you very much! I can have all things understood as “real” or “other” now. And it gave me my first serious glimpse into I6, too.