X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=actions.c;h=fdd1c9341e1fb911ac000fbe6241699638115dc5;hp=07c55e07e95d28867344ec0eac4fa369bf4b681c;hb=92de4856a6b7f9889e72faa1fc30a78526a97758;hpb=665103410a30960695432d09d9300dba5c0b5609 diff --git a/actions.c b/actions.c index 07c55e0..fdd1c93 100644 --- a/actions.c +++ b/actions.c @@ -281,7 +281,6 @@ static int vcarry(token_t verb, token_t obj) * take one without the other). Liquids also special, since they depend on * status of bottle. Also various side effects, etc. */ { - int spk; if (obj == INTRANSITIVE) { /* Carry, no object given yet. OK if only one object present. */ if (game.atloc[game.loc] == 0 || @@ -295,67 +294,85 @@ static int vcarry(token_t verb, token_t obj) rspeak(ALREADY_CARRYING); return GO_CLEAROBJ; } - spk = YOU_JOKING; - if (obj == PLANT && game.prop[PLANT] <= 0) - spk = DEEP_ROOTS; - if (obj == BEAR && game.prop[BEAR] == SITTING_BEAR) - spk = BEAR_CHAINED; - if (obj == CHAIN && game.prop[BEAR] != UNTAMED_BEAR) - spk = STILL_LOCKED; - if (obj == URN) - spk = URN_NOBUDGE; - if (obj == CAVITY) - spk = DOUGHNUT_HOLES; - if (obj == BLOOD) - spk = FEW_DROPS; - if (obj == RUG && game.prop[RUG] == RUG_HOVER) - spk = RUG_HOVERS; - if (obj == SIGN) - spk = HAND_PASSTHROUGH; + if (obj == MESSAG) { rspeak(REMOVE_MESSAGE); DESTROY(MESSAG); return GO_CLEAROBJ; } + if (game.fixed[obj] != 0) { - rspeak(spk); + if (obj == PLANT && game.prop[PLANT] <= 0) { + rspeak(DEEP_ROOTS); + return GO_CLEAROBJ; + } + if (obj == BEAR && game.prop[BEAR] == SITTING_BEAR) { + rspeak(BEAR_CHAINED); + return GO_CLEAROBJ; + } + if (obj == CHAIN && game.prop[BEAR] != UNTAMED_BEAR) { + rspeak(STILL_LOCKED); + return GO_CLEAROBJ; + } + if (obj == URN) { + rspeak(URN_NOBUDGE); + return GO_CLEAROBJ; + } + if (obj == CAVITY) { + rspeak(DOUGHNUT_HOLES); + return GO_CLEAROBJ; + } + if (obj == BLOOD) { + rspeak(FEW_DROPS); + return GO_CLEAROBJ; + } + if (obj == RUG && game.prop[RUG] == RUG_HOVER) { + rspeak(RUG_HOVERS); + return GO_CLEAROBJ; + } + if (obj == SIGN) { + rspeak(HAND_PASSTHROUGH); + return GO_CLEAROBJ; + } + rspeak(YOU_JOKING); return GO_CLEAROBJ; } + if (obj == WATER || obj == OIL) { if (!HERE(BOTTLE) || LIQUID() != obj) { - if (TOTING(BOTTLE) && game.prop[BOTTLE] == EMPTY_BOTTLE) - return (fill(verb, BOTTLE)); - else { - if (game.prop[BOTTLE] != EMPTY_BOTTLE) - spk = BOTTLE_FULL; - if (!TOTING(BOTTLE)) - spk = NO_CONTAINER; - rspeak(spk); + if (TOTING(BOTTLE)) { + if (game.prop[BOTTLE] == EMPTY_BOTTLE) { + return (fill(verb, BOTTLE)); + } else if (game.prop[BOTTLE] != EMPTY_BOTTLE) + rspeak(BOTTLE_FULL); return GO_CLEAROBJ; } + rspeak(NO_CONTAINER); + return GO_CLEAROBJ; } obj = BOTTLE; } - spk = CARRY_LIMIT; if (game.holdng >= INVLIMIT) { - rspeak(spk); + rspeak(CARRY_LIMIT); return GO_CLEAROBJ; - } else if (obj == BIRD && game.prop[BIRD] != BIRD_CAGED && -1 - game.prop[BIRD] != BIRD_CAGED) { + + } + + if (obj == BIRD && game.prop[BIRD] != BIRD_CAGED && -1 - game.prop[BIRD] != BIRD_CAGED) { if (game.prop[BIRD] == BIRD_FOREST_UNCAGED) { DESTROY(BIRD); rspeak(BIRD_CRAP); return GO_CLEAROBJ; } - if (!TOTING(CAGE)) - spk = CANNOT_CARRY; - if (TOTING(ROD)) - spk = BIRD_EVADES; - if (spk == CANNOT_CARRY || - spk == BIRD_EVADES) { - rspeak(spk); + if (!TOTING(CAGE)) { + rspeak(CANNOT_CARRY); + return GO_CLEAROBJ; + } + if (TOTING(ROD)) { + rspeak(BIRD_EVADES); return GO_CLEAROBJ; } game.prop[BIRD] = BIRD_CAGED; @@ -367,10 +384,11 @@ static int vcarry(token_t verb, token_t obj) -1 - game.prop[BIRD] == 1)) carry(BIRD + CAGE - obj, game.loc); carry(obj, game.loc); - if (obj == BOTTLE && LIQUID() != 0) + if (obj == BOTTLE && LIQUID() != NO_OBJECT) game.place[LIQUID()] = CARRIED; if (GSTONE(obj) && game.prop[obj] != 0) { - game.prop[obj] = STATE_GROUND; + game.prop[obj] + = STATE_GROUND; game.prop[CAVITY] = CAVITY_EMPTY; } rspeak(OK_MAN); @@ -429,12 +447,11 @@ static int discard(token_t verb, token_t obj, bool just_do_it) * bird (might attack snake or dragon) and cage (might contain bird) and vase. * Drop coins at vending machine for extra batteries. */ { - int spk = actions[verb].message; if (!just_do_it) { if (TOTING(ROD2) && obj == ROD && !TOTING(ROD)) obj = ROD2; if (!TOTING(obj)) { - rspeak(spk); + rspeak(actions[verb].message;); return GO_CLEAROBJ; } if (obj == BIRD && HERE(SNAKE)) { @@ -451,7 +468,7 @@ static int discard(token_t verb, token_t obj, bool just_do_it) game.prop[CAVITY] = CAVITY_FULL; if (HERE(RUG) && ((obj == EMERALD && game.prop[RUG] != RUG_HOVER) || (obj == RUBY && game.prop[RUG] == RUG_HOVER))) { - spk = RUG_RISES; + int spk = RUG_RISES; if (TOTING(RUG)) spk = RUG_WIGGLES; if (obj == RUBY) @@ -497,7 +514,7 @@ static int discard(token_t verb, token_t obj, bool just_do_it) int k = LIQUID(); if (k == obj) obj = BOTTLE; - if (obj == BOTTLE && k != 0) + if (obj == BOTTLE && k != NO_OBJECT) game.place[k] = LOC_NOWHERE; if (obj == CAGE && game.prop[BIRD] == BIRD_CAGED) drop(BIRD, game.loc);