Adventuron's solution prints the get and drop response, but it doesn't seem to refresh the screen - at least not in my game. If you want something a bit more polished, try this:
booleans {
is_refresh : boolean "false";
}
on_command {
: match "get -" {
: print {(camel(original_verb()) + " what?")}
: done;
}
: match "get *" {
: if (is_beside (s1())) {
: get quiet = "true";
: set_string var = "message" text = "Taken.";
: gosub "refresh";
}
}
: match "drop -" {
: print {(camel(original_verb()) + " what?")}
: done;
}
: match "drop *" {
: if (is_carried (s1()) && !is_worn (s1())) {
: drop quiet = "true";
: set_string var = "message" text = "Dropped.";
: gosub "refresh";
}
}
}
on_describe {
: if (is_refresh) {
: set_false "is_refresh";
: print {(message)};
}
}
subroutines {
refresh : subroutine {
: set_true "is_refresh";
: redescribe;
}
}
The idea is that rather than printing a message, you put the message in a string and call a subroutine. The subroutine sets a flag and does a redescribe. You can't do anything after redescribe, so you test the flag in on_describe. If the flag is set, you clear it (for next time around) and print the string. Works like a charm.