X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=actions.c;h=2ac545c726e699bcd60065f11948ac95c613b73a;hp=4135fba95f623a3370cee7d60cdc6b04a572bfca;hb=c35cf999660d640bcf839792fa280855cf45c31b;hpb=31c1a44915e0f7bd94b5037dca393c68c6a6bb7d diff --git a/actions.c b/actions.c index 4135fba..2ac545c 100644 --- a/actions.c +++ b/actions.c @@ -303,7 +303,8 @@ static int vcarry(token_t verb, token_t obj) } if (game.fixed[obj] != IS_FREE) { - if (obj == PLANT && game.prop[PLANT] <= 0) { // FIXME: magical state assertion + /* Next guard tests whether plant is tiny or stashed */ + if (obj == PLANT && game.prop[PLANT] <= PLANT_THIRSTY) { rspeak(DEEP_ROOTS); return GO_CLEAROBJ; } @@ -502,9 +503,9 @@ static int discard(token_t verb, token_t obj, bool just_do_it) game.loc == objects[PILLOW].plac) { rspeak(OK_MAN); } else { - state_change(VASE, AT(PILLOW) - ? VASE_WHOLE - : VASE_DROPPED); + state_change(VASE, AT(PILLOW) + ? VASE_WHOLE + : VASE_DROPPED); if (game.prop[VASE] != VASE_WHOLE) game.fixed[VASE] = IS_FIXED; } @@ -741,8 +742,8 @@ int fill(token_t verb, token_t obj) } state_change(BOTTLE, (LIQLOC(game.loc) == OIL) - ? OIL_BOTTLE - : WATER_BOTTLE); + ? OIL_BOTTLE + : WATER_BOTTLE); if (TOTING(BOTTLE)) game.place[LIQUID()] = CARRIED; return GO_CLEAROBJ; @@ -802,10 +803,10 @@ static int fly(token_t verb, token_t obj) /* FIXME: Arithmetic on location values */ game.newloc = game.place[RUG] + game.fixed[RUG] - game.loc; - if (game.prop[SAPPH] >= 0) { - rspeak(RUG_RETURNS); - } else { + if (game.prop[SAPPH] == STATE_NOTFOUND) { rspeak(RUG_GOES); + } else { + rspeak(RUG_RETURNS); } return GO_TERMINATE; } @@ -868,7 +869,7 @@ static int light(token_t verb, token_t obj) } static int listen(void) -/* Listen. Intransitive only. Print stuff based on objsnd/locsnd. */ +/* Listen. Intransitive only. Print stuff based on object sound proprties. */ { long sound = locations[game.loc].sound; if (sound != SILENT) { @@ -888,8 +889,7 @@ static int listen(void) long packed_zzword = token_to_packed(game.zzword); pspeak(i, hear, mi, true, packed_zzword); rspeak(NO_MESSAGE); - /* FIXME: Magic number, sensitive to bird state logic */ - if (i == BIRD && game.prop[i] == 5) + if (i == BIRD && mi == BIRD_ENDSTATE) DESTROY(BIRD); return GO_CLEAROBJ; }