home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / games / battlestar / com1.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-08  |  7.8 KB  |  251 lines

  1. /*
  2.  * Copyright (c) 1983 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  */
  33.  
  34. #ifndef lint
  35. static char sccsid[] = "@(#)com1.c    5.3 (Berkeley) 6/1/90";
  36. #endif /* not lint */
  37.  
  38. #include "externs.h"
  39.  
  40. move(thataway, token)
  41. int thataway, token;
  42. {
  43.     wordnumber++;
  44.     if ((!notes[CANTMOVE] && !notes[LAUNCHED]) || testbit(location[position].objects, LAND) || fuel > 0 && notes[LAUNCHED])
  45.         if (thataway) {
  46.             position = thataway;
  47.             newway(token);
  48.             time++;
  49.         }
  50.         else {
  51.             puts("You can't go this way.");
  52.             newway(token);
  53.             whichway(location[position]);
  54.             return(0);
  55.         }
  56.     else if (notes[CANTMOVE] && !notes[LAUNCHED])
  57.         puts("You aren't able to move; you better drop something.");
  58.     else
  59.         puts("You are out of fuel; now you will rot in space forever!");
  60.     return(1);
  61. }
  62.  
  63. convert(tothis)        /* Converts day to night and vice versa.         */
  64. int tothis;        /* Day objects are permanent.  Night objects are added*/
  65. {            /* at dusk, and subtracted at dawn.        */
  66.     register struct objs *p;
  67.     register i, j;
  68.  
  69.     if (tothis == TONIGHT) {
  70.         for (i = 1; i <= NUMOFROOMS; i++)
  71.             for (j = 0; j < NUMOFWORDS; j++)
  72.                 nightfile[i].objects[j] = dayfile[i].objects[j];
  73.         for (p = nightobjs; p->room != 0; p++)
  74.             setbit(nightfile[p->room].objects, p->obj);
  75.         location = nightfile;
  76.     } else {
  77.         for (i = 1; i <= NUMOFROOMS; i++)
  78.             for (j = 0; j < NUMOFWORDS; j++)
  79.                 dayfile[i].objects[j] = nightfile[i].objects[j];
  80.         for (p = nightobjs; p->room != 0; p++)
  81.             clearbit(dayfile[p->room].objects, p->obj);
  82.         location = dayfile;
  83.     }
  84. }
  85.  
  86. news()
  87. {
  88.     register int n;
  89.     int hurt;
  90.  
  91.     if (time > 30 && position < 32){
  92.         puts("An explosion of shuddering magnitude splinters bulkheads and");
  93.         puts("ruptures the battlestar's hull.  You are sucked out into the");
  94.         puts("frozen void of space and killed.");
  95.         die();
  96.     }
  97.     if (time > 20 && position < 32)
  98.         puts("Explosions rock the battlestar.");
  99.     if (time > snooze){
  100.         puts("You drop from exhaustion...");
  101.         zzz();
  102.     }
  103.     if (time > snooze - 5)
  104.         puts("You're getting tired.");
  105.     if (time > (rythmn + CYCLE)) {
  106.         if (location == nightfile) {
  107.             convert(TODAY);
  108.             if (OUTSIDE && time - rythmn - CYCLE < 10) {
  109.                 puts("Dew lit sunbeams stretch out from a watery sunrise and herald the dawn.");
  110.                 puts("You awake from a misty dream-world into stark reality.");
  111.                 puts("It is day.");
  112.             }
  113.         } else {
  114.             convert(TONIGHT);
  115.             clearbit(location[POOLS].objects, BATHGOD);
  116.             if (OUTSIDE && time - rythmn - CYCLE < 10) {
  117.                 puts("The dying sun sinks into the ocean, leaving a blood stained sunset.");
  118.                 puts("The sky slowly fades from orange to violet to black.  A few stars");
  119.                 puts("flicker on, and it is night.");
  120.                 puts("The world seems completly different at night.");
  121.             }
  122.         }
  123.         rythmn = time - time % CYCLE;
  124.     }
  125.     if (!wiz && !tempwiz)
  126.         if ((testbit(inven,TALISMAN) || testbit(wear,TALISMAN)) && (testbit(inven,MEDALION) || testbit(wear,MEDALION)) && (testbit(inven,AMULET) || testbit(wear,AMULET))){
  127.             tempwiz = 1;
  128.             puts("The three amulets glow and reenforce each other in power.\nYou are now a wizard.");
  129.     }
  130.     if (testbit(location[position].objects,ELF)){
  131.         printf("%s\n",objdes[ELF]);
  132.         fight(ELF,rnd(30));
  133.     }
  134.     if (testbit(location[position].objects,DARK)){
  135.         printf("%s\n",objdes[DARK]);
  136.         fight(DARK,100);
  137.     }
  138.     if (testbit(location[position].objects,WOODSMAN)){
  139.         printf("%s\n",objdes[WOODSMAN]);
  140.         fight(WOODSMAN,50);
  141.     }
  142.     switch(position){
  143.         
  144.         case 267:
  145.         case 257:    /* entering a cave */
  146.         case 274:
  147.         case 246:
  148.             notes[CANTSEE] = 1;
  149.             break;
  150.         case 160:
  151.         case 216:    /* leaving a cave */
  152.         case 230:
  153.         case 231:
  154.         case 232:
  155.             notes[CANTSEE] = 0;
  156.             break;
  157.     }
  158.     if (testbit(location[position].objects, GIRL))
  159.         meetgirl = 1;
  160.     if (meetgirl && CYCLE * 1.5 - time < 10){
  161.         setbit(location[GARDEN].objects,GIRLTALK);
  162.         setbit(location[GARDEN].objects,LAMPON);
  163.         setbit(location[GARDEN].objects,ROPE);
  164.     }
  165.     if (position == DOCK && (beenthere[position] || time > CYCLE)){
  166.         clearbit(location[DOCK].objects, GIRL);
  167.         clearbit(location[DOCK].objects,MAN);
  168.     }
  169.     if (meetgirl && time - CYCLE * 1.5 > 10){
  170.         clearbit(location[GARDEN].objects,GIRLTALK);
  171.         clearbit(location[GARDEN].objects,LAMPON);
  172.         clearbit(location[GARDEN].objects,ROPE);
  173.         meetgirl = 0;
  174.     }
  175.     if (testbit(location[position].objects,CYLON)){
  176.         puts("Oh my God, you're being shot at by an alien spacecraft!");
  177.         printf("The targeting computer says we have %d seconds to attack!\n",clock);
  178.         fflush(stdout);
  179.         sleep(1);
  180.         if (!visual()){
  181.             hurt = rnd(NUMOFINJURIES);
  182.             injuries[hurt] = 1;
  183.             puts("Laser blasts sear the cockpit, and the alien veers off in a victory roll.");
  184.             puts("The viper shudders under a terrible explosion.");
  185.             printf("I'm afraid you have suffered %s.\n", ouch[hurt]);
  186.         }
  187.         else
  188.             clearbit(location[position].objects,CYLON);
  189.     }
  190.     if (injuries[SKULL] && injuries[INCISE] && injuries[NECK]){
  191.         puts("I'm afraid you have suffered fatal injuries.");
  192.         die();
  193.     }
  194.     for (n=0; n < NUMOFINJURIES; n++)
  195.         if (injuries[n] == 1){
  196.             injuries[n] = 2;
  197.             if (WEIGHT > 5)
  198.                 WEIGHT -= 5;
  199.             else
  200.                 WEIGHT = 0;
  201.         }
  202.     if (injuries[ARM] == 2){
  203.         CUMBER -= 5;
  204.         injuries[ARM]++;
  205.     }
  206.     if (injuries[RIBS] == 2){
  207.         CUMBER -= 2;
  208.         injuries[RIBS]++;
  209.     }
  210.     if (injuries[SPINE] == 2){
  211.         WEIGHT = 0;
  212.         injuries[SPINE]++;
  213.     }
  214.     if (carrying > WEIGHT || encumber > CUMBER)
  215.         notes[CANTMOVE] = 1;
  216.     else
  217.         notes[CANTMOVE] = 0;
  218. }
  219.  
  220. crash()
  221. {
  222.     int hurt1,hurt2;
  223.  
  224.     fuel--;
  225.     if (!location[position].flyhere || (testbit(location[position].objects,LAND) && fuel <= 0)){
  226.         if (!location[position].flyhere)
  227.             puts("You're flying too low.  We're going to crash!");
  228.         else{ 
  229.             puts("You're out of fuel.  We'll have to crash land!");
  230.             if (!location[position].down){
  231.                 puts("Your viper strikes the ground and explodes into firey fragments.");
  232.                 puts("Thick black smoke billows up from the wreckage.");
  233.                 die();
  234.             }
  235.             position = location[position].down;
  236.         }
  237.         notes[LAUNCHED] = 0;
  238.         setbit(location[position].objects,CRASH);
  239.         time += rnd(CYCLE/4);
  240.         puts("The viper explodes into the ground and you lose consciousness...");
  241.         zzz();
  242.         hurt1 = rnd(NUMOFINJURIES - 2) + 2;
  243.         hurt2 = rnd(NUMOFINJURIES - 2) + 2;
  244.         injuries[hurt1] = 1;
  245.         injuries[hurt2] = 1;
  246.         injuries[0] = 1;    /* abrasions */
  247.         injuries[1] = 1;    /* lacerations */
  248.         printf("I'm afraid you have suffered %s and %s.\n",ouch[hurt1],ouch[hurt2]);
  249.     }
  250. }
  251.