Inform 7 Kinds

Hi,
I’m trying to create a “kind” that i can assign to someone “a type of man” that will change their printed name and description. Inform finds no error in the code A zombie is a kind of man. The printed name of a zombie is "zombie". The description of a zombie is "A horrible creature. The zombie is so scary that you cannot stand looking at it." but when i play it, the game wants me to refer to the “zombie” by it’s object’s name. Here is what i have:
The kind: A zombie is a kind of man. The printed name of a zombie is "zombie". The description of a zombie is "A horrible creature. The zombie is so scary that you cannot stand looking at it."
The person who is the kind (i will have more than one “person” with this kind once i get it working): The man_1 is a man in the Maintenence Closet. The man_1 is a zombie.
When i play the game, the game makes me talk about man_1, even though i have said that man_1 is a zombie, which should have a printed name of “zombie”. I’m pretty sure that you can refer to things or rooms by their printed name instead of their “code-name”, but this is what happens when i encounter the zombie in the game:

What is going on?
thanks.

You need to either add an Understand statement or give the actual zombie a name that includes the word “zombie”. This works:

[code]A zombie is a kind of man. The printed name of a zombie is usually “zombie”. The description of a zombie is usually “A horrible creature. The zombie is so scary that you cannot stand looking at it.”

The disgusting green zombie is in the Maintenance Closet. The disgusting green zombie is a zombie.[/code]
As does this:

[code]A zombie is a kind of man. The printed name of a zombie is usually “zombie”. The description of a zombie is usually “A horrible creature. The zombie is so scary that you cannot stand looking at it.” Understand “zombie” as a zombie.

The disgusting green wretch is in the Maintenance Closet. The disgusting green wretch is a zombie.[/code]

It may seem counter-intuitive or even half-baked that Inform doesn’t tag the name of a kind as a vocabulary word that can be used to refer to the kind, but it doesn’t. If you want to be able to refer to a man as “man”, for instance, you have to add:

Understand "man" as a man.

It also doesn’t understand the printed name of an object. The printed name property is a text, and the parser can’t be made to recognize any property that is a text. There are other data types in Inform that can be parsed, however: indexed text, token, and kind of value. When you say:

Understand "zombie" as a zombie

…you are creating a token. A token can be a literal text, as above, or it can be a complex set of rules assigned to a phrase in brackets:

Understand "zombie/undead/ghoul/dead" and "living dead" as "[zombie]". Understand "[zombie] man" as a zombie when the item described is male.

Another approach here is just to write

The kitchen contains a zombie.

Once you’ve defined a kind, you can instantiate examples, which will have the name “zombie” and respond to being called zombie.

By contrast, if you define a zombie with a unique internal code name such as man_1, Inform will assume that man is intended to be a special case and will give it its own name and understand rules unless you say otherwise.

Note that there will be some situations where you might not want it too. Suppose I declared “A secret door is a kind of door” and then had lots of rules for secret doors – say, you can’t open one unless you’ve discovered it somehow. It would be very annoying if the game processed “open door” as referring to the secret door when I hadn’t discovered it.