It seems to me that disabling "take all" everywhere in the game may be a bit overpowered for what you want to do, which is to prevent the player from taking both the dagger and the rose. I think you can handle this a bit more finely using rules for deciding whether all include (section 17.34 in the manual) and adjusting the parser error message with rules for printing a parser error (section 17.33). This is what I came up with:
Code:
Choice made is a truth state that varies. Choice made is false.
Rule for deciding whether all includes something when the player can touch the dagger and the player can touch the rose and choice made is false: it does not. [This disables "take all" in a room with the dagger and the rose when we haven't chosen yet.]
Rule for printing a parser error when the latest parser error is the nothing to do error and the dagger is in the location and the rose is in the location: say "You must choose one of the dagger and the rose."
Carry out taking the dagger: now choice made is true.
Carry out taking the rose: now choice made is true.
Starter is a room. A dagger and a rose are here.
North Room is north of starter. A hoojab, a whatsit, and a whatchamacallit are here.
Test me with "take all/n/take all/take all/drop all/s/take rose/take all".
Test oops with "n/take all/s/drop all".
The "nothing to do error" is the parser error that usually prints the message "There are none at all available!" As the first "test me" script shows, that will still behave normally when the player isn't trying to take both the dagger and the rose.
As the "test oops" script shows, this will mess up when the player tries "drop all" when she should be choosing between the rose and the dagger. You may not need to worry about this in your game, but in any case it can be fixed with a bit of (very useful) I6 trickery. The "To decide what action-name is the action-to-be" line lets us figure out what action the player was trying to do, even when the command didn't compile:
Code:
Choice made is a truth state that varies. Choice made is false.
To decide what action-name is the action-to-be: (- action_to_be -).
Rule for deciding whether all includes something when the player can touch the dagger and the player can touch the rose and choice made is false and the action-to-be is the taking action: it does not. [This disables "take all" in a room with the dagger and the rose when we haven't chosen yet.]
Rule for printing a parser error when the latest parser error is the nothing to do error and the dagger is in the location and the rose is in the location and the action-to-be is the taking action: say "You must choose one of the dagger and the rose."
Carry out taking the dagger: now choice made is true.
Carry out taking the rose: now choice made is true.
Starter is a room. A dagger and a rose are here.
North Room is north of starter. A hoojab, a whatsit, and a whatchamacallit are here.
Test me with "take all/n/take all/take all/drop all/s/take rose/take all".
Test oops with "n/take all/s/drop all".
(There may be a better way to fix that.)
Also, it sounds like the choice is dramatic enough that you might not want to let the player do anything other than choose the dagger or the rose when it's presented. No trying to go north, no taking your inventory, no nothing. So you might have something like this:
Quote:
The man says, "You must choose between the dagger and the rose."
Will you take the dagger or the rose? i
You must make a choice now.
Will you take the dagger or the rose? rose
You take the rose from the man, and you find yourself transported to an arboretum....
Section 5.2 of the Inform Recipe Book has several examples of ways to do this.
Incidentally, if the shadowy figure is actually carrying the dagger and the rose, the normal taking action won't work anyway unless you rewrite the "can't take other people's possessions" rule.