- bool preprocessed = false;
-
- do {
- preprocessed = true;
- checkhints();
-
- /* If closing time, check for any objects being toted with
- * game.prop < 0 and stash them. This way objects won't be
- * described until they've been picked up and put down
- * separate from their respective piles. */
- if (game.closed) {
- if (game.prop[OYSTER] < 0 && TOTING(OYSTER))
- pspeak(OYSTER, look, true, 1);
- for (size_t i = 1; i <= NOBJECTS; i++) {
- if (TOTING(i) && game.prop[i] < 0)
- game.prop[i] = STASHED(i);
- }
- }
- game.wzdark = DARK(game.loc);
- if (game.knfloc > 0 && game.knfloc != game.loc)
- game.knfloc = 0;
-
- // Get command input from user
- if (!get_command_input(command))
- return false;
-
-#ifdef GDEBUG
- /* Needs to stay synced with enum word_type_t */
- const char *types[] = {"NO_WORD_TYPE", "MOTION", "OBJECT", "ACTION", "NUMERIC"};
- /* needs to stay synced with enum speechpart */
- const char *roles[] = {"unknown", "intransitive", "transitive"};
- printf("Command: role = %s type1 = %s, id1 = %ld, type2 = %s, id2 = %ld\n",
- roles[command->part],
- types[command->word[0].type],
- command->word[0].id,
- types[command->word[1].type],
- command->word[1].id);
-#endif
-
- ++game.turns;
-
- if (closecheck()) {
- if (game.closed)
- return false;
- } else
- lampcheck();
-
- if (command->word[0].type == MOTION && command->word[0].id == ENTER
- && (command->word[1].id == STREAM || command->word[1].id == WATER)) {
- if (LIQLOC(game.loc) == WATER)
- rspeak(FEET_WET);
- else
- rspeak(WHERE_QUERY);
-
- clear_command(command);
- preprocessed = false;
+ if (game.closed) {
+ if (game.prop[OYSTER] < 0 && TOTING(OYSTER))
+ pspeak(OYSTER, look, true, 1);
+ for (size_t i = 1; i <= NOBJECTS; i++) {
+ if (TOTING(i) && game.prop[i] < 0)
+ game.prop[i] = STASHED(i);