-/* ANALYSE A VERB. REMEMBER WHAT IT WAS, GO BACK FOR OBJECT IF SECOND WORD
- * UNLESS VERB IS "SAY", WHICH SNARFS ARBITRARY SECOND WORD. */
-
-int action(long STARTAT) {
- switch(STARTAT) {
- case 4000: goto L4000;
- case 4090: goto L4090;
- case 5000: goto L5000;
- }
- BUG(99);
-
-L4000: VERB=K;
- SPK=ACTSPK[VERB];
- if(WD2 > 0 && VERB != SAY) return(2800);
- if(VERB == SAY)OBJ=WD2;
- if(OBJ > 0) goto L4090;
-
-/* ANALYSE AN INTRANSITIVE VERB (IE, NO OBJECT GIVEN YET). */
-
-L4080: switch (VERB-1) { case 0: goto L8010; case 1: return(8000); case 2:
- return(8000); case 3: goto L8040; case 4: return(2009); case 5: goto L8040;
- case 6: goto L8070; case 7: goto L8080; case 8: return(8000); case
- 9: return(8000); case 10: return(2011); case 11: goto L9120; case 12:
- goto L9130; case 13: goto L8140; case 14: goto L9150; case 15:
- return(8000); case 16: return(8000); case 17: goto L8180; case 18:
- return(8000); case 19: goto L8200; case 20: return(8000); case 21:
- goto L9220; case 22: goto L9230; case 23: goto L8240; case 24:
- goto L8250; case 25: goto L8260; case 26: goto L8270; case 27:
- return(8000); case 28: return(8000); case 29: goto L8300; case 30:
- goto L8310; case 31: goto L8320; case 32: goto L8330; case 33:
- goto L8340; }
-/* TAKE DROP SAY OPEN NOTH LOCK ON OFF WAVE CALM
- * WALK KILL POUR EAT DRNK RUB TOSS QUIT FIND INVN
- * FEED FILL BLST SCOR FOO BRF READ BREK WAKE SUSP
- * RESU FLY LSTN ZZZZ */
- BUG(23);
-
-/* ANALYSE A TRANSITIVE VERB. */
-
-L4090: switch (VERB-1) { case 0: goto L9010; case 1: goto L9020; case 2: goto
- L9030; case 3: goto L9040; case 4: return(2009); case 5: goto L9040;
- case 6: goto L9070; case 7: goto L9080; case 8: goto L9090; case
- 9: return(2011); case 10: return(2011); case 11: goto L9120; case 12:
- goto L9130; case 13: goto L9140; case 14: goto L9150; case 15:
- goto L9160; case 16: goto L9170; case 17: return(2011); case 18:
- goto L9190; case 19: goto L9190; case 20: goto L9210; case 21:
- goto L9220; case 22: goto L9230; case 23: return(2011); case 24:
- return(2011); case 25: return(2011); case 26: goto L9270; case 27:
- goto L9280; case 28: goto L9290; case 29: return(2011); case 30:
- return(2011); case 31: goto L9320; case 32: return(2011); case 33:
- goto L8340; }
-/* TAKE DROP SAY OPEN NOTH LOCK ON OFF WAVE CALM
- * WALK KILL POUR EAT DRNK RUB TOSS QUIT FIND INVN
- * FEED FILL BLST SCOR FOO BRF READ BREK WAKE SUSP
- * RESU FLY LSTN ZZZZ */
- BUG(24);
-
-/* ANALYSE AN OBJECT WORD. SEE IF THE THING IS HERE, WHETHER WE'VE GOT A VERB
- * YET, AND SO ON. OBJECT MUST BE HERE UNLESS VERB IS "FIND" OR "INVENT(ORY)"
- * (AND NO NEW VERB YET TO BE ANALYSED). WATER AND OIL ARE ALSO FUNNY, SINCE
- * THEY ARE NEVER ACTUALLY DROPPED AT ANY LOCATION, BUT MIGHT BE HERE INSIDE
- * THE BOTTLE OR URN OR AS A FEATURE OF THE LOCATION. */
-
-L5000: OBJ=K;
- if(!HERE(K)) goto L5100;
-L5010: if(WD2 > 0) return(2800);
- if(VERB != 0) goto L4090;
- SETPRM(1,WD1,WD1X);
- RSPEAK(255);
- return(2600);
-
-L5100: if(K != GRATE) goto L5110;
- if(LOC == 1 || LOC == 4 || LOC == 7)K=DPRSSN;
- if(LOC > 9 && LOC < 15)K=ENTRNC;
- if(K != GRATE) return(8);
-L5110: if(K == DWARF && ATDWRF(LOC) > 0) goto L5010;
- if((LIQ(0) == K && HERE(BOTTLE)) || K == LIQLOC(LOC)) goto L5010;
- if(OBJ != OIL || !HERE(URN) || PROP[URN] == 0) goto L5120;
- OBJ=URN;
- goto L5010;
-L5120: if(OBJ != PLANT || !AT(PLANT2) || PROP[PLANT2] == 0) goto L5130;
- OBJ=PLANT2;
- goto L5010;
-L5130: if(OBJ != KNIFE || KNFLOC != LOC) goto L5140;
- KNFLOC= -1;
- SPK=116;
- return(2011);
-L5140: if(OBJ != ROD || !HERE(ROD2)) goto L5190;
- OBJ=ROD2;
- goto L5010;
-L5190: if((VERB == FIND || VERB == INVENT) && WD2 <= 0) goto L5010;
- SETPRM(1,WD1,WD1X);
- RSPEAK(256);
- return(2012);
-
-
-
-
-/* ROUTINES FOR PERFORMING THE VARIOUS ACTION VERBS */
-
-/* STATEMENT NUMBERS IN THIS SECTION ARE 8000 FOR INTRANSITIVE VERBS, 9000 FOR
- * TRANSITIVE, PLUS TEN TIMES THE VERB NUMBER. MANY INTRANSITIVE VERBS USE THE
- * TRANSITIVE CODE, AND SOME VERBS USE CODE FOR OTHER VERBS, AS NOTED BELOW. */
-
-/* CARRY, NO OBJECT GIVEN YET. OK IF ONLY ONE OBJECT PRESENT. */
-
-L8010: if(ATLOC[LOC] == 0 || LINK[ATLOC[LOC]] != 0 || ATDWRF(LOC) > 0) return(8000);
- OBJ=ATLOC[LOC];