It’s been brought up before that Inform can respond weirdly if the player types “drop all”, but is not holding anything, for example, asking “What do you want to drop those things in?”
If I try to handle this with an “understand as a mistake” line, is that likely to break something?
(Comment out the “understand as a mistake” line to see what happens by default.)
Already-said-we're-not-carrying-anything is a truth state that varies.
Already-said-we're-not-carrying-anything is initially false.
To say Not-carrying-anything:
if Already-said-we're-not-carrying-anything is false:
say "You're not carrying anything.";
now Already-said-we're-not-carrying-anything is true.
Before reading a command:
now Already-said-we're-not-carrying-anything is false.
Understand "drop [things]" as a mistake ("[Not-carrying-anything][run paragraph on]") when the player carries nothing.
A napkin is a kind of thing.
Lab is a room.
A table is a supporter in Lab.
6 napkins are on the table.
3 napkins are in Lab.
Test me with "drop napkins".
I’ve been where you are. Let’s quote this great note cleverly to myself in the Andromeda Acolytes source:
“…The second rule adds ‘the player’ to the multiple object list upon every DROP ALL attempt. We then use a multiple action processing rule (the third rule) to subtract the player from the list during the DROP ALL, at which point we can check manually whether the list is empty and print our own intercept message if it is. This avoids a bug (quirk/feature) where the empty list can jump straight to ‘What do you want to drop all those in?’”
Rather than me hack my way back to an elemental version of this, lemme link you to a post where the needed code seems to have been isolated. We can thank @Angstsmurf for this.