X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=actions.c;h=5e650f6bec9c344afcb80c3fa652849e257bd889;hb=8b3ef7ca78b8066113f4e35c596705bef12382ba;hp=5dfb987a74f8e92ce02edd9ca36bb3defd1591b0;hpb=5613b0ce36636d421cfa3002d39aeb0e2f69e389;p=open-adventure.git diff --git a/actions.c b/actions.c index 5dfb987..5e650f6 100644 --- a/actions.c +++ b/actions.c @@ -788,15 +788,12 @@ static int light(token_t verb, token_t obj) static int listen(void) /* Listen. Intransitive only. Print stuff based on objsnd/locsnd. */ { - long k; - int spk = ALL_SILENT; - k = locations[game.loc].sound; - if (k != SILENT) { - rspeak(k); - if (locations[game.loc].loud) - return GO_CLEAROBJ; - else - spk = NO_MESSAGE; + long sound = locations[game.loc].sound; + if (sound != SILENT) { + rspeak(sound); + if (!locations[game.loc].loud) + rspeak(NO_MESSAGE); + return GO_CLEAROBJ; } for (int i = 1; i <= NOBJECTS; i++) { if (!HERE(i) || objects[i].sounds[0] == NULL || game.prop[i] < 0) @@ -806,21 +803,20 @@ static int listen(void) mi += 3 * game.blooded; long packed_zzword = token_to_packed(game.zzword); pspeak(i, hear, mi, true, packed_zzword); - spk = NO_MESSAGE; + rspeak(NO_MESSAGE); /* FIXME: Magic number, sensitive to bird state logic */ if (i == BIRD && game.prop[i] == 5) DESTROY(BIRD); + return GO_CLEAROBJ; } - rspeak(spk); + rspeak(ALL_SILENT); return GO_CLEAROBJ; } static int lock(token_t verb, token_t obj) /* Lock, unlock, no object given. Assume various things if present. */ { - int spk = actions[verb].message; if (obj == INTRANSITIVE) { - spk = NOTHING_LOCKED; if (HERE(CLAM)) obj = CLAM; if (HERE(OYSTER)) @@ -832,19 +828,18 @@ static int lock(token_t verb, token_t obj) if (HERE(CHAIN)) obj = CHAIN; if (obj == NO_OBJECT || obj == INTRANSITIVE) { - rspeak(spk); + rspeak(NOTHING_LOCKED); return GO_CLEAROBJ; } } /* Lock, unlock object. Special stuff for opening clam/oyster * and for chain. */ + int spk = actions[verb].message; if (obj == CLAM || obj == OYSTER) return bivalve(verb, obj); if (obj == DOOR) - spk = RUSTY_DOOR; - if (obj == DOOR && game.prop[DOOR] == DOOR_UNRUSTED) - spk = OK_MAN; + spk = (game.prop[DOOR] == DOOR_UNRUSTED) ? OK_MAN : RUSTY_DOOR; if (obj == CAGE) spk = NO_LOCK; if (obj == KEYS) @@ -873,33 +868,30 @@ static int pour(token_t verb, token_t obj) /* Pour. If no object, or object is bottle, assume contents of bottle. * special tests for pouring water or oil on plant or rusty door. */ { - int spk = actions[verb].message; if (obj == BOTTLE || obj == NO_OBJECT) obj = LIQUID(); if (obj == NO_OBJECT) return GO_UNKNOWN; if (!TOTING(obj)) { - rspeak(spk); + rspeak(actions[verb].message); return GO_CLEAROBJ; } - spk = CANT_POUR; + if (obj != OIL && obj != WATER) { - rspeak(spk); + rspeak(CANT_POUR); return GO_CLEAROBJ; } if (HERE(URN) && game.prop[URN] == URN_EMPTY) return fill(verb, URN); game.prop[BOTTLE] = EMPTY_BOTTLE; game.place[obj] = LOC_NOWHERE; - spk = GROUND_WET; if (!(AT(PLANT) || AT(DOOR))) { - rspeak(spk); + rspeak(GROUND_WET); return GO_CLEAROBJ; } if (!AT(DOOR)) { - spk = SHAKING_LEAVES; if (obj != WATER) { - rspeak(spk); + rspeak(SHAKING_LEAVES); return GO_CLEAROBJ; } pspeak(PLANT, look, game.prop[PLANT] + 3, true);