-
-/* Lock, unlock, no object given. Assume various things if present. */
-
-L8040: SPK=28;
- if(HERE(CLAM))obj=CLAM;
- if(HERE(OYSTER))obj=OYSTER;
- if(AT(DOOR))obj=DOOR;
- if(AT(GRATE))obj=GRATE;
- if(obj != 0 && HERE(CHAIN)) return(8000);
- if(HERE(CHAIN))obj=CHAIN;
- if(obj == 0) return(2011);
-
-/* Lock, unlock object. Special stuff for opening clam/oyster and for chain. */
-
-L9040: if(obj == CLAM || obj == OYSTER) goto L9046;
- if(obj == DOOR)SPK=111;
- if(obj == DOOR && game.prop[DOOR] == 1)SPK=54;
- if(obj == CAGE)SPK=32;
- if(obj == KEYS)SPK=55;
- if(obj == GRATE || obj == CHAIN)SPK=31;
- if(SPK != 31 || !HERE(KEYS)) return(2011);
- if(obj == CHAIN) goto L9048;
- if (game.closng) {
- K=130;
- if(!game.panic)game.clock2=15;
- game.panic=true;
- return(2010);
- }
- K=34+game.prop[GRATE];
- game.prop[GRATE]=1;
- if(verb == LOCK)game.prop[GRATE]=0;
- K=K+2*game.prop[GRATE];
- return(2010);
-
-/* Clam/Oyster. */
-L9046: return bivalve(verb, obj);
-
-/* Chain. */
-L9048: return chain(verb);
-
-/* Light. Applicable only to lamp and urn. */
-
-L8070: if(HERE(LAMP) && game.prop[LAMP] == 0 && game.limit >= 0)obj=LAMP;
- if(HERE(URN) && game.prop[URN] == 1)obj=obj*NOBJECTS+URN;
- if(obj == 0 || obj > NOBJECTS) return(8000);
-
-L9070: if(obj == URN) goto L9073;
- if(obj != LAMP) return(2011);
- SPK=184;
- if(game.limit < 0) return(2011);
- game.prop[LAMP]=1;
- RSPEAK(39);
- if(game.wzdark) return(2000);
- return(2012);
-
-L9073: SPK=38;
- if(game.prop[URN] == 0) return(2011);
- SPK=209;
- game.prop[URN]=2;
- return(2011);
-
-/* Extinguish. Lamp, urn, dragon/volcano (nice try). */
-
-L8080: if(HERE(LAMP) && game.prop[LAMP] == 1)obj=LAMP;
- if(HERE(URN) && game.prop[URN] == 2)obj=obj*NOBJECTS+URN;
- if(obj == 0 || obj > NOBJECTS) return(8000);
-
+L8040: return lock(verb, INTRANSITIVE);
+L9040: return lock(verb, obj);
+L9046: return bivalve(verb, obj);
+L9048: return chain(verb);
+L8070: return light(INTRANSITIVE);
+L9070: return light(obj);
+L8080: return extinguish(INTRANSITIVE);