X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=actions1.c;h=791e0c2addc4c55a3f09bb352b853ffb8835caaa;hp=55413be36ea0ead8c13d010be8072d089eeecab6;hb=43aef9ceb16d0e2821c5ee81ea9d7c2f7ace84bb;hpb=18767d52dd053cf6c851ded2597697674ca255c1 diff --git a/actions1.c b/actions1.c index 55413be..791e0c2 100644 --- a/actions1.c +++ b/actions1.c @@ -1,9 +1,8 @@ #include #include -#include "misc.h" -#include "main.h" -#include "share.h" +#include "advent.h" #include "funcs.h" +#include "database.h" /* This stuff was broken off as part of an effort to get the main program * to compile without running out of memory. We're called with a number @@ -11,10 +10,10 @@ * similar label number for the caller to "goto". */ -/* Analyse a verb. remember what it was, go back for object if second word +/* 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) { +int action(FILE *input, long STARTAT) { switch(STARTAT) { case 4000: goto L4000; case 4090: goto L4090; @@ -30,42 +29,82 @@ L4000: VERB=K; /* 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 */ + switch (VERB-1) { + case 0: goto L8010; /* CARRY */ + case 1: return(8000); /* DROP */ + case 2: return(8000); /* SAY */ + case 3: goto L8040; /* UNLOC */ + case 4: return(2009); /* NOTHI */ + case 5: goto L8040; /* LOCK */ + case 6: goto L8070; /* LIGHT */ + case 7: goto L8080; /* EXTIN */ + case 8: return(8000); /* WAVE */ + case 9: return(8000); /* CALM */ + case 10: return(2011); /* WALK */ + case 11: goto L9120; /* ATTAC */ + case 12: goto L9130; /* POUR */ + case 13: goto L8140; /* EAT */ + case 14: goto L9150; /* DRINK */ + case 15: return(8000); /* RUB */ + case 16: return(8000); /* TOSS */ + case 17: goto L8180; /* QUIT */ + case 18: return(8000); /* FIND */ + case 19: goto L8200; /* INVEN */ + case 20: return(8000); /* FEED */ + case 21: goto L9220; /* FILL */ + case 22: goto L9230; /* BLAST */ + case 23: goto L8240; /* SCOR */ + case 24: goto L8250; /* FOO */ + case 25: goto L8260; /* BRIEF */ + case 26: goto L8270; /* READ */ + case 27: return(8000); /* BREAK */ + case 28: return(8000); /* WAKE */ + case 29: goto L8300; /* SUSP */ + case 30: goto L8310; /* RESU */ + case 31: goto L8320; /* FLY */ + case 32: goto L8330; /* LISTEN */ + case 33: goto L8340; /* 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 */ +L4090: switch (VERB-1) { + case 0: goto L9010; /* CARRY */ + case 1: goto L9020; /* DROP */ + case 2: goto L9030; /* SAY */ + case 3: goto L9040; /* UNLOC */ + case 4: return(2009); /* NOTHI */ + case 5: goto L9040; /* LOCK */ + case 6: goto L9070; /* LIGHT */ + case 7: goto L9080; /* EXTI */ + case 8: goto L9090; /* WAVE */ + case 9: return(2011); /* CALM */ + case 10: return(2011); /* WALK */ + case 11: goto L9120; /* ATTAC */ + case 12: goto L9130; /* POUR */ + case 13: goto L9140; /* EAT */ + case 14: goto L9150; /* DRINK */ + case 15: goto L9160; /* RUB */ + case 16: goto L9170; /* TOSS */ + case 17: return(2011); /* QUIT */ + case 18: goto L9190; /* FIND */ + case 19: goto L9190; /* INVEN */ + case 20: goto L9210; /* FEED */ + case 21: goto L9220; /* FILL */ + case 22: goto L9230; /* BLAST */ + case 23: return(2011); /* SCOR */ + case 24: return(2011); /* FOO */ + case 25: return(2011); /* BRIEF */ + case 26: goto L9270; /* READ */ + case 27: goto L9280; /* BREAK */ + case 28: goto L9290; /* WAKE */ + case 29: return(2011); /* SUSP */ + case 30: return(2011); /* RESU */ + case 31: goto L9320; /* FLY */ + case 32: return(2011); /* LISTEN */ + case 33: goto L8340; /* ZZZZ */ + } BUG(24); /* Analyse an object word. See if the thing is here, whether we've got a verb @@ -112,7 +151,7 @@ L5190: if((VERB == FIND || VERB == INVENT) && WD2 <= 0) goto L5010; /* 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, 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. */ @@ -269,7 +308,7 @@ L9094: DROP(JADE,LOC); /* Attack also moved into separate module. */ -L9120: return(attack()); +L9120: return(attack(input)); /* Pour. If no object, or object is bottle, assume contents of bottle. * special tests for pouring water or oil on plant or rusty door. */ @@ -302,7 +341,7 @@ L9132: PROP[DOOR]=0; L9134: OBJ=URN; goto L9220; -/* Eat. Intransitive: assume food if present, else ask what. transitive: food +/* Eat. Intransitive: assume food if present, else ask what. Transitive: food * ok, some things lose appetite, rest are ridiculous. */ L8140: if(!HERE(FOOD)) return(8000); @@ -316,7 +355,7 @@ L9140: if(OBJ == FOOD) goto L8142; OGRE)SPK=71; return(2011); -/* Drink. If no object, assume water and look for it here. if water is in +/* Drink. If no object, assume water and look for it here. If water is in * the bottle, drink that, else must be at a water loc, so drink stream. */ L9150: if(OBJ == 0 && LIQLOC(LOC) != WATER && (LIQ(0) != WATER || !HERE(BOTTLE))) @@ -349,11 +388,11 @@ L9160: if(OBJ != LAMP)SPK=76; /* Throw moved into separate module. */ -L9170: return(throw()); +L9170: return(throw(input)); -/* Quit. Intransitive only. verify intent and exit if that's what he wants. */ +/* Quit. Intransitive only. Verify intent and exit if that's what he wants. */ -L8180: if(YES(22,54,54)) score(1); +L8180: if(YES(input,22,54,54)) score(1); return(2012); /* Find. Might be carrying it, or it might be here. Else give caveat. */ @@ -435,8 +474,8 @@ L8260: SPK=156; /* Read. Print stuff based on objtxt. Oyster (?) is special case. */ -L8270: /* 8275 */ for (I=1; I<=100; I++) { -L8275: if(HERE(I) && OBJTXT[I] != 0 && PROP[I] >= 0)OBJ=OBJ*100+I; +L8270: for (I=1; I<=100; I++) { + if(HERE(I) && OBJTXT[I] != 0 && PROP[I] >= 0)OBJ=OBJ*100+I; } /* end loop */ if(OBJ > 100 || OBJ == 0 || DARK(0)) return(8000); @@ -446,7 +485,7 @@ L9270: if(DARK(0)) goto L5190; PSPEAK(OBJ,OBJTXT[OBJ]+PROP[OBJ]); return(2012); -L9275: CLSHNT=YES(192,193,54); +L9275: CLSHNT=YES(input,192,193,54); return(2012); /* Break. Only works for mirror in repository and, of course, the vase. */ @@ -475,14 +514,14 @@ L9290: if(OBJ != DWARF || !CLOSED) return(2011); L8300: SPK=201; RSPEAK(260); - if(!YES(200,54,54)) return(2012); + if(!YES(input,200,54,54)) return(2012); SAVED=SAVED+5; KK= -1; -/* This next part is shared with the "resume" code. the two cases are +/* This next part is shared with the "resume" code. The two cases are * distinguished by the value of kk (-1 for suspend, +1 for resume). */ -L8305: DATIME(I,K); +L8305: DATIME(&I,&K); K=I+650*K; SAVWRD(KK,K); K=VRSION; @@ -491,8 +530,8 @@ L8305: DATIME(I,K); /* Herewith are all the variables whose values can change during a game, * omitting a few (such as I, J, ATTACK) whose values between turns are * irrelevant and some whose values when a game is - * suspended or resumed are guaranteed to match. if unsure whether a value - * needs to be saved, include it. overkill can't hurt. pad the last savwds + * suspended or resumed are guaranteed to match. If unsure whether a value + * needs to be saved, include it. Overkill can't hurt. Pad the last savwds * with junk variables to bring it up to 7 values. */ SAVWDS(ABBNUM,BLKLIN,BONUS,CLOCK1,CLOCK2,CLOSED,CLOSNG); SAVWDS(DETAIL,DFLAG,DKILL,DTOTAL,FOOBAR,HOLDNG,IWEST); @@ -515,7 +554,7 @@ L8305: DATIME(I,K); SAVWRD(KK,K); if(K != 0) goto L8318; K=NUL; - ZZWORD=RNDVOC(3,ZZWORD-MESH*2)+MESH*2; + ZZWORD=RNDVOC(3,ZZWORD); if(KK > 0) return(8); RSPEAK(266); exit(0); @@ -525,7 +564,7 @@ L8305: DATIME(I,K); L8310: KK=1; if(LOC == 1 && ABB[1] == 1) goto L8305; RSPEAK(268); - if(!YES(200,54,54)) return(2012); + if(!YES(input,200,54,54)) return(2012); goto L8305; L8312: SETPRM(1,K/10,MOD(K,10)); @@ -562,7 +601,7 @@ L8330: SPK=228; RSPEAK(IABS(K)); if(K < 0) return(2012); SPK=0; -L8332: SETPRM(1,ZZWORD-MESH*2,0); +L8332: SETPRM(1,ZZWORD,0); /* 8335 */ for (I=1; I<=100; I++) { if(!HERE(I) || OBJSND[I] == 0 || PROP[I] < 0) goto L8335; PSPEAK(I,OBJSND[I]+PROP[I]);