}
}
-static int bivalve(token_t verb, token_t obj)
-/* Clam/oyster actions */
-{
- bool is_oyster = (obj == OYSTER);
- if (verb == LOCK) {
- rspeak(HUH_MAN);
- return GO_CLEAROBJ;
- }
- if (!TOTING(TRIDENT)) {
- rspeak(is_oyster ?
- OYSTER_OPENER :
- CLAM_OPENER);
- return GO_CLEAROBJ;
- }
- if (TOTING(obj)) {
- rspeak( is_oyster ?
- DROP_OYSTER :
- DROP_CLAM);
- return GO_CLEAROBJ;
- }
-
- if (!is_oyster) {
- DESTROY(CLAM);
- drop(OYSTER, game.loc);
- drop(PEARL, LOC_CULDESAC);
- }
- rspeak(is_oyster ?
- OYSTER_OPENS :
- PEARL_FALLS);
- return GO_CLEAROBJ;
-}
-
static void blast(void)
/* Blast. No effect unless you've got dynamite, which is a neat trick! */
{
switch (obj) {
case CLAM:
+ if (verb == LOCK)
+ rspeak(HUH_MAN);
+ else if (!TOTING(TRIDENT))
+ rspeak(OYSTER_OPENER);
+ else {
+ DESTROY(CLAM);
+ drop(OYSTER, game.loc);
+ drop(PEARL, LOC_CULDESAC);
+ rspeak(PEARL_FALLS);
+ }
+ return GO_CLEAROBJ;
case OYSTER:
- return bivalve(verb, obj);
+ if (verb == LOCK)
+ rspeak(HUH_MAN);
+ else
+ rspeak(OYSTER_OPENER);
+
+ return GO_CLEAROBJ;
case DOOR:
rspeak((game.prop[DOOR] == DOOR_UNRUSTED) ? OK_MAN : RUSTY_DOOR);
break;
rspeak(NOTHING_HAPPENS);
return GO_CLEAROBJ;
} else {
- /* FIXME: Arithmetic on state numbers */
- pspeak(RESER, look, game.prop[RESER] + 1, true);
- game.prop[RESER] = 1 - game.prop[RESER];
+ state_change(RESER,
+ game.prop[RESER] == WATERS_PARTED ? WATERS_UNPARTED : WATERS_PARTED);
if (AT(RESER))
return GO_CLEAROBJ;
else {