Annotation of 43BSDReno/games/larn/object.c, revision 1.1

1.1     ! root        1: /*     object.c                Larn is copyrighted 1986 by Noah Morgan. */
        !             2: #include "header.h"
        !             3: 
        !             4: /*
        !             5:        ***************
        !             6:        LOOK_FOR_OBJECT
        !             7:        ***************
        !             8: 
        !             9:        subroutine to look for an object and give the player his options
        !            10:        if an object was found.
        !            11:  */
        !            12: lookforobject()
        !            13: {
        !            14: register int i,j;
        !            15: if (c[TIMESTOP])  return;      /* can't find objects is time is stopped        */
        !            16: i=item[playerx][playery];      if (i==0) return;
        !            17: showcell(playerx,playery);  cursors();  yrepcount=0;
        !            18: switch(i)
        !            19:        {
        !            20:        case OGOLDPILE: case OMAXGOLD:
        !            21:        case OKGOLD:    case ODGOLD:    lprcat("\n\nYou have found some gold!");        ogold(i);       break;
        !            22: 
        !            23:        case OPOTION:   lprcat("\n\nYou have found a magic potion");
        !            24:                                i = iarg[playerx][playery];
        !            25:                                if (potionname[i][0]) lprintf(" of %s",&potionname[i][1]);  opotion(i);  break;
        !            26: 
        !            27:        case OSCROLL:   lprcat("\n\nYou have found a magic scroll");
        !            28:                                i = iarg[playerx][playery];
        !            29:                                if (scrollname[i][0])   lprintf(" of %s",&scrollname[i][1]);
        !            30:                                oscroll(i);  break;
        !            31: 
        !            32:        case OALTAR:    if (nearbymonst()) return;
        !            33:                                        lprcat("\n\nThere is a Holy Altar here!"); oaltar(); break;
        !            34: 
        !            35:        case OBOOK:     lprcat("\n\nYou have found a book."); obook(); break;
        !            36: 
        !            37:        case OCOOKIE:   lprcat("\n\nYou have found a fortune cookie."); ocookie(); break;
        !            38: 
        !            39:        case OTHRONE:   if (nearbymonst()) return;
        !            40:                                        lprintf("\n\nThere is %s here!",objectname[i]); othrone(0); break;
        !            41: 
        !            42:        case OTHRONE2:  if (nearbymonst()) return;
        !            43:                                        lprintf("\n\nThere is %s here!",objectname[i]); othrone(1); break;
        !            44: 
        !            45:        case ODEADTHRONE: lprintf("\n\nThere is %s here!",objectname[i]); odeadthrone(); break;
        !            46: 
        !            47:        case OORB:              lprcat("\n\nYou have found the Orb!!!!!"); oorb(); break;
        !            48: 
        !            49:        case OPIT:              lprcat("\n\nYou're standing at the top of a pit."); opit(); break;
        !            50: 
        !            51:        case OSTAIRSUP:         lprcat("\n\nThere is a circular staircase here"); ostairs(1);  /* up */ break;
        !            52: 
        !            53:        case OELEVATORUP:       lprcat("\n\nYou feel heavy for a moment, but the feeling disappears");
        !            54:                                oelevator(1);  /*  up  */  break;
        !            55: 
        !            56:        case OFOUNTAIN: if (nearbymonst()) return;
        !            57:                                        lprcat("\n\nThere is a fountain here"); ofountain(); break;
        !            58: 
        !            59:        case OSTATUE:   if (nearbymonst()) return;
        !            60:                                        lprcat("\n\nYou are standing in front of a statue"); ostatue(); break;
        !            61: 
        !            62:        case OCHEST:    lprcat("\n\nThere is a chest here");  ochest();  break;
        !            63: 
        !            64:        case OIVTELETRAP:       if (rnd(11)<6) return;
        !            65:                                                item[playerx][playery] = OTELEPORTER;
        !            66:                                                know[playerx][playery] = 1;
        !            67: 
        !            68:        case OTELEPORTER:       lprcat("\nZaaaappp!  You've been teleported!\n");
        !            69:                                                beep(); nap(3000); oteleport(0);
        !            70:                                                break; 
        !            71: 
        !            72:        case OSCHOOL:   if (nearbymonst()) return;
        !            73:                                lprcat("\n\nYou have found the College of Larn.");
        !            74:                                lprcat("\nDo you (g) go inside, or (i) stay here? ");
        !            75:                                i=0; while ((i!='g') && (i!='i') && (i!='\33')) i=getchar();
        !            76:                                if (i == 'g') { oschool();  /*  the college of larn     */ }
        !            77:                                else    lprcat(" stay here");
        !            78:                                break;
        !            79: 
        !            80:        case OMIRROR:   if (nearbymonst()) return;
        !            81:                                        lprcat("\n\nThere is a mirror here");   omirror();      break;
        !            82: 
        !            83:        case OBANK2:
        !            84:        case OBANK:     if (nearbymonst()) return;
        !            85:                                if (i==OBANK) lprcat("\n\nYou have found the bank of Larn.");
        !            86:                                else lprcat("\n\nYou have found a branch office of the bank of Larn.");
        !            87:                                lprcat("\nDo you (g) go inside, or (i) stay here? ");
        !            88:                                j=0; while ((j!='g') && (j!='i') && (j!='\33')) j=getchar();
        !            89:                                if (j == 'g') {  if (i==OBANK) obank(); else obank2(); /*  the bank of larn  */  }
        !            90:                                else   lprcat(" stay here");
        !            91:                                break;
        !            92: 
        !            93:        case ODEADFOUNTAIN:     if (nearbymonst()) return;
        !            94:                                                lprcat("\n\nThere is a dead fountain here"); break;
        !            95: 
        !            96:        case ODNDSTORE: if (nearbymonst()) return;
        !            97:                                        lprcat("\n\nThere is a DND store here.");
        !            98:                                        lprcat("\nDo you (g) go inside, or (i) stay here? ");
        !            99:                                        i=0; while ((i!='g') && (i!='i') && (i!='\33')) i=getchar();
        !           100:                                        if (i == 'g')
        !           101:                                                dndstore();  /*  the dnd adventurers store  */
        !           102:                                        else  lprcat(" stay here");
        !           103:                                        break;
        !           104: 
        !           105:        case OSTAIRSDOWN:       lprcat("\n\nThere is a circular staircase here"); ostairs(-1); /* down */ break;
        !           106: 
        !           107:        case OELEVATORDOWN:     lprcat("\n\nYou feel light for a moment, but the feeling disappears");
        !           108:                                oelevator(-1);  /*      down    */
        !           109:                                break;
        !           110: 
        !           111:        case OOPENDOOR:         lprintf("\n\nYou have found %s",objectname[i]);
        !           112:                                                lprcat("\nDo you (c) close it"); iopts();
        !           113:                                                i=0; while ((i!='c') && (i!='i') && (i!='\33')) i=getchar();
        !           114:                                                if ((i=='\33') || (i=='i')) { ignore();  break; }
        !           115:                                                lprcat("close");  forget();
        !           116:                                                item[playerx][playery]=OCLOSEDDOOR;
        !           117:                                                iarg[playerx][playery]=0;
        !           118:                                                playerx = lastpx;  playery = lastpy;
        !           119:                                                break;
        !           120: 
        !           121:        case OCLOSEDDOOR:       lprintf("\n\nYou have found %s",objectname[i]);
        !           122:                                                lprcat("\nDo you (o) try to open it"); iopts();
        !           123:                                                i=0; while ((i!='o') && (i!='i') && (i!='\33')) i=getchar();
        !           124:                                                if ((i=='\33') || (i=='i'))
        !           125:                                                        { ignore();  playerx = lastpx;
        !           126:                                                        playery = lastpy; break; }
        !           127:                                                else
        !           128:                                                {
        !           129:                                                lprcat("open");
        !           130:                                                if (rnd(11)<7)
        !           131:                                                  {
        !           132:                                                  switch(iarg[playerx][playery])
        !           133:                                                        {
        !           134:                                                        case 6: c[AGGRAVATE] += rnd(400);       break;
        !           135: 
        !           136:                                                        case 7: lprcat("\nYou are jolted by an electric shock "); 
        !           137:                                                                        lastnum=274; losehp(rnd(20));  bottomline();  break;
        !           138: 
        !           139:                                                        case 8: loselevel();  break;
        !           140: 
        !           141:                                                        case 9: lprcat("\nYou suddenly feel weaker ");
        !           142:                                                                        if (c[STRENGTH]>3) c[STRENGTH]--;
        !           143:                                                                        bottomline();  break;
        !           144: 
        !           145:                                                        default:        break;
        !           146:                                                        }
        !           147:                                                  playerx = lastpx;  playery = lastpy;
        !           148:                                                  }
        !           149:                                                else
        !           150:                                                  {
        !           151:                                                  forget();  item[playerx][playery]=OOPENDOOR;
        !           152:                                                  }
        !           153:                                                }
        !           154:                                                break;
        !           155: 
        !           156:        case OENTRANCE: lprcat("\nYou have found "); lprcat(objectname[OENTRANCE]);
        !           157:                                        lprcat("\nDo you (g) go inside"); iopts();
        !           158:                                        i=0; while ((i!='g') && (i!='i') && (i!='\33')) i=getchar();
        !           159:                                        if (i == 'g')
        !           160:                                                {
        !           161:                                                newcavelevel(1); playerx=33; playery=MAXY-2;
        !           162:                                                item[33][MAXY-1]=know[33][MAXY-1]=mitem[33][MAXY-1]=0;
        !           163:                                                draws(0,MAXX,0,MAXY); bot_linex(); return;
        !           164:                                                }
        !           165:                                        else   ignore();
        !           166:                                        break;
        !           167: 
        !           168:        case OVOLDOWN:  lprcat("\nYou have found "); lprcat(objectname[OVOLDOWN]);
        !           169:                                                lprcat("\nDo you (c) climb down"); iopts();
        !           170:                                                i=0; while ((i!='c') && (i!='i') && (i!='\33')) i=getchar();
        !           171:                                                if ((i=='\33') || (i=='i')) { ignore();  break; }
        !           172:                                        if (level!=0) { lprcat("\nThe shaft only extends 5 feet downward!"); return; }
        !           173:                                        if (packweight() > 45+3*(c[STRENGTH]+c[STREXTRA])) { lprcat("\nYou slip and fall down the shaft"); beep();
        !           174:                                                                                          lastnum=275;  losehp(30+rnd(20)); bottomhp(); }
        !           175:                                        
        !           176:                                        else lprcat("climb down");  nap(3000);  newcavelevel(MAXLEVEL);
        !           177:                                        for (i=0; i<MAXY; i++)  for (j=0; j<MAXX; j++) /* put player near volcano shaft */
        !           178:                                                if (item[j][i]==OVOLUP) { playerx=j; playery=i; j=MAXX; i=MAXY; positionplayer(); }
        !           179:                                        draws(0,MAXX,0,MAXY); bot_linex(); return;
        !           180: 
        !           181:        case OVOLUP:    lprcat("\nYou have found "); lprcat(objectname[OVOLUP]);
        !           182:                                                lprcat("\nDo you (c) climb up"); iopts();
        !           183:                                                i=0; while ((i!='c') && (i!='i') && (i!='\33')) i=getchar();
        !           184:                                                if ((i=='\33') || (i=='i')) { ignore();  break; }
        !           185:                                        if (level!=11) { lprcat("\nThe shaft only extends 8 feet upwards before you find a blockage!"); return; }
        !           186:                                        if (packweight() > 45+5*(c[STRENGTH]+c[STREXTRA])) { lprcat("\nYou slip and fall down the shaft"); beep();
        !           187:                                                                                          lastnum=275; losehp(15+rnd(20)); bottomhp(); return; }
        !           188:                                        lprcat("climb up"); lflush(); nap(3000); newcavelevel(0);
        !           189:                                        for (i=0; i<MAXY; i++)  for (j=0; j<MAXX; j++) /* put player near volcano shaft */
        !           190:                                                if (item[j][i]==OVOLDOWN) { playerx=j; playery=i; j=MAXX; i=MAXY; positionplayer(); }
        !           191:                                        draws(0,MAXX,0,MAXY); bot_linex(); return;
        !           192: 
        !           193:        case OTRAPARROWIV:      if (rnd(17)<13) return; /* for an arrow trap */
        !           194:                                                item[playerx][playery] = OTRAPARROW;
        !           195:                                                know[playerx][playery] = 0;
        !           196: 
        !           197:        case OTRAPARROW:        lprcat("\nYou are hit by an arrow"); beep();    /* for an arrow trap */
        !           198:                                                lastnum=259;    losehp(rnd(10)+level);
        !           199:                                                bottomhp();     return;
        !           200: 
        !           201:        case OIVDARTRAP:        if (rnd(17)<13) return;         /* for a dart trap */
        !           202:                                                item[playerx][playery] = ODARTRAP;
        !           203:                                                know[playerx][playery] = 0;
        !           204: 
        !           205:        case ODARTRAP:          lprcat("\nYou are hit by a dart"); beep();      /* for a dart trap */
        !           206:                                                lastnum=260;    losehp(rnd(5));
        !           207:                                                if ((--c[STRENGTH]) < 3) c[STRENGTH] = 3;
        !           208:                                                bottomline();   return;
        !           209: 
        !           210:        case OIVTRAPDOOR:       if (rnd(17)<13) return;         /* for a trap door */
        !           211:                                                item[playerx][playery] = OTRAPDOOR;
        !           212:                                                know[playerx][playery] = 1;
        !           213: 
        !           214:        case OTRAPDOOR:         lastnum = 272; /* a trap door */
        !           215:                                                if ((level==MAXLEVEL-1) || (level==MAXLEVEL+MAXVLEVEL-1))
        !           216:                                                        { lprcat("\nYou fell through a bottomless trap door!"); beep();  nap(3000);  died(271); }
        !           217:                                                lprcat("\nYou fall through a trap door!"); beep();      /* for a trap door */
        !           218:                                                losehp(rnd(5+level));
        !           219:                                                nap(2000);  newcavelevel(level+1);  draws(0,MAXX,0,MAXY); bot_linex();
        !           220:                                                return;
        !           221: 
        !           222: 
        !           223:        case OTRADEPOST:        if (nearbymonst()) return;
        !           224:                                lprcat("\nYou have found the Larn trading Post.");
        !           225:                                lprcat("\nDo you (g) go inside, or (i) stay here? ");
        !           226:                                i=0; while ((i!='g') && (i!='i') && (i!='\33')) i=getchar();
        !           227:                                if (i == 'g')  otradepost();  else  lprcat("stay here");
        !           228:                                return;
        !           229: 
        !           230:        case OHOME:     if (nearbymonst()) return;
        !           231:                                lprcat("\nYou have found your way home.");
        !           232:                                lprcat("\nDo you (g) go inside, or (i) stay here? ");
        !           233:                                i=0; while ((i!='g') && (i!='i') && (i!='\33')) i=getchar();
        !           234:                                if (i == 'g')  ohome();  else  lprcat("stay here");
        !           235:                                return;
        !           236: 
        !           237:        case OWALL:     break;
        !           238: 
        !           239:        case OANNIHILATION:     died(283); return;      /* annihilated by sphere of annihilation */
        !           240: 
        !           241:        case OLRS:      if (nearbymonst()) return;
        !           242:                                lprcat("\n\nThere is an LRS office here.");
        !           243:                                lprcat("\nDo you (g) go inside, or (i) stay here? ");
        !           244:                                i=0; while ((i!='g') && (i!='i') && (i!='\33')) i=getchar();
        !           245:                                if (i == 'g')
        !           246:                                        olrs();  /*  the larn revenue service */
        !           247:                                else  lprcat(" stay here");
        !           248:                                break;
        !           249: 
        !           250:        default:        finditem(i); break;
        !           251:        };
        !           252: }
        !           253: 
        !           254: /*
        !           255:        function to say what object we found and ask if player wants to take it
        !           256:  */
        !           257: finditem(itm)
        !           258:        int itm;
        !           259:        {
        !           260:        int tmp,i;
        !           261:        lprintf("\n\nYou have found %s ",objectname[itm]);
        !           262:        tmp=iarg[playerx][playery];
        !           263:        switch(itm)
        !           264:                {
        !           265:                case ODIAMOND:          case ORUBY:                     case OEMERALD:
        !           266:                case OSAPPHIRE:         case OSPIRITSCARAB:     case OORBOFDRAGON:
        !           267:                case OCUBEofUNDEAD:     case ONOTHEFT:  break;
        !           268: 
        !           269:                default:
        !           270:                if (tmp>0) lprintf("+ %d",(long)tmp); else if (tmp<0) lprintf(" %d",(long)tmp);
        !           271:                }
        !           272:        lprcat("\nDo you want to (t) take it"); iopts();
        !           273:        i=0; while (i!='t' && i!='i' && i!='\33') i=getchar();
        !           274:        if (i == 't')
        !           275:                {       lprcat("take");  if (take(itm,tmp)==0)  forget();       return; }
        !           276:        ignore();
        !           277:        }
        !           278: 
        !           279: 
        !           280: /*
        !           281:        *******
        !           282:        OSTAIRS
        !           283:        *******
        !           284: 
        !           285:        subroutine to process the stair cases
        !           286:        if dir > 0 the up else down
        !           287:  */
        !           288: ostairs(dir)
        !           289:        int dir;
        !           290:        {
        !           291:        register int k;
        !           292:        lprcat("\nDo you (s) stay here  ");
        !           293:        if (dir > 0)    lprcat("(u) go up  ");  else    lprcat("(d) go down  ");
        !           294:        lprcat("or (f) kick stairs? ");
        !           295: 
        !           296:        while (1) switch(getchar())
        !           297:                {
        !           298:                case '\33':
        !           299:                case 's':       case 'i':       lprcat("stay here");    return;
        !           300: 
        !           301:                case 'f':       lprcat("kick stairs");
        !           302:                                        if (rnd(2) == 1)
        !           303:                                                lprcat("\nI hope you feel better.  Showing anger rids you of frustration.");
        !           304:                                        else
        !           305:                                                {
        !           306:                                                k=rnd((level+1)<<1);
        !           307:                                                lprintf("\nYou hurt your foot dumb dumb!  You suffer %d hit points",(long)k);
        !           308:                                                lastnum=276;  losehp(k);  bottomline();
        !           309:                                                }
        !           310:                                        return;
        !           311: 
        !           312:                case 'u':       lprcat("go up");
        !           313:                                        if (dir < 0)    lprcat("\nThe stairs don't go up!");
        !           314:                                        else
        !           315:                                          if (level>=2 && level!=11)
        !           316:                                                {
        !           317:                                                k = level;  newcavelevel(level-1);
        !           318:                                                draws(0,MAXX,0,MAXY); bot_linex();
        !           319:                                                }
        !           320:                                          else lprcat("\nThe stairs lead to a dead end!");
        !           321:                                        return;
        !           322: 
        !           323:                case 'd':       lprcat("go down");
        !           324:                                        if (dir > 0)    lprcat("\nThe stairs don't go down!");
        !           325:                                        else
        !           326:                                          if (level!=0 && level!=10 && level!=13)
        !           327:                                                {
        !           328:                                                k = level;  newcavelevel(level+1);
        !           329:                                                draws(0,MAXX,0,MAXY); bot_linex();
        !           330:                                                }
        !           331:                                          else lprcat("\nThe stairs lead to a dead end!");
        !           332:                                        return;
        !           333:                };
        !           334:        }
        !           335: 
        !           336: 
        !           337: /*
        !           338:        *********
        !           339:        OTELEPORTER
        !           340:        *********
        !           341: 
        !           342:        subroutine to handle a teleport trap +/- 1 level maximum
        !           343:  */
        !           344: oteleport(err)
        !           345:        int err;
        !           346:        {
        !           347:        register int tmp;
        !           348:        if (err) if (rnd(151)<3)  died(264);  /*        stuck in a rock */
        !           349:        c[TELEFLAG]=1;  /*      show ?? on bottomline if been teleported        */
        !           350:        if (level==0) tmp=0;
        !           351:        else if (level < MAXLEVEL)
        !           352:                { tmp=rnd(5)+level-3; if (tmp>=MAXLEVEL) tmp=MAXLEVEL-1;
        !           353:                        if (tmp<1) tmp=1; }
        !           354:        else
        !           355:                { tmp=rnd(3)+level-2; if (tmp>=MAXLEVEL+MAXVLEVEL) tmp=MAXLEVEL+MAXVLEVEL-1;
        !           356:                        if (tmp<MAXLEVEL) tmp=MAXLEVEL; }
        !           357:        playerx = rnd(MAXX-2);  playery = rnd(MAXY-2);
        !           358:        if (level != tmp)       newcavelevel(tmp);  positionplayer();
        !           359:        draws(0,MAXX,0,MAXY); bot_linex();
        !           360:        }
        !           361: 
        !           362: /*
        !           363:        *******
        !           364:        OPOTION
        !           365:        *******
        !           366: 
        !           367:        function to process a potion
        !           368:  */
        !           369: opotion(pot)
        !           370:        int pot;
        !           371:        {
        !           372:        lprcat("\nDo you (d) drink it, (t) take it"); iopts();
        !           373:        while (1) switch(getchar())
        !           374:                {
        !           375:                case '\33':
        !           376:                case 'i':       ignore();  return;
        !           377: 
        !           378:                case 'd':       lprcat("drink\n");      forget();       /*      destroy potion  */
        !           379:                                        quaffpotion(pot);               return;
        !           380: 
        !           381:                case 't':       lprcat("take\n");       if (take(OPOTION,pot)==0)  forget();
        !           382:                                        return;
        !           383:                };
        !           384:        }
        !           385:                
        !           386: /*
        !           387:        function to drink a potion
        !           388:  */
        !           389: quaffpotion(pot)
        !           390:        int pot;
        !           391:        {
        !           392:        register int i,j,k;
        !           393:        if (pot<0 || pot>=MAXPOTION) return; /* check for within bounds */
        !           394:        potionname[pot][0] = ' ';
        !           395:        switch(pot)
        !           396:                {
        !           397:                case 9: lprcat("\nYou feel greedy . . .");   nap(2000);
        !           398:                                for (i=0; i<MAXY; i++)  for (j=0; j<MAXX; j++)
        !           399:                                  if ((item[j][i]==OGOLDPILE) || (item[j][i]==OMAXGOLD))
        !           400:                                        {
        !           401:                                        know[j][i]=1; show1cell(j,i);
        !           402:                                        }
        !           403:                                showplayer();  return;
        !           404: 
        !           405:                case 19: lprcat("\nYou feel greedy . . .");   nap(2000);
        !           406:                                for (i=0; i<MAXY; i++)  for (j=0; j<MAXX; j++)
        !           407:                                        {
        !           408:                                        k=item[j][i];
        !           409:                                        if ((k==ODIAMOND) || (k==ORUBY) || (k==OEMERALD) || (k==OMAXGOLD)
        !           410:                                                 || (k==OSAPPHIRE) || (k==OLARNEYE) || (k==OGOLDPILE))
        !           411:                                                 {
        !           412:                                                 know[j][i]=1; show1cell(j,i);
        !           413:                                                 }
        !           414:                                        }
        !           415:                                showplayer();  return;
        !           416: 
        !           417:                case 20: c[HP] = c[HPMAX]; break;       /* instant healing */
        !           418: 
        !           419:                case 1: lprcat("\nYou feel better");
        !           420:                                if (c[HP] == c[HPMAX])  raisemhp(1);
        !           421:                                else if ((c[HP] += rnd(20)+20+c[LEVEL]) > c[HPMAX]) c[HP]=c[HPMAX];  break;
        !           422: 
        !           423:                case 2: lprcat("\nSuddenly, you feel much more skillful!");
        !           424:                                raiselevel();  raisemhp(1); return;
        !           425: 
        !           426:                case 3: lprcat("\nYou feel strange for a moment"); 
        !           427:                                c[rund(6)]++;  break;
        !           428: 
        !           429:                case 4: lprcat("\nYou feel more self confident!");
        !           430:                                c[WISDOM] += rnd(2);  break;
        !           431: 
        !           432:                case 5: lprcat("\nWow!  You feel great!");
        !           433:                                if (c[STRENGTH]<12) c[STRENGTH]=12; else c[STRENGTH]++;  break;
        !           434: 
        !           435:                case 6: lprcat("\nYour charm went up by one!");  c[CHARISMA]++;  break;
        !           436: 
        !           437:                case 8: lprcat("\nYour intelligence went up by one!");
        !           438:                                c[INTELLIGENCE]++;  break;
        !           439: 
        !           440:                case 10: for (i=0; i<MAXY; i++)  for (j=0; j<MAXX; j++)
        !           441:                                   if (mitem[j][i])
        !           442:                                        {
        !           443:                                        know[j][i]=1; show1cell(j,i);
        !           444:                                        }
        !           445:                                 /*     monster detection       */  return;
        !           446: 
        !           447:                case 12: lprcat("\nThis potion has no taste to it");  return;
        !           448: 
        !           449:                case 15: lprcat("\nWOW!!!  You feel Super-fantastic!!!");
        !           450:                                 if (c[HERO]==0) for (i=0; i<6; i++) c[i] += 11;
        !           451:                                        c[HERO] += 250;  break;
        !           452: 
        !           453:                case 16: lprcat("\nYou have a greater intestinal constitude!");
        !           454:                                 c[CONSTITUTION]++;  break;
        !           455: 
        !           456:                case 17: lprcat("\nYou now have incredibly bulging muscles!!!");
        !           457:                                 if (c[GIANTSTR]==0) c[STREXTRA] += 21;
        !           458:                                 c[GIANTSTR] += 700;  break;
        !           459: 
        !           460:                case 18: lprcat("\nYou feel a chill run up your spine!");
        !           461:                                 c[FIRERESISTANCE] += 1000;  break;
        !           462: 
        !           463:                case 0: lprcat("\nYou fall asleep. . .");
        !           464:                                i=rnd(11)-(c[CONSTITUTION]>>2)+2;  while(--i>0) { parse2();  nap(1000); }
        !           465:                                cursors();  lprcat("\nYou woke up!");  return;
        !           466: 
        !           467:                case 7: lprcat("\nYou become dizzy!");
        !           468:                                if (--c[STRENGTH] < 3) c[STRENGTH]=3;  break;
        !           469: 
        !           470:                case 11: lprcat("\nYou stagger for a moment . .");
        !           471:                                 for (i=0; i<MAXY; i++)  for (j=0; j<MAXX; j++)
        !           472:                                        know[j][i]=0;
        !           473:                                 nap(2000);     draws(0,MAXX,0,MAXY); /* potion of forgetfulness */  return;
        !           474: 
        !           475:                case 13: lprcat("\nYou can't see anything!");  /* blindness */
        !           476:                                 c[BLINDCOUNT]+=500;  return;
        !           477: 
        !           478:                case 14: lprcat("\nYou feel confused"); c[CONFUSE]+= 20+rnd(9); return;
        !           479: 
        !           480:                case 21: lprcat("\nYou don't seem to be affected");  return; /* cure dianthroritis */
        !           481: 
        !           482:                case 22: lprcat("\nYou feel a sickness engulf you"); /* poison */
        !           483:                                 c[HALFDAM] += 200 + rnd(200);  return;
        !           484: 
        !           485:                case 23: lprcat("\nYou feel your vision sharpen");      /* see invisible */
        !           486:                                 c[SEEINVISIBLE] += rnd(1000)+400;
        !           487:                                 monstnamelist[INVISIBLESTALKER] = 'I';  return;
        !           488:                };
        !           489:        bottomline();           /*      show new stats          */  return;
        !           490:        }
        !           491: 
        !           492: /*
        !           493:        *******
        !           494:        OSCROLL
        !           495:        *******
        !           496: 
        !           497:        function to process a magic scroll
        !           498:  */
        !           499: oscroll(typ)
        !           500:        int typ;
        !           501:        {
        !           502:        lprcat("\nDo you ");
        !           503:        if (c[BLINDCOUNT]==0) lprcat("(r) read it, "); lprcat("(t) take it"); iopts();
        !           504:        while (1) switch(getchar())
        !           505:                {
        !           506:                case '\33':
        !           507:                case 'i':       ignore();  return;
        !           508: 
        !           509:                case 'r':       if (c[BLINDCOUNT]) break;
        !           510:                                        lprcat("read"); forget();
        !           511:                                        if (typ==2 || typ==15)  { show1cell(playerx,playery); cursors(); }
        !           512:                                        /*      destroy it      */      read_scroll(typ);  return;
        !           513: 
        !           514:                case 't':       lprcat("take"); if (take(OSCROLL,typ)==0)       forget();       /*      destroy it      */
        !           515:                                        return;
        !           516:                };
        !           517:        }
        !           518: 
        !           519: /*
        !           520:        data for the function to read a scroll
        !           521:  */
        !           522: static int xh,yh,yl,xl;
        !           523: static char curse[] = { BLINDCOUNT, CONFUSE, AGGRAVATE, HASTEMONST, ITCHING,
        !           524:        LAUGHING, DRAINSTRENGTH, CLUMSINESS, INFEEBLEMENT, HALFDAM };
        !           525: static char exten[] = { PROTECTIONTIME, DEXCOUNT, STRCOUNT, CHARMCOUNT,
        !           526:        INVISIBILITY, CANCELLATION, HASTESELF, GLOBE, SCAREMONST, HOLDMONST, TIMESTOP };
        !           527: char time_change[] = { HASTESELF,HERO,ALTPRO,PROTECTIONTIME,DEXCOUNT,
        !           528:        STRCOUNT,GIANTSTR,CHARMCOUNT,INVISIBILITY,CANCELLATION,
        !           529:        HASTESELF,AGGRAVATE,SCAREMONST,STEALTH,AWARENESS,HOLDMONST,HASTEMONST,
        !           530:        FIRERESISTANCE,GLOBE,SPIRITPRO,UNDEADPRO,HALFDAM,SEEINVISIBLE,
        !           531:        ITCHING,CLUMSINESS, WTW };
        !           532: /*
        !           533:  *     function to adjust time when time warping and taking courses in school
        !           534:  */
        !           535: adjtime(tim)
        !           536:        register long tim;
        !           537:        {
        !           538:        register int j;
        !           539:        for (j=0; j<26; j++)    /* adjust time related parameters */
        !           540:                if (c[time_change[j]])
        !           541:                        if ((c[time_change[j]] -= tim) < 1) c[time_change[j]]=1;
        !           542:        regen();
        !           543:        }
        !           544: 
        !           545: /*
        !           546:        function to read a scroll
        !           547:  */
        !           548: read_scroll(typ)
        !           549:        int typ;
        !           550:        {
        !           551:        register int i,j;
        !           552:        if (typ<0 || typ>=MAXSCROLL) return;  /* be sure we are within bounds */
        !           553:        scrollname[typ][0] = ' ';
        !           554:        switch(typ)
        !           555:          {
        !           556:          case 0:       lprcat("\nYour armor glows for a moment");  enchantarmor(); return;
        !           557: 
        !           558:          case 1:       lprcat("\nYour weapon glows for a moment"); enchweapon(); return;  /* enchant weapon */
        !           559: 
        !           560:          case 2:       lprcat("\nYou have been granted enlightenment!");
        !           561:                                yh = min(playery+7,MAXY);       xh = min(playerx+25,MAXX);
        !           562:                                yl = max(playery-7,0);          xl = max(playerx-25,0);
        !           563:                                for (i=yl; i<yh; i++) for (j=xl; j<xh; j++)  know[j][i]=1;
        !           564:                                nap(2000);      draws(xl,xh,yl,yh);     return;
        !           565: 
        !           566:          case 3:       lprcat("\nThis scroll seems to be blank");      return;
        !           567: 
        !           568:          case 4:       createmonster(makemonst(level+1));  return;  /*  this one creates a monster  */
        !           569: 
        !           570:          case 5:       something(level);       /*      create artifact         */  return;
        !           571: 
        !           572:          case 6:       c[AGGRAVATE]+=800; return; /* aggravate monsters */
        !           573: 
        !           574:          case 7:       gtime += (i = rnd(1000) - 850); /* time warp */ 
        !           575:                                if (i>=0) lprintf("\nYou went forward in time by %d mobuls",(long)((i+99)/100));
        !           576:                                else lprintf("\nYou went backward in time by %d mobuls",(long)(-(i+99)/100));
        !           577:                                adjtime((long)i);       /* adjust time for time warping */
        !           578:                                return;
        !           579: 
        !           580:          case 8:       oteleport(0);     return;       /*      teleportation */
        !           581: 
        !           582:          case 9:       c[AWARENESS] += 1800;  return;  /* expanded awareness   */
        !           583: 
        !           584:          case 10:      c[HASTEMONST] += rnd(55)+12; return;    /* haste monster */
        !           585: 
        !           586:          case 11:      for (i=0; i<MAXY; i++)  for (j=0; j<MAXX; j++)
        !           587:                                        if (mitem[j][i])
        !           588:                                                hitp[j][i] = monster[mitem[j][i]].hitpoints;
        !           589:                                return; /* monster healing */
        !           590:          case 12:      c[SPIRITPRO] += 300 + rnd(200); bottomline(); return; /* spirit protection */
        !           591: 
        !           592:          case 13:      c[UNDEADPRO] += 300 + rnd(200); bottomline(); return; /* undead protection */
        !           593: 
        !           594:          case 14:      c[STEALTH] += 250 + rnd(250);  bottomline(); return; /* stealth */
        !           595: 
        !           596:          case 15:      lprcat("\nYou have been granted enlightenment!"); /* magic mapping */
        !           597:                                for (i=0; i<MAXY; i++) for (j=0; j<MAXX; j++)  know[j][i]=1;
        !           598:                                nap(2000);      draws(0,MAXX,0,MAXY);   return;
        !           599: 
        !           600:          case 16:      c[HOLDMONST] += 30; bottomline(); return; /* hold monster */
        !           601: 
        !           602:          case 17:      for (i=0; i<26; i++)    /* gem perfection */
        !           603:                                        switch(iven[i])
        !           604:                                                {
        !           605:                                                case ODIAMOND:  case ORUBY:
        !           606:                                                case OEMERALD:  case OSAPPHIRE:
        !           607:                                                        j = ivenarg[i];  j &= 255;  j <<= 1;
        !           608:                                                        if (j  > 255) j=255; /* double value */
        !           609:                                                        ivenarg[i] = j; break;
        !           610:                                                }
        !           611:                                break;
        !           612: 
        !           613:          case 18:      for (i=0; i<11; i++)    c[exten[i]] <<= 1; /* spell extension */
        !           614:                                break;
        !           615: 
        !           616:          case 19:      for (i=0; i<26; i++)    /* identify */
        !           617:                                        {
        !           618:                                        if (iven[i]==OPOTION)  potionname[ivenarg[i]][0] = ' ';
        !           619:                                        if (iven[i]==OSCROLL)  scrollname[ivenarg[i]][0] = ' ';
        !           620:                                        }
        !           621:                                break;
        !           622: 
        !           623:          case 20:      for (i=0; i<10; i++)    /* remove curse */
        !           624:                                        if (c[curse[i]]) c[curse[i]] = 1;
        !           625:                                break;
        !           626: 
        !           627:          case 21:      annihilate();   break;  /* scroll of annihilation */
        !           628: 
        !           629:          case 22:      godirect(22,150,"The ray hits the %s",0,' ');   /* pulverization */
        !           630:                                break;
        !           631:          case 23:  c[LIFEPROT]++;  break; /* life protection */
        !           632:          };
        !           633:        }
        !           634: 
        !           635: 
        !           636: oorb()
        !           637:        {
        !           638:        }
        !           639: 
        !           640: opit()
        !           641:        {
        !           642:        register int i;
        !           643:        if (rnd(101)<81)
        !           644:          if (rnd(70) > 9*c[DEXTERITY]-packweight() || rnd(101)<5)
        !           645:                if (level==MAXLEVEL-1) obottomless(); else
        !           646:                if (level==MAXLEVEL+MAXVLEVEL-1) obottomless(); else
        !           647:                        {
        !           648:                        if (rnd(101)<20)
        !           649:                                {
        !           650:                                i=0; lprcat("\nYou fell into a pit!  Your fall is cushioned by an unknown force\n");
        !           651:                                }
        !           652:                        else
        !           653:                                {
        !           654:                                i = rnd(level*3+3);
        !           655:                                lprintf("\nYou fell into a pit!  You suffer %d hit points damage",(long)i);
        !           656:                                lastnum=261;    /*      if he dies scoreboard will say so */
        !           657:                                }
        !           658:                        losehp(i); nap(2000);  newcavelevel(level+1);  draws(0,MAXX,0,MAXY);
        !           659:                        }
        !           660:        }
        !           661: 
        !           662: obottomless()
        !           663:        {
        !           664:        lprcat("\nYou fell into a bottomless pit!");  beep(); nap(3000);  died(262);
        !           665:        }
        !           666: oelevator(dir)
        !           667:        int dir;
        !           668:        {
        !           669: #ifdef lint
        !           670:        int x;
        !           671:        x=dir;
        !           672:        dir=x;
        !           673: #endif lint
        !           674:        }
        !           675: 
        !           676: ostatue()
        !           677:        {
        !           678:        }
        !           679: 
        !           680: omirror()
        !           681:        {
        !           682:        }
        !           683: 
        !           684: obook()
        !           685:        {
        !           686:        lprcat("\nDo you ");
        !           687:        if (c[BLINDCOUNT]==0) lprcat("(r) read it, "); lprcat("(t) take it"); iopts();
        !           688:        while (1) switch(getchar())
        !           689:                {
        !           690:                case '\33':
        !           691:                case 'i':       ignore();       return;
        !           692: 
        !           693:                case 'r':       if (c[BLINDCOUNT]) break;
        !           694:                                        lprcat("read");
        !           695:                                        /* no more book */      readbook(iarg[playerx][playery]);  forget(); return;
        !           696: 
        !           697:                case 't':       lprcat("take");  if (take(OBOOK,iarg[playerx][playery])==0)  forget();  /* no more book */
        !           698:                                        return;
        !           699:                };
        !           700:        }
        !           701: 
        !           702: /*
        !           703:        function to read a book
        !           704:  */
        !           705: readbook(lev)
        !           706:        register int lev;
        !           707:        {
        !           708:        register int i,tmp;
        !           709:        if (lev<=3) i = rund((tmp=splev[lev])?tmp:1); else
        !           710:                i = rnd((tmp=splev[lev]-9)?tmp:1) + 9;
        !           711:        spelknow[i]=1;
        !           712:        lprintf("\nSpell \"%s\":  %s\n%s",spelcode[i],spelname[i],speldescript[i]);
        !           713:        if (rnd(10)==4)
        !           714:         { lprcat("\nYour int went up by one!"); c[INTELLIGENCE]++; bottomline(); }
        !           715:        }
        !           716: 
        !           717: ocookie()
        !           718:        {
        !           719:        char *p;
        !           720:        lprcat("\nDo you (e) eat it, (t) take it"); iopts();
        !           721:        while (1) switch(getchar())
        !           722:                {
        !           723:                case '\33':
        !           724:                case 'i':       ignore();       return;
        !           725: 
        !           726:                case 'e':       lprcat("eat\nThe cookie tasted good.");
        !           727:                                        forget(); /* no more cookie     */
        !           728:                                        if (c[BLINDCOUNT]) return;
        !           729:                                        if (!(p=fortune(fortfile))) return;
        !           730:                                        lprcat("  A message inside the cookie reads:\n"); lprcat(p);
        !           731:                                        return;
        !           732: 
        !           733:                case 't':       lprcat("take");  if (take(OCOOKIE,0)==0) forget();      /* no more book */
        !           734:                                        return;
        !           735:                };
        !           736:        }
        !           737: 
        !           738: 
        !           739: /* routine to pick up some gold -- if arg==OMAXGOLD then the pile is worth 100* the argument */
        !           740: ogold(arg)
        !           741:        int arg;
        !           742:        {
        !           743:        register long i;
        !           744:        i = iarg[playerx][playery];
        !           745:        if (arg==OMAXGOLD) i *= 100;
        !           746:                else if (arg==OKGOLD) i *= 1000;
        !           747:                        else if (arg==ODGOLD) i *= 10;
        !           748:        lprintf("\nIt is worth %d!",(long)i);   c[GOLD] += i;  bottomgold();
        !           749:        item[playerx][playery] = know[playerx][playery] = 0; /* destroy gold    */
        !           750:        }
        !           751: 
        !           752: ohome()
        !           753:        {
        !           754:        register int i;
        !           755:        nosignal = 1;   /* disable signals */
        !           756:        for (i=0; i<26; i++) if (iven[i]==OPOTION) if (ivenarg[i]==21)
        !           757:                {
        !           758:                iven[i]=0;      /* remove the potion of cure dianthroritis from inventory */
        !           759:                clear(); lprcat("Congratulations.  You found a potion of cure dianthroritis.\n");
        !           760:                lprcat("\nFrankly, No one thought you could do it.  Boy!  Did you surprise them!\n");
        !           761:                if (gtime>TIMELIMIT)
        !           762:                        {
        !           763:                        lprcat("\nThe doctor has the sad duty to inform you that your daughter died!\n");
        !           764:                        lprcat("You didn't make it in time.  In your agony, you kill the doctor,\nyour wife, and yourself!  Too bad!\n");
        !           765:                        nap(5000); died(269);
        !           766:                        }
        !           767:                else
        !           768:                        {
        !           769:                        lprcat("\nThe doctor is now administering the potion, and in a few moments\n");
        !           770:                        lprcat("Your daughter should be well on her way to recovery.\n");
        !           771:                        nap(6000);
        !           772:                        lprcat("\nThe potion is"); nap(3000); lprcat(" working!  The doctor thinks that\n");
        !           773:                        lprcat("your daughter will recover in a few days.  Congratulations!\n");
        !           774:                        beep(); nap(5000); died(263);
        !           775:                        }
        !           776:                }
        !           777: 
        !           778:        while (1)
        !           779:                {
        !           780:                clear(); lprintf("Welcome home %s.  Latest word from the doctor is not good.\n",logname);
        !           781: 
        !           782:                if (gtime>TIMELIMIT)
        !           783:                        {
        !           784:                        lprcat("\nThe doctor has the sad duty to inform you that your daughter died!\n");
        !           785:                        lprcat("You didn't make it in time.  In your agony, you kill the doctor,\nyour wife, and yourself!  Too bad!\n");
        !           786:                        nap(5000); died(269);
        !           787:                        }
        !           788: 
        !           789:                lprcat("\nThe diagnosis is confirmed as dianthroritis.  He guesses that\n");
        !           790:                lprintf("your daughter has only %d mobuls left in this world.  It's up to you,\n",(long)((TIMELIMIT-gtime+99)/100));
        !           791:                lprintf("%s, to find the only hope for your daughter, the very rare\n",logname);
        !           792:                lprcat("potion of cure dianthroritis.  It is rumored that only deep in the\n");
        !           793:                lprcat("depths of the caves can this potion be found.\n\n\n");
        !           794:                lprcat("\n     ----- press "); standout("return");
        !           795:                lprcat(" to continue, "); standout("escape");
        !           796:                lprcat(" to leave ----- ");
        !           797:                i=getchar();  while (i!='\33' && i!='\n') i=getchar();
        !           798:                if (i=='\33') { drawscreen(); nosignal = 0; /* enable signals */ return; }
        !           799:                }
        !           800:        }
        !           801: 
        !           802: /*     routine to save program space   */
        !           803: iopts()
        !           804:        {       lprcat(", or (i) ignore it? "); }
        !           805: ignore()
        !           806:        {       lprcat("ignore\n");     }
        !           807: 

unix.superglobalmegacorp.com

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