X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=actions.c;h=32dcd902ab4296389d3382320d6958af9fbaa479;hp=3990f8c839fe60f5028620848c849fd3bb2f62a2;hb=30f13c6c25be8d0fb5b0e6d819685b4e6f45829c;hpb=a3c159660bb03f220b7de52ba0ac4977098f389e diff --git a/actions.c b/actions.c index 3990f8c..32dcd90 100644 --- a/actions.c +++ b/actions.c @@ -1244,6 +1244,24 @@ static int wake(verb_t verb, obj_t obj) } } +static int seed(verb_t verb, const char *arg) +/* Set seed */ +{ + int seed = atoi(arg); + speak(actions[verb].message, seed); + set_seed(seed); + --game.turns; + return GO_TOP; +} + +static int waste(verb_t verb, turn_t turns) +/* Burn turns */ +{ + game.limit -= turns; + speak(actions[verb].message, (int)game.limit); + return GO_TOP; +} + static int wave(verb_t verb, obj_t obj) /* Wave. No effect unless waving rod at fissure or at bird. */ { @@ -1295,6 +1313,14 @@ int action(struct command_t *command) * unless verb is "say", which snarfs arbitrary second word. */ { + /* Previously, actions that result in a message, but don't do anything + * further were called "specials". Now they're handled here as normal + * actions. If noaction is true, then we spit out the message and return */ + if (actions[command->verb].noaction) { + speak(actions[command->verb].message); + return GO_CLEAROBJ; + } + if (command->part == unknown) { /* Analyse an object word. See if the thing is here, whether * we've got a verb yet, and so on. Object must be here @@ -1430,6 +1456,10 @@ int action(struct command_t *command) return listen(); case PART: return reservoir(); + case SEED: + case WASTE: + rspeak(NUMERIC_REQUIRED); + return GO_TOP; default: // LCOV_EXCL_LINE BUG(INTRANSITIVE_ACTION_VERB_EXCEEDS_GOTO_LIST); // LCOV_EXCL_LINE } @@ -1531,6 +1561,10 @@ int action(struct command_t *command) } case PART: return reservoir(); + case SEED: + return seed(command->verb, command->raw2); + case WASTE: + return waste(command->verb, (turn_t)atol(command->raw2)); default: // LCOV_EXCL_LINE BUG(TRANSITIVE_ACTION_VERB_EXCEEDS_GOTO_LIST); // LCOV_EXCL_LINE }