In my fiction, I have “horn” and “horns” as separate kinds. The reason for this is it makes little sense to “examine the yak’s horn” when the yak has two horns, and nopony will want to examine the left and right horns separately.
I can get this to work by declaring horns before I declare horn:
Some horns are a kind of body part.
The plural of horns is horns.
A horn is a kind of body part.
This recognizes that horns is the plural of both horn and horns. To avoid confusion, I’ll use italics for the plural word. There are three problems, however.
First, if I have a yak and a unicorn in the same room, “examine horns” will tell me I can’t use multiple objects with that verb. I’d rather it try to use the singular noun ‘horns’ before trying the plural ‘horns’.
Second, if the user types ‘horn’ but there is only ‘horns’ present, I’d like it to try ‘horns’ instead. So “look yak’s horn”, while a little unusual, will still work.
Third, if the user tries to use a verb with ‘horns’ that does understand plural, it will interpret ‘horns’ as plural if there is a single ‘horn’ in the room and never target the singular ‘horns’ of the yak.
I suspect the solution to this is not to define ‘horns’ as a body part, but rather to label them ‘left horn’ and ‘right horn’ and then come up with some way to redirect ‘look horns’ to ‘look left horn’ and have the same description for both… or something. Any advice here would be appreciated.
(Aside, I’m tempted just to define ‘horn’ as the plural of ‘horn’, which is wrong, but might be less annoying.)
What I would do–which doesn’t mean that this is a good idea–is to allow examination to work on multiple objects, and then intercept cases where the player has examined an animal’s complete set of horns, a la Example 328 from the documentation, “Western Art History 305.”
This is what I came up with:
A troll is a kind of person.
A horn is a kind of thing.
A left horn is a kind of horn. A right horn is a kind of horn. One left horn and one right horn are part of every troll.
The plural of a left horn is horns. The plural of a right horn is horns.
The description of a left horn is usually "[if a person incorporates the item described]It sticks up from the left side of [random person incorporating the item described]'s head[otherwise]A left horn, detached from any head[end if]."
The description of a right horn is usually "[if a person incorporates the item described]It sticks up from the right side of [random person incorporating the item described]'s head[otherwise]A right horn, detached from any head[end if]."
A troll has some text called collective horn description. The collective horn description of a troll is usually "A lovely pair of horns."
Alternia is a room. Tavros is a troll in Alternia. Aradia is a troll in Alternia.
[A bicycle horn is a horn in Alternia. The description of the bicycle horn is "Not the kind of horn that goes in troll's head, and not the kind of horn you want to squeeze."
Instead of squeezing the bicycle horn:
say "NoW yOu'Ve DoNe It.";
end the story saying "HOOOOONK".]
The collective horn description of Tavros is "Tavros's horns stick out far from the sides of his head."
The collective horn description of Aradia is "Aradia's horns curve around in mind-boggling patterns."
Understand "examine [things]" as examining.
To decide whether (L1 - list of things) comprises (L2 - list of things):
repeat with index running through L2:
unless index is listed in L1, no;
A multiple action processing rule when the current action is examining:
let L be the multiple object list;
let F be a list of things;
now F is L;
repeat with item running through L:
if item is a horn incorporated by a troll (called the holder):
let horn list be the list of horns incorporated by the holder;
if F comprises horn list: [we want to check F rather than L, in case we've already printed a collective horn description and removed the horns from F]
say "[Holder]'s horns: [collective horn description of holder][paragraph break]";
remove horn list from F;
alter the multiple object list to F;
if the number of entries in F is 1: [we've removed horns from the list and will be printing one thing]
say "[entry 1 of F]: [run paragraph on]".
Test me with "x horns/x aradia's right horn and tavros's left horn/x aradia's right horn and aradia's left horn/x aradia's right horn and aradia's left horn and tavros's right horn".
Now one weird thing is that if you have a horn on the ground (as if you uncomment the bicycle horn), when you “x horns” the parser will fix on the stray horn and ignore the horns that are part of the trolls. I don’t know how to fix that–it may fall under the category of parser quirks.
Also you will surely need to write something that allows for parsing of “Aradia’s horns” and the like. “Aradia’s left horn” works because, when Inform creates the left horn that is part of Aradia, it just gives it the name “Aradia’s left horn”–but this doesn’t generalize to things like “Aradia’s horns.”
Also also this will let the player examine any random plural collection of things, but that’s probably fine.
Also this somehow became a Homestuck instead of a My Little Pony thing. Sorry.
You could try something similar to example 242 (“What Not to Wear”).
A pair of horns is a kind of body part.
The plural of pair of horns is pairs of horns.
The parser should interpret “Yak’s horns” as “Yak’s pair of horns”. The printed names aren’t necessarily the best, though.
I want to reply to this later when I have time (been sick, and grading exams) but I wanted to say it is perfectly acceptable to turn anything into a Homestuck thing, especially if you demonstrate knowledge of yaks from FiM.
(or, maybe ‘nopony’ just gave me away)
'twas that. My MLP knowledge is mostly limited to various Equestria Girls and similar-length movies, and being chided by a small person for talking about “unicorn pajamas” when everyone knows Rainbow Dash is a pegasus.