X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=actions1.c;h=1f337155361f4bad3fc6b238634545959e83029b;hb=ee20cd086108d4e67ca76fbf32c0f258bd33c419;hp=e9da84e7dbf66ac5314ea77b373334f95ac535a7;hpb=1ca74bfc3992e1212e9d58579c434259025e9dba;p=open-adventure.git diff --git a/actions1.c b/actions1.c index e9da84e..1f33715 100644 --- a/actions1.c +++ b/actions1.c @@ -8,7 +8,25 @@ * that calls these. Absolutely nothing like the original FORTRAN */ -static int chain(int verb) +static int bivalve(token_t verb, token_t obj) +/* Clam/oyster actions */ +{ + int k=0; + if(obj == OYSTER)k=1; + SPK=124+k; + if(TOTING(obj))SPK=120+k; + if(!TOTING(TRIDNT))SPK=122+k; + if(verb == LOCK)SPK=61; + if(SPK != 124) + return(2011); + DSTROY(CLAM); + DROP(OYSTER,game.loc); + DROP(PEARL,105); + return(2011); +} + +static int chain(token_t verb) +/* Do something to the bear's chain */ { if(verb != LOCK) { SPK=171; @@ -32,6 +50,19 @@ static int chain(int verb) } } +static int find(token_t obj) +/* Find. Might be carrying it, or it might be here. Else give caveat. */ +{ + if(AT(obj) || + (LIQ(0) == obj && AT(BOTTLE)) || + K == LIQLOC(game.loc) || + (obj == DWARF && ATDWRF(game.loc) > 0)) + SPK=94; + if(game.closed)SPK=138; + if(TOTING(obj))SPK=24; + return(2011); +} + /* 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 * that says what label the caller wanted to "goto", and we return a @@ -229,30 +260,20 @@ L9040: if(obj == CLAM || obj == OYSTER) goto L9046; if(obj == GRATE || obj == CHAIN)SPK=31; if(SPK != 31 || !HERE(KEYS)) return(2011); if(obj == CHAIN) goto L9048; - if(!game.closng) goto L9043; - K=130; - if(!game.panic)game.clock2=15; - game.panic=true; - return(2010); - -L9043: K=34+game.prop[GRATE]; + 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: K=0; - if(obj == OYSTER)K=1; - SPK=124+K; - if(TOTING(obj))SPK=120+K; - if(!TOTING(TRIDNT))SPK=122+K; - if(verb == LOCK)SPK=61; - if(SPK != 124) return(2011); - DSTROY(CLAM); - DROP(OYSTER,game.loc); - DROP(PEARL,105); - return(2011); +L9046: return bivalve(verb, obj); /* Chain. */ L9048: return chain(verb); @@ -320,7 +341,7 @@ L9094: DROP(JADE,game.loc); /* Attack also moved into separate module. */ -L9120: return(attack(input, obj, verb)); +L9120: return(attack(input, verb, obj)); /* Pour. If no object, or object is bottle, assume contents of bottle. * special tests for pouring water or oil on plant or rusty door. */ @@ -396,24 +417,17 @@ L9160: if(obj != LAMP)SPK=76; game.tally=game.tally-1; DROP(CAVITY,game.loc); SPK=216; - return(2011); - -/* Throw moved into separate module. */ + return(2011); -L9170: return(throw(input, obj, verb)); +L9170: return(throw(input, verb, obj)); /* Quit. Intransitive only. Verify intent and exit if that's what he wants. */ L8180: if(YES(input,22,54,54)) score(1); return(2012); -/* Find. Might be carrying it, or it might be here. Else give caveat. */ -L9190: if(AT(obj) || (LIQ(0) == obj && AT(BOTTLE)) || K == LIQLOC(game.loc) || (obj == - DWARF && ATDWRF(game.loc) > 0))SPK=94; - if(game.closed)SPK=138; - if(TOTING(obj))SPK=24; - return(2011); +L9190: return find(obj); /* Inventory. If object, treat same as find. Else report on current burden. */