Unspk'd chain action

This commit is contained in:
NHOrus 2017-07-04 15:16:36 +03:00
parent 469a0e74ed
commit 85f918f9c0

View file

@ -395,39 +395,47 @@ static int vcarry(token_t verb, token_t obj)
static int chain(token_t verb) static int chain(token_t verb)
/* Do something to the bear's chain */ /* Do something to the bear's chain */
{ {
int spk;
if (verb != LOCK) { if (verb != LOCK) {
spk = CHAIN_UNLOCKED; if (game.prop[BEAR] == UNTAMED_BEAR) {
if (game.prop[BEAR] == UNTAMED_BEAR) rspeak(BEAR_BLOCKS);
spk = BEAR_BLOCKS; return GO_CLEAROBJ;
if (game.prop[CHAIN] == CHAIN_HEAP) }
spk = ALREADY_UNLOCKED; if (game.prop[CHAIN] == CHAIN_HEAP) {
if (spk != CHAIN_UNLOCKED) { rspeak(ALREADY_UNLOCKED);
rspeak(spk);
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
game.prop[CHAIN] = CHAIN_HEAP; game.prop[CHAIN] = CHAIN_HEAP;
game.fixed[CHAIN] = CHAIN_HEAP; game.fixed[CHAIN] = CHAIN_HEAP;
if (game.prop[BEAR] != BEAR_DEAD) if (game.prop[BEAR] != BEAR_DEAD)
game.prop[BEAR] = CONTENTED_BEAR; game.prop[BEAR] = CONTENTED_BEAR;
/* FIXME: Arithmetic on state numbers */
game.fixed[BEAR] = 2 - game.prop[BEAR]; switch (game.prop[BEAR]) {
} else { case BEAR_DEAD:
spk = CHAIN_LOCKED; game.fixed[BEAR] = -1;
if (game.prop[CHAIN] != CHAIN_HEAP) break;
spk = ALREADY_LOCKED; default:
if (game.loc != objects[CHAIN].plac) game.fixed[BEAR] = 0;
spk = NO_LOCKSITE;
if (spk != CHAIN_LOCKED) {
rspeak(spk);
return GO_CLEAROBJ;
} }
game.prop[CHAIN] = CHAIN_FIXED; rspeak(CHAIN_UNLOCKED);
if (TOTING(CHAIN)) return GO_CLEAROBJ;
drop(CHAIN, game.loc);
game.fixed[CHAIN] = -1;
} }
rspeak(spk);
if (game.prop[CHAIN] != CHAIN_HEAP) {
rspeak(ALREADY_LOCKED);
return GO_CLEAROBJ;
}
if (game.loc != objects[CHAIN].plac) {
rspeak(NO_LOCKSITE);
return GO_CLEAROBJ;
}
game.prop[CHAIN] = CHAIN_FIXED;
if (TOTING(CHAIN))
drop(CHAIN, game.loc);
game.fixed[CHAIN] = -1;
rspeak(CHAIN_LOCKED);
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }