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

1.1     ! root        1: /* moreobj.c           Larn is copyrighted 1986 by Noah Morgan.
        !             2:  *
        !             3:  *     Routines in this file:
        !             4:  *
        !             5:  *     oaltar()
        !             6:  *     othrone()
        !             7:  *     ochest()
        !             8:  *     ofountain()
        !             9:  */
        !            10: #include "header.h"
        !            11: 
        !            12: /*
        !            13:  *     ******
        !            14:  *     OALTAR
        !            15:  *     ******
        !            16:  *
        !            17:  *     subroutine to process an altar object
        !            18:  */
        !            19: oaltar()
        !            20:        {
        !            21:        unsigned long k;
        !            22: 
        !            23:        lprcat("\nDo you (p) pray  (d) desecrate"); iopts();
        !            24:        while (1)
        !            25:          {
        !            26:          while (1) switch(getchar())
        !            27:                {
        !            28:                case 'p':       lprcat(" pray\nDo you (m) give money or (j) just pray? ");
        !            29:                                        while (1) switch(getchar())
        !            30:                                          {
        !            31:                                          case 'j':     if (rnd(100)<75) 
        !            32:                                                                        lprcat("\nnothing happens");
        !            33:                                                                else if (rnd(13)<4) ohear();
        !            34:                                                                else if (rnd(43) == 10)
        !            35:                                                                        {
        !            36:                                                                        if (c[WEAR]) lprcat("\nYou feel your armor vibrate for a moment");
        !            37:                                                                        enchantarmor(); return;
        !            38:                                                                        }
        !            39:                                                                else if (rnd(43) == 10)
        !            40:                                                                        {
        !            41:                                                                        if (c[WIELD]) lprcat("\nYou feel your weapon vibrate for a moment");
        !            42:                                                                        enchweapon(); return;
        !            43:                                                                        }
        !            44:                                                                else createmonster(makemonst(level+1));
        !            45:                                                                return;
        !            46: 
        !            47:                                          case 'm':     lprcat("\n\n");  cursor(1,24);  cltoeoln();
        !            48:                                                                cursor(1,23);  cltoeoln();
        !            49:                                                                lprcat("how much do you donate? ");
        !            50:                                                                k = readnum((long)c[GOLD]);
        !            51:                                                                if (c[GOLD]<k)
        !            52:                                                                        {
        !            53:                                                                        lprcat("\nYou don't have that much!");
        !            54:                                                                        return;
        !            55:                                                                        }
        !            56:                                                                c[GOLD] -= k;
        !            57:                                                                if (k < c[GOLD]/10 || k<rnd(50))
        !            58:                                                                        { createmonster(makemonst(level+1)); c[AGGRAVATE] += 200; }
        !            59:                                                                else if (rnd(101) > 50) { ohear(); return; }
        !            60:                                                                else if (rnd(43) == 5)
        !            61:                                                                        {
        !            62:                                                                        if (c[WEAR]) lprcat("\nYou feel your armor vibrate for a moment");
        !            63:                                                                        enchantarmor(); return;
        !            64:                                                                        }
        !            65:                                                                else if (rnd(43) == 8)
        !            66:                                                                        {
        !            67:                                                                        if (c[WIELD]) lprcat("\nYou feel your weapon vibrate for a moment");
        !            68:                                                                        enchweapon(); return;
        !            69:                                                                        }
        !            70:                                                                else    lprcat("\nThank You.");
        !            71:                                                                bottomline();   return;
        !            72: 
        !            73:                                          case '\33':   return;
        !            74:                                          };
        !            75: 
        !            76:                case 'd': lprcat(" desecrate");
        !            77:                                  if (rnd(100)<60)
        !            78:                                                { createmonster(makemonst(level+2)+8); c[AGGRAVATE] += 2500; }
        !            79:                                        else
        !            80:                                        if (rnd(101)<30)
        !            81:                                                {
        !            82:                                                lprcat("\nThe altar crumbles into a pile of dust before your eyes");
        !            83:                                                forget();       /*      remember to destroy the altar   */
        !            84:                                                }
        !            85:                                        else
        !            86:                                                lprcat("\nnothing happens");
        !            87:                                        return;
        !            88: 
        !            89:                case 'i':
        !            90:                case '\33': ignore();
        !            91:                                  if (rnd(100)<30)      { createmonster(makemonst(level+1)); c[AGGRAVATE] += rnd(450); }
        !            92:                                        else    lprcat("\nnothing happens");
        !            93:                                        return;
        !            94:                };
        !            95:          }
        !            96:        }
        !            97: 
        !            98: /*
        !            99:        function to cast a +3 protection on the player
        !           100:  */
        !           101: static ohear()
        !           102:        {
        !           103:        lprcat("\nYou have been heard!");
        !           104:        if (c[ALTPRO]==0) c[MOREDEFENSES]+=3;
        !           105:        c[ALTPRO] += 500;       /* protection field */
        !           106:        bottomline();
        !           107:        }
        !           108: 
        !           109: /*
        !           110:        *******
        !           111:        OTHRONE
        !           112:        *******
        !           113: 
        !           114:        subroutine to process a throne object
        !           115:  */
        !           116: othrone(arg)
        !           117:        int arg;
        !           118:        {
        !           119:        register int i,k;
        !           120: 
        !           121:        lprcat("\nDo you (p) pry off jewels, (s) sit down"); iopts();
        !           122:        while (1)
        !           123:          {
        !           124:          while (1) switch(getchar())
        !           125:                {
        !           126:                case 'p':       lprcat(" pry off");  k=rnd(101);
        !           127:                                        if (k<25)
        !           128:                                                {
        !           129:                                                for (i=0; i<rnd(4); i++) creategem(); /* gems pop off the throne */
        !           130:                                                item[playerx][playery]=ODEADTHRONE;
        !           131:                                                know[playerx][playery]=0;
        !           132:                                                }
        !           133:                                        else if (k<40 && arg==0)
        !           134:                                                {
        !           135:                                                createmonster(GNOMEKING);
        !           136:                                                item[playerx][playery]=OTHRONE2;
        !           137:                                                know[playerx][playery]=0;
        !           138:                                                }
        !           139:                                        else lprcat("\nnothing happens");
        !           140:                                        return;
        !           141: 
        !           142:                case 's':       lprcat(" sit down");  k=rnd(101);
        !           143:                                        if (k<30 && arg==0)
        !           144:                                                {
        !           145:                                                createmonster(GNOMEKING);
        !           146:                                                item[playerx][playery]=OTHRONE2;
        !           147:                                                know[playerx][playery]=0;
        !           148:                                                }
        !           149:                                        else if (k<35) { lprcat("\nZaaaappp!  You've been teleported!\n"); beep(); oteleport(0); }
        !           150:                                        else lprcat("\nnothing happens");
        !           151:                                        return;
        !           152: 
        !           153:                case 'i':
        !           154:                case '\33': ignore(); return;
        !           155:                };
        !           156:          }
        !           157:        }
        !           158: 
        !           159: odeadthrone()
        !           160:        {
        !           161:        register int k;
        !           162: 
        !           163:        lprcat("\nDo you (s) sit down"); iopts();
        !           164:        while (1)
        !           165:          {
        !           166:          while (1) switch(getchar())
        !           167:                {
        !           168:                case 's':       lprcat(" sit down");  k=rnd(101);
        !           169:                                        if (k<35) { lprcat("\nZaaaappp!  You've been teleported!\n"); beep(); oteleport(0); }
        !           170:                                        else lprcat("\nnothing happens");
        !           171:                                        return;
        !           172: 
        !           173:                case 'i':
        !           174:                case '\33': ignore(); return;
        !           175:                };
        !           176:          }
        !           177:        }
        !           178: 
        !           179: /*
        !           180:        ******
        !           181:        OCHEST
        !           182:        ******
        !           183: 
        !           184:        subroutine to process a throne object
        !           185:  */
        !           186: ochest()
        !           187:        {
        !           188:        register int i,k;
        !           189:        lprcat("\nDo you (t) take it, (o) try to open it"); iopts();
        !           190:        while (1)
        !           191:          {
        !           192:          while (1) switch(getchar())
        !           193:                {
        !           194:                case 'o':       lprcat(" open it");  k=rnd(101);
        !           195:                                        if (k<40)
        !           196:                                                {
        !           197:                                                lprcat("\nThe chest explodes as you open it"); beep();
        !           198:                                                i = rnd(10);  lastnum=281;  /* in case he dies */
        !           199:                                                lprintf("\nYou suffer %d hit points damage!",(long)i);
        !           200:                                                checkloss(i);
        !           201:                                                switch(rnd(10)) /* see if he gets a curse */
        !           202:                                                        {
        !           203:                                                        case 1: c[ITCHING]+= rnd(1000)+100;
        !           204:                                                                        lprcat("\nYou feel an irritation spread over your skin!");
        !           205:                                                                        beep();
        !           206:                                                                        break;
        !           207: 
        !           208:                                                        case 2: c[CLUMSINESS]+= rnd(1600)+200;
        !           209:                                                                        lprcat("\nYou begin to lose hand to eye coordination!");
        !           210:                                                                        beep();
        !           211:                                                                        break;
        !           212:                                                        
        !           213:                                                        case 3: c[HALFDAM]+= rnd(1600)+200;
        !           214:                                                                        beep();
        !           215:                                                                        lprcat("\nA sickness engulfs you!");    break;
        !           216:                                                        };
        !           217:                                                item[playerx][playery]=know[playerx][playery]=0;
        !           218:                                                if (rnd(100)<69) creategem(); /* gems from the chest */
        !           219:                                                dropgold(rnd(110*iarg[playerx][playery]+200));
        !           220:                                                for (i=0; i<rnd(4); i++) something(iarg[playerx][playery]+2);
        !           221:                                                }
        !           222:                                        else lprcat("\nnothing happens");
        !           223:                                        return;
        !           224: 
        !           225:                case 't':       lprcat(" take");
        !           226:                                        if (take(OCHEST,iarg[playerx][playery])==0)
        !           227:                                                item[playerx][playery]=know[playerx][playery]=0;
        !           228:                                        return;
        !           229: 
        !           230:                case 'i':
        !           231:                case '\33': ignore(); return;
        !           232:                };
        !           233:          }
        !           234:        }
        !           235: 
        !           236: /*
        !           237:        *********
        !           238:        OFOUNTAIN
        !           239:        *********
        !           240:  */
        !           241: 
        !           242: ofountain()
        !           243:        {
        !           244:        register int x;
        !           245:        cursors();
        !           246:        lprcat("\nDo you (d) drink, (w) wash yourself"); iopts();
        !           247:        while (1) switch(getchar())
        !           248:                {
        !           249:                case 'd':       lprcat("drink");
        !           250:                                        if (rnd(1501)<2)
        !           251:                                                {
        !           252:                                                lprcat("\nOops!  You seem to have caught the dreadful sleep!");
        !           253:                                                beep(); lflush();  sleep(3);  died(280); return;
        !           254:                                                }
        !           255:                                        x = rnd(100);
        !           256:                                        if (x<7)
        !           257:                                                {
        !           258:                                                c[HALFDAM] += 200+rnd(200);
        !           259:                                                lprcat("\nYou feel a sickness coming on");
        !           260:                                                }
        !           261:                                        else if (x<13) quaffpotion(23); /* see invisible */
        !           262:                                        else if (x < 45)
        !           263:                                                lprcat("\nnothing seems to have happened");
        !           264:                                        else if (rnd(3) != 2)
        !           265:                                                fntchange(1);   /*      change char levels upward       */
        !           266:                                        else
        !           267:                                                fntchange(-1);  /*      change char levels downward     */
        !           268:                                        if (rnd(12)<3)
        !           269:                                                {
        !           270:                                                lprcat("\nThe fountains bubbling slowly quiets");
        !           271:                                                item[playerx][playery]=ODEADFOUNTAIN; /* dead fountain */
        !           272:                                                know[playerx][playery]=0;
        !           273:                                                }
        !           274:                                        return;
        !           275: 
        !           276:                case '\33':
        !           277:                case 'i':       ignore();  return;
        !           278: 
        !           279:                case 'w':       lprcat("wash yourself");
        !           280:                                        if (rnd(100) < 11)
        !           281:                                                {
        !           282:                                                x=rnd((level<<2)+2);
        !           283:                                                lprintf("\nOh no!  The water was foul!  You suffer %d hit points!",(long)x);
        !           284:                                                lastnum=273; losehp(x); bottomline();  cursors();
        !           285:                                                }
        !           286:                                        else
        !           287:                                        if (rnd(100) < 29)
        !           288:                                                lprcat("\nYou got the dirt off!");
        !           289:                                        else
        !           290:                                        if (rnd(100) < 31)
        !           291:                                                lprcat("\nThis water seems to be hard water!  The dirt didn't come off!");
        !           292:                                        else
        !           293:                                        if (rnd(100) < 34)
        !           294:                                                createmonster(WATERLORD); /*    make water lord         */
        !           295:                                        else
        !           296:                                        lprcat("\nnothing seems to have happened");
        !           297:                                        return;
        !           298:                }
        !           299:        }
        !           300: 
        !           301: /*
        !           302:        a subroutine to raise or lower character levels
        !           303:        if x > 0 they are raised   if x < 0 they are lowered
        !           304:  */
        !           305: fntchange(how)
        !           306:        int how;
        !           307:        {
        !           308:        register long j;
        !           309:        lprc('\n');
        !           310:        switch(rnd(9))
        !           311:                {
        !           312:                case 1: lprcat("Your strength");                fch(how,&c[0]);         break;
        !           313:                case 2: lprcat("Your intelligence");    fch(how,&c[1]);         break;
        !           314:                case 3: lprcat("Your wisdom");                  fch(how,&c[2]);         break;
        !           315:                case 4: lprcat("Your constitution");    fch(how,&c[3]);         break;
        !           316:                case 5: lprcat("Your dexterity");               fch(how,&c[4]);         break;
        !           317:                case 6: lprcat("Your charm");                   fch(how,&c[5]);         break;
        !           318:                case 7: j=rnd(level+1);
        !           319:                                if (how < 0)
        !           320:                                        { lprintf("You lose %d hit point",(long)j);  if (j>1) lprcat("s!"); else lprc('!'); losemhp((int)j); }
        !           321:                                else
        !           322:                                        { lprintf("You gain %d hit point",(long)j);  if (j>1) lprcat("s!"); else lprc('!'); raisemhp((int)j); }
        !           323:                                bottomline();           break;
        !           324: 
        !           325:                case 8: j=rnd(level+1);
        !           326:                                if (how > 0)
        !           327:                                        {
        !           328:                                        lprintf("You just gained %d spell",(long)j);  raisemspells((int)j);
        !           329:                                        if (j>1) lprcat("s!"); else lprc('!');
        !           330:                                        }
        !           331:                                else
        !           332:                                        {
        !           333:                                        lprintf("You just lost %d spell",(long)j);      losemspells((int)j);
        !           334:                                        if (j>1) lprcat("s!"); else lprc('!');
        !           335:                                        }
        !           336:                                bottomline();           break;
        !           337: 
        !           338:                case 9: j = 5*rnd((level+1)*(level+1));
        !           339:                                if (how < 0)
        !           340:                                        {
        !           341:                                        lprintf("You just lost %d experience point",(long)j);
        !           342:                                        if (j>1) lprcat("s!"); else lprc('!'); loseexperience((long)j);
        !           343:                                        }
        !           344:                                else
        !           345:                                        {
        !           346:                                        lprintf("You just gained %d experience point",(long)j);
        !           347:                                        if (j>1) lprcat("s!"); else lprc('!'); raiseexperience((long)j);
        !           348:                                        }
        !           349:                                break;
        !           350:                }
        !           351:        cursors();
        !           352:        }
        !           353: 
        !           354: /*
        !           355:        ***
        !           356:        FCH
        !           357:        ***
        !           358: 
        !           359:        subroutine to process an up/down of a character attribute for ofountain
        !           360:  */
        !           361: static fch(how,x)
        !           362:        int how;
        !           363:        long *x;
        !           364:        {
        !           365:        if (how < 0)     { lprcat(" went down by one!");        --(*x); }
        !           366:                else             { lprcat(" went up by one!");  (*x)++; }
        !           367:        bottomline();
        !           368:        }

unix.superglobalmegacorp.com

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