Refactored carry for clarity

This commit is contained in:
NHOrus 2017-07-14 16:02:52 +03:00
parent 3d2ba18355
commit 66ba9a0101

View file

@ -311,40 +311,35 @@ static int vcarry(verb_t verb, obj_t obj)
} }
if (game.fixed[obj] != IS_FREE) { if (game.fixed[obj] != IS_FREE) {
/* Next guard tests whether plant is tiny or stashed */ switch (obj) {
if (obj == PLANT && game.prop[PLANT] <= PLANT_THIRSTY) { case PLANT:
rspeak(DEEP_ROOTS); /* Next guard tests whether plant is tiny or stashed */
return GO_CLEAROBJ; rspeak(game.prop[PLANT] <= PLANT_THIRSTY ? DEEP_ROOTS : YOU_JOKING);
} break;
if (obj == BEAR && game.prop[BEAR] == SITTING_BEAR) { case BEAR:
rspeak(BEAR_CHAINED); rspeak( game.prop[BEAR] == SITTING_BEAR ? BEAR_CHAINED : YOU_JOKING);
return GO_CLEAROBJ; break;
} case CHAIN:
if (obj == CHAIN && game.prop[BEAR] != UNTAMED_BEAR) { rspeak( game.prop[BEAR] != UNTAMED_BEAR ? STILL_LOCKED : YOU_JOKING);
rspeak(STILL_LOCKED); break;
return GO_CLEAROBJ; case RUG:
} rspeak(game.prop[RUG] == RUG_HOVER ? RUG_HOVERS : YOU_JOKING);
if (obj == URN) { break;
case URN:
rspeak(URN_NOBUDGE); rspeak(URN_NOBUDGE);
return GO_CLEAROBJ; break;
} case CAVITY:
if (obj == CAVITY) {
rspeak(DOUGHNUT_HOLES); rspeak(DOUGHNUT_HOLES);
return GO_CLEAROBJ; break;
} case BLOOD:
if (obj == BLOOD) {
rspeak(FEW_DROPS); rspeak(FEW_DROPS);
return GO_CLEAROBJ; break;
} case SIGN:
if (obj == RUG && game.prop[RUG] == RUG_HOVER) {
rspeak(RUG_HOVERS);
return GO_CLEAROBJ;
}
if (obj == SIGN) {
rspeak(HAND_PASSTHROUGH); rspeak(HAND_PASSTHROUGH);
return GO_CLEAROBJ; break;
default:
rspeak(YOU_JOKING);
} }
rspeak(YOU_JOKING);
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
@ -352,14 +347,14 @@ static int vcarry(verb_t verb, obj_t obj)
obj == OIL) { obj == OIL) {
if (!HERE(BOTTLE) || if (!HERE(BOTTLE) ||
LIQUID() != obj) { LIQUID() != obj) {
if (TOTING(BOTTLE)) { if (!TOTING(BOTTLE)) {
if (game.prop[BOTTLE] == EMPTY_BOTTLE) { rspeak(NO_CONTAINER);
return (fill(verb, BOTTLE));
} else if (game.prop[BOTTLE] != EMPTY_BOTTLE)
rspeak(BOTTLE_FULL);
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
rspeak(NO_CONTAINER); if (game.prop[BOTTLE] == EMPTY_BOTTLE) {
return (fill(verb, BOTTLE));
} else
rspeak(BOTTLE_FULL);
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
obj = BOTTLE; obj = BOTTLE;
@ -389,12 +384,16 @@ static int vcarry(verb_t verb, obj_t obj)
} }
if ((obj == BIRD || if ((obj == BIRD ||
obj == CAGE) && obj == CAGE) &&
(game.prop[BIRD] == BIRD_CAGED || STASHED(BIRD) == BIRD_CAGED)) (game.prop[BIRD] == BIRD_CAGED || STASHED(BIRD) == BIRD_CAGED)) {
/* expression maps BIRD to CAGE and CAGE to BIRD */ /* expression maps BIRD to CAGE and CAGE to BIRD */
carry(BIRD + CAGE - obj, game.loc); carry(BIRD + CAGE - obj, game.loc);
}
carry(obj, game.loc); carry(obj, game.loc);
if (obj == BOTTLE && LIQUID() != NO_OBJECT) if (obj == BOTTLE && LIQUID() != NO_OBJECT)
game.place[LIQUID()] = CARRIED; game.place[LIQUID()] = CARRIED;
if (GSTONE(obj) && game.prop[obj] != STATE_FOUND) { if (GSTONE(obj) && game.prop[obj] != STATE_FOUND) {
game.prop[obj] = STATE_FOUND; game.prop[obj] = STATE_FOUND;
game.prop[CAVITY] = CAVITY_EMPTY; game.prop[CAVITY] = CAVITY_EMPTY;