xref: /original-bsd/games/battlestar/com6.c (revision 40192f2d)
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 
7 #ifndef lint
8 static char sccsid[] = "@(#)com6.c	1.3 04/24/85";
9 #endif
10 
11 #include "externs.h"
12 
13 launch()
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 
34 land()
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 
50 die() 		/* endgame */
51 {
52 	printf("bye.\nYour rating was %s.\n", rate());
53 	post(' ');
54 	exit(0);
55 }
56 
57 live()
58 {
59 	puts("\nYou win!");
60 	post('!');
61 	exit(0);
62 }
63 
64 #include <sys/time.h>
65 post(ch)
66 char ch;
67 {
68 	FILE *fp;
69 	struct timeval tv;
70 	char *date;
71 	int s = sigblock(sigmask(SIGINT));
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);
86 	sigsetmask(s);
87 }
88 
89 char *
90 rate()
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 
126 drive()
127 {
128 	if (testbit(location[position].objects,CAR)){
129 		puts("You hop in the car and turn the key.  There is a perceptible grating noise,");
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 
143 ride()
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 
165 light()		/* 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 }
179