Subkind exception

I’d like to say something like “feet are a kind of thing. feet are part of every person except animals.” Is this possible?

I don’t think so. You might be able to do something like this:

When play begins: now every feet that is part of an animal is nowhere.

Then the animals’ feet will be created as objects but moved off-stage when play begins, so they won’t really be part of the animals.

I have not tried this, but maybe something like:

feet are a kind of thing. All humans have feet.

Then define who is human.

Sorry… not at an Inform screen to test.

No way to do this directly, but you can say “feet are part of every man” and “feet are part of every woman”.

It’s not perfect: if you then say “a robot is a kind of person” robots won’t get feet by default. But it’s reasonably close and only one sentence longer.

Wow, how nice to wake up to three suggestions. Thank you!

After trying them out, it seems that @matt_weiner’s solution is the one that works without any further pondering. I did try the every man/woman approach before, but I want it to work on the player too, without them being gendered.

However, I’d like to see if I can implement something akin to @Seeker’s solution, as that seems the most proper/elegant. My attempts so far have not proven fruitful, and I’d be happy for some further input.

A preferred solution would be this:
A human is a kind of person. The player is a human.
But that leads to:
Problem. Before reading 'The player is a human' , I already knew that 'player' is a person, and it is too late to change now.
Can the player be redefined?

Another thing I tried was:

A person can be human or non-human.
A person is usually human.
feet are a kind of thing. Feet are part of every human person.

But then I get:
You wrote 'Feet are part of every human person' but in an assertion 'every' or 'all' can only be used with a kind.

One alternative that does kind of work is to make it part of every character, as in
feet are part of the player.
The only problem then is the lack of pronoun:

>x feet
You see nothing special about feet.

Lab is a room.

A human is a kind of person. Stian is a human in the Lab. The player is Stian.

…I had some speculation about what’s going on here but I’m not sure about the internals. Anyway, you can define a person and declare the player to be that person. This will have different effects from changing the identity of the player in the course of play with something like “now the player is Naomi,” which will leave the old player-self around as well.

The only problem then is the lack of pronoun:

That’s no problem, you just need to use the pronoun when you declare the existence of the feet:

Some feet are part of the player. [or "Some feet are part of every human" if you like]

See §3.18 of Writing with Inform. Using “some” will make the feet improper-named and plural and will set the indefinite article to “some,” so that if something truly unfortunate happens and the feet wind up loose in the room the game will print “You can see some feet here.”

For the “human or non-human” thing, properties like that can be changed at run-time, and declarations like “Feet are part of every human person” only apply to kinds which are immutable. Which means unfortunately that there’s no way to do this with the existing kind structure (that includes “man” and “woman”)–you would in fact have to redefine a new kind “human” and make your feet-having persons be subkinds of humans.

1 Like

Thank you Matt!

At this point, I’m playing around with Inform to create problems for myself that I can learn from, so getting a solution that works is secondary to understanding more of what’s going on. And I do feel wiser now than I did before.

One strategy that I’ve used is to make a specific instance for the player which doesn’t involve redefining them.

some feet are a kind of thing. Understand "foot/feet" as feet. 
One feet is part of every person. 
my feet are feet. it is part of the player. Understand "my feet/foot" as my feet. The printed name of my feet is "your feet".

Animals “shouldn’t” be a subset or synonym of people unless you don’t define them as animals…or have otherwise redefined them?

a tail is a kind of thing. one tail is part of every animal.

Yes, that sounds like a reasonable solution too, thanks!

Unless I misunderstand what you mean, that actually seems to be the case. If I go to the Kinds Index in Inform, animal is listed as a sub-kind of person. And I haven’t tried to define or modify animal at all in my code.

Yes, animal is a subkind of person (see Writing with Inform §3.17). I’d guess this is mostly so you can give commands to animals like “Old Paint, go north”.

1 Like

Whoops. I am not sure I’ve ever used animals so I’ve not encountered it.

I always tend to do “every man… every woman…” and then make a special kind for the player.

One trick: according to the documentation at least, you can move kinds around, as long as children stay children of their parents (regardless of level).

A human is a kind of person.
A man is a kind of human.
A woman is a kind of human.

Even if this doesn’t work, though, the trick is that “the player” is a variable, not an object. The object that “the player” is set to is called “yourself”. This is very weird and kind of unintuitive, but it’s what lets you write things like “now the player is Waldo”.

2 Likes

That compiles fine and is good to know, thanks!

What I ended up doing was following Matt’s second suggestion:
A human is a kind of person. Playerperson is a human in the White Room. The player is Playerperson.
This has worked very well so far.