Annotation of 43BSD/games/adventure/subr.c, revision 1.1

1.1     ! root        1: #
        !             2: /*      Re-coding of advent in C: subroutines from main                 */
        !             3: 
        !             4: static char sccsid[] = "       subr.c  4.1     82/05/11        ";
        !             5: 
        !             6: # include "hdr.h"
        !             7: 
        !             8: /*              Statement functions     */
        !             9: toting(objj)
        !            10: int objj;
        !            11: {       if (place[objj] == -1) return(TRUE);
        !            12:        else return(FALSE);
        !            13: }
        !            14: 
        !            15: here(objj)
        !            16: int objj;
        !            17: {       if (place[objj]==loc || toting(objj)) return(TRUE);
        !            18:        else return(FALSE);
        !            19: }
        !            20: 
        !            21: at(objj)
        !            22: int objj;
        !            23: {       if (place[objj]==loc || fixed[objj]==loc) return(TRUE);
        !            24:        else return (FALSE);
        !            25: }
        !            26: 
        !            27: liq2(pbotl)
        !            28: int pbotl;
        !            29: {       return((1-pbotl)*water+(pbotl/2)*(water+oil));
        !            30: }
        !            31: 
        !            32: liq(foo)
        !            33: {       register int i;
        !            34:        i=prop[bottle];
        !            35:        if (i>-1-i) return(liq2(i));
        !            36:        else return(liq2(-1-i));
        !            37: }
        !            38: 
        !            39: liqloc(locc)     /* may want to clean this one up a bit */
        !            40: int locc;
        !            41: {       register int i,j,l;
        !            42:        i=cond[locc]/2;
        !            43:        j=((i*2)%8)-5;
        !            44:        l=cond[locc]/4;
        !            45:        l=l%2;
        !            46:        return(liq2(j*l+1));
        !            47: }
        !            48: 
        !            49: bitset(l,n)
        !            50: int l,n;
        !            51: {       if (cond[l] & setbit[n]) return(TRUE);
        !            52:        return(FALSE);
        !            53: }
        !            54: 
        !            55: forced(locc)
        !            56: int locc;
        !            57: {       if (cond[locc]==2) return(TRUE);
        !            58:        return(FALSE);
        !            59: }
        !            60: 
        !            61: dark(foo)
        !            62: {       if ((cond[loc]%2)==0 && (prop[lamp]==0 || !here(lamp)))
        !            63:                return(TRUE);
        !            64:        return(FALSE);
        !            65: }
        !            66: 
        !            67: pct(n)
        !            68: int n;
        !            69: {       if (ran(100)<n) return(TRUE);
        !            70:        return(FALSE);
        !            71: }
        !            72: 
        !            73: 
        !            74: fdwarf()               /* 71 */
        !            75: {      register int i,j;
        !            76:        register struct travlist *kk;
        !            77: 
        !            78:        if (newloc!=loc&&!forced(loc)&&!bitset(loc,3))
        !            79:        {       for (i=1; i<=5; i++)
        !            80:                {       if (odloc[i]!=newloc||!dseen[i]) continue;
        !            81:                        newloc=loc;
        !            82:                        rspeak(2);
        !            83:                        break;
        !            84:                }
        !            85:        }
        !            86:        loc=newloc;                     /* 74 */
        !            87:        if (loc==0||forced(loc)||bitset(newloc,3)) return(2000);
        !            88:        if (dflag==0)
        !            89:        {       if (loc>=15) dflag=1;
        !            90:                return(2000);
        !            91:        }
        !            92:        if (dflag==1)           /* 6000 */
        !            93:        {       if (loc<15||pct(95)) return(2000);
        !            94:                dflag=2;
        !            95:                for (i=1; i<=2; i++)
        !            96:                {       j=1+ran(5);
        !            97:                        if (pct(50)&&saved== -1) dloc[j]=0; /* 6001 */
        !            98:                }
        !            99:                for (i=1; i<=5; i++)
        !           100:                {       if (dloc[i]==loc) dloc[i]=daltlc;
        !           101:                        odloc[i]=dloc[i];               /* 6002 */
        !           102:                }
        !           103:                rspeak(3);
        !           104:                drop(axe,loc);
        !           105:                return(2000);
        !           106:        }
        !           107:        dtotal=attack=stick=0;                  /* 6010 */
        !           108:        for (i=1; i<=6; i++)                    /* loop to 6030 */
        !           109:        {       if (dloc[i]==0) continue;
        !           110:                j=1;
        !           111:                for (kk=travel[dloc[i]]; kk!=0; kk=kk->next)
        !           112:                {       newloc=kk->tloc;
        !           113:                        if (newloc>300||newloc<15||newloc==odloc[i]
        !           114:                            ||(j>1&&newloc==tk[j-1])||j>=20
        !           115:                            ||newloc==dloc[i]||forced(newloc)
        !           116:                            ||(i==6&&bitset(newloc,3))
        !           117:                            ||kk->conditions==100) continue;
        !           118:                        tk[j++]=newloc;
        !           119:                }
        !           120:                tk[j]=odloc[i];                 /* 6016 */
        !           121:                if (j>=2) j--;
        !           122:                j=1+ran(j);
        !           123:                odloc[i]=dloc[i];
        !           124:                dloc[i]=tk[j];
        !           125:                dseen[i]=(dseen[i]&&loc>=15)||(dloc[i]==loc||odloc[i]==loc);
        !           126:                if (!dseen[i]) continue;        /* i.e. goto 6030 */
        !           127:                dloc[i]=loc;
        !           128:                if (i==6)                       /* pirate's spotted him */
        !           129:                {       if (loc==chloc||prop[chest]>=0) continue;
        !           130:                        k=0;
        !           131:                        for (j=50; j<=maxtrs; j++)      /* loop to 6020 */
        !           132:                        {       if (j==pyram&&(loc==plac[pyram]
        !           133:                                     || loc==plac[emrald])) goto l6020;
        !           134:                                if (toting(j)) goto l6022;
        !           135:                        l6020:  if (here(j)) k=1;
        !           136:                        }                               /* 6020 */
        !           137:                        if (tally==tally2+1 && k==0 && place[chest]==0
        !           138:                            &&here(lamp) && prop[lamp]==1) goto l6025;
        !           139:                        if (odloc[6]!=dloc[6]&&pct(20))
        !           140:                                rspeak(127);
        !           141:                        continue;       /* to 6030 */
        !           142:                l6022:  rspeak(128);
        !           143:                        if (place[messag]==0) move(chest,chloc);
        !           144:                        move(messag,chloc2);
        !           145:                        for (j=50; j<=maxtrs; j++)      /* loop to 6023 */
        !           146:                        {       if (j==pyram && (loc==plac[pyram]
        !           147:                                    || loc==plac[emrald])) continue;
        !           148:                                if (at(j)&&fixed[j]==0) carry(j,loc);
        !           149:                                if (toting(j)) drop(j,chloc);
        !           150:                        }
        !           151:                l6024:  dloc[6]=odloc[6]=chloc;
        !           152:                        dseen[6]=FALSE;
        !           153:                        continue;
        !           154:                l6025:  rspeak(186);
        !           155:                        move(chest,chloc);
        !           156:                        move(messag,chloc2);
        !           157:                        goto l6024;
        !           158:                }
        !           159:                dtotal++;                       /* 6027 */
        !           160:                if (odloc[i]!=dloc[i]) continue;
        !           161:                attack++;
        !           162:                if (knfloc>=0) knfloc=loc;
        !           163:                if (ran(1000)<95*(dflag-2)) stick++;
        !           164:        }                                       /* 6030 */
        !           165:        if (dtotal==0) return(2000);
        !           166:        if (dtotal!=1)
        !           167:        {       printf("There are %d threatening little dwarves ",dtotal);
        !           168:                printf("in the room with you.\n");
        !           169:        }
        !           170:        else rspeak(4);
        !           171:        if (attack==0) return(2000);
        !           172:        if (dflag==2) dflag=3;
        !           173:        if (saved!= -1) dflag=20;
        !           174:        if (attack!=1)
        !           175:        {       printf("%d of them throw knives at you!\n",attack);
        !           176:                k=6;
        !           177:        l82:    if (stick<=1)                   /* 82 */
        !           178:                {       rspeak(k+stick);
        !           179:                        if (stick==0) return(2000);
        !           180:                }
        !           181:                else
        !           182:                        printf("%d of them get you!\n",stick);  /* 83 */
        !           183:                oldlc2=loc;
        !           184:                return(99);
        !           185:        }
        !           186:        rspeak(5);
        !           187:        k=52;
        !           188:        goto l82;
        !           189: }
        !           190: 
        !           191: 
        !           192: march()                                        /* label 8              */
        !           193: {       register int ll1,ll2;
        !           194: 
        !           195:        if ((tkk=travel[newloc=loc])==0) bug(26);
        !           196:        if (k==null) return(2);
        !           197:        if (k==cave)                            /* 40                   */
        !           198:        {       if (loc<8) rspeak(57);
        !           199:                if (loc>=8) rspeak(58);
        !           200:                return(2);
        !           201:        }
        !           202:        if (k==look)                            /* 30                   */
        !           203:        {       if (detail++<3) rspeak(15);
        !           204:                wzdark=FALSE;
        !           205:                abb[loc]=0;
        !           206:                return(2);
        !           207:        }
        !           208:        if (k==back)                            /* 20                   */
        !           209:        {       switch(mback())
        !           210:                {       case 2: return(2);
        !           211:                        case 9: goto l9;
        !           212:                        default: bug(100);
        !           213:                }
        !           214:        }
        !           215:        oldlc2=oldloc;
        !           216:        oldloc=loc;
        !           217: l9:
        !           218:        for (; tkk!=0; tkk=tkk->next)
        !           219:                if (tkk->tverb==1 || tkk->tverb==k) break;
        !           220:        if (tkk==0)
        !           221:        {       badmove();
        !           222:                return(2);
        !           223:        }
        !           224: l11:    ll1=tkk->conditions;                    /* 11                   */
        !           225:        ll2=tkk->tloc;
        !           226:        newloc=ll1;                             /* newloc=conditions    */
        !           227:        k=newloc%100;                           /* k used for prob      */
        !           228:        if (newloc<=300)
        !           229:        {       if (newloc<=100)                /* 13                   */
        !           230:                {       if (newloc!=0&&!pct(newloc)) goto l12;  /* 14   */
        !           231:                l16:    newloc=ll2;             /* newloc=location      */
        !           232:                        if (newloc<=300) return(2);
        !           233:                        if (newloc<=500)
        !           234:                                switch(specials())/* to 30000           */
        !           235:                                {   case 2: return(2);
        !           236:                                    case 12: goto l12;
        !           237:                                    case 99: return(99);
        !           238:                                    default: bug(101);
        !           239:                                }
        !           240:                        rspeak(newloc-500);
        !           241:                        newloc=loc;
        !           242:                        return(2);
        !           243:                }
        !           244:                if (toting(k)||(newloc>200&&at(k))) goto l16;
        !           245:                goto l12;
        !           246:        }
        !           247:        if (prop[k]!=(newloc/100)-3) goto l16;  /* newloc still conditions*/
        !           248: l12:    /* alternative to probability move      */
        !           249:        for (; tkk!=0; tkk=tkk->next)
        !           250:                if (tkk->tloc!=ll2 || tkk->conditions!=ll1) break;
        !           251:        if (tkk==0) bug(25);
        !           252:        goto l11;
        !           253: }
        !           254: 
        !           255: 
        !           256: 
        !           257: mback()                                         /* 20                   */
        !           258: {       register struct travlist *tk2,*j;
        !           259:        register int ll;
        !           260:        if (forced(k=oldloc)) k=oldlc2;         /* k=location           */
        !           261:        oldlc2=oldloc;
        !           262:        oldloc=loc;
        !           263:        tk2=0;
        !           264:        if (k==loc)
        !           265:        {       rspeak(91);
        !           266:                return(2);
        !           267:        }
        !           268:        for (; tkk!=0; tkk=tkk->next)           /* 21                   */
        !           269:        {       ll=tkk->tloc;
        !           270:                if (ll==k)
        !           271:                {       k=tkk->tverb;           /* k back to verb       */
        !           272:                        tkk=travel[loc];
        !           273:                        return(9);
        !           274:                }
        !           275:                if (ll<=300)
        !           276:                {       j=travel[loc];
        !           277:                        if (forced(ll) && k==j->tloc) tk2=tkk;
        !           278:                }
        !           279:        }
        !           280:        tkk=tk2;                                /* 23                   */
        !           281:        if (tkk!=0)
        !           282:        {       k=tkk->tverb;
        !           283:                tkk=travel[loc];
        !           284:                return(9);
        !           285:        }
        !           286:        rspeak(140);
        !           287:        return(2);
        !           288: }
        !           289: 
        !           290: 
        !           291: specials()                                      /* 30000                */
        !           292: {       switch(newloc -= 300)
        !           293:        {   case 1:                             /* 30100                */
        !           294:                newloc = 99+100-loc;
        !           295:                if (holdng==0||(holdng==1&&toting(emrald))) return(2);
        !           296:                newloc=loc;
        !           297:                rspeak(117);
        !           298:                return(2);
        !           299:            case 2:                             /* 30200                */
        !           300:                drop(emrald,loc);
        !           301:                return(12);
        !           302:            case 3:                             /* to 30300             */
        !           303:                return(trbridge());
        !           304:            default: bug(29);
        !           305:        }
        !           306: }
        !           307: 
        !           308: 
        !           309: trbridge()                                      /* 30300                */
        !           310: {       if (prop[troll]==1)
        !           311:        {       pspeak(troll,1);
        !           312:                prop[troll]=0;
        !           313:                move(troll2,0);
        !           314:                move(troll2+100,0);
        !           315:                move(troll,plac[troll]);
        !           316:                move(troll+100,fixd[troll]);
        !           317:                juggle(chasm);
        !           318:                newloc=loc;
        !           319:                return(2);
        !           320:        }
        !           321:        newloc=plac[troll]+fixd[troll]-loc;     /* 30310                */
        !           322:        if (prop[troll]==0) prop[troll]=1;
        !           323:        if (!toting(bear)) return(2);
        !           324:        rspeak(162);
        !           325:        prop[chasm]=1;
        !           326:        prop[troll]=2;
        !           327:        drop(bear,newloc);
        !           328:        fixed[bear] = -1;
        !           329:        prop[bear]=3;
        !           330:        if (prop[spices]<0) tally2++;
        !           331:        oldlc2=newloc;
        !           332:        return(99);
        !           333: }
        !           334: 
        !           335: 
        !           336: badmove()                                       /* 20                   */
        !           337: {       spk=12;
        !           338:        if (k>=43 && k<=50) spk=9;
        !           339:        if (k==29||k==30) spk=9;
        !           340:        if (k==7||k==36||k==37) spk=10;
        !           341:        if (k==11||k==19) spk=11;
        !           342:        if (verb==find||verb==invent) spk=59;
        !           343:        if (k==62||k==65) spk=42;
        !           344:        if (k==17) spk=80;
        !           345:        rspeak(spk);
        !           346:        return(2);
        !           347: }
        !           348: 
        !           349: bug(n)
        !           350: int n;
        !           351: {       printf("Please tell jim@rand-unix that fatal bug %d happened.\n",n);
        !           352:        exit(0);
        !           353: }
        !           354: 
        !           355: 
        !           356: checkhints()                                    /* 2600 &c              */
        !           357: {       register int hint;
        !           358:        for (hint=4; hint<=hntmax; hint++)
        !           359:        {       if (hinted[hint]) continue;
        !           360:                if (!bitset(loc,hint)) hintlc[hint]= -1;
        !           361:                hintlc[hint]++;
        !           362:                if (hintlc[hint]<hints[hint][1]) continue;
        !           363:                switch(hint)
        !           364:                {   case 4:     /* 40400 */
        !           365:                        if (prop[grate]==0&&!here(keys)) goto l40010;
        !           366:                        goto l40020;
        !           367:                    case 5:     /* 40500 */
        !           368:                        if (here(bird)&&toting(rod)&&obj==bird) goto l40010;
        !           369:                        continue;      /* i.e. goto l40030 */
        !           370:                    case 6:     /* 40600 */
        !           371:                        if (here(snake)&&!here(bird)) goto l40010;
        !           372:                        goto l40020;
        !           373:                    case 7:     /* 40700 */
        !           374:                        if (atloc[loc]==0&&atloc[oldloc]==0
        !           375:                            && atloc[oldlc2]==0&&holdng>1) goto l40010;
        !           376:                        goto l40020;
        !           377:                    case 8:     /* 40800 */
        !           378:                        if (prop[emrald]!= -1&&prop[pyram]== -1) goto l40010;
        !           379:                        goto l40020;
        !           380:                    case 9:
        !           381:                        goto l40010;    /* 40900 */
        !           382:                    default: bug(27);
        !           383:                }
        !           384:        l40010: hintlc[hint]=0;
        !           385:                if (!yes(hints[hint][3],0,54)) continue;
        !           386:                printf("I am prepared to give you a hint, but it will ");
        !           387:                printf("cost you %d points.\n",hints[hint][2]);
        !           388:                hinted[hint]=yes(175,hints[hint][4],54);
        !           389:        l40020: hintlc[hint]=0;
        !           390:        }
        !           391: }
        !           392: 
        !           393: 
        !           394: trsay()                                         /* 9030                 */
        !           395: {       register int i;
        !           396:        if (*wd2!=0) copystr(wd2,wd1);
        !           397:        i=vocab(wd1,-1);
        !           398:        if (i==62||i==65||i==71||i==2025)
        !           399:        {       *wd2=0;
        !           400:                obj=0;
        !           401:                return(2630);
        !           402:        }
        !           403:        printf("\nOkay, \"%s\".\n",wd2);
        !           404:        return(2012);
        !           405: }
        !           406: 
        !           407: 
        !           408: trtake()                                        /* 9010                 */
        !           409: {       register int i;
        !           410:        if (toting(obj)) return(2011);  /* 9010 */
        !           411:        spk=25;
        !           412:        if (obj==plant&&prop[plant]<=0) spk=115;
        !           413:        if (obj==bear&&prop[bear]==1) spk=169;
        !           414:        if (obj==chain&&prop[bear]!=0) spk=170;
        !           415:        if (fixed[obj]!=0) return(2011);
        !           416:        if (obj==water||obj==oil)
        !           417:        {       if (here(bottle)&&liq(0)==obj)
        !           418:                {       obj=bottle;
        !           419:                        goto l9017;
        !           420:                }
        !           421:                obj=bottle;
        !           422:                if (toting(bottle)&&prop[bottle]==1)
        !           423:                        return(9220);
        !           424:                if (prop[bottle]!=1) spk=105;
        !           425:                if (!toting(bottle)) spk=104;
        !           426:                return(2011);
        !           427:        }
        !           428: l9017:  if (holdng>=7)
        !           429:        {       rspeak(92);
        !           430:                return(2012);
        !           431:        }
        !           432:        if (obj==bird)
        !           433:        {       if (prop[bird]!=0) goto l9014;
        !           434:                if (toting(rod))
        !           435:                {       rspeak(26);
        !           436:                        return(2012);
        !           437:                }
        !           438:                if (!toting(cage))      /* 9013 */
        !           439:                {       rspeak(27);
        !           440:                        return(2012);
        !           441:                }
        !           442:                prop[bird]=1;           /* 9015 */
        !           443:        }
        !           444: l9014:  if ((obj==bird||obj==cage)&&prop[bird]!=0)
        !           445:                carry(bird+cage-obj,loc);
        !           446:        carry(obj,loc);
        !           447:        k=liq(0);
        !           448:        if (obj==bottle && k!=0) place[k] = -1;
        !           449:        return(2009);
        !           450: }
        !           451: 
        !           452: 
        !           453: dropper()                                       /* 9021                 */
        !           454: {       k=liq(0);
        !           455:        if (k==obj) obj=bottle;
        !           456:        if (obj==bottle&&k!=0) place[k]=0;
        !           457:        if (obj==cage&&prop[bird]!=0) drop(bird,loc);
        !           458:        if (obj==bird) prop[bird]=0;
        !           459:        drop(obj,loc);
        !           460:        return(2012);
        !           461: }
        !           462: 
        !           463: trdrop()                                        /* 9020                 */
        !           464: {
        !           465:        if (toting(rod2)&&obj==rod&&!toting(rod)) obj=rod2;
        !           466:        if (!toting(obj)) return(2011);
        !           467:        if (obj==bird&&here(snake))
        !           468:        {       rspeak(30);
        !           469:                if (closed) return(19000);
        !           470:                dstroy(snake);
        !           471:                prop[snake]=1;
        !           472:                return(dropper());
        !           473:        }
        !           474:        if (obj==coins&&here(vend))             /* 9024                 */
        !           475:        {       dstroy(coins);
        !           476:                drop(batter,loc);
        !           477:                pspeak(batter,0);
        !           478:                return(2012);
        !           479:        }
        !           480:        if (obj==bird&&at(dragon)&&prop[dragon]==0)     /* 9025         */
        !           481:        {       rspeak(154);
        !           482:                dstroy(bird);
        !           483:                prop[bird]=0;
        !           484:                if (place[snake]==plac[snake]) tally2--;
        !           485:                return(2012);
        !           486:        }
        !           487:        if (obj==bear&&at(troll))               /* 9026                 */
        !           488:        {       rspeak(163);
        !           489:                move(troll,0);
        !           490:                move(troll+100,0);
        !           491:                move(troll2,plac[troll]);
        !           492:                move(troll2+100,fixd[troll]);
        !           493:                juggle(chasm);
        !           494:                prop[troll]=2;
        !           495:                return(dropper());
        !           496:        }
        !           497:        if (obj!=vase||loc==plac[pillow])       /* 9027                 */
        !           498:        {       rspeak(54);
        !           499:                return(dropper());
        !           500:        }
        !           501:        prop[vase]=2;                           /* 9028                 */
        !           502:        if (at(pillow)) prop[vase]=0;
        !           503:        pspeak(vase,prop[vase]+1);
        !           504:        if (prop[vase]!=0) fixed[vase] = -1;
        !           505:        return(dropper());
        !           506: }
        !           507: 
        !           508: 
        !           509: tropen()                                        /* 9040                 */
        !           510: {       if (obj==clam||obj==oyster)
        !           511:        {       k=0;                            /* 9046                 */
        !           512:                if (obj==oyster) k=1;
        !           513:                spk=124+k;
        !           514:                if (toting(obj)) spk=120+k;
        !           515:                if (!toting(tridnt)) spk=122+k;
        !           516:                if (verb==lock) spk=61;
        !           517:                if (spk!=124) return(2011);
        !           518:                dstroy(clam);
        !           519:                drop(oyster,loc);
        !           520:                drop(pearl,105);
        !           521:                return(2011);
        !           522:        }
        !           523:        if (obj==door) spk=111;
        !           524:        if (obj==door&&prop[door]==1) spk=54;
        !           525:        if (obj==cage) spk=32;
        !           526:        if (obj==keys) spk=55;
        !           527:        if (obj==grate||obj==chain) spk=31;
        !           528:        if (spk!=31||!here(keys)) return(2011);
        !           529:        if (obj==chain)
        !           530:        {       if (verb==lock)
        !           531:                {       spk=172;                /* 9049: lock           */
        !           532:                        if (prop[chain]!=0) spk=34;
        !           533:                        if (loc!=plac[chain]) spk=173;
        !           534:                        if (spk!=172) return(2011);
        !           535:                        prop[chain]=2;
        !           536:                        if (toting(chain)) drop(chain,loc);
        !           537:                        fixed[chain]= -1;
        !           538:                        return(2011);
        !           539:                }
        !           540:                spk=171;
        !           541:                if (prop[bear]==0) spk=41;
        !           542:                if (prop[chain]==0) spk=37;
        !           543:                if (spk!=171) return(2011);
        !           544:                prop[chain]=0;
        !           545:                fixed[chain]=0;
        !           546:                if (prop[bear]!=3) prop[bear]=2;
        !           547:                fixed[bear]=2-prop[bear];
        !           548:                return(2011);
        !           549:        }
        !           550:        if (closng)
        !           551:        {       k=130;
        !           552:                if (!panic) clock2=15;
        !           553:                panic=TRUE;
        !           554:                return(2010);
        !           555:        }
        !           556:        k=34+prop[grate];                       /* 9043                 */
        !           557:        prop[grate]=1;
        !           558:        if (verb==lock) prop[grate]=0;
        !           559:        k=k+2*prop[grate];
        !           560:        return(2010);
        !           561: }
        !           562: 
        !           563: 
        !           564: trkill()                                /* 9120                         */
        !           565: {       register int i;
        !           566:        for (i=1; i<=5; i++)
        !           567:                if (dloc[i]==loc&&dflag>=2) break;
        !           568:        if (i==6) i=0;
        !           569:        if (obj==0)                     /* 9122                         */
        !           570:        {       if (i!=0) obj=dwarf;
        !           571:                if (here(snake)) obj=obj*100+snake;
        !           572:                if (at(dragon)&&prop[dragon]==0) obj=obj*100+dragon;
        !           573:                if (at(troll)) obj=obj*100+troll;
        !           574:                if (here(bear)&&prop[bear]==0) obj=obj*100+bear;
        !           575:                if (obj>100) return(8000);
        !           576:                if (obj==0)
        !           577:                {       if (here(bird)&&verb!=throw) obj=bird;
        !           578:                        if (here(clam)||here(oyster)) obj=100*obj+clam;
        !           579:                        if (obj>100) return(8000);
        !           580:                }
        !           581:        }
        !           582:        if (obj==bird)                  /* 9124                         */
        !           583:        {       spk=137;
        !           584:                if (closed) return(2011);
        !           585:                dstroy(bird);
        !           586:                prop[bird]=0;
        !           587:                if (place[snake]==plac[snake]) tally2++;
        !           588:                spk=45;
        !           589:        }
        !           590:        if (obj==0) spk=44;             /* 9125                         */
        !           591:        if (obj==clam||obj==oyster) spk=150;
        !           592:        if (obj==snake) spk=46;
        !           593:        if (obj==dwarf) spk=49;
        !           594:        if (obj==dwarf&&closed) return(19000);
        !           595:        if (obj==dragon) spk=147;
        !           596:        if (obj==troll) spk=157;
        !           597:        if (obj==bear) spk=165+(prop[bear]+1)/2;
        !           598:        if (obj!=dragon||prop[dragon]!=0) return(2011);
        !           599:        rspeak(49);
        !           600:        verb=0;
        !           601:        obj=0;
        !           602:        getin(&wd1,&wd2);
        !           603:        if (!weq(wd1,"y")&&!weq(wd1,"yes")) return(2608);
        !           604:        pspeak(dragon,1);
        !           605:        prop[dragon]=2;
        !           606:        prop[rug]=0;
        !           607:        k=(plac[dragon]+fixd[dragon])/2;
        !           608:        move(dragon+100,-1);
        !           609:        move(rug+100,0);
        !           610:        move(dragon,k);
        !           611:        move(rug,k);
        !           612:        for (obj=1; obj<=100; obj++)
        !           613:                if (place[obj]==plac[dragon]||place[obj]==fixd[dragon])
        !           614:                        move(obj,k);
        !           615:        loc=k;
        !           616:        k=null;
        !           617:        return(8);
        !           618: }
        !           619: 
        !           620: 
        !           621: trtoss()                                /* 9170: throw                  */
        !           622: {       register int i;
        !           623:        if (toting(rod2)&&obj==rod&&!toting(rod)) obj=rod2;
        !           624:        if (!toting(obj)) return(2011);
        !           625:        if (obj>=50&&obj<=maxtrs&&at(troll))
        !           626:        {       spk=159;                        /* 9178                 */
        !           627:                drop(obj,0);
        !           628:                move(troll,0);
        !           629:                move(troll+100,0);
        !           630:                drop(troll2,plac[troll]);
        !           631:                drop(troll2+100,fixd[troll]);
        !           632:                juggle(chasm);
        !           633:                return(2011);
        !           634:        }
        !           635:        if (obj==food&&here(bear))
        !           636:        {       obj=bear;                       /* 9177                 */
        !           637:                return(9210);
        !           638:        }
        !           639:        if (obj!=axe) return(9020);
        !           640:        for (i=1; i<=5; i++)
        !           641:        {       if (dloc[i]==loc)
        !           642:                {       spk=48;                 /* 9172                 */
        !           643:                        if (ran(3)==0||saved!= -1)
        !           644:                l9175:  {       rspeak(spk);
        !           645:                                drop(axe,loc);
        !           646:                                k=null;
        !           647:                                return(8);
        !           648:                        }
        !           649:                        dseen[i]=FALSE;
        !           650:                        dloc[i]=0;
        !           651:                        spk=47;
        !           652:                        dkill++;
        !           653:                        if (dkill==1) spk=149;
        !           654:                        goto l9175;
        !           655:                }
        !           656:        }
        !           657:        spk=152;
        !           658:        if (at(dragon)&&prop[dragon]==0)
        !           659:                goto l9175;
        !           660:        spk=158;
        !           661:        if (at(troll)) goto l9175;
        !           662:        if (here(bear)&&prop[bear]==0)
        !           663:        {       spk=164;
        !           664:                drop(axe,loc);
        !           665:                fixed[axe]= -1;
        !           666:                prop[axe]=1;
        !           667:                juggle(bear);
        !           668:                return(2011);
        !           669:        }
        !           670:        obj=0;
        !           671:        return(9120);
        !           672: }
        !           673: 
        !           674: 
        !           675: trfeed()                                        /* 9210                 */
        !           676: {       if (obj==bird)
        !           677:        {       spk=100;
        !           678:                return(2011);
        !           679:        }
        !           680:        if (obj==snake||obj==dragon||obj==troll)
        !           681:        {       spk=102;
        !           682:                if (obj==dragon&&prop[dragon]!=0) spk=110;
        !           683:                if (obj==troll) spk=182;
        !           684:                if (obj!=snake||closed||!here(bird)) return(2011);
        !           685:                spk=101;
        !           686:                dstroy(bird);
        !           687:                prop[bird]=0;
        !           688:                tally2++;
        !           689:                return(2011);
        !           690:        }
        !           691:        if (obj==dwarf)
        !           692:        {       if (!here(food)) return(2011);
        !           693:                spk=103;
        !           694:                dflag++;
        !           695:                return(2011);
        !           696:        }
        !           697:        if (obj==bear)
        !           698:        {       if (prop[bear]==0) spk=102;
        !           699:                if (prop[bear]==3) spk=110;
        !           700:                if (!here(food)) return(2011);
        !           701:                dstroy(food);
        !           702:                prop[bear]=1;
        !           703:                fixed[axe]=0;
        !           704:                prop[axe]=0;
        !           705:                spk=168;
        !           706:                return(2011);
        !           707:        }
        !           708:        spk=14;
        !           709:        return(2011);
        !           710: }
        !           711: 
        !           712: 
        !           713: trfill()                                        /* 9220 */
        !           714: {       if (obj==vase)
        !           715:        {       spk=29;
        !           716:                if (liqloc(loc)==0) spk=144;
        !           717:                if (liqloc(loc)==0||!toting(vase)) return(2011);
        !           718:                rspeak(145);
        !           719:                prop[vase]=2;
        !           720:                fixed[vase]= -1;
        !           721:                return(9020);           /* advent/10 goes to 9024 */
        !           722:        }
        !           723:        if (obj!=0&&obj!=bottle) return(2011);
        !           724:        if (obj==0&&!here(bottle)) return(8000);
        !           725:        spk=107;
        !           726:        if (liqloc(loc)==0) spk=106;
        !           727:        if (liq(0)!=0) spk=105;
        !           728:        if (spk!=107) return(2011);
        !           729:        prop[bottle]=((cond[loc]%4)/2)*2;
        !           730:        k=liq(0);
        !           731:        if (toting(bottle)) place[k]= -1;
        !           732:        if (k==oil) spk=108;
        !           733:        return(2011);
        !           734: }
        !           735: 
        !           736: 
        !           737: closing()                               /* 10000 */
        !           738: {       register int i;
        !           739:        prop[grate]=prop[fissur]=0;
        !           740:        for (i=1; i<=6; i++)
        !           741:        {       dseen[i]=FALSE;
        !           742:                dloc[i]=0;
        !           743:        }
        !           744:        move(troll,0);
        !           745:        move(troll+100,0);
        !           746:        move(troll2,plac[troll]);
        !           747:        move(troll2+100,fixd[troll]);
        !           748:        juggle(chasm);
        !           749:        if(prop[bear]!=3) dstroy(bear);
        !           750:        prop[chain]=0;
        !           751:        fixed[chain]=0;
        !           752:        prop[axe]=0;
        !           753:        fixed[axe]=0;
        !           754:        rspeak(129);
        !           755:        clock1 = -1;
        !           756:        closng=TRUE;
        !           757:        return(19999);
        !           758: }
        !           759: 
        !           760: 
        !           761: caveclose()                             /* 11000 */
        !           762: {       register int i;
        !           763:        prop[bottle]=put(bottle,115,1);
        !           764:        prop[plant]=put(plant,115,0);
        !           765:        prop[oyster]=put(oyster,115,0);
        !           766:        prop[lamp]=put(lamp,115,0);
        !           767:        prop[rod]=put(rod,115,0);
        !           768:        prop[dwarf]=put(dwarf,115,0);
        !           769:        loc=115;
        !           770:        oldloc=115;
        !           771:        newloc=115;
        !           772: 
        !           773:        put(grate,116,0);
        !           774:        prop[snake]=put(snake,116,1);
        !           775:        prop[bird]=put(bird,116,1);
        !           776:        prop[cage]=put(cage,116,0);
        !           777:        prop[rod2]=put(rod2,116,0);
        !           778:        prop[pillow]=put(pillow,116,0);
        !           779: 
        !           780:        prop[mirror]=put(mirror,115,0);
        !           781:        fixed[mirror]=116;
        !           782: 
        !           783:        for (i=1; i<=100; i++)
        !           784:                if (toting(i)) dstroy(i);
        !           785:        rspeak(132);
        !           786:        closed=TRUE;
        !           787:        return(2);
        !           788: }
        !           789: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.