Annotation of 43BSDReno/games/larn/moreobj.c, revision 1.1.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.