home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / games / battlestar / com6.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-08  |  5.7 KB  |  214 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[] = "@(#)com6.c    5.5 (Berkeley) 6/1/90";
  36. #endif /* not lint */
  37.  
  38. #include "externs.h"
  39. #include "pathnames.h"
  40.  
  41. launch()
  42. {
  43.     if (testbit(location[position].objects,VIPER) && !notes[CANTLAUNCH]){
  44.         if (fuel > 4){
  45.             clearbit(location[position].objects,VIPER);
  46.             position = location[position].up;
  47.             notes[LAUNCHED] = 1;
  48.             time++;
  49.             fuel -= 4;
  50.             puts("You climb into the viper and prepare for launch.");
  51.             puts("With a touch of your thumb the turbo engines ignite, thrusting you back into\nyour seat.");
  52.             return(1);
  53.         }
  54.         else
  55.             puts("Not enough fuel to launch.");
  56.      }
  57.      else
  58.         puts("Can't launch.");
  59.      return(0);
  60. }
  61.  
  62. land()
  63. {
  64.     if (notes[LAUNCHED] && testbit(location[position].objects,LAND) && location[position].down){
  65.         notes[LAUNCHED] = 0;
  66.         position = location[position].down;
  67.         setbit(location[position].objects,VIPER);
  68.         fuel -= 2;
  69.         time++;
  70.         puts("You are down.");
  71.         return(1);
  72.     }
  73.     else
  74.         puts("You can't land here.");
  75.     return(0);
  76. }
  77.  
  78. die()         /* endgame */
  79. {
  80.     printf("bye.\nYour rating was %s.\n", rate());
  81.     post(' ');
  82.     exit(0);
  83. }
  84.  
  85. live()
  86. {
  87.     puts("\nYou win!");
  88.     post('!');
  89.     exit(0);
  90. }
  91.  
  92. /*
  93.  * sigh -- this program thinks "time" is an int.  It's easier to not load
  94.  * <time.h> than try and fix it.
  95.  */
  96. #define KERNEL
  97. #include <sys/time.h>
  98. #undef KERNEL
  99.  
  100. post(ch)
  101. char ch;
  102. {
  103.     FILE *fp;
  104.     struct timeval tv;
  105.     char *date, *ctime();
  106.     int s = sigblock(sigmask(SIGINT));
  107.  
  108.     gettimeofday(&tv, (struct timezone *)0);    /* can't call time */
  109.     date = ctime(&tv.tv_sec);
  110.     date[24] = '\0';
  111.     if (fp = fopen(_PATH_SCORE,"a")) {
  112.         fprintf(fp, "%s  %8s  %c%20s", date, uname, ch, rate());
  113.         if (wiz)
  114.             fprintf(fp, "   wizard\n");
  115.         else if (tempwiz)
  116.             fprintf(fp, "   WIZARD!\n");
  117.         else
  118.             fprintf(fp, "\n");
  119.     } else
  120.         perror(_PATH_SCORE);
  121.     sigsetmask(s);
  122. }
  123.  
  124. char *
  125. rate()
  126. {
  127.     int score;
  128.  
  129.     score = max(max(pleasure,power),ego);
  130.     if (score == pleasure){
  131.         if (score < 5)
  132.             return("novice");
  133.         else if (score < 20)
  134.             return("junior voyeur");
  135.         else if (score < 35)
  136.             return("Don Juan");
  137.         else return("Marquis De Sade");
  138.     }
  139.     else if (score == power){
  140.         if (score < 5)
  141.             return("serf");
  142.         else if (score < 8)
  143.             return("Samurai");
  144.         else if (score < 13)
  145.             return("Klingon");
  146.         else if (score < 22)
  147.             return("Darth Vader");
  148.         else return("Sauron the Great");
  149.     }
  150.     else{
  151.         if (score < 5)
  152.             return("Polyanna");
  153.         else if (score < 10)
  154.             return("philanthropist");
  155.         else if (score < 20)
  156.             return("Tattoo");
  157.         else return("Mr. Roarke");
  158.     }
  159. }
  160.  
  161. drive()
  162. {
  163.     if (testbit(location[position].objects,CAR)){
  164.         puts("You hop in the car and turn the key.  There is a perceptible grating noise,");
  165.         puts("and an explosion knocks you unconscious...");
  166.         clearbit(location[position].objects,CAR);
  167.         setbit(location[position].objects,CRASH);
  168.         injuries[5] = injuries[6] = injuries[7] = injuries[8] = 1;
  169.         time += 15;
  170.         zzz();
  171.         return(0);
  172.     }
  173.     else
  174.         puts("There is nothing to drive here.");
  175.     return(-1);
  176. }
  177.  
  178. ride()
  179. {
  180.     if (testbit(location[position].objects,HORSE)){
  181.         puts("You climb onto the stallion and kick it in the guts.  The stupid steed launches");
  182.         puts("forward through bush and fern.  You are thrown and the horse gallups off.");
  183.         clearbit(location[position].objects,HORSE);
  184.         while (!(position = rnd(NUMOFROOMS+1)) || !OUTSIDE || !beenthere[position] || location[position].flyhere);
  185.         setbit(location[position].objects,HORSE);
  186.         if (location[position].north)
  187.             position = location[position].north;
  188.         else if (location[position].south)
  189.             position = location[position].south;
  190.         else if (location[position].east)
  191.             position = location[position].east;
  192.         else
  193.             position = location[position].west;
  194.         return(0);
  195.     }
  196.     else puts("There is no horse here.");
  197.     return(-1);
  198. }
  199.  
  200. light()        /* synonyms = {strike, smoke} */
  201. {        /* for matches, cigars */
  202.     if (testbit(inven,MATCHES) && matchcount){
  203.         puts("Your match splutters to life.");
  204.         time++;
  205.         matchlight = 1;
  206.         matchcount--;
  207.         if (position == 217){
  208.             puts("The whole bungalow explodes with an intense blast.");
  209.             die();
  210.         }
  211.     }
  212.     else puts("You're out of matches.");
  213. }
  214.