From 4d7858d333057850b7d4635ba51441238f0721e2 Mon Sep 17 00:00:00 2001 From: Aaron Traas Date: Mon, 10 Jul 2017 17:18:58 -0400 Subject: [PATCH] Cleaned up do_command() a little --- advent.h | 1 + main.c | 144 ++++++++++++++++++++++++++----------------------------- 2 files changed, 68 insertions(+), 77 deletions(-) diff --git a/advent.h b/advent.h index 553d1c7..3015d65 100644 --- a/advent.h +++ b/advent.h @@ -144,6 +144,7 @@ struct game_t { long dtotal; long foobar; // current progress in saying "FEE FIE FOE FOO". long holdng; // number of objects being carried + long igo; // How many times he's said "go" instead of the direction long iwest; // How many times he's said "west" instead of "w" long knfloc; // 0 if no knife here, loc if knife , -1 after caveat long limit; // lifetime of lamp (not set here) diff --git a/main.c b/main.c index 4869d9b..c23b467 100644 --- a/main.c +++ b/main.c @@ -1008,11 +1008,8 @@ static bool do_command() /* Get and execute a command */ { long kmod, defn; - static long igo = 0; static struct command_t command; - //char inputbuf[LINESIZE]; char word1[TOKLEN + 1]; - //char word2[TOKLEN + 1]; command.verb = 0; @@ -1097,9 +1094,10 @@ L2600: if (game.knfloc > 0 && game.knfloc != game.loc) game.knfloc = 0; - if(!get_command_input(&command)) { + // Get command input from user + if(!get_command_input(&command)) return false; - } + L2607: ++game.turns; @@ -1112,82 +1110,74 @@ L2607: } } - if (command.verb == SAY && command.id2 != WORD_NOT_FOUND && command.id2 != WORD_EMPTY) - command.verb = 0; - if (command.verb == SAY) { - command.part = transitive; - } else { - if (closecheck()) { - if (game.closed) - return true; - } else - lampcheck(); - - if (command.id1 == ENTER && (command.id2 == STREAM || - command.id2 == PROMOTE_WORD(WATER))) { - if (LIQLOC(game.loc) == WATER) { - rspeak(FEET_WET); - } else { - rspeak(WHERE_QUERY); - } - goto Lclearobj; - } - if (command.id1 == ENTER && command.id2 != WORD_NOT_FOUND && command.id2 != WORD_EMPTY) { - /* command.wd1 = command.wd2; */ - /* wordclear(&command.wd2); */ - command.id1 = command.id2; - command.id2 = WORD_EMPTY; + if (closecheck()) { + if (game.closed) + return true; + } else + lampcheck(); + + if (command.id1 == ENTER && (command.id2 == STREAM || + command.id2 == PROMOTE_WORD(WATER))) { + if (LIQLOC(game.loc) == WATER) { + rspeak(FEET_WET); } else { - /* FIXME: Magic numbers related to vocabulary */ - if (!((command.id1 != PROMOTE_WORD(WATER) && command.id1 != PROMOTE_WORD(OIL)) || - (command.id2 != PROMOTE_WORD(PLANT) && command.id2 != PROMOTE_WORD(DOOR)))) { - if (AT(DEMOTE_WORD(command.id2))) - command.wd2 = token_to_packed("POUR"); - } - if (command.id1 == PROMOTE_WORD(CAGE) && command.id2 == PROMOTE_WORD(BIRD) && HERE(CAGE) && HERE(BIRD)) - command.wd1 = token_to_packed("CATCH"); - } -L2620: - if (wordeq(command.wd1, token_to_packed("WEST"))) { - ++game.iwest; - if (game.iwest == 10) - rspeak(W_IS_WEST); + rspeak(WHERE_QUERY); } - if (wordeq(command.wd1, token_to_packed("GO")) && !wordempty(command.wd2)) { - if (++igo == 10) - rspeak(GO_UNNEEDED); + goto Lclearobj; + } + if (command.id1 == ENTER && command.id2 != WORD_NOT_FOUND && command.id2 != WORD_EMPTY) { + command.id1 = command.id2; + command.id2 = WORD_EMPTY; + } else { + /* FIXME: Magic numbers related to vocabulary */ + if (!((command.id1 != PROMOTE_WORD(WATER) && command.id1 != PROMOTE_WORD(OIL)) || + (command.id2 != PROMOTE_WORD(PLANT) && command.id2 != PROMOTE_WORD(DOOR)))) { + if (AT(DEMOTE_WORD(command.id2))) + command.wd2 = token_to_packed("POUR"); } + if (command.id1 == PROMOTE_WORD(CAGE) && command.id2 == PROMOTE_WORD(BIRD) && HERE(CAGE) && HERE(BIRD)) + command.wd1 = token_to_packed("CATCH"); + } +Lmovehint: + if (wordeq(command.wd1, token_to_packed("WEST"))) { + if (++game.iwest == 10) + rspeak(W_IS_WEST); + } + if (wordeq(command.wd1, token_to_packed("GO")) && !wordempty(command.wd2)) { + if (++game.igo == 10) + rspeak(GO_UNNEEDED); + } Lookup: - packed_to_token(command.wd1, word1); - defn = get_vocab_id(word1); - if (defn == WORD_NOT_FOUND) { - /* Gee, I don't understand. */ - if (fallback_handler(command)) - continue; - sspeak(DONT_KNOW, command.raw1); - goto L2600; - } - /* FIXME: magic numbers related to vocabulary */ - kmod = MOD(defn, 1000); - switch (defn / 1000) { - case 0: - playermove(kmod); - return true; - case 1: - command.part = unknown; - command.obj = kmod; - break; - case 2: - command.part = intransitive; - command.verb = kmod; - break; - case 3: - speak(specials[kmod].message); - goto Lclearobj; - default: - BUG(VOCABULARY_TYPE_N_OVER_1000_NOT_BETWEEN_0_AND_3); // LCOV_EXCL_LINE - } + packed_to_token(command.wd1, word1); + defn = get_vocab_id(word1); + if (defn == WORD_NOT_FOUND) { + if (fallback_handler(command)) + continue; + /* Gee, I don't understand. */ + sspeak(DONT_KNOW, command.raw1); + goto L2600; + } + /* FIXME: magic numbers related to vocabulary */ + kmod = MOD(defn, 1000); + switch (defn / 1000) { + case 0: + playermove(kmod); + return true; + case 1: + command.part = unknown; + command.obj = kmod; + break; + case 2: + command.part = intransitive; + command.verb = kmod; + break; + case 3: + speak(specials[kmod].message); + goto Lclearobj; + default: + BUG(VOCABULARY_TYPE_N_OVER_1000_NOT_BETWEEN_0_AND_3); // LCOV_EXCL_LINE } + switch (action(&command)) { case GO_TERMINATE: return true; @@ -1210,7 +1200,7 @@ Lookup: strncpy(command.raw1, command.raw2, LINESIZE - 1); wordclear(&command.wd2); command.raw2[0] = '\0'; - goto L2620; + goto Lmovehint; case GO_UNKNOWN: /* Random intransitive verbs come here. Clear obj just in case * (see attack()). */ -- 2.31.1