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