/* Analyse a verb. Remember what it was, go back for object if second word
* unless verb is "say", which snarfs arbitrary second word.
- * FIXME: Takes K and VERB as additional inputs.
*/
-int action(FILE *input, long STARTAT, long obj) {
+int action(FILE *input, long STARTAT, long verb, long obj) {
switch(STARTAT) {
case 4000: goto L4000;
case 4090: goto L4090;
}
BUG(99);
-L4000: VERB=K;
- SPK=ACTSPK[VERB];
- if(WD2 > 0 && VERB != SAY) return(2800);
- if(VERB == SAY)obj=WD2;
+L4000:
+ 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). */
- switch (VERB-1) {
+ switch (verb-1) {
case 0: goto L8010; /* CARRY */
case 1: return(8000); /* DROP */
case 2: return(8000); /* SAY */
/* Analyse a transitive verb. */
-L4090: switch (VERB-1) {
+L4090: switch (verb-1) {
case 0: goto L9010; /* CARRY */
case 1: goto L9020; /* DROP */
case 2: goto L9030; /* SAY */
L5000: obj=K;
if(!HERE(K)) goto L5100;
L5010: if(WD2 > 0) return(2800);
- if(VERB != 0) goto L4090;
+ if(verb != 0) goto L4090;
SETPRM(1,WD1,WD1X);
RSPEAK(255);
return(2600);
L5140: if(obj != ROD || !HERE(ROD2)) goto L5190;
obj=ROD2;
goto L5010;
-L5190: if((VERB == FIND || VERB == INVENT) && WD2 <= 0) goto L5010;
+L5190: if((verb == FIND || verb == INVENT) && WD2 <= 0) goto L5010;
SETPRM(1,WD1,WD1X);
RSPEAK(256);
return(2012);
L9043: K=34+game.prop[GRATE];
game.prop[GRATE]=1;
- if(VERB == LOCK)game.prop[GRATE]=0;
+ if(verb == LOCK)game.prop[GRATE]=0;
K=K+2*game.prop[GRATE];
return(2010);
SPK=124+K;
if(TOTING(obj))SPK=120+K;
if(!TOTING(TRIDNT))SPK=122+K;
- if(VERB == LOCK)SPK=61;
+ if(verb == LOCK)SPK=61;
if(SPK != 124) return(2011);
DSTROY(CLAM);
DROP(OYSTER,game.loc);
return(2011);
/* Chain. */
-L9048: if(VERB == LOCK) goto L9049;
+L9048: if(verb == LOCK) goto L9049;
SPK=171;
if(game.prop[BEAR] == 0)SPK=41;
if(game.prop[CHAIN] == 0)SPK=37;
/* Attack also moved into separate module. */
-L9120: return(attack(input, obj, VERB));
+L9120: return(attack(input, obj, verb));
/* Pour. If no object, or object is bottle, assume contents of bottle.
* special tests for pouring water or oil on plant or rusty door. */
/* Throw moved into separate module. */
-L9170: return(throw(input, obj, VERB));
+L9170: return(throw(input, obj, verb));
/* Quit. Intransitive only. Verify intent and exit if that's what he wants. */
extern void initialise();
extern void score(long);
-extern int action(FILE *, long, long);
+extern int action(FILE *, long, long, long);
void sig_handler(int signo)
{
/* Verb and object analysis moved to separate module. */
-L4000: I=4000; goto Laction;
+L4000: I=4000; VERB=K; goto Laction;
L4090: I=4090; goto Laction;
L5000: I=5000;
Laction:
- switch (action(cmdin, I, obj)) {
+ switch (action(cmdin, I, VERB, obj)) {
case 2: return true;
case 8: goto L8;
case 2000: goto L2000;