+ packed_to_token(command.wd1, word1);
+ long defn;
+ enum wordtype type;
+ get_vocab_metadata(word1, &defn, &type);
+ if (command.id1 == WORD_NOT_FOUND) {
+ if (fallback_handler(command))
+ continue;
+ /* Gee, I don't understand. */
+ sspeak(DONT_KNOW, command.raw1);
+ goto Lclearobj;
+ }
+ switch (type) {
+ case NO_WORD_TYPE: // FIXME: treating NO_WORD_TYPE as a motion word is confusing
+ case MOTION:
+ playermove(command.id1);
+ return true;
+ case OBJECT:
+ command.part = unknown;
+ command.obj = command.id1;
+ break;
+ case ACTION:
+ command.part = intransitive;
+ command.verb = defn;
+ break;
+ case SPECIAL:
+ speak(specials[command.id1].message);
+ goto Lclearobj;
+ default: // LCOV_EXCL_LINE
+ BUG(VOCABULARY_TYPE_N_OVER_1000_NOT_BETWEEN_0_AND_3); // LCOV_EXCL_LINE
+ }
+