home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / w / worldsrc.zip / VERBS2.C < prev    next >
C/C++ Source or Header  |  1992-08-13  |  34KB  |  1,468 lines

  1. #define EXTERN extern
  2.  
  3. #include "parame.inc"
  4. #include "variab.h"
  5. #include "arrays.h"
  6.  
  7. /* World C Version 1.00 copyright 1987 J.D.McDonald 
  8.    Use as you like for non-commercial purposes, but please
  9.    leave this note, and document any changes you make as yours */
  10.  
  11. vpunch()
  12. {
  13.     int             result, spk;
  14.     result = 0;
  15.     if (dobjs[0] == SEED || dobjs[0] == SPHERE) {
  16.     result = 1;
  17.     return (result);
  18.     }
  19.     spk = 286;
  20.     if (dobjs[0] == LOUVER) {
  21.     if (loc == 98 || loc == 142) {
  22.         spk = 282;
  23.         obimpr[ZLOUVE] = 9;
  24.     } else
  25.             spk = 66;
  26.     } else if (dobjs[0] == GUARD) {
  27.     if (loc == guardl || loc == 171 || (chaset != 0 && chaset <= 9))
  28.         spk = 562;
  29.     else if(loc >= 153)
  30.         spk = 561;
  31.         else
  32.             spk = 251;
  33.     } else if (dobjs[0] == ROBOT || dobjs[0] == FERRET)
  34.     spk = 285;
  35.     else if (dobjs[0] == MARTIA && loc >= 27 && loc <= 51)
  36.     spk = 307;
  37.     else if (dobjs[0] == VINE && loc == 74 && (obimpr[ZVINE] & 56) == 8) {
  38.     spk = 306;
  39.     if (pct(33))
  40.         spk = 302;
  41.     else if (pct(50))
  42.         spk = 305;
  43.     else;
  44.     }
  45.     speak(spk);
  46.     return (result);
  47. }
  48.  
  49. vput()
  50. {
  51.     int             result, plce, zplce, spk, obj, cplce, xiobj, ioplce, ambig;
  52.     int             csize, cinsid, i, ncarrd, nweigh, kcarrd, kweigh;
  53.     int             z, size, weigh, plural;
  54.  
  55.     result = 0;
  56.     if ((prepdo == ON && prepio == 0) || (prepio == ON && iobj == ME)) {
  57.     prepio = 0;
  58.     prepdo = 0;
  59.     result = 1;
  60.     /* this results in calling vwear  */
  61.  
  62.     return (result);
  63.     }
  64.     if ((prepio == IN && iobj == BOWL) || prepdo == DOWN) {
  65.     /* call drop to put things in bowl  */
  66.  
  67.     if (prepdo == DOWN)
  68.         prepdo = 0;
  69.     result = 2;
  70.     return (result);
  71.     }
  72.     if (dobjs[0] == WATER && dobjs[1] == 0 && iobj == FUNNEL) {
  73.     result = 3;
  74.     return (result);
  75.     }
  76.     /* code for put latex on pole   */
  77.  
  78.     if (dobjs[0] == LATEX && (doadjs[0] == 0 || doadjs[0] == GOOEY)
  79.     && loc == 76 && prepio == ON && iobj == POLE &&
  80.     (obimpr[ZLATEX] & 56) == 8) {
  81.     if (allflg || dobjs[1] != 0) {
  82.         speak(48);
  83.         return (result);
  84.     }
  85.     itsher(ZLATEX, &plce);
  86.     if (plce == 0)
  87.         speak(66);
  88.     else {
  89.         obloc[ZLATEX] = 76;
  90.         obimpr[ZLATEX] = 25 + 320;
  91.         speak(75);
  92.     }
  93.     return (result);
  94.     }
  95.     /* putting things in machines   */
  96.  
  97.     if ((iobj == MACHIN || iobj == OPENIN || iobj == SLOT) &&
  98.     loc != 146) {
  99.     if (loc != 143 && loc != 156 && loc != 158 &&
  100.         loc != 160 && loc != 162)
  101.         speak(90);
  102.     else if (loc == 143) {
  103.         if (prepio != IN || allflg || dobjs[1] != 0
  104.         || dobjs[0] != CASSET || (doadjs[0] != 0 &&
  105.                       doadjs[0] != HUGE))
  106.         speak(48);
  107.         else {
  108.         itsher(ZCASSE, &zplce);
  109.         if (zplce <= 0)
  110.             speak(66);
  111.         else {
  112.             obloc[ZCASSE] = 0;
  113.             machst |= 16;
  114.             if (obimpr[RLIGHT] == 73 && (machst & 1) == 0 &&
  115.             (machst & 2) != 0) {
  116.             speak(399);
  117.             obimpr[RLIGHT] = 145;
  118.             obimpr[GLIGHT] = 145;
  119.             }
  120.         }
  121.         }
  122.     } else {
  123.         spk = 0;
  124.         if (prepio != IN || allflg || dobjs[1] != 0
  125.         || dobjs[0] != COIN)
  126.         spk = 48;
  127.         else {
  128.         obj = getobj(COIN, doadjs[0]);
  129.         if (obj < 0) {
  130.             speak(70);
  131.             return (result);
  132.         }
  133.         itsher(obj, &cplce);
  134.         if (cplce == 0)
  135.             spk = 66;
  136.         else if (loc == 156) {
  137.             if (obj != PCOIN)
  138.             spk = 93;
  139.             else {
  140.             spk = 512;
  141.             obloc[PCOIN] = 0;
  142.             obloc[BBALL] = 156;
  143.             }
  144.         } else if (loc == 158) {
  145.             if (obj != NCOIN)
  146.             spk = 93;
  147.             else {
  148.             spk = 513;
  149.             obloc[NCOIN] = 0;
  150.             obloc[NNEWS] = 158;
  151.             }
  152.         } else if (loc == 162) {
  153.             if (obj != CCOIN)
  154.             spk = 93;
  155.             else {
  156.             spk = 514;
  157.             obloc[CCOIN] = 0;
  158.             obloc[MMAP] = 162;
  159.             }
  160.         } else if (loc == 160)
  161.             gamble(obj);
  162.         else;
  163.         if (spk != 0)
  164.             speak(spk);
  165.         }
  166.     }
  167.     return (result);
  168.     }
  169.     spk = 0;
  170.     if ((prepio != IN || (prepio == IN && prepdo != 0)) && !
  171.     (prepio == ON &&
  172.      (iobj == ENLARG || iobj == TRAY) && loc == 143))
  173.     spk = 273;
  174.     else {
  175.     /* check on status of indirect object  */
  176.  
  177.     xiobj = getobj(iobj, ioadj);
  178.     if (xiobj <= 0)
  179.         spk = 90;
  180.     else if (obpprp[xiobj] / 2048 == 0 && xiobj != ZENLAR)
  181.         spk = 77;
  182.     else if (iobj == BUCKET && (obimpr[ZBUCKE] == 1033 || (
  183.            obloc[ZLATEX] == (2000 + ZBUCKE) && (obimpr[ZLATEX] & 56)
  184.                                    == 8)))
  185.         spk = 276;
  186.     else {
  187.         itsher(xiobj, &ioplce);
  188.         if (ioplce != 1 && ioplce != 2 && ioplce != 4)
  189.         spk = 91;
  190.     }
  191.     }
  192.     if (spk != 0) {
  193.     speak(spk);
  194.     return (result);
  195.     }
  196.     /* convert dobjs(i) (noun) to list of objects (pointers) */
  197.  
  198.     ambig = !cnvobj();
  199.     if (allflg)
  200.     getall();
  201.     csize = obpprp[xiobj] / 2048;
  202.     if (csize == 15)
  203.     csize = 70;
  204.     cinsid = 0;
  205.     for (i = 1; i <= MOVMAX; i++)
  206.     if (obloc[i] == 2000 + xiobj)
  207.         cinsid += (obw3[i] % 256);
  208.     burden(&ncarrd, &nweigh, &kcarrd, &kweigh);
  209.     if (obloc[ZKNAPS] == 1000 || obloc[ZKNAPS] == 3000)
  210.     nweigh += kweigh;
  211.     for (i = 0; i <= 29; i++) {
  212.     z = dobjs[i];
  213.     if (z == 0)
  214.         return (result);
  215.     if (obloc[z] == z + 2000)
  216.         continue;
  217.     itsher(z, &plce);
  218.     size = (obw3[z] % 256);
  219.     weigh = obw3[z] / 256;
  220.     plural = (obpprp[z] & 256) == 256;
  221.     if (allflg && (z > MOVMAX || obloc[z] == (2000 + xiobj)))
  222.         continue;
  223.     if (allflg || dobjs[1] != 0)
  224.         speak(odistb[z]);
  225.     if (z > MOVMAX) {
  226.         spk = odistb[z + 1] - 1;
  227.         if (plce != 4)
  228.         spk = 113;
  229.     } else if (obloc[z] == 2000 + xiobj) {
  230.         spk = 92;
  231.         if (plural)
  232.         spk = 191;
  233.     } else if (plce == 2) {
  234.         spk = 88;
  235.         if (plural)
  236.         spk = 194;
  237.     } else if (plce == 0) {
  238.         spk = 66;
  239.         if (plural)
  240.         spk = 185;
  241.     } else if ((plce == 4 || plce == 5) && z == ZCART &&
  242.          obloc[ZCART] == 2000 + RSLOT)
  243.         spk = 311;
  244.     else if (size + cinsid > csize) {
  245.         spk = 93;
  246.         if (plural)
  247.         spk = 192;
  248.     } else if ((nweigh + weigh > 125) && (xiobj == ZKNAPS &&
  249.                           obloc[z] != 1000 &&
  250.             (obloc[ZKNAPS] == 1000 || obloc[ZKNAPS] == 3000))) {
  251.         spk = 79;
  252.         if (plural)
  253.         spk = 188;
  254.     } else if (z == CFISH && obloc[z] ==
  255.            (2000 + PLBAG) && (obimpr[PLBAG] / 512 == 5))
  256.         spk = 76;
  257.     else if (z == ZLATEX && (obimpr[ZLATEX] & 56) == 8)
  258.         spk = 277;
  259.     else if (xiobj == RSLOT && !(z == ZCART || z == CCART))
  260.         spk = 351;
  261.     else if (iobj == FUNNEL) {
  262.         spk = 396;
  263.         if (xiobj == LFUNNE && z == ZMETOL)
  264.         machst |= 8;
  265.         if (xiobj == RFUNNE && z == ZHYPO)
  266.         machst |= 4;
  267.         obloc[z] = 0;
  268.     } else if (loc == 99 && z == ZSTATU
  269.            && obimpr[ZSEED] != 2 && obimpr[ZSEED] != 1)
  270.         spk = 405;
  271.     else if (loc == 86 && obloc[ZSEED] == 86 && !
  272.          (obloc[RPANT] == 3000 && obloc[RSHIRT] == 3000)) {
  273.         if (obloc[LPANT] == 3000 || obloc[GSHIRT] == 3000) {
  274.         if (daytim == 1)
  275.             speak(424);
  276.         else
  277.             speak(425);
  278.         } else {
  279.         if (daytim == 1)
  280.             speak(426);
  281.         else
  282.             speak(427);
  283.         }
  284.         if (obloc[LPANT] == 3000)
  285.         obloc[LPANT] = 0;
  286.         if (obloc[GSHIRT] == 3000)
  287.         obloc[GSHIRT] = 0;
  288.         vdead();
  289.         return (result);
  290.     } else {
  291.         if (obloc[z] == 2000 + RSLOT)
  292.         obimpr[ZSCREE] = 9;
  293.         obloc[z] = 2000 + xiobj;
  294.         nweigh += weigh;
  295.         cinsid += size;
  296.         /* special increment of descriptor pointer if obimpr has 4096 set */
  297.  
  298.         if (obimpr[z] / 4096 == 1)
  299.         obimpr[z] = (obimpr[z] & ~4096) + 8;
  300.         /* ~4096=167777 octal  */
  301.  
  302.         spk = 75;
  303.         if (z == ZLATEX && (obimpr[ZLATEX] & 56) == 24)
  304.         obimpr[ZLATEX] = 337;
  305.         if ((z == CCART || z == ZCART) && xiobj == RSLOT) {
  306.         obimpr[RSLOT] += 8192;
  307.         obimpr[ZSCREE] = 145;
  308.         } else if (iobj == RECESS && z == GDISC)
  309.         spk = 412;
  310.         else if (loc == 86 && z == ZSEED) {
  311.         if (daytim == 1)
  312.             spk = 428;
  313.         else
  314.             spk = 429;
  315.         } else if (xiobj == OCLIP && z == YROD)
  316.         spk = 526;
  317.         else if (xiobj == VCLIP && z == LMINER)
  318.         spk = 527;
  319.         else if (xiobj == YCLIP && z == YROD)
  320.         spk = 528;
  321.         else if (xiobj == BCLIP && z == BSAPPH)
  322.         spk = 529;
  323.         else;
  324.         if ((xiobj == YCLIP || xiobj == BCLIP) &&
  325.          obloc[YROD] == 2000 + YCLIP && obloc[BSAPPH] == 2000 + BCLIP) {
  326.         speak(spk);
  327.         spk = 531;
  328.         }
  329.     }
  330.     xindnt += 2;
  331.     speak(spk);
  332.     xindnt -= 2;
  333.     }
  334.     return (result);
  335. }
  336.  
  337. gamble(c)
  338.     int             c;
  339. {
  340.     int             rann, spk, x;
  341.     rann = qrand();
  342.     if (jackpo == 1) {
  343.     obloc[c] = 0;
  344.     spk = 515;
  345.     } else if (c != PCOIN) {
  346.     if (rann > 3750) {
  347.         spk = 516;
  348.         x = PCOIN;
  349.     } else if (rann > 3317) {
  350.         x = SCOIN;
  351.         spk = 517;
  352.     } else if (rann > 2212) {
  353.         x = CCOIN;
  354.         spk = 518;
  355.     } else if (rann > 1105) {
  356.         x = BCOIN;
  357.         spk = 519;
  358.     } else {
  359.         x = NCOIN;
  360.         spk = 520;
  361.     }
  362.     } else {
  363.     if (rann > 3276) {
  364.         spk = 521;
  365.         jackpo = 1;
  366.     } else if (rann > 2048) {
  367.         x = PCOIN;
  368.         spk = 516;
  369.     } else {
  370.         x = SCOIN;
  371.         spk = 517;
  372.     }
  373.     }
  374.     if (spk == 521) {
  375.     obloc[PCOIN] = 160;
  376.     obloc[SCOIN] = 160;
  377.     obloc[CCOIN] = 160;
  378.     obloc[BCOIN] = 160;
  379.     obloc[NCOIN] = 160;
  380.     bonus += 5;
  381.     } else {
  382.     obloc[c] = 0;
  383.     obloc[x] = 160;
  384.     }
  385.     speak(spk);
  386. }
  387.  
  388. vscrat()
  389. {
  390.     int             spk, plce;
  391.     if ((iobj != DIAMON && iobj != SAPPHI && iobj != KNIFE) || prepio != WITH)
  392.     spk = 196;
  393.     /* sapphire has no edge */
  394.  
  395.     else if (iobj == SAPPHI) {
  396.     itsher(BSAPPH, &plce);
  397.     if (plce == 0)
  398.         spk = 197;
  399.     else
  400.         spk = 198;
  401.     }
  402.     /*
  403.      * diamond cuts glass window but not vine names of window and glass plate
  404.      * are all mixed up  
  405.      */
  406.  
  407.     else if (iobj == DIAMON) {
  408.     itsher(ZDIAMO, &plce);
  409.     if (plce == 0)
  410.         spk = 199;
  411.     else if (dobjs[0] == WINDOW || dobjs[0] == GLASS) {
  412.         if (loc != 30 && loc != 42)
  413.         spk = 200;
  414.         else if (((obimpr[ZWINDO] / 8) % 8) != 0)
  415.         spk = 201;
  416.         else {
  417.         spk = 202;
  418.         obimpr[ZWINDO] = 145;
  419.         obloc[ZDIAMO] = 1000;
  420.         if (loc == 30)
  421.             obloc[PGLASS] = 42;
  422.         else
  423.             obloc[PGLASS] = 30;
  424.         }
  425.     } else if (dobjs[0] == VINE && loc == 74 && (obimpr[ZVINE] & 56) == 8)
  426.         spk = 306;
  427.     else
  428.         spk = 203;
  429.     } else {
  430.     itsher(ZKNIFE, &plce);
  431.     if (plce == 0)
  432.         spk = 89;
  433.     else if (dobjs[0] == WINDOW || dobjs[0] == GLASS)
  434.         spk = 309;
  435.     else if (dobjs[0] == VINE && loc == 74 && (obimpr[ZVINE] & 56) == 8)
  436.         spk = 305;
  437.     else
  438.         spk = 286;
  439.     }
  440.     speak(spk);
  441. }
  442.  
  443. vread()
  444. {
  445.     int             m, plce, n;
  446.     /* if it's light, read whatever is written on  */
  447.  
  448.     if (daytim == 0) {
  449.     speak(121);
  450.     return;
  451.     }
  452.     m = getobj(dobjs[0], doadjs[0]);
  453.     if (prepio == TO || m < 1 || (obpprp[m] & 16) != 16) {
  454.     speak(71);
  455.     return;
  456.     }
  457.     itsher(m, &plce);
  458.     n = (obimpr[m] / 64) % 8;
  459.     if (n == 0 || plce == 0)
  460.     speak(98);
  461.     else {
  462.     if (loc >= 153 && lpill == 1 && (m == MMAP || m ==
  463.                      NNEWS || m == NNOTE || m == TMACH))
  464.         n += 1;
  465.     speak(odistb[m] + n);
  466.     if (m == NNOTE && lpill == 1)
  467.         nreadx();
  468.     }
  469. }
  470.  
  471.     static   char   string[] = "  Large ship XX XX XX";
  472.  
  473. nreadx()
  474. {
  475.     int             l, n, m;
  476.     char            cnum[4];
  477.     l = dcombi;
  478.     n = (l & 31);
  479.     l = l / 32;
  480.     m = (l & 31);
  481.     l = l / 32;
  482.     numcvt(n, cnum);
  483.     string[19] = cnum[2];
  484.     string[20] = cnum[3];
  485.     numcvt(m, cnum);
  486.     string[16] = cnum[2];
  487.     string[17] = cnum[3];
  488.     numcvt(l, cnum);
  489.     string[13] = cnum[2];
  490.     string[14] = cnum[3];
  491.     linout(string, 21);
  492. }
  493.  
  494.  
  495.  
  496. vrobot()
  497. {
  498.     int             spk, vspk, dj, empty, i, bplce, gplce, tloc, iplce, ij, plce;
  499.     spk = 0;
  500.     vspk = 0;
  501.     if (dobjs[0] != 0)
  502.     dj = getrob(dobjs[0], doadjs[0]);
  503.     if (iobj != 0)
  504.     ij = getrob(iobj, ioadj);
  505.     empty = 1;
  506.     for (i = 1; i <= MOVMAX; i++)
  507.     if (obloc[i] == 2000 + ZROBOT)
  508.         empty = 0;
  509.     if (dobjs[1] != 0)
  510.     spk = 343;
  511.     else if (wrdnum[0] == TAKE || wrdnum[0] == HOLD) {
  512.     if (dobjs[0] == DISC && dj < 0) {
  513.         tloc = loc;
  514.         loc = obloc[ZROBOT];
  515.         itsher(GDISC, &gplce);
  516.         itsher(BDISC, &bplce);
  517.         loc = tloc;
  518.         if (gplce == 4)
  519.         gplce = 5;
  520.         if (bplce == 4)
  521.         bplce = 5;
  522.         if (loc == obloc[ZROBOT]) {
  523.         if (gplce == 1)
  524.             gplce = 5;
  525.         if (bplce == 1)
  526.             bplce = 5;
  527.         }
  528.         if (gplce != 5 && bplce != 5)
  529.         dj = 0;
  530.         else if (gplce == 5)
  531.         dj = GDISC;
  532.         else
  533.         dj = BDISC;
  534.     }
  535.     if (prepdo != 0 || prepio != 0 || allflg)
  536.         spk = 342;
  537.     else if (empty == 0)
  538.         spk = 343;
  539.     else if (dj < 0)
  540.         spk = 70;
  541.     else if (dj > MOVMAX || dj == 0)
  542.         spk = 344;
  543.     else {
  544.         tloc = loc;
  545.         loc = obloc[ZROBOT];
  546.         itsher(dj, &plce);
  547.         loc = tloc;
  548.         if (!(plce == 4 || plce == 5 || (plce == 1
  549.                                         && obloc[ZROBOT] == loc)))
  550.         spk = 420;
  551.         else if (obw3[dj] / 256 > 1 || (obw3[dj] & 255) > 2)
  552.         spk = 352;
  553.         else {
  554.         spk = 345;
  555.         obloc[dj] = 2000 + ZROBOT;
  556.         if (dj == ZINSEC && obimpr[ZINSEC] == 201)
  557.             obimpr[ZINSEC] = 209;
  558.         }
  559.     }
  560.     } else if (wrdnum[0] == DROP) {
  561.     if (dj < 0) {
  562.         if (dobjs[0] == DISC && obloc[GDISC] == 2000 + ZROBOT)
  563.         dj = GDISC;
  564.         else if (dobjs[0] == DISC && obloc[BDISC] == 2000 + ZROBOT)
  565.         dj = BDISC;
  566.         else;
  567.     }
  568.     if (prepdo != 0 || prepio != 0 || allflg)
  569.         spk = 342;
  570.     else if (dj < 0)
  571.         spk = 70;
  572.     else if (dj == 0)
  573.         spk = 344;
  574.     else if (obloc[dj] != 2000 + ZROBOT)
  575.         spk = 347;
  576.     else {
  577.         spk = 346;
  578.         obloc[dj] = obloc[ZROBOT];
  579.     }
  580.     } else if (wrdnum[0] == GIVE) {
  581.     if (dj < 0) {
  582.         if (dobjs[0] == DISC && obloc[GDISC] == 2000 + ZROBOT)
  583.         dj = GDISC;
  584.         else if (dobjs[0] == DISC && obloc[BDISC] == 2000 + ZROBOT)
  585.         dj = BDISC;
  586.         else;
  587.     }
  588.     if (obloc[ZROBOT] != loc)
  589.         spk = 443;
  590.     else if (prepdo != 0 || prepio != TO || allflg)
  591.         spk = 342;
  592.     else if (dj < 0)
  593.         spk = 70;
  594.     else if (dj == 0)
  595.         spk = 344;
  596.     else if (obloc[dj] != 2000 + ZROBOT)
  597.         spk = 347;
  598.     else {
  599.         spk = 444;
  600.         obloc[dj] = 1000;
  601.     }
  602.     } else if (wrdnum[0] == WASH || wrdnum[0] == QWATER) {
  603.     if (dobjs[0] == DISC && obloc[GDISC] == 2000 + ZROBOT)
  604.         dj = GDISC;
  605.     else if (dobjs[0] == DISC && obloc[BDISC] == 2000 + ZROBOT)
  606.         dj = BDISC;
  607.     else;
  608.     if (dj <= 0 || !((dj <= MOVMAX && (obloc[dj] == 2000 +
  609.               ZROBOT || obloc[dj] == obloc[ZROBOT])) || (dj > MOVMAX
  610.           && (obw3[dj] == obloc[ZROBOT] || obw4[dj] == obloc[ZROBOT]))))
  611.         spk = 344;
  612.     else {
  613.         if (wrdnum[0] == WASH) {
  614.         if (dj == GDISC && rvtim == 0)
  615.             spk = 414;
  616.         else if (dj == GDISC && rvtim == 1) {
  617.             spk = 410;
  618.             rvtim = 2;
  619.         } else
  620.             spk = 348;
  621.         } else
  622.         spk = 349;
  623.         if ((obimpr[ZVINE] & 56) == 8 && dj == ZVINE) {
  624.         vspk = 1;
  625.         obimpr[ZVINE] = obimpr[ZVINE] + 8;
  626.         }
  627.     }
  628.     } else if (wrdnum[0] == TRANSL) {
  629.     if (dobjs[0] >= DEET && dobjs[0] <= STORAG)
  630.         spk = 354 - DEET + dobjs[0];
  631.     else if (dobjs[0] == CYGNAN || dobjs[0] == TERRAN)
  632.         spk = 362 - TERRAN + dobjs[0];
  633.     else
  634.         spk = 364;
  635.     } else if (wrdnum[0] == PUT) {
  636.     if (dobjs[0] == DISC && obloc[GDISC] == 2000 + ZROBOT)
  637.         dj = GDISC;
  638.     else if (dobjs[0] == DISC && obloc[BDISC] == 2000 + ZROBOT)
  639.         dj = BDISC;
  640.     else;
  641.     if (dobjs[0] == DISC && obloc[GDISC] != 2000 + ZROBOT &&
  642.         obloc[BDISC] != ZROBOT)
  643.         spk = 347;
  644.     else if (prepdo != 0 || prepio != IN || allflg)
  645.         spk = 342;
  646.     else if (dj < 0 || ij < 0)
  647.         spk = 70;
  648.     else if (dj == 0 || ij == 0)
  649.         spk = 344;
  650.     else if (obloc[dj] != 2000 + ZROBOT)
  651.         spk = 347;
  652.     else {
  653.         tloc = loc;
  654.         loc = obloc[ZROBOT];
  655.         itsher(ij, &iplce);
  656.         loc = tloc;
  657.         if (obloc[ZROBOT] == loc && obloc[ij] == 1000)
  658.         iplce = 6;
  659.         if (iplce < 4 || iplce > 6)
  660.         spk = 344;
  661.         else {
  662.         spk = 75;
  663.         obloc[dj] = 2000 + ij;
  664.         if (ij == ZMUD) {
  665.             spk = 407;
  666.             obloc[dj] = 0;
  667.         } else if (ij == FPIT) {
  668.             spk = 408;
  669.             obloc[dj] = 0;
  670.         } else if (ij == ZACID && (dj == GDISC || dj == BDISC)) {
  671.             spk = 413;
  672.             obloc[dj] = 0;
  673.         } else if (ij == GVAPOR && gvtim == 0 && dj == GDISC) {
  674.             spk = 409;
  675.             gvtim = 1;
  676.         } else if (ij == RVAPOR && dj == GDISC && rvtim == 0) {
  677.             spk = 409;
  678.             if (gvtim == 1)
  679.             rvtim = 1;
  680.         }
  681.         }
  682.     }
  683.     } else if (wrdnum[0] == IS && adverb == WHERE)
  684.     spk = 477;
  685.     else if (wrdnum[0] == IS && adverb == WHAT) {
  686.     if (dobjs[0] == COMBIN && (doadjs[0] == 0 || doadjs[0] == BOX))
  687.         spk = 476;
  688.     else if (doadjs[0] != 0)
  689.         spk = 342;
  690.     else if (dobjs[0] == DEET)
  691.         spk = 473;
  692.     else if (dobjs[0] == METOL)
  693.         spk = 474;
  694.     else if (dobjs[0] == HYPO)
  695.         spk = 475;
  696.     else
  697.         spk = 477;
  698.     } else
  699.     spk = 251;
  700.     if (spk != 0 && (obloc[ZROBOT] == loc || loc == 146)) {
  701.     speak(spk);
  702.     if (vspk != 0)
  703.         speak(301);
  704.     }
  705. }
  706.  
  707. vshit()
  708. {
  709.     dirty += 1;
  710.     {
  711.     if (loc == 74 && (obimpr[ZVINE] & 56) == 8)
  712.         speak(303);
  713.     else if (dirty >= 5 && dirty < 10)
  714.         speak(40);
  715.     else if (dirty >= 10)
  716.         if (obloc[LPANT] == 3000 || obloc[RPANT] == 3000)
  717.         speak(43);
  718.         else
  719.         speak(42);
  720.     }
  721. }
  722.  
  723. vshoot()
  724. {
  725.     int             spk, plce;
  726.     spk = 0;
  727.     itsher(ICAMER, &plce);
  728.     /* camera isn't here  */
  729.  
  730.     if (plce != 1 && plce != 4)
  731.     spk = 114;
  732.     /* see if film is fogged   */
  733.  
  734.     else if (oextim == 8192)
  735.     spk = 237;
  736.     else if (oextim >= 45) {
  737.     spk = 320;
  738.     obloc[OPHOTO] = loc;
  739.     oextim = 8192;
  740.     }
  741.     /* shot the pterodactyls */
  742.  
  743.     else if (loc == 89 || loc == 68 || loc == 62)
  744.     spk = 382;
  745.     else if (loc == 24) {
  746.     if (obloc[PPHOTO] != 0)
  747.         spk = 115;
  748.     else {
  749.         spk = 116;
  750.         obloc[PPHOTO] = loc;
  751.     }
  752.     }
  753.     /* phograph the martians at the bar  */
  754.  
  755.     else if (loc == 30 && marflg[0]) {
  756.     if (obloc[MPHOTO] != 0)
  757.         spk = 135;
  758.     else {
  759.         spk = 134;
  760.         obloc[MPHOTO] = loc;
  761.     }
  762.     }
  763.     /* shoot the hockey game  */
  764.  
  765.     else if (((loc >= 31 && loc <= 38) || loc == 29) && marflg[1]) {
  766.     if (obloc[MPHOTO] != 0)
  767.         spk = 135;
  768.     else {
  769.         spk = 134;
  770.         obloc[MPHOTO] = loc;
  771.         obimpr[MPHOTO] += 64;
  772.     }
  773.     }
  774.     /* martians, alone aren't too interesting */
  775.  
  776.     else if ((loc == 28 && marflg[3]) ||
  777.          (loc == 40 && marflg[2]) ||
  778.          (loc >= 43 && loc <= 45 && marflg[4]))
  779.     spk = 140;
  780.     else if (loc == 131) {
  781.     if (obloc[FPHOTO] != 0)
  782.         spk = 115;
  783.     else {
  784.         spk = 318;
  785.         obloc[FPHOTO] = loc;
  786.     }
  787.     } else if (loc == 100) {
  788.     if (obloc[APHOTO] != 0)
  789.         spk = 115;
  790.     else {
  791.         spk = 319;
  792.         obloc[APHOTO] = loc;
  793.     }
  794.     } else
  795.     spk = 117;
  796.     if (spk != 0)
  797.     speak(spk);
  798. }
  799.  
  800. vshut()
  801. {
  802.     int             spk, n, plce;
  803.     if (prepdo != 0 && prepio != 0)
  804.     spk = 21;
  805.     /* the door to the bar is always open  */
  806.  
  807.     else if ((loc == 30 || loc == 42) && dobjs[0] == DOOR)
  808.     spk = 224;
  809.     /* doors or containers must be openable, and not already shut  */
  810.  
  811.     else {
  812.     n = getobj(dobjs[0], doadjs[0]);
  813.     if (dobjs[0] == DOOR && (loc == 184 || loc == 187 ||
  814.                  (loc >= 176 && loc <= 181)))
  815.         n = BDOOR;
  816.     if (n < 0)
  817.         spk = 70;
  818.     else if (n == 0)
  819.         spk = 66;
  820.     else if ((obpprp[n] % 2) != 1) {
  821.         if (obpprp[n] / 2048 != 0)
  822.         spk = 254;
  823.         else
  824.         spk = 230;
  825.     } else {
  826.         itsher(n, &plce);
  827.         if (dobjs[0] == DOOR && (loc == 184 || loc == 187 ||
  828.                      (loc >= 176 && loc <= 181)))
  829.         plce = 5;
  830.         if (plce <= 0) {
  831.         if (dobjs[0] == DOOR)
  832.             spk = 225;
  833.         else
  834.             spk = 66;
  835.         } else if ((obimpr[n] & 2) == 2) {
  836.         if (dobjs[0] == DOOR)
  837.             spk = 227;
  838.         else
  839.             spk = 390;
  840.         } else {
  841.         spk = 232;
  842.         obimpr[n] |= 2;
  843.         if (n == RDOOR || n == MDOOR || n == GDOOR || n == ODOOR
  844.             || n == BDOOR)
  845.             obimpr[n] -= 8;
  846.         if (n == ZBOX) {
  847.             obimpr[ZBOX] |= 4;
  848.             dial1 = 0;
  849.             dial2 = 0;
  850.         }
  851.         }
  852.     }
  853.     }
  854.     speak(spk);
  855. }
  856.  
  857. vsit()
  858. {
  859.     int             spk;
  860.     /* sit is usually a joke */
  861.  
  862.     if (dobjs[0] == 0 && prepdo == DOWN) {
  863.     if (loc == 166 || loc == 184 || loc == 187 ||
  864.                                          (loc <= 181 && loc >= 175)) {
  865.         spcloc = 2;
  866.         spk = 510;
  867.     } else
  868.         spk = 220;
  869.     } else if (prepdo != IN && prepdo != ON)
  870.     spk = 21;
  871.     else if (prepdo == IN && dobjs[0] == CHAIR && (loc == 166
  872.                   || loc == 184 || (loc <= 181 && loc >= 175) ||
  873.                            loc == 187)) {
  874.     spcloc = 2;
  875.     spk = 510;
  876.     } else if ((dobjs[0] == TREE || dobjs[0] == LOG || dobjs[0] ==
  877.         BOULDE) && prepdo == ON)
  878.     spk = 220;
  879.     else if ((prepdo == ON || prepdo == IN) && (dobjs[0] == STOOL
  880.                    || dobjs[0] == STOOLS || dobjs[0] == BOWL)) {
  881.     /* except the case of sitting on electric seat  */
  882.  
  883.     if (loc == 42)
  884.         spk = 221;
  885.     else if (loc == 28)
  886.         spk = 222;
  887.     /* sit in bowl, when at hockey rink, slides him in it */
  888.  
  889.     else if (dobjs[0] == BOWL && (loc >= 32 && loc <= 38)) {
  890.         loc = 38;
  891.         spk = 75;
  892.         oldloc = 0;
  893.         oldlc2 = 0;
  894.     } else if (dobjs[0] == BOWL)
  895.         spk = 156;
  896.     else
  897.         spk = 71;
  898.     } else
  899.     spk = 48;
  900.     speak(spk);
  901. }
  902. vstand()
  903. {
  904.     int             spk;
  905.     if (dobjs[0] == 0 && prepdo == UP) {
  906.     if (spcloc == 2) {
  907.         spcloc = 0;
  908.         spk = 511;
  909.     } else
  910.         spk = 208;
  911.     } else if (prepdo != ON)
  912.     spk = 94;
  913.     else if (dobjs[0] == TREE || dobjs[0] == LOG && (loc >= 4 &&
  914.               loc <= 19 && loc != 16 && loc != 13 && loc != 14))
  915.     spk = 209;
  916.     /* stand on glass plate  */
  917.  
  918.     else if (dobjs[0] == GLASS) {
  919.     if (obloc[PGLASS] == 1000 || obloc[PGLASS] == 3000)
  920.         spk = 211;
  921.     else if (obloc[PGLASS] != loc)
  922.         spk = 66;
  923.     else {
  924.         spk = 75;
  925.         spcloc = 1;
  926.     }
  927.     } else
  928.     spk = 210;
  929.     speak(spk);
  930. }
  931.  
  932.  
  933. vtake()
  934. {
  935.     int             i, spk, xiobj, qq, xplce, kplce, ncarrd, kcarrd;
  936.     int             nweigh, kweigh, ambig, z, plce, plural, t, kkwr;
  937.     spk = 0;
  938.     if (prepdo != 0 && prepio != 0)
  939.     spk = 48;
  940.  
  941.     /* remove clothing means take off  */
  942.  
  943.     if (wrdnum[0] == REMOVE && prepdo == 0) {
  944.     qq = getobj(dobjs[0], doadjs[0]);
  945.     if (qq > 0 && obloc[qq] == 3000)
  946.         prepdo = OFF;
  947.     }
  948.     xiobj = getobj(iobj, ioadj);
  949.     if (xiobj == ZKNAPS)
  950.     itsher(ZKNAPS, &kplce);
  951.     /* handle remove something from container */
  952.  
  953.     if (prepio == FROM) {
  954.     if (obpprp[xiobj] / 2048 == 0)
  955.         spk = 77;
  956.     else {
  957.         itsher(xiobj, &xplce);
  958.         if (xplce == 0)
  959.         spk = 78;
  960.     }
  961.     }
  962.     if (spk != 0) {
  963.     speak(spk);
  964.     return;
  965.     }
  966.     /* handle multiple objects   */
  967.  
  968.     ambig = !cnvobj();
  969.     if (butflg && ambig)
  970.     return;
  971.     if (allflg)
  972.     getall();
  973.  
  974.     /* check weight  */
  975.  
  976.     burden(&ncarrd, &nweigh, &kcarrd, &kweigh);
  977.     if (obloc[ZKNAPS] == 1000 || obloc[ZKNAPS] == 3000)
  978.     nweigh = nweigh + kweigh;
  979.     for (i = 0; i < 30; i++) {
  980.     z = dobjs[i];
  981.     if (z == 0)
  982.         return;
  983.     plural = (obpprp[z] & 256) == 256;
  984.     if (z > MOVMAX) {
  985.         if (!allflg) {
  986.         speak(odistb[z]);
  987.         itsher(z, &plce);
  988.         if (plce == 4)
  989.             spk = odistb[z + 1] - 1;
  990.         else {
  991.             if (plural)
  992.             spk = 185;
  993.             else
  994.             spk = 66;
  995.         }
  996.         xindnt += 2;
  997.         speak(spk);
  998.         xindnt -= 2;
  999.         }
  1000.         continue;
  1001.     }
  1002.     itsher(z, &plce);
  1003.     if (allflg && (plce == 0 || plce == 1 || (prepdo ==
  1004.                 OFF && plce != 2) || (prepio == FROM && xiobj ==
  1005.                    ZKNAPS && (obloc[z] != (2000 + ZKNAPS) ||
  1006.         kplce == 0)) || (prepio == 0 && obloc[z] == (2000 + ZKNAPS))
  1007.                || (plce == 2 && prepdo != OFF)))
  1008.         continue;
  1009.     /* emit name of object if "all" or multiple */
  1010.  
  1011.     if (dobjs[1] != 0 || allflg || ambig)
  1012.         speak(odistb[z]);
  1013.     if (prepdo == 0) {
  1014.         /*
  1015.          * the wire is very,very special... don't even try to figure it
  1016.          * out!!! *************************************************** 
  1017.              */
  1018.  
  1019.  
  1020.         if (plce == 1 || (z == ZWIRE && wirelc[5] == 1000
  1021.                   && wirelc[0] != 1000)) {
  1022.         spk = 67;
  1023.         if (plural)
  1024.             spk = 186;
  1025.         } else if (plce == 0 && !(z == ZWIRE && (wirelc[4]
  1026.                   == loc || wirelc[3] == loc || wirelc[2] == loc
  1027.                 || wirelc[1] == loc || wirelc[0] == loc))) {
  1028.         spk = 66;
  1029.         if (plural)
  1030.             spk = 185;
  1031.         if (z == RBOULD && loc == 27)
  1032.             spk = 153;
  1033.         if (z == GMOSS && loc == 19)
  1034.             spk = 243;
  1035.         if (z == PGLASS && (loc == 30 || loc == 42))
  1036.             spk = 247;
  1037.         if ((z == PPHOTO && loc == 24) || (z == MPHOTO &&
  1038.                            loc >= 26 && loc <= 50))
  1039.             spk = 249;
  1040.         } else if (plce == 2) {
  1041.         spk = 68;
  1042.         if (plural)
  1043.             spk = 187;
  1044.         } else if (prepio == WITH && (z != CFISH ||
  1045.                       xiobj != BNET))
  1046.         spk = 48;
  1047.         else if (prepio == FROM && !((z == CKEY &&
  1048.                 iobj == SPIRE && ioadj == 0) || (obloc[z] ==
  1049.             (2000 + xiobj)) || (z == ZWIRE && ((iobj == ZKNOB &&
  1050.                     (obimpr[ZWIRE] & ~56) == 32) || (iobj ==
  1051.                   ZTOWER && (obimpr[ZWIRE] & -57) == 24)))))
  1052.         /* ~56=177707 octal  */
  1053.  
  1054.         spk = 71;
  1055.         else if (ncarrd > 5)
  1056.         spk = 72;
  1057.         else if (nweigh + obw3[z] / 256 > 125) {
  1058.         spk = 79;
  1059.         if (plural)
  1060.             spk = 188;
  1061.         }
  1062.         /* take fish (from sea) with net.  */
  1063.         else if (z == CFISH && loc == 16 && obimpr[CFISH]/4096 == 1) {
  1064.             if (prepio != WITH || xiobj != BNET)
  1065.             spk = 80;
  1066.                 else if (obloc[BNET] != 1000)
  1067.                     spk = 91;
  1068.                 else {
  1069.                     obloc[CFISH] = 2000 + BNET;
  1070.                     spk = 81;
  1071.                     obimpr[CFISH] -= 4088;
  1072.                 }
  1073.             }
  1074.         /* prevent him from killing wish in watery bag  */
  1075.  
  1076.         else if (z == CFISH && obloc[z] ==
  1077.              (2000 + PLBAG) && (obimpr[PLBAG] / 512 == 5))
  1078.         spk = 76;
  1079.         /* cannot take latex if still liquid   */
  1080.  
  1081.         else if (z == ZLATEX && (obimpr[z] & 56) == 8)
  1082.         spk = 268;
  1083.         /* cant remove cartridge from slot  */
  1084.  
  1085.         else if (z == ZCART && obloc[ZCART] == 2000 + RSLOT)
  1086.         spk = 311;
  1087.         /* cant take statue unless ferrets blinded  */
  1088.  
  1089.         else if (loc == 99 && z == ZSTATU
  1090.              && obimpr[ZSEED] != 2 && obimpr[ZSEED] != 1)
  1091.         spk = 405;
  1092.         /* diamond must land on moss to be safe   */
  1093.  
  1094.         else if (z == ZDIAMO && loc == 49) {
  1095.         if (obloc[GMOSS] == 48) {
  1096.             spk = 165;
  1097.             obloc[z] = 48;
  1098.             obimpr[z] += 8;
  1099.         } else {
  1100.             spk = 164;
  1101.             obloc[z] = 0;
  1102.         }
  1103.         } else if (z == ZSEED && loc == 86 && obloc[ZSEED] == 86 &&
  1104.                !(obloc[RPANT] == 3000 && obloc[RSHIRT] == 3000)) {
  1105.         if (obloc[LPANT] == 3000 || obloc[GSHIRT] == 3000) {
  1106.             if (daytim == 1)
  1107.             speak(424);
  1108.             else
  1109.             speak(425);
  1110.         } else {
  1111.             if (daytim == 1)
  1112.             speak(426);
  1113.             else
  1114.             speak(427);
  1115.         }
  1116.         if (obloc[LPANT] == 3000)
  1117.             obloc[LPANT] = 0;
  1118.         if (obloc[GSHIRT] == 3000)
  1119.             obloc[GSHIRT] = 0;
  1120.         vdead();
  1121.         return;
  1122.         } else {
  1123.         nweigh = nweigh + obw3[z] / 256;
  1124.         ncarrd += 1;
  1125.         if (z == ZKNAPS) {
  1126.             spk = 87;
  1127.             obloc[z] = 3000;
  1128.         }
  1129.         /* specail code for wire  */
  1130.  
  1131.         else {
  1132.             spk = 81;
  1133.             if (z == ZWIRE) {
  1134.             if (obloc[ZWIRE] == loc) {
  1135.                 obimpr[ZWIRE] = (obimpr[ZWIRE] & ~56) + 8;
  1136.                 if (wirelc[0] == 0)
  1137.                 obloc[z] = 1000;
  1138.                 /*
  1139.                  * if he takes fastened end, all the pointers must
  1140.                  * have their order reversed  
  1141.                              */
  1142.  
  1143.                 else {
  1144.                 t = obloc[z];
  1145.                 obloc[z] = wirelc[4];
  1146.                 wirelc[4] = t;
  1147.                 t = wirelc[3];
  1148.                 wirelc[3] = wirelc[0];
  1149.                 wirelc[0] = t;
  1150.                 t = wirelc[2];
  1151.                 wirelc[2] = wirelc[1];
  1152.                 wirelc[1] = t;
  1153.                 wirelc[5] = 1000;
  1154.                 if (obloc[ZWIRE] == 1000)
  1155.                     goto lab240;
  1156.             lab239:
  1157.                 if (obloc[z] != wirelc[0])
  1158.                     goto lab240;
  1159.                 obloc[ZWIRE] = wirelc[0];
  1160.                 for (kkwr = 0; kkwr < 5; kkwr++)
  1161.                     wirelc[kkwr] = wirelc[kkwr + 1];
  1162.                 goto lab239;
  1163.                 /*
  1164.                  * if it's all coiled up, i.e. all the
  1165.                  * wirelc's are 1000, clear wirelc   
  1166.                                  */
  1167.  
  1168.             lab240:
  1169.                 if (wirelc[0] == 1000) {
  1170.                     for (kkwr = 0; kkwr < 6; kkwr++)
  1171.                     wirelc[kkwr] = 0;
  1172.                 }
  1173.                 }
  1174.             } else if (wirelc[5] == loc) {
  1175.                 /*
  1176.                  * if pick up far end of wire, 1000(held by him)
  1177.                  * propagates back from end of wirelc  
  1178.                              */
  1179.  
  1180.                 for (kkwr = 1; kkwr <= 5; kkwr++) {
  1181.                 if (wirelc[6 - kkwr] == loc &&
  1182.                                              wirelc[5 - kkwr] == loc)
  1183.                                                        wirelc[6 - kkwr] = 1000;
  1184.                 }
  1185.                 if (wirelc[0] == loc && obloc[ZWIRE] == loc)
  1186.                 wirelc[0] = 1000;
  1187.             } else
  1188.                 spk = 214;
  1189.             if (wirelc[0] == 1000 && obloc[ZWIRE] == 1000) {
  1190.                 for (kkwr = 0; kkwr < 6; kkwr++)
  1191.                 wirelc[kkwr] = 0;
  1192.             }
  1193.             } else {
  1194.             /*******    the actual taking occurs here  */
  1195.  
  1196.             if (obloc[z] == 2000 + RSLOT)
  1197.                 obimpr[ZSCREE] = 9;
  1198.             obloc[z] = 1000;
  1199.             if (z == ZLATEX)
  1200.                 obimpr[z] = 337;
  1201.             }
  1202.         }
  1203.         /* special message for seed  */
  1204.  
  1205.         if (loc == 86 && z == ZSEED) {
  1206.             if (daytim == 1)
  1207.             spk = 428;
  1208.             else
  1209.             spk = 429;
  1210.         }
  1211.         /*
  1212.          * special increment of descriptor pointer if obimpr has 4096
  1213.          * set 
  1214.                  */
  1215.  
  1216.         if (obimpr[z] / 4096 == 1)
  1217.             obimpr[z] = (obimpr[z] & ~4096) + 8;
  1218.         /* ~4096=167777 octal  */
  1219.  
  1220.         }
  1221.     } else {
  1222.         /*
  1223.          * the prepdo is off take off clothes only  
  1224.              */
  1225.  
  1226.         if (plce == 2) {
  1227.         obloc[z] = loc;
  1228.         spk = 82;
  1229.         } else if ((obpprp[z] & 64) != 64)
  1230.         spk = 71;
  1231.         else {
  1232.         spk = 83;
  1233.         if (plural)
  1234.             spk = 189;
  1235.         }
  1236.     }
  1237.     xindnt += 2;
  1238.     speak(spk);
  1239.     xindnt -= 2;
  1240.     }
  1241. }
  1242.  
  1243.  
  1244. vthrow()
  1245. {
  1246.     int             xobj, result, plce, kobj;
  1247.     result = 0;
  1248.     /* if vthrow remains false, must call vdrop  */
  1249.  
  1250.     xobj = getobj(dobjs[0], doadjs[0]);
  1251.     if (xobj <= 0 || xobj > MOVMAX) {
  1252.     speak(71);
  1253.     result = 0;
  1254.     return (result);
  1255.     }
  1256.     itsher(xobj, &plce);
  1257.     if (plce == 0) {
  1258.     if ((obpprp[xobj] & 256) == 256)
  1259.         speak(185);
  1260.     else
  1261.         speak(66);
  1262.     result = 1;
  1263.     return (result);
  1264.     }
  1265.     /* throw things at the shimmering barrier  */
  1266.  
  1267.     if ((loc == 26 || loc == 27) && prepio != OUT &&
  1268.     iobj == BARRIE && dobjs[0] != WIRE && dobjs[0] != FISH) {
  1269.     speak(172);
  1270.     obloc[xobj] = loc;
  1271.     result = 1;
  1272.     }
  1273.     /* throwing things at martians is not allowed  */
  1274.  
  1275.     else if ((loc >= 27 && loc <= 51) && daytim == 0 &&
  1276.          (prepio == AT || prepio == TO) && iobj == MARTIA) {
  1277.     speak(178);
  1278.     result = 1;
  1279.     /*
  1280.      * the window, or the glass, can't be broken by throwing things at it 
  1281.          */
  1282.  
  1283.     } else if ((prepio == THROUG || prepio == AT) && (iobj == WINDOW
  1284.                               || iobj == GLASS)) {
  1285.     if (loc != 30 && loc != 42)
  1286.         speak(200);
  1287.     else if (xobj == ZSEED) {
  1288.         speak(337);
  1289.         obloc[xobj] = 0;
  1290.         obimpr[ZSEED] = 0;
  1291.     } else if (obloc[PGLASS] != 0) {
  1292.         speak(240);
  1293.         obloc[xobj] = 42;
  1294.         if (loc == 42)
  1295.         obloc[xobj] = 30;
  1296.     } else if (xobj == RBOULD) {
  1297.         speak(241);
  1298.         obloc[xobj] = loc;
  1299.     } else {
  1300.         speak(242);
  1301.         obloc[xobj] = loc;
  1302.     }
  1303.     result = 1;
  1304.     /*
  1305.      * throwing other things results in a joke (usually)  
  1306.          */
  1307.  
  1308.     } else if (prepio == AT && ((iobj == FERRET && (loc == 99 || loc ==
  1309.               100 || loc == 131)) || (iobj == BEES && loc == 87))) {
  1310.     prepio = 0;
  1311.     iobj = 0;
  1312.     ioadj = 0;
  1313.     } else if (prepio == AT) {
  1314.     if (iobj == ROBOT || iobj == FERRET)
  1315.         speak(285);
  1316.     else if (iobj == GUARD) {
  1317.         if (loc == guardl || loc == 171 || (chaset != 0 &&
  1318.                         chaset <= 9))
  1319.         speak(562);
  1320.         else if(loc >= 153)
  1321.         speak(561);
  1322.             else
  1323.                 speak(251);
  1324.     } else if (iobj == VINE && loc == 74) {
  1325.         speak(308);
  1326.         obloc[xobj] = loc;
  1327.     } else {
  1328.         kobj = getobj(iobj, ioadj);
  1329.         if (kobj <= 0)
  1330.         speak(71);
  1331.         else;
  1332.         speak(48);
  1333.     }
  1334.     return (1);
  1335.     }
  1336.     return (result);
  1337. }
  1338.  
  1339. vturn()
  1340. {
  1341.     int             numbr;
  1342.     if ((dobjs[0] == RA || dobjs[0] == DECLIN) && ((loc >= 175
  1343.                  && loc <= 181) || loc == 184 || loc == 187)
  1344.     && prepio == TO && iobj > 9999) {
  1345.     numbr = iobj - 10000;
  1346.     if (dobjs[0] == RA)
  1347.         raset = numbr;
  1348.     if (dobjs[0] == DECLIN)
  1349.         decset = numbr;
  1350.     if (lpill == 1)
  1351.         speak(533);
  1352.     return;
  1353.     }
  1354.     if ((dobjs[0] == LIGHT || dobjs[0] == MACHIN) && (prepdo ==
  1355.                               ON || prepdo == OFF)) {
  1356.     speak(391);
  1357.     return;
  1358.     } else if (dobjs[0] != DIAL)
  1359.     speak(387);
  1360.     else {
  1361.     if (doadjs[0] != LEFT && doadjs[0] != RIGHT)
  1362.         speak(392);
  1363.     else if (prepio == 0 && iobj == 0)
  1364.         speak(393);
  1365.     else if (prepio != TO || iobj < 9999)
  1366.         speak(28);
  1367.     else if (iobj < 10000 || iobj > 10999)
  1368.         speak(394);
  1369.     else if (doadjs[0] == LEFT)
  1370.         dial1 = iobj - 10000;
  1371.     else
  1372.         dial2 = iobj - 10000;
  1373.     }
  1374.     if (dial1 == dial1x && dial2 == dial2x && (obimpr[ZBOX] & 6) == 6) {
  1375.     speak(395);
  1376.     obimpr[ZBOX] -= 6;
  1377.     }
  1378. }
  1379. vwash()
  1380. {
  1381.     int             bplce, n, nplce;
  1382.     itsher(ZBUCKE, &bplce);
  1383.     if ((locdat[loc] & 1024) == 0 && (bplce == 0 || obimpr[ZBUCKE] != 1033)) {
  1384.     speak(74);
  1385.     return;
  1386.     }
  1387.     n = getobj(dobjs[0], doadjs[0]);
  1388.     if (n < 0)
  1389.     speak(70);
  1390.     else if (n == 0)
  1391.     speak(28);
  1392.     else {
  1393.     itsher(n, &nplce);
  1394.     if (nplce == 0) {
  1395.         if ((obimpr[n] & 256) != 0)
  1396.         speak(185);
  1397.         else
  1398.         speak(89);
  1399.     } else if (n == GDISC && rvtim == 0)
  1400.         speak(414);
  1401.     else if (n == GDISC && rvtim == 1) {
  1402.         speak(410);
  1403.         rvtim = 2;
  1404.     } else
  1405.         speak(336);
  1406.     }
  1407. }
  1408.  
  1409. vwear()
  1410. {
  1411.     int             ambig, i, d, plural, plce, spk;
  1412.     /* wear clothes  */
  1413.  
  1414.     ambig = !cnvobj();
  1415.     if (allflg || ambig) {
  1416.     speak(84);
  1417.     return;
  1418.     }
  1419.     for (i = 0; i < 30; i++) {
  1420.     d = dobjs[i];
  1421.     if (d == 0)
  1422.         continue;
  1423.     plural = (obpprp[d] & 256) == 256;
  1424.     if (d != ZDEET)
  1425.         speak(odistb[d]);
  1426.     itsher(d, &plce);
  1427.     if (plce == 0) {
  1428.         spk = 66;
  1429.         if (plural)
  1430.         spk = 185;
  1431.     } else if (plce == 2) {
  1432.         spk = 68;
  1433.         if (plural)
  1434.         spk = 187;
  1435.     } else if ((obpprp[d] & 64) != 64 && d != ZDEET)
  1436.         spk = 85;
  1437.     else if ((d == RPANT && obloc[LPANT] == 3000) ||
  1438.          (d == LPANT && obloc[RPANT] == 3000) ||
  1439.          (d == RSHIRT && obloc[GSHIRT] == 3000) ||
  1440.          (d == GSHIRT && obloc[RSHIRT] == 3000) ||
  1441.          (d == HBOOTS && obloc[CSHOES] == 3000) ||
  1442.          (d == CSHOES && obloc[HBOOTS] == 3000))
  1443.         spk = 86;
  1444.     else {
  1445.         if (d == ZDEET) {
  1446.         spk = 75;
  1447.         obimpr[ZDEET] = 28672;
  1448.         obloc[ZDEET] = 0;
  1449.         } else {
  1450.         spk = 87;
  1451.         if (plural)
  1452.             spk = 190;
  1453.         obloc[d] = 3000;
  1454.         /*
  1455.          * taking key changes descriptor ~4152=167707 octal  
  1456.                  */
  1457.  
  1458.         if (d == CKEY)
  1459.             obimpr[d] = (obimpr[d] & ~4152) + 16;
  1460.         }
  1461.     }
  1462.     xindnt += 2;
  1463.     speak(spk);
  1464.     xindnt -= 2;
  1465.     }
  1466. }
  1467.  
  1468.