There seems to be an issue with using multiple kinds of actions in a rule. Given the following:
The Theater is a room.
The Backstage is a room. It is south of the Theater.
The Curtain is a backdrop. It is in the Theater and the Backstage.
The description is "The dust-filled, 69,105 ounce curtain hangs from several threads in the rigging." The printed name is "curtain".
Climbing the Curtain is curtain-disturbing.
Pulling the Curtain is curtain-disturbing.
Pushing the Curtain is curtain-disturbing.
Rubbing the Curtain is curtain-testing.
Touching the Curtain is curtain-testing.
Turning the Curtain is curtain-testing.
Instead of entering the Curtain in the Theater:
try going south.
Instead of entering the Curtain in the Backstage:
try going north.
test one with "x curtain / climb curtain / push curtain / pull curtain / clean curtain / touch curtain / turn curtain / open curtain / close curtain / enter curtain".
I can write a rule that includes more than one action name:
Instead of opening or closing the Curtain in the Theater:
say "You have to move backstage (south) to do that."
Instead of closing the Curtain in the Backstage:
say "The only apparent way to close it is to pull it."
Instead of opening the Curtain in the Backstage:
say "It is."
I can write rules that refer to a kind of action:
Instead of curtain-testing in the Backstage:
say "You [parser command so far]. In response trillions of dust particles float down and bury you."
Instead of curtain-disturbing in the Backstage:
say "You [parser command so far]. In response the threads holding it in place snap and the entire weight comes crashing down and crushes you."
What I can’t do, apparently, is write a rule that refers to more than one kind of action:
Instead of curtain-testing or curtain-disturbing in the Theater:
say "I wouldn't do that if I were you!"
This rule compiles without incident, but the result is not what I expected. That is, only curtain-testing actions get the response “I wouldn’t do that if I were you!” Curtain-disturbing actions get the standard action response.
The I6 code generated for the above rule is:
[ call_U1961;
if ((((call_U1970)()) && ((((actor == player)) && ((real_location == I_theater_U1)))))) {
(self = noun);
if (debug_rules) {
DB_Rule(call_U1961, 800, 0);
}
(say__p = 1);
ParaContent();
print "I wouldn't do that if I were you!";
print "^";
RulebookFails(0, 0);
rtrue;
} else {
if ((debug_rules > 1)) {
DB_Rule(call_U1961, 800, 2);
}
}
rfalse;
];
[ call_U1969;
if ((((action == ##Climb)) && ((noun == I_curtain_U1)))) {
rtrue;
}
if ((((action == ##Pull)) && ((noun == I_curtain_U1)))) {
rtrue;
}
if ((((action == ##Push)) && ((noun == I_curtain_U1)))) {
rtrue;
}
rfalse;
];
[ call_U1970;
if ((((action == ##Rub)) && ((noun == I_curtain_U1)))) {
rtrue;
}
if ((((action == ##Touch)) && ((noun == I_curtain_U1)))) {
rtrue;
}
if ((((action == ##Turn)) && ((noun == I_curtain_U1)))) {
rtrue;
}
rfalse;
];
Running the test script shows that curtain-testing actions get the response “I wouldn’t do that if I were you!”, while curtain-disturbing actions get the default action response. So, is this a bug or a feature?