Plurality and [s]

I’ve been trying to get my head about the “[s]” say-phrase for a while. It took me a realize that it’s actually part of the Standard Library and Plurality merely extends it with some backstage voodoo. Which is all fine, except when you have something like this:

[code]Include Plurality by Emily Short.

The auditorium is a room. The audience is a person in the auditorium. The audience is ambiguously plural.

Definition: A person is other if it is not the player.

Instead of singing when an other person (called the listener) is in the location:
say “You see awe and appreciation light up [the listener]'s face[s].”

test me with “sing”[/code]

I don’t think this is terribly hard to solve, but what I want is to solve it gracefully. Has anyone else already handled this? What do you suggest?

The [s] is being inflected as for a verb, I think.

[code]Include Plurality by Emily Short.

The auditorium is a room.
Ralph is a man in the auditorium.

Definition: A person is other if it is not the player.

Instead of singing when an other person (called the listener) is in the location:
say “You see awe and appreciation light up [the listener]'s face[s].”

test me with “sing”[/code]

Produces…

Which doesn’t fix anything, but maybe it gets us closer to figuring out what’s going on.

Yes, that’s the issue. How do you write a phrase that distinguishes between [s] for a verb and [s] for a noun? Plurality guesses based on whether the most recently mentioned thing was a number (implies [s] for a noun) or a noun (implies [s] for a verb). In this case, the most recently mentioned thing was a noun, but we want to use [s] for another noun. The simplest thing to do is to use a different phrase, such as [s for a noun], or even [if the prior named noun acts plural]s[end if], but I’d prefer one of the following:

A briefer, more elegantly-named say-phrase that clearly distinguishes between verbs and nouns.

A brief, elegant say-phrase that appears before the [s] to clarify whether it will apply to a verb or a noun.

Doesn’t Plurality define something along the lines of [-s] for this?

I don’t think so, or if it does I’m not seeing it. You may be thinking of the ['s-'re] token, which is for contractions.

I think now [s] just always appears as if for a verb, no matter what precedes it.

[code]Include Plurality by Emily Short.

The auditorium is a room. The audience is a person in the auditorium. The audience is ambiguously plural.
Ralph is a man in the auditorium.
The singers are a person, here. They are plural-named.

Definition: A person is other if it is not the player.

Instead of touching an other person (called the touchee):
say “[The touchee] watch[es] you with light breaking across [its-their] face[s]. Possibly a rash.”;
say “[Possessive of the touchee] face[s] light[s] up.”;

test me with “touch Ralph / touch audience / touch singers”[/code]

Solution: light up their eyes instead of their faces, and don’t include any cyclopes or eye-patch-wearers in your game. :wink:

The [s] behavior after saying a number still works:

say "[2 in words] of the singers' face[s] light up."

Looking through the source of Plurality, I see a phrase to “To mark (target - a thing) in output.” It looks like it’s supposed to make Inform think you just said a number, but it doesn’t work. Maybe something in the template layer changed since this extension was written?

The [s] of the Standard Rules lets you add a conditional plural noun ending “-s” after printing a number. It is conditional upon the value of say__n: if it is 1, it prints nothing; if it is anything else it prints “s”. (So 1 means singular, anything else means plural.)

Plurality in effect reverses this to let you add a conditional singular verb ending “-s” after printing a noun. It is still conditional upon the values of say__n; if it is 1 it still prints nothing, and anything else still prints “s”. But for verbs the “-s” ending signifies the singular and the null ending signfies the plural, so Plurality sets say__n to 1 if the noun printed was plural and to 29 if it was singular.

The result is that the extension makes Inform think that you said a plural number if the noun was really singular and vice versa. That way it can make the plural noun ending “-s” of the Standard Rules do service as the singular verb ending “-s”

You can re-revert it by defining an alternative text substitution for the plural “-s”.

To say -s: (- if (say__n == 1) print "s"; -).

and use that when needed.

say "You see awe and appreciation light up [the listener]'s face[-s]."

Aha, that explains it. I was staring that code and I just wasn’t getting it.

So a partial solution would be to comment out the “mark prior named noun in output” for possessives. And then somehow call “mark prior named noun in output” after the next “[s]” invocation. Except that wouldn’t work for cases like this:

say "[Possessive of the noun] eyes light[s] up."

I think we need something like

say "[Possessive noun phrase of the noun] face[end possessive noun phrase]"

which is horrible. I think I’ll stick with “[if the prior named noun acts plural]s[end if]”.

I wouldn’t be surprised to see this show up in the source code for Fan Interference. (Footnote.)