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.
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.
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]”.