static void blast(void)
/* Blast. No effect unless you've got dynamite, which is a neat trick! */
{
- if (game.prop[ROD2] < 0 ||
+ if (game.prop[ROD2] == STATE_NOTFOUND ||
!game.closed)
rspeak(REQUIRES_DYNAMITE);
else {
- game.bonus = VICTORY_MESSAGE;
- if (game.loc == LOC_NE)
- game.bonus = DEFEAT_MESSAGE;
if (HERE(ROD2))
game.bonus = SPLATTER_MESSAGE;
+ else if (game.loc == LOC_NE)
+ game.bonus = DEFEAT_MESSAGE;
+ else
+ game.bonus = VICTORY_MESSAGE;
rspeak(game.bonus);
terminate(endgame);
}
static int vbreak(vocab_t verb, obj_t obj)
/* Break. Only works for mirror in repository and, of course, the vase. */
{
- if (obj == MIRROR) {
+ switch (obj) {
+ case MIRROR:
if (game.closed) {
rspeak(BREAK_MIRROR);
return GO_DWARFWAKE;
} else {
rspeak(TOO_FAR);
- return GO_CLEAROBJ;
+ break;
}
+ case VASE:
+ if (game.prop[VASE] == VASE_WHOLE) {
+ if (TOTING(VASE))
+ drop(VASE, game.loc);
+ state_change(VASE, VASE_BROKEN);
+ game.fixed[VASE] = IS_FIXED;
+ break;
+ }
+ default:
+ speak(actions[verb].message);
}
- if (obj == VASE && game.prop[VASE] == VASE_WHOLE) {
- if (TOTING(VASE))
- drop(VASE, game.loc);
- state_change(VASE, VASE_BROKEN);
- game.fixed[VASE] = IS_FIXED;
- return GO_CLEAROBJ;
- }
- speak(actions[verb].message);
return (GO_CLEAROBJ);
}