X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=actions.c;h=40a1928f62d99299970e9a07fef2775cd59196f1;hp=6000f41e01980eb91a9ecf82296e5358a515809d;hb=49d9ef1bee7b11055b7a46e2c2b45bd888e1ccef;hpb=9a16382b121422b094539463e57710baaaf817dc diff --git a/actions.c b/actions.c index 6000f41..40a1928 100644 --- a/actions.c +++ b/actions.c @@ -185,13 +185,13 @@ static int bigwords(long id) * Look up foo in special section of vocab to determine which word we've got. * Last word zips the eggs back to the giant room (unless already there). */ { - if ((game.foobar == WORD_EMPTY && id == ACTION_WORD(FEE)) || - (game.foobar == ACTION_WORD(FEE) && id == ACTION_WORD(FIE)) || - (game.foobar == ACTION_WORD(FIE) && id == ACTION_WORD(FOE)) || - (game.foobar == ACTION_WORD(FOE) && id == ACTION_WORD(FOO)) || - (game.foobar == ACTION_WORD(FOE) && id == ACTION_WORD(FUM))) { + if ((game.foobar == WORD_EMPTY && id == FEE) || + (game.foobar == FEE && id == FIE) || + (game.foobar == FIE && id == FOE) || + (game.foobar == FOE && id == FOO) || + (game.foobar == FOE && id == FUM)) { game.foobar = id; - if ((id != ACTION_WORD(FOO)) && (id != ACTION_WORD(FUM))) { + if ((id != FOO) && (id != FUM)) { rspeak(OK_MAN); return GO_CLEAROBJ; } @@ -419,11 +419,13 @@ static int chain(verb_t verb) switch (game.prop[BEAR]) { case BEAR_DEAD: - /* Can't be reached as long as the only way for the bear to die - * is from a bridge collapse. Leave in in case this changes, but - * exclude from coverage testing. */ - game.fixed[BEAR] = IS_FIXED; // LCOV_EXCL_LINE + // LCOV_EXCL_START + /* Can't be reached as long as the only way for the bear to die + * is from a bridge collapse. Leave in in case this changes, but + * exclude from coverage testing. */ + game.fixed[BEAR] = IS_FIXED; break; + // LCOV_EXCL_STOP default: game.fixed[BEAR] = IS_FREE; } @@ -475,15 +477,13 @@ static int discard(verb_t verb, obj_t obj) game.prop[CAVITY] = CAVITY_FULL; if (HERE(RUG) && ((obj == EMERALD && game.prop[RUG] != RUG_HOVER) || (obj == RUBY && game.prop[RUG] == RUG_HOVER))) { - int spk; if (obj == RUBY) - spk = RUG_SETTLES; + rspeak(RUG_SETTLES); else if (TOTING(RUG)) - spk = RUG_WIGGLES; + rspeak(RUG_WIGGLES); else - spk = RUG_RISES; - rspeak(spk); - if (spk != RUG_WIGGLES) { + rspeak(RUG_RISES); + if (!TOTING(RUG) || obj == RUBY) { int k = (game.prop[RUG] == RUG_HOVER) ? RUG_FLOOR : RUG_HOVER; game.prop[RUG] = k; if (k == RUG_HOVER) @@ -901,7 +901,11 @@ static int listen(void) game.prop[i] < 0) continue; int mi = game.prop[i]; - /* FIXME: Weird magic on object states */ + /* (ESR) Some unpleasant magic on object states here. Ideally + * we'd have liked the bird to be a normal object that we can + * use state_change() on; can't do it, because there are + * actually two different series of per-state birdsounds + * depending on whether player has drunk dragon's blood. */ if (i == BIRD) mi += 3 * game.blooded; long packed_zzword = token_to_packed(game.zzword); @@ -1121,16 +1125,18 @@ static int say(struct command_t *command) } char word1[TOKLEN + 1]; packed_to_token(command->wd1, word1); - int wd = (int) get_vocab_id(word1); - if (wd == MOTION_WORD(XYZZY) || - wd == MOTION_WORD(PLUGH) || - wd == MOTION_WORD(PLOVER) || - wd == ACTION_WORD(FEE) || - wd == ACTION_WORD(FIE) || - wd == ACTION_WORD(FOE) || - wd == ACTION_WORD(FOO) || - wd == ACTION_WORD(FUM) || - wd == ACTION_WORD(PART)) { + long wd; + enum wordtype type; + get_vocab_metadata(word1, &wd, &type); + if (wd == XYZZY || + wd == PLUGH || + wd == PLOVER || + wd == FEE || + wd == FIE || + wd == FOE || + wd == FOO || + wd == FUM || + wd == PART) { /* FIXME: scribbles on the interpreter's command block */ wordclear(&command->wd2); return GO_LOOKUP;