Annotation of 43BSDReno/games/battlestar/cypher.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1983 Regents of the University of California.
                      3:  * All rights reserved.
                      4:  *
                      5:  * Redistribution and use in source and binary forms are permitted
                      6:  * provided that: (1) source distributions retain this entire copyright
                      7:  * notice and comment, and (2) distributions including binaries display
                      8:  * the following acknowledgement:  ``This product includes software
                      9:  * developed by the University of California, Berkeley and its contributors''
                     10:  * in the documentation or other materials provided with the distribution
                     11:  * and in all advertising materials mentioning features or use of this
                     12:  * software. Neither the name of the University nor the names of its
                     13:  * contributors may be used to endorse or promote products derived
                     14:  * from this software without specific prior written permission.
                     15:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
                     16:  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
                     17:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
                     18:  */
                     19: 
                     20: #ifndef lint
                     21: static char sccsid[] = "@(#)cypher.c   5.3 (Berkeley) 6/1/90";
                     22: #endif /* not lint */
                     23: 
                     24: #include "externs.h"
                     25: 
                     26: cypher()
                     27: {
                     28:        register int n;
                     29:        int junk;
                     30:        int lflag = -1;
                     31:        char buffer[10];
                     32: 
                     33:        while (wordtype[wordnumber] == ADJS)
                     34:                wordnumber++;
                     35:        while (wordnumber <= wordcount) {
                     36:                switch(wordvalue[wordnumber]) {
                     37: 
                     38:                        case UP:
                     39:                                if (location[position].access || wiz || tempwiz) {
                     40:                                        if (!location[position].access)
                     41:                                                puts("Zap!  A gust of wind lifts you up.");
                     42:                                        if (!move(location[position].up, AHEAD))
                     43:                                                return(-1);
                     44:                                } else {
                     45:                                        puts("There is no way up");
                     46:                                        return(-1);
                     47:                                }
                     48:                                lflag = 0;
                     49:                                break;
                     50: 
                     51:                         case DOWN:
                     52:                                if (!move(location[position].down, AHEAD))
                     53:                                        return(-1);
                     54:                                lflag = 0;
                     55:                                break;
                     56: 
                     57:                         case LEFT:
                     58:                                if (!move(left, LEFT))
                     59:                                        return(-1);
                     60:                                lflag = 0;
                     61:                                break;
                     62: 
                     63:                         case RIGHT:
                     64:                                if (!move(right, RIGHT))
                     65:                                        return(-1);
                     66:                                lflag = 0;
                     67:                                break;
                     68:                         
                     69:                         case AHEAD:
                     70:                                if (!move(ahead, AHEAD))
                     71:                                        return(-1);
                     72:                                lflag = 0;
                     73:                                break;
                     74:                         
                     75:                         case BACK:
                     76:                                if (!move(back, BACK))
                     77:                                        return(-1);
                     78:                                lflag = 0;
                     79:                                break;
                     80:                         
                     81:                         case SHOOT:
                     82:                                if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
                     83:                                        for (n=0; n < NUMOFOBJECTS; n++)
                     84:                                                if (testbit(location[position].objects,n) && *objsht[n]){
                     85:                                                        wordvalue[wordnumber+1] = n;
                     86:                                                        wordnumber = shoot();
                     87:                                                }
                     88:                                wordnumber++;
                     89:                                wordnumber++;
                     90:                                }
                     91:                                else 
                     92:                                        shoot();
                     93:                                break;
                     94: 
                     95:                         case TAKE:
                     96:                                if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
                     97:                                        for (n=0; n < NUMOFOBJECTS; n++)
                     98:                                                if (testbit(location[position].objects,n) && *objsht[n]){
                     99:                                                        wordvalue[wordnumber+1] = n;
                    100:                                                        wordnumber = take(location[position].objects);
                    101:                                                }
                    102:                                wordnumber++;
                    103:                                wordnumber++;
                    104:                                }
                    105:                                else 
                    106:                                        take(location[position].objects);
                    107:                                break;
                    108: 
                    109:                         case DROP:
                    110: 
                    111:                                if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
                    112:                                        for (n=0; n < NUMOFOBJECTS; n++)
                    113:                                                if (testbit(inven,n)){
                    114:                                                        wordvalue[wordnumber+1] = n;
                    115:                                                        wordnumber = drop("Dropped");
                    116:                                                }
                    117:                                wordnumber++;
                    118:                                wordnumber++;
                    119:                                }
                    120:                                else 
                    121:                                        drop("Dropped");
                    122:                                break;
                    123: 
                    124: 
                    125:                         case KICK:
                    126:                         case THROW:
                    127:                                if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
                    128:                                        for (n=0; n < NUMOFOBJECTS; n++)
                    129:                                                if (testbit(inven,n) ||
                    130:                                                  testbit(location[position].objects, n) && *objsht[n]){
                    131:                                                        wordvalue[wordnumber+1] = n;
                    132:                                                        wordnumber = throw(wordvalue[wordnumber] == KICK ? "Kicked" : "Thrown");
                    133:                                                }
                    134:                                        wordnumber += 2;
                    135:                                } else 
                    136:                                        throw(wordvalue[wordnumber] == KICK ? "Kicked" : "Thrown");
                    137:                                break;
                    138: 
                    139:                         case TAKEOFF:
                    140:                                if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
                    141:                                        for (n=0; n < NUMOFOBJECTS; n++)
                    142:                                                if (testbit(wear,n)){
                    143:                                                        wordvalue[wordnumber+1] = n;
                    144:                                                        wordnumber = takeoff();
                    145:                                                }
                    146:                                        wordnumber += 2;
                    147:                                }
                    148:                                else 
                    149:                                        takeoff();
                    150:                                break;
                    151: 
                    152: 
                    153:                         case DRAW:
                    154: 
                    155:                                if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
                    156:                                        for (n=0; n < NUMOFOBJECTS; n++)
                    157:                                                if (testbit(wear,n)){
                    158:                                                        wordvalue[wordnumber+1] = n;
                    159:                                                        wordnumber = draw();
                    160:                                                }
                    161:                                        wordnumber += 2;
                    162:                                }
                    163:                                else 
                    164:                                        draw();
                    165:                                break;
                    166: 
                    167: 
                    168:                         case PUTON:
                    169: 
                    170:                                if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
                    171:                                        for (n=0; n < NUMOFOBJECTS; n++)
                    172:                                                if (testbit(location[position].objects,n) && *objsht[n]){
                    173:                                                        wordvalue[wordnumber+1] = n;
                    174:                                                        wordnumber = puton();
                    175:                                                }
                    176:                                        wordnumber += 2;
                    177:                                }
                    178:                                else 
                    179:                                        puton();
                    180:                                break;
                    181: 
                    182:                         case WEARIT:
                    183: 
                    184:                                if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
                    185:                                        for (n=0; n < NUMOFOBJECTS; n++)
                    186:                                                if (testbit(inven,n)){
                    187:                                                        wordvalue[wordnumber+1] = n;
                    188:                                                        wordnumber = wearit();
                    189:                                                }
                    190:                                        wordnumber += 2;
                    191:                                }
                    192:                                else 
                    193:                                        wearit();
                    194:                                break;
                    195: 
                    196: 
                    197:                         case EAT:
                    198: 
                    199:                                if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
                    200:                                        for (n=0; n < NUMOFOBJECTS; n++)
                    201:                                                if (testbit(inven,n)){
                    202:                                                        wordvalue[wordnumber+1] = n;
                    203:                                                        wordnumber = eat();
                    204:                                                }
                    205:                                        wordnumber += 2;
                    206:                                }
                    207:                                else 
                    208:                                        eat();
                    209:                                break;
                    210: 
                    211: 
                    212:                        case PUT:
                    213:                                put();
                    214:                                break;
                    215: 
                    216: 
                    217:                        case INVEN:
                    218:                                if (ucard(inven)){
                    219:                                        puts("You are holding:\n");
                    220:                                        for (n=0; n < NUMOFOBJECTS; n++)
                    221:                                                if (testbit(inven,n))
                    222:                                                        printf("\t%s\n", objsht[n]);
                    223:                                        printf("\n= %d kilogram%s (%d%%)\n", carrying, (carrying == 1 ? "." : "s."),(WEIGHT ? carrying*100/WEIGHT : -1));
                    224:                                        printf("Your arms are %d%% full.\n",encumber*100/CUMBER);
                    225:                                }
                    226:                                else
                    227:                                        puts("You aren't carrying anything.");
                    228:                                        
                    229:                                if (ucard(wear)){
                    230:                                        puts("\nYou are wearing:\n");
                    231:                                        for (n=0; n < NUMOFOBJECTS; n++)
                    232:                                                if (testbit(wear,n))
                    233:                                                        printf("\t%s\n", objsht[n]);
                    234:                                }
                    235:                                else
                    236:                                        puts("\nYou are stark naked.");
                    237:                                if (card(injuries,NUMOFINJURIES)){
                    238:                                        puts("\nYou have suffered:\n");
                    239:                                        for (n=0; n < NUMOFINJURIES; n++)
                    240:                                                if (injuries[n])
                    241:                                                        printf("\t%s\n",ouch[n]);
                    242:                                        printf("\nYou can still carry up to %d kilogram%s\n",WEIGHT,(WEIGHT == 1 ? "." : "s."));
                    243:                                }
                    244:                                else
                    245:                                        puts("\nYou are in perfect health.");
                    246:                                break;
                    247: 
                    248:                        case USE:
                    249:                                lflag = use();
                    250:                                break;
                    251: 
                    252:                        case LOOK:
                    253:                                if (!notes[CANTSEE] || testbit(inven,LAMPON) || testbit(location[position].objects,LAMPON) || matchlight){
                    254:                                        beenthere[position] = 2;
                    255:                                        writedes();
                    256:                                        printobjs();
                    257:                                        if (matchlight){
                    258:                                                puts("\nYour match splutters out.");
                    259:                                                matchlight = 0;
                    260:                                        }
                    261:                                } else 
                    262:                                        puts("I can't see anything.");
                    263:                                return(-1);
                    264:                                break;
                    265: 
                    266:                         case SU:
                    267:                         if (wiz || tempwiz){
                    268:                                printf("\nRoom (was %d) = ", position);
                    269:                                fgets(buffer,10,stdin);
                    270:                                if (*buffer != '\n')
                    271:                                        sscanf(buffer,"%d", &position);
                    272:                                printf("Time (was %d) = ",time);
                    273:                                fgets(buffer,10,stdin);
                    274:                                if (*buffer != '\n')
                    275:                                        sscanf(buffer,"%d", &time);
                    276:                                printf("Fuel (was %d) = ",fuel);
                    277:                                fgets(buffer,10,stdin);
                    278:                                if (*buffer != '\n')
                    279:                                        sscanf(buffer,"%d", &fuel);
                    280:                                printf("Torps (was %d) = ",torps);
                    281:                                fgets(buffer,10,stdin);
                    282:                                if (*buffer != '\n')
                    283:                                        sscanf(buffer,"%d", &torps);
                    284:                                printf("CUMBER (was %d) = ",CUMBER);
                    285:                                fgets(buffer,10,stdin);
                    286:                                if (*buffer != '\n')
                    287:                                        sscanf(buffer,"%d", &CUMBER);
                    288:                                printf("WEIGHT (was %d) = ",WEIGHT);
                    289:                                fgets(buffer,10,stdin);
                    290:                                if (*buffer != '\n')
                    291:                                        sscanf(buffer,"%d",&WEIGHT);
                    292:                                printf("Clock (was %d) = ",clock);
                    293:                                fgets(buffer,10,stdin);
                    294:                                if (*buffer != '\n')
                    295:                                        sscanf(buffer,"%d",&clock);
                    296:                                printf("Wizard (was %d, %d) = ",wiz, tempwiz);
                    297:                                fgets(buffer,10,stdin);
                    298:                                if (*buffer != '\n'){
                    299:                                        sscanf(buffer,"%d",&junk);
                    300:                                        if (!junk)
                    301:                                                tempwiz = wiz = 0;
                    302:                                }
                    303:                                printf("\nDONE.\n");
                    304:                                return(0);
                    305:                         }
                    306:                         else
                    307:                                 puts("You aren't a wizard.");
                    308:                         break;
                    309:                                
                    310:                         case SCORE:
                    311:                                printf("\tPLEASURE\tPOWER\t\tEGO\n");
                    312:                                printf("\t%3d\t\t%3d\t\t%3d\n\n",pleasure,power,ego);
                    313:                                printf("This gives you the rating of %s in %d turns.\n",rate(),time);
                    314:                                printf("You have visited %d out of %d rooms this run (%d%%).\n",card(beenthere,NUMOFROOMS),NUMOFROOMS,card(beenthere,NUMOFROOMS)*100/NUMOFROOMS);
                    315:                                break;
                    316: 
                    317:                         case KNIFE:
                    318:                         case KILL:
                    319:                                murder();
                    320:                                break;
                    321: 
                    322:                         case UNDRESS:
                    323:                         case RAVAGE:
                    324:                                ravage();
                    325:                                break;
                    326: 
                    327:                         case SAVE:
                    328:                                save();
                    329:                                break;
                    330: 
                    331:                         case FOLLOW:
                    332:                                lflag = follow();
                    333:                                break;
                    334: 
                    335:                         case GIVE:
                    336:                                give();
                    337:                                break;
                    338: 
                    339:                         case KISS:
                    340:                                kiss();
                    341:                                break;
                    342: 
                    343:                         case LOVE:
                    344:                                 love();
                    345:                                 break;
                    346: 
                    347:                         case RIDE:
                    348:                                lflag = ride();
                    349:                                break;
                    350: 
                    351:                         case DRIVE:
                    352:                                lflag = drive();
                    353:                                break;
                    354: 
                    355:                         case LIGHT:
                    356:                                 light();
                    357:                                 break;
                    358: 
                    359:                         case LAUNCH:
                    360:                                if (!launch())
                    361:                                        return(-1);
                    362:                                else 
                    363:                                        lflag = 0;
                    364:                                break;
                    365: 
                    366:                        case LANDIT:
                    367:                                if (!land())
                    368:                                        return(-1);
                    369:                                else
                    370:                                        lflag = 0;
                    371:                                break;
                    372: 
                    373:                        case TIME:
                    374:                                chime();
                    375:                                break;
                    376: 
                    377:                         case SLEEP:
                    378:                                zzz();
                    379:                                break;
                    380: 
                    381:                         case DIG:
                    382:                                dig();
                    383:                                break;
                    384: 
                    385:                         case JUMP:
                    386:                                lflag = jump();
                    387:                                break;
                    388: 
                    389:                         case BURY:
                    390:                                bury();
                    391:                                break;
                    392: 
                    393:                         case SWIM:
                    394:                                puts("Surf's up!");
                    395:                                break;
                    396: 
                    397:                         case DRINK:
                    398:                                drink();
                    399:                                break;
                    400: 
                    401:                         case QUIT:
                    402:                                die();
                    403: 
                    404:                         default:
                    405:                                puts("How's that?");
                    406:                                return(-1);
                    407:                                break;
                    408: 
                    409:                         
                    410:                }
                    411:                if (wordnumber < wordcount && *words[wordnumber++] == ',')
                    412:                        continue;
                    413:                else return(lflag);
                    414:        }
                    415:        return(lflag);
                    416: }

unix.superglobalmegacorp.com

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