X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=actions.c;h=9c3eb77a45039c5ca63a5663157c403c21655c5f;hp=3d03d830e5f0da9b71e04c80395fbc47492ab8bf;hb=6667ffd1f10e75ee4b75a3430d76e6f1b4e51090;hpb=24d102781c2ec6fef8246b53250dc7590e71fff7 diff --git a/actions.c b/actions.c index 3d03d83..9c3eb77 100644 --- a/actions.c +++ b/actions.c @@ -1,8 +1,17 @@ +/* + * Actions for the duneon-running code. + * + * Copyright (c) 1977, 2005 by Will Crowther and Don Woods + * Copyright (c) 2017 by Eric S. Raymond + * SPDX-License-Identifier: BSD-2-clause + */ + #include #include #include #include "advent.h" #include "dungeon.h" +#include static int fill(verb_t, obj_t); @@ -202,11 +211,11 @@ static int bigwords(vocab_t id) if (game.place[EGGS] == LOC_NOWHERE && game.place[TROLL] == LOC_NOWHERE && game.prop[TROLL] == TROLL_UNPAID) game.prop[TROLL] = TROLL_PAIDONCE; if (HERE(EGGS)) - pspeak(EGGS, look, EGGS_VANISHED, true); + pspeak(EGGS, look, true, EGGS_VANISHED); else if (game.loc == objects[EGGS].plac) - pspeak(EGGS, look, EGGS_HERE, true); + pspeak(EGGS, look, true, EGGS_HERE); else - pspeak(EGGS, look, EGGS_DONE, true); + pspeak(EGGS, look, true, EGGS_DONE); move(EGGS, objects[EGGS].plac); return GO_CLEAROBJ; @@ -265,7 +274,7 @@ static int vbreak(verb_t verb, obj_t obj) game.fixed[VASE] = IS_FIXED; break; } - /* FALLTHRU */ + /* FALLTHRU */ default: speak(actions[verb].message); } @@ -491,7 +500,7 @@ static int discard(verb_t verb, obj_t obj) if (obj == COINS && HERE(VEND)) { DESTROY(COINS); drop(BATTERY, game.loc); - pspeak(BATTERY, look, FRESH_BATTERIES, true); + pspeak(BATTERY, look, true, FRESH_BATTERIES); return GO_CLEAROBJ; } @@ -592,7 +601,7 @@ static int eat(verb_t verb, obj_t obj) case INTRANSITIVE: if (!HERE(FOOD)) return GO_UNKNOWN; - /* FALLTHRU */ + /* FALLTHRU */ case FOOD: DESTROY(FOOD); rspeak(THANKS_DELICIOUS); @@ -631,7 +640,7 @@ static int extinguish(verb_t verb, obj_t obj) if (game.prop[URN] != URN_EMPTY) { state_change(URN, URN_DARK); } else { - pspeak(URN, change, URN_DARK, true); + pspeak(URN, change, true, URN_DARK); } break; case LAMP: @@ -860,7 +869,7 @@ static int inven(void) rspeak(NOW_HOLDING); empty = false; } - pspeak(i, touch, -1, false); + pspeak(i, touch, false, -1); } if (TOTING(BEAR)) rspeak(TAME_BEAR); @@ -930,7 +939,7 @@ static int listen(void) * depending on whether player has drunk dragon's blood. */ if (i == BIRD) mi += 3 * game.blooded; - pspeak(i, hear, mi, true, game.zzword); + pspeak(i, hear, true, mi, game.zzword); rspeak(NO_MESSAGE); if (i == BIRD && mi == BIRD_ENDSTATE) DESTROY(BIRD); @@ -1099,7 +1108,7 @@ static int read(command_t command) game.prop[command.obj] == STATE_NOTFOUND) { speak(actions[command.verb].message); } else - pspeak(command.obj, study, game.prop[command.obj], true); + pspeak(command.obj, study, true, game.prop[command.obj]); return GO_CLEAROBJ; } @@ -1145,21 +1154,21 @@ static int say(command_t command) /* Say. Echo WD2. Magic words override. */ { if (command.word[1].type == MOTION && - (command.word[1].id == XYZZY || - command.word[1].id == PLUGH || - command.word[1].id == PLOVER)) { - return GO_WORD2; + (command.word[1].id == XYZZY || + command.word[1].id == PLUGH || + command.word[1].id == PLOVER)) { + return GO_WORD2; } if (command.word[1].type == ACTION && command.word[1].id == PART) return reservoir(); - + if (command.word[1].type == ACTION && (command.word[1].id == FEE || - command.word[1].id == FIE || - command.word[1].id == FOE || - command.word[1].id == FOO || - command.word[1].id == FUM || - command.word[1].id == PART)) { + command.word[1].id == FIE || + command.word[1].id == FOE || + command.word[1].id == FOO || + command.word[1].id == FUM || + command.word[1].id == PART)) { return bigwords(command.word[1].id); } sspeak(OKEY_DOKEY, command.word[1].raw); @@ -1250,7 +1259,7 @@ static int wake(verb_t verb, obj_t obj) static int seed(verb_t verb, const char *arg) /* Set seed */ { - int seed = atoi(arg); + int32_t seed = strtol(arg, NULL, 10); speak(actions[verb].message, seed); set_seed(seed); --game.turns; @@ -1316,14 +1325,14 @@ int action(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 + /* 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 @@ -1360,8 +1369,6 @@ int action(command_t command) return GO_CLEAROBJ; } - if (command.word[1].id != WORD_EMPTY && command.word[1].id != WORD_NOT_FOUND) - return GO_WORD2; if (command.verb != 0) command.part = transitive; } @@ -1371,9 +1378,9 @@ int action(command_t command) if (command.word[1].raw[0] != '\0' && command.verb != SAY) return GO_WORD2; if (command.verb == SAY) - /* KEYS is not special, anything not NO_OBJECT or INTRANSITIVE - * will do here. We're preventing interpretation as an intransitive - * verb when the word is unknown. */ + /* KEYS is not special, anything not NO_OBJECT or INTRANSITIVE + * will do here. We're preventing interpretation as an intransitive + * verb when the word is unknown. */ command.obj = command.word[1].raw[0] != '\0' ? KEYS : NO_OBJECT; if (command.obj == NO_OBJECT || command.obj == INTRANSITIVE) { @@ -1510,7 +1517,7 @@ int action(command_t command) case RUB: return rub(command.verb, command.obj); case THROW: - return throw(command); + return throw (command); case QUIT: { speak(actions[command.verb].message); return GO_CLEAROBJ; @@ -1562,11 +1569,11 @@ int action(command_t command) speak(actions[command.verb].message); return GO_CLEAROBJ; } - // LCOV_EXCL_START - // This case should never happen - here only as placeholder + // LCOV_EXCL_START + // This case should never happen - here only as placeholder case PART: return reservoir(); - // LCOV_EXCL_STOP + // LCOV_EXCL_STOP case SEED: return seed(command.verb, command.word[1].raw); case WASTE: