home *** CD-ROM | disk | FTP | other *** search
/ Between Heaven & Hell 2 / BetweenHeavenHell.cdr / 500 / 494 / itverb.c < prev    next >
Text File  |  1984-05-15  |  4KB  |  324 lines

  1.  
  2. /*    program ITVERB.C                    *\
  3. \*    WARNING: "advent.c" allocates GLOBAL storage space by    *\
  4. \*        including "advdef.h".                *\
  5. \*        All other modules use "advdec.h".        */
  6.  
  7.  
  8. #include    "stdio.h"    /* drv = 1.1st file 2.def 3.A    */
  9. #include    "advent.h"
  10. #include    "advdec.h"
  11.  
  12.  
  13. /*
  14.     Routines to process intransitive verbs
  15. */
  16. itverb()
  17. {
  18.     switch(verb) {
  19.     case DROP:
  20.     case SAY:
  21.     case WAVE:
  22.     case CALM:
  23.     case RUB:
  24.     case THROW:
  25.     case FIND:
  26.     case FEED:
  27.     case BREAK:
  28.     case WAKE:
  29.         needobj();
  30.         break;
  31.     case TAKE:
  32.         ivtake();
  33.         break;
  34.     case OPEN:
  35.     case LOCK:
  36.         ivopen();
  37.         break;
  38.     case NOTHING:
  39.         rspeak(54);
  40.         break;
  41.     case ON:
  42.     case OFF:
  43.     case POUR:
  44.         trverb();
  45.         break;
  46.     case WALK:
  47.         actspk(verb);
  48.         break;
  49.     case KILL:
  50.         ivkill();
  51.         break;
  52.     /*
  53.     case EAT:
  54.         iveat();
  55.         break;
  56.     */
  57.     case DRINK:
  58.         ivdrink();
  59.         break;
  60.     case QUIT:
  61.         ivquit();
  62.         break;
  63.     /*
  64.     case FILL:
  65.         ivfill();
  66.         break;
  67.     */
  68.     case BLAST:
  69.         vblast();
  70.         break;
  71.     case SCORE:
  72.         score();
  73.         break;
  74.     case FOO:
  75.         ivfoo();
  76.         break;
  77.     case SUSPEND:
  78.         saveflg = 1;
  79.         break;
  80.     case INVENTORY:
  81.         inventory();
  82.         break;
  83.     default:
  84.         printf("This intransitive not implemented yet\n");
  85.     }
  86. }
  87.  
  88. /*
  89.     CARRY, TAKE etc.
  90. */
  91. ivtake()
  92. {
  93.     int anobj,item;
  94.  
  95.     anobj = 0;
  96.     for(item=1;item<MAXOBJ;++item) {
  97.         if(place[item]==loc) {
  98.             if(anobj != 0) {
  99.                 needobj();
  100.                 return;
  101.             }
  102.             anobj = item;
  103.         }
  104.     }
  105.     if(anobj==0|| (dcheck() && dflag>=2)) {
  106.         needobj();
  107.         return;
  108.     }
  109.     object = anobj;
  110.     vtake();
  111. }
  112.  
  113. /*
  114.     OPEN, LOCK, UNLOCK
  115. */
  116. ivopen()
  117. {
  118.     if(here(CLAM))
  119.         object=CLAM;
  120.     if(here(OYSTER))
  121.         object=OYSTER;
  122.     if(at(DOOR))
  123.         object=DOOR;
  124.     if(at(GRATE))
  125.         object=GRATE;
  126.     if(here(CHAIN)) {
  127.         if(object != 0) {
  128.             needobj();
  129.             return;
  130.         }
  131.         object=CHAIN;
  132.     }
  133.     if(object==0) {
  134.         rspeak(28);
  135.         return;
  136.     }
  137.     vopen();
  138. }
  139.  
  140. /*
  141.     ATTACK, KILL etc
  142. */
  143. ivkill()
  144. {
  145.     object1 = 0;
  146.     if(dcheck() && dflag >=2)
  147.         object=DWARF;
  148.     if(here(SNAKE))
  149.         addobj(SNAKE);
  150.     if(at(DRAGON) && prop[DRAGON]==0)
  151.         addobj(DRAGON);
  152.     if(at(TROLL))
  153.         addobj(TROLL);
  154.     if(here(BEAR) && prop[BEAR]==0)
  155.         addobj(BEAR);
  156.     if(object1 != 0) {
  157.         needobj();
  158.         return;
  159.     }
  160.     if(object != 0) {
  161.         vkill();
  162.         return;
  163.     }
  164.     if(here(BIRD) && verb!= THROW)
  165.         object=BIRD;
  166.     if(here(CLAM) || here(OYSTER))
  167.         addobj(CLAM);
  168.     if(object1 != 0) {
  169.         needobj();
  170.         return;
  171.     }
  172.     vkill();
  173. }
  174.  
  175. /*
  176.     EAT
  177. */
  178. /*  no more room...
  179. iveat()
  180. {
  181.     if(!here(FOOD))
  182.         needobj();
  183.     else {
  184.         object=FOOD;
  185.         veat();
  186.     }
  187. }
  188. */
  189.  
  190. /*
  191.     DRINK
  192. */
  193. ivdrink()
  194. {
  195.     if(liqloc(loc) != WATER &&
  196.       (liq()!= WATER || !here(BOTTLE)))
  197.         needobj();
  198.     else {
  199.         object=WATER;
  200.         vdrink();
  201.     }
  202. }
  203.  
  204. /*
  205.     QUIT
  206. */
  207. ivquit()
  208. {
  209.     if(gaveup=yes(22,54,54))
  210.         normend();
  211. }
  212.  
  213. /*
  214.     FILL
  215. */
  216. /*  no room...
  217. ivfill()
  218. {
  219.     if(!here(BOTTLE))
  220.         needobj();
  221.     else {
  222.         object=BOTTLE;
  223.         vfill();
  224.     }
  225. }
  226. */
  227.  
  228. /*
  229.     Handle fee fie foe foo...
  230. */
  231. ivfoo()
  232. {
  233.     char k,msg;
  234.     k = vocab(word1,3000);
  235.     msg = 42;
  236.     if (foobar != 1-k) {
  237.         if (foobar != 0)
  238.             msg = 151;
  239.         rspeak(msg);
  240.         return;
  241.     }
  242.     foobar = k;
  243.     if (k != 4)
  244.         return;
  245.     foobar = 0;
  246.     if (place[EGGS] == 92 ||
  247.        (toting(EGGS) && loc == 92)) {
  248.         rspeak(msg);
  249.         return;
  250.     }
  251.     if (place[EGGS] == 0 && place[TROLL] == 0 &&
  252.         prop[TROLL] == 0)
  253.         prop[TROLL] = 1;
  254.     if (here(EGGS))
  255.         k = 1;
  256.     else if (loc == 92)
  257.         k = 0;
  258.     else
  259.         k = 2;
  260.     move(EGGS,92);
  261.     pspeak(EGGS,k);
  262.     return;
  263. }
  264.  
  265. /*
  266.     read etc...
  267. */
  268. /*  no room for this...
  269. ivread()
  270. {
  271.     if (here(MAGAZINE))
  272.         object = MAGAZINE;
  273.     if (here(TABLET))
  274.         object = object*100 + TABLET;
  275.     if (here(MESSAGE))
  276.         object = object*100 + MESSAGE;
  277.     if (object > 100 || object == 0 || dark()) {
  278.         needobj();
  279.         return;
  280.     }
  281.     vread();
  282. }
  283. */
  284.  
  285. /*
  286.     INVENTORY 
  287. */
  288. inventory()
  289. {
  290.     char msg;
  291.     int i;
  292.  
  293.     msg = 98;
  294.     for (i=1; i<=MAXOBJ; ++i) {
  295.         if (i==BEAR || !toting(i))
  296.             continue;
  297.         if (msg)
  298.             rspeak(99);
  299.         msg = 0;
  300.         pspeak(i,-1);
  301.     }
  302.     if (toting(BEAR))
  303.         msg = 141;
  304.     if (msg)
  305.         rspeak(msg);
  306. }
  307.  
  308. /*
  309.     ensure uniqueness as objects are searched
  310.     out for an intransitive verb
  311. */
  312. addobj(obj)
  313. {
  314.     if(object1 != 0)
  315.         return;
  316.     if(object != 0) {
  317.         object1 = -1;
  318.         return;
  319.     }
  320.     object = obj;
  321. }
  322.  
  323.  
  324.