bug report 4.2BSD/ucb/196
[unix-history] / usr / src / games / battlestar / com6.c
CommitLineData
fdc7d56f
EW
1/*
2 * Copyright (c) 1983 Regents of the University of California,
3 * All rights reserved. Redistribution permitted subject to
4 * the terms of the Berkeley Software License Agreement.
5 */
6
7abe8a37 7#ifndef lint
fdc7d56f 8static char sccsid[] = "@(#)com6.c 1.3 %G%";
7abe8a37
EW
9#endif
10
11#include "externs.h"
12
13launch()
14{
15 if (testbit(location[position].objects,VIPER) && !notes[CANTLAUNCH]){
16 if (fuel > 4){
17 clearbit(location[position].objects,VIPER);
18 position = location[position].up;
19 notes[LAUNCHED] = 1;
20 time++;
21 fuel -= 4;
22 puts("You climb into the viper and prepare for launch.");
23 puts("With a touch of your thumb the turbo engines ignite, thrusting you back into\nyour seat.");
24 return(1);
25 }
26 else
27 puts("Not enough fuel to launch.");
28 }
29 else
30 puts("Can't launch.");
31 return(0);
32}
33
34land()
35{
36 if (notes[LAUNCHED] && testbit(location[position].objects,LAND) && location[position].down){
37 notes[LAUNCHED] = 0;
38 position = location[position].down;
39 setbit(location[position].objects,VIPER);
40 fuel -= 2;
41 time++;
42 puts("You are down.");
43 return(1);
44 }
45 else
46 puts("You can't land here.");
47 return(0);
48}
49
50die() /* endgame */
51{
52 printf("bye.\nYour rating was %s.\n", rate());
53 post(' ');
54 exit(0);
55}
56
57live()
58{
59 puts("\nYou win!");
60 post('!');
61 exit(0);
62}
63
64#include <sys/time.h>
65post(ch)
66char ch;
67{
68 FILE *fp;
69 struct timeval tv;
70 char *date;
a7c71d1e 71 int s = sigblock(sigmask(SIGINT));
7abe8a37
EW
72
73 gettimeofday(&tv, (struct timezone *)0); /* can't call time */
74 date = ctime(&tv.tv_sec);
75 date[24] = '\0';
76 if (fp = fopen(logfile,"a")) {
77 fprintf(fp, "%s %8s %c%20s", date, uname, ch, rate());
78 if (wiz)
79 fprintf(fp, " wizard\n");
80 else if (tempwiz)
81 fprintf(fp, " WIZARD!\n");
82 else
83 fprintf(fp, "\n");
84 } else
85 perror(logfile);
a7c71d1e 86 sigsetmask(s);
7abe8a37
EW
87}
88
89char *
90rate()
91{
92 int score;
93
94 score = max(max(pleasure,power),ego);
95 if (score == pleasure){
96 if (score < 5)
97 return("novice");
98 else if (score < 20)
99 return("junior voyeur");
100 else if (score < 35)
101 return("Don Juan");
102 else return("Marquis De Sade");
103 }
104 else if (score == power){
105 if (score < 5)
106 return("serf");
107 else if (score < 8)
108 return("Samurai");
109 else if (score < 13)
110 return("Klingon");
111 else if (score < 22)
112 return("Darth Vader");
113 else return("Sauron the Great");
114 }
115 else{
116 if (score < 5)
117 return("Polyanna");
118 else if (score < 10)
119 return("philanthropist");
120 else if (score < 20)
121 return("Tattoo");
122 else return("Mr. Roarke");
123 }
124}
125
126drive()
127{
128 if (testbit(location[position].objects,CAR)){
a7c71d1e 129 puts("You hop in the car and turn the key. There is a perceptible grating noise,");
7abe8a37
EW
130 puts("and an explosion knocks you unconscious...");
131 clearbit(location[position].objects,CAR);
132 setbit(location[position].objects,CRASH);
133 injuries[5] = injuries[6] = injuries[7] = injuries[8] = 1;
134 time += 15;
135 zzz();
136 return(0);
137 }
138 else
139 puts("There is nothing to drive here.");
140 return(-1);
141}
142
143ride()
144{
145 if (testbit(location[position].objects,HORSE)){
146 puts("You climb onto the stallion and kick it in the guts. The stupid steed launches");
147 puts("forward through bush and fern. You are thrown and the horse gallups off.");
148 clearbit(location[position].objects,HORSE);
149 while (!(position = rnd(NUMOFROOMS+1)) || !OUTSIDE || !beenthere[position] || location[position].flyhere);
150 setbit(location[position].objects,HORSE);
151 if (location[position].north)
152 position = location[position].north;
153 else if (location[position].south)
154 position = location[position].south;
155 else if (location[position].east)
156 position = location[position].east;
157 else
158 position = location[position].west;
159 return(0);
160 }
161 else puts("There is no horse here.");
162 return(-1);
163}
164
165light() /* synonyms = {strike, smoke} */
166{ /* for matches, cigars */
167 if (testbit(inven,MATCHES) && matchcount){
168 puts("Your match splutters to life.");
169 time++;
170 matchlight = 1;
171 matchcount--;
172 if (position == 217){
173 puts("The whole bungalow explodes with an intense blast.");
174 die();
175 }
176 }
177 else puts("You're out of matches.");
178}