{
static struct command_t command;
- command.verb = 0;
-
/* Can't leave cave once it's closing (except by main office). */
if (OUTSID(game.newloc) && game.newloc != 0 && game.closng) {
rspeak(EXIT_CLOSED);
if (game.knfloc > 0 && game.knfloc != game.loc)
game.knfloc = 0;
- // Get command input from user
+ /* Preserve state from last command for reuse when required */
+ struct command_t preserve;
+ memcpy(&preserve, &command, sizeof(struct command_t));
+
+ // Get command input from user
if (!get_command_input(&command))
return false;
- ++game.turns;
+#ifdef GDEBUG
+ printf("Preserve: type1 = %u, id1 = %ld, type2 = %u id2 = %ld\n",
+ preserve.type1, preserve.id1, preserve.type2, preserve.id2);
+ printf("Command: type1 = %u, id1 = %ld, type2 = %u id2 = %ld\n",
+ command.type1, command.id1, command.type2, command.id2);
+#endif
+
+ /* Handling of objectless action followed by actionless object */
+ if (preserve.type1 == ACTION && preserve.type2 == NO_WORD_TYPE && command.id2 == 0)
+ command.verb = preserve.verb;
+
+#ifdef BROKEN
+ /* Handling of actionless object followed by objectless action */
+ if (preserve.type1 == OBJECT && preserve.type2 == NO_WORD_TYPE && command.id2 == 0)
+ command.obj = preserve.obj;
+#endif
+
+ ++game.turns;
if (closecheck()) {
if (game.closed)