Fix to Gitlab issue #32. Now SEED and WASTE are in adventure.yaml

NOTE: the tests are all updated because now, like every other action,
SEED and WASTE have a \n before their output, as they correctly use
SPEAK
This commit is contained in:
Aaron Traas 2017-07-21 09:52:19 -04:00
parent ef236aea3b
commit 5337e00725
84 changed files with 174 additions and 32 deletions

30
main.c
View file

@ -133,28 +133,6 @@ int main(int argc, char *argv[])
terminate(quitgame);
}
static bool fallback_handler(struct command_t command)
/* fallback handler for commands not handled by FORTRANish parser */
{
long sv;
turn_t turnlimit;
char buf[DIM(command.raw1) + DIM(command.raw2) + 1];
sprintf(buf, "%s %s", command.raw1, command.raw2);
if (sscanf(buf, "seed %ld", &sv) == 1) {
set_seed(sv);
printf("Seed set to %ld\n", sv);
// autogenerated, so don't charge user time for it.
--game.turns;
return true;
} else if (sscanf(buf, "waste %ld", &turnlimit) == 1) {
game.limit -= turnlimit;
printf("Game limit is now %ld\n", game.limit);
return true;
}
return false;
}
/* Check if this loc is eligible for any hints. If been here long
* enough, display. Ignore "HINTS" < 4 (special stuff, see database
* notes). */
@ -1136,8 +1114,6 @@ Lookup:
rspeak(GO_UNNEEDED);
}
if (command.id1 == WORD_NOT_FOUND) {
if (fallback_handler(command))
continue;
/* Gee, I don't understand. */
sspeak(DONT_KNOW, command.raw1);
goto Lclearobj;
@ -1152,12 +1128,16 @@ Lookup:
command.obj = command.id1;
break;
case ACTION:
command.part = intransitive;
if(command.type2 == NUMERIC)
command.part = transitive;
else
command.part = intransitive;
command.verb = command.id1;
break;
case SPECIAL:
speak(specials[command.id1].message);
goto Lclearobj;
case NUMERIC:
default: // LCOV_EXCL_LINE
BUG(VOCABULARY_TYPE_N_OVER_1000_NOT_BETWEEN_0_AND_3); // LCOV_EXCL_LINE
}