X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=main.c;h=7cf987aa551faa2b085baab57ab6deeb0ec11df9;hb=07e7b8131ee6a4424cf269fe1ebc310037cf1d0f;hp=d25e43e46d3233a6095b71d60e326e29d532359b;hpb=63152e67145eb22371a45a4ae6d3ba35bd221847;p=open-adventure.git diff --git a/main.c b/main.c index d25e43e..7cf987a 100644 --- a/main.c +++ b/main.c @@ -20,6 +20,7 @@ #include #include #include +#include #include "advent.h" #include "dungeon.h" @@ -515,14 +516,14 @@ static bool traveleq(long a, long b) * him, so we need game.oldlc2, which is the last place he was * safe.) */ -static bool playermove( int motion) +static void playermove( int motion) { int scratchloc, travel_entry = tkey[game.loc]; game.newloc = game.loc; if (travel_entry == 0) BUG(LOCATION_HAS_NO_TRAVEL_ENTRIES); // LCOV_EXCL_LINE if (motion == NUL) - return true; + return; else if (motion == BACK) { /* Handle "go back". Look for verb which goes from game.loc to * game.oldloc, or to game.oldlc2 If game.oldloc has forced-motion. @@ -554,7 +555,7 @@ static bool playermove( int motion) travel_entry = te_tmp; if (travel_entry == 0) { rspeak(NOT_CONNECTED); - return true; + return; } } @@ -564,7 +565,7 @@ static bool playermove( int motion) } } else { rspeak(spk); - return true; + return; } } else if (motion == LOOK) { /* Look. Can't give more detail. Pretend it wasn't dark @@ -575,11 +576,11 @@ static bool playermove( int motion) ++game.detail; game.wzdark = false; game.abbrev[game.loc] = 0; - return true; + return; } else if (motion == CAVE) { /* Cave. Different messages depending on whether above ground. */ rspeak((OUTSID(game.loc) && game.loc != LOC_GRATE) ? FOLLOW_STREAM : NEED_DETAIL); - return true; + return; } else { /* none of the specials */ game.oldlc2 = game.oldloc; @@ -614,7 +615,7 @@ static bool playermove( int motion) if (motion == CRAWL) spk = WHICH_WAY; rspeak(spk); - return true; + return; } ++travel_entry; } @@ -659,13 +660,13 @@ static bool playermove( int motion) /* Found an eligible rule, now execute it */ game.newloc = travel[travel_entry].dest; if (!SPECIAL(game.newloc)) - return true; + return; if (game.newloc > 500) { /* Execute a speak rule */ rspeak(L_SPEAK(game.newloc)); game.newloc = game.loc; - return true; + return; } else { game.newloc -= SPECIALBASE; switch (game.newloc) { @@ -681,7 +682,7 @@ static bool playermove( int motion) game.newloc = game.loc; rspeak(MUST_DROP); } - return true; + return; case 2: /* Travel 302. Plover transport. Drop the * emerald (only use special travel if toting @@ -717,13 +718,13 @@ static bool playermove( int motion) move(TROLL + NOBJECTS, objects[TROLL].fixd); juggle(CHASM); game.newloc = game.loc; - return true; + return; } else { game.newloc = objects[TROLL].plac + objects[TROLL].fixd - game.loc; if (game.prop[TROLL] == TROLL_UNPAID) game.prop[TROLL] = TROLL_PAIDONCE; if (!TOTING(BEAR)) - return true; + return; rspeak(BRIDGE_COLLAPSE); game.prop[CHASM] = BRIDGE_WRECKED; game.prop[TROLL] = TROLL_GONE; @@ -732,7 +733,7 @@ static bool playermove( int motion) game.prop[BEAR] = BEAR_DEAD; game.oldlc2 = game.newloc; croak(); - return true; + return; } default: BUG(SPECIAL_TRAVEL_500_GT_L_GT_300_EXCEEDS_GOTO_LIST); // LCOV_EXCL_LINE @@ -1002,10 +1003,8 @@ static bool do_command() rspeak(TAME_BEAR); speak(msg); if (FORCED(game.loc)) { - if (playermove(HERE)) - return true; - else - continue; /* back to top of main interpreter loop */ + playermove(HERE); + return true; } if (game.loc == LOC_Y2 && PCT(25) && !game.closng) rspeak(SAYS_PLUGH); @@ -1056,12 +1055,7 @@ L2600: strncpy(inputbuf, input, LINESIZE - 1); free(input); - long tokens[4]; - tokenize(inputbuf, tokens); - command.wd1 = tokens[0]; - command.wd1x = tokens[1]; - command.wd2 = tokens[2]; - command.wd2x = tokens[3]; + tokenize(inputbuf, &command); /* Every input, check "game.foobar" flag. If zero, nothing's * going on. If pos, make neg. If neg, he skipped a word, @@ -1091,8 +1085,8 @@ L2607: } else lampcheck(); - char word1[6]; - char word2[6]; + char word1[TOKLEN+1]; + char word2[TOKLEN+1]; packed_to_token(command.wd1, word1); packed_to_token(command.wd2, word2); V1 = get_vocab_id(word1); @@ -1108,7 +1102,6 @@ L2607: } if (V1 == ENTER && command.wd2 > 0) { command.wd1 = command.wd2; - command.wd1x = command.wd2x; wordclear(&command.wd2); } else { /* FIXME: Magic numbers related to vocabulary */ @@ -1137,17 +1130,15 @@ Lookup: /* Gee, I don't understand. */ if (fallback_handler(inputbuf)) continue; - rspeak(DONT_KNOW, command.wd1, command.wd1x); + sspeak(DONT_KNOW, command.raw1); goto L2600; } /* FIXME: magic numbers related to vocabulary */ kmod = MOD(defn, 1000); switch (defn / 1000) { case 0: - if (playermove(kmod)) - return true; - else - continue; /* back to top of main interpreter loop */ + playermove(kmod); + return true; case 1: command.part = unknown; command.obj = kmod; @@ -1183,13 +1174,15 @@ Laction: case GO_WORD2: /* Get second word for analysis. */ command.wd1 = command.wd2; - command.wd1x = command.wd2x; + strcpy(command.raw1, command.raw2); wordclear(&command.wd2); + command.raw2[0] = '\0'; goto L2620; case GO_UNKNOWN: /* Random intransitive verbs come here. Clear obj just in case * (see attack()). */ - rspeak(DO_WHAT, command.wd1, command.wd1x); + command.raw1[0] = toupper(command.raw1[0]); + sspeak(DO_WHAT, command.raw1); command.obj = 0; goto L2600; case GO_DWARFWAKE: