xref: /dflybsd-src/games/battlestar/command4.c (revision 4318c66eac379e15105fe145d406dfef81b795f6)
1*4318c66eSSascha Wildner /*	@(#)com4.c	8.2 (Berkeley) 4/28/95			*/
2*4318c66eSSascha Wildner /*	$NetBSD: command4.c,v 1.3 2005/07/01 06:04:54 jmc Exp $	*/
3*4318c66eSSascha Wildner 
4*4318c66eSSascha Wildner /*
5937f07e0SSascha Wildner  * Copyright (c) 1983, 1993
6937f07e0SSascha Wildner  *	The Regents of the University of California.  All rights reserved.
7937f07e0SSascha Wildner  *
8937f07e0SSascha Wildner  * Redistribution and use in source and binary forms, with or without
9937f07e0SSascha Wildner  * modification, are permitted provided that the following conditions
10937f07e0SSascha Wildner  * are met:
11937f07e0SSascha Wildner  * 1. Redistributions of source code must retain the above copyright
12937f07e0SSascha Wildner  *    notice, this list of conditions and the following disclaimer.
13937f07e0SSascha Wildner  * 2. Redistributions in binary form must reproduce the above copyright
14937f07e0SSascha Wildner  *    notice, this list of conditions and the following disclaimer in the
15937f07e0SSascha Wildner  *    documentation and/or other materials provided with the distribution.
16937f07e0SSascha Wildner  * 3. Neither the name of the University nor the names of its contributors
17937f07e0SSascha Wildner  *    may be used to endorse or promote products derived from this software
18937f07e0SSascha Wildner  *    without specific prior written permission.
19937f07e0SSascha Wildner  *
20937f07e0SSascha Wildner  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21937f07e0SSascha Wildner  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22937f07e0SSascha Wildner  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23937f07e0SSascha Wildner  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24937f07e0SSascha Wildner  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25937f07e0SSascha Wildner  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26937f07e0SSascha Wildner  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27937f07e0SSascha Wildner  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28937f07e0SSascha Wildner  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29937f07e0SSascha Wildner  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30937f07e0SSascha Wildner  * SUCH DAMAGE.
31937f07e0SSascha Wildner  */
32937f07e0SSascha Wildner 
33*4318c66eSSascha Wildner #include "extern.h"
34937f07e0SSascha Wildner 
35937f07e0SSascha Wildner int
take(unsigned int from[])36937f07e0SSascha Wildner take(unsigned int from[])
37937f07e0SSascha Wildner {
38937f07e0SSascha Wildner 	int     firstnumber, heavy, bulky, value;
39937f07e0SSascha Wildner 
40937f07e0SSascha Wildner 	firstnumber = wordnumber;
41937f07e0SSascha Wildner 	if (wordnumber < wordcount && wordvalue[wordnumber + 1] == OFF) {
42937f07e0SSascha Wildner 		wordnumber++;
43937f07e0SSascha Wildner 		wordvalue[wordnumber] = TAKEOFF;
44*4318c66eSSascha Wildner 		wordtype[wordnumber] = VERB;
45937f07e0SSascha Wildner 		return (cypher());
46937f07e0SSascha Wildner 	} else {
47*4318c66eSSascha Wildner 		wordnumber++;
48937f07e0SSascha Wildner 		while (wordnumber <= wordcount && wordtype[wordnumber] ==
49937f07e0SSascha Wildner 		    OBJECT) {
50937f07e0SSascha Wildner 			value = wordvalue[wordnumber];
51937f07e0SSascha Wildner 			printf("%s:\n", objsht[value]);
52937f07e0SSascha Wildner 			heavy = (carrying + objwt[value]) <= WEIGHT;
53937f07e0SSascha Wildner 			bulky = (encumber + objcumber[value]) <= CUMBER;
54937f07e0SSascha Wildner 			if ((testbit(from, value) || wiz || tempwiz) &&
55937f07e0SSascha Wildner 			    heavy && bulky && !testbit(inven, value)) {
56937f07e0SSascha Wildner 				setbit(inven, value);
57937f07e0SSascha Wildner 				carrying += objwt[value];
58937f07e0SSascha Wildner 				encumber += objcumber[value];
59*4318c66eSSascha Wildner 				ourtime++;
60937f07e0SSascha Wildner 				if (testbit(from, value))
61937f07e0SSascha Wildner 					printf("Taken.\n");
62937f07e0SSascha Wildner 				else
63937f07e0SSascha Wildner 					printf("Zap! Taken from thin air.\n");
64937f07e0SSascha Wildner 				clearbit(from, value);
65937f07e0SSascha Wildner 				if (value == MEDALION)
66*4318c66eSSascha Wildner 					win--;
67937f07e0SSascha Wildner 			} else if (testbit(inven, value))
68937f07e0SSascha Wildner 				printf("You're already holding %s%s.\n",
69*4318c66eSSascha Wildner 				    A_OR_AN_OR_BLANK(value),
70*4318c66eSSascha Wildner 				    objsht[value]);
71*4318c66eSSascha Wildner 			else if (!testbit(from, value))
72*4318c66eSSascha Wildner 				printf("I don't see any %s around here.\n",
73937f07e0SSascha Wildner 				    objsht[value]);
74937f07e0SSascha Wildner 			else if (!heavy)
75937f07e0SSascha Wildner 				printf("The %s %stoo heavy.\n", objsht[value],
76*4318c66eSSascha Wildner 				    IS_OR_ARE(value));
77937f07e0SSascha Wildner 			else
78*4318c66eSSascha Wildner 				printf("The %s %stoo cumbersome to hold.\n",
79*4318c66eSSascha Wildner 				    objsht[value], IS_OR_ARE(value));
80937f07e0SSascha Wildner 			if (wordnumber < wordcount - 1 &&
81937f07e0SSascha Wildner 			    wordvalue[++wordnumber] == AND)
82937f07e0SSascha Wildner 				wordnumber++;
83937f07e0SSascha Wildner 			else
84937f07e0SSascha Wildner 				return (firstnumber);
85937f07e0SSascha Wildner 		}
86937f07e0SSascha Wildner 	}
87937f07e0SSascha Wildner 	/* special cases with their own return()'s */
88*4318c66eSSascha Wildner 
89937f07e0SSascha Wildner 	if (wordnumber <= wordcount && wordtype[wordnumber] == NOUNS)
90937f07e0SSascha Wildner 		switch (wordvalue[wordnumber]) {
91*4318c66eSSascha Wildner 
92937f07e0SSascha Wildner 		case SWORD:
93937f07e0SSascha Wildner 			if (testbit(from, SWORD)) {
94937f07e0SSascha Wildner 				wordtype[wordnumber--] = OBJECT;
95937f07e0SSascha Wildner 				return (take(from));
96937f07e0SSascha Wildner 			}
97937f07e0SSascha Wildner 			if (testbit(from, TWO_HANDED)) {
98937f07e0SSascha Wildner 				wordvalue[wordnumber] = TWO_HANDED;
99937f07e0SSascha Wildner 				wordtype[wordnumber--] = OBJECT;
100937f07e0SSascha Wildner 				return (take(from));
101937f07e0SSascha Wildner 			}
102937f07e0SSascha Wildner 			wordvalue[wordnumber] = BROAD;
103937f07e0SSascha Wildner 			wordtype[wordnumber--] = OBJECT;
104937f07e0SSascha Wildner 			return (take(from));
105937f07e0SSascha Wildner 
106937f07e0SSascha Wildner 		case BODY:
107937f07e0SSascha Wildner 			if (testbit(from, MAID)) {
108937f07e0SSascha Wildner 				wordvalue[wordnumber] = MAID;
109937f07e0SSascha Wildner 				wordtype[wordnumber--] = OBJECT;
110937f07e0SSascha Wildner 				return (take(from));
111937f07e0SSascha Wildner 			} else if (testbit(from, DEADWOOD)) {
112937f07e0SSascha Wildner 				wordvalue[wordnumber] = DEADWOOD;
113937f07e0SSascha Wildner 				wordtype[wordnumber--] = OBJECT;
114937f07e0SSascha Wildner 				return (take(from));
115937f07e0SSascha Wildner 			} else if (testbit(from, DEADNATIVE)) {
116937f07e0SSascha Wildner 				wordvalue[wordnumber] = DEADNATIVE;
117937f07e0SSascha Wildner 				wordtype[wordnumber--] = OBJECT;
118937f07e0SSascha Wildner 				return (take(from));
119937f07e0SSascha Wildner 			} else {
120937f07e0SSascha Wildner 				if (testbit(from, DEADGOD)) {
121937f07e0SSascha Wildner 					wordvalue[wordnumber] = DEADGOD;
122937f07e0SSascha Wildner 					wordtype[wordnumber--] = OBJECT;
123937f07e0SSascha Wildner 					return (take(from));
124937f07e0SSascha Wildner 				} else {
125937f07e0SSascha Wildner 					wordvalue[wordnumber] = DEADTIME;
126937f07e0SSascha Wildner 					wordtype[wordnumber--] = OBJECT;
127937f07e0SSascha Wildner 					return (take(from));
128937f07e0SSascha Wildner 				}
129937f07e0SSascha Wildner 			}
130937f07e0SSascha Wildner 			break;
131937f07e0SSascha Wildner 
132937f07e0SSascha Wildner 		case AMULET:
133937f07e0SSascha Wildner 			if (testbit(location[position].objects, AMULET)) {
134*4318c66eSSascha Wildner 				printf("The amulet is warm to the touch, and ");
135*4318c66eSSascha Wildner 				puts("its beauty catches your breath.");
136*4318c66eSSascha Wildner 				printf("A mist falls over your eyes, but ");
137*4318c66eSSascha Wildner 				puts("then it is gone.  Sounds seem clearer");
138*4318c66eSSascha Wildner 				printf("and sharper but far away as if in a ");
139*4318c66eSSascha Wildner 				puts("dream.  The sound of purling water");
140*4318c66eSSascha Wildner 				printf("reaches you from afar.  The mist ");
141*4318c66eSSascha Wildner 				printf("falls again, and your heart leaps in ");
142*4318c66eSSascha Wildner 				puts("horror.");
143*4318c66eSSascha Wildner 				printf("The gold freezes your hands and ");
144*4318c66eSSascha Wildner 				puts("fathomless darkness engulfs your soul.");
145937f07e0SSascha Wildner 			}
146937f07e0SSascha Wildner 			wordtype[wordnumber--] = OBJECT;
147937f07e0SSascha Wildner 			return (take(from));
148937f07e0SSascha Wildner 
149937f07e0SSascha Wildner 		case MEDALION:
150937f07e0SSascha Wildner 			if (testbit(location[position].objects, MEDALION)) {
151*4318c66eSSascha Wildner 				printf("The medallion is warm, and it ");
152*4318c66eSSascha Wildner 				printf("rekindles your spirit with the ");
153*4318c66eSSascha Wildner 				puts("warmth of life.");
154*4318c66eSSascha Wildner 				printf("Your amulet begins to glow as the ");
155*4318c66eSSascha Wildner 				printf("medallion is brought near to it, ");
156*4318c66eSSascha Wildner 				printf("and together\nthey radiate.\n");
157937f07e0SSascha Wildner 			}
158937f07e0SSascha Wildner 			wordtype[wordnumber--] = OBJECT;
159937f07e0SSascha Wildner 			return (take(from));
160937f07e0SSascha Wildner 
161937f07e0SSascha Wildner 		case TALISMAN:
162*4318c66eSSascha Wildner 			if (testbit(location[position].objects, TALISMAN)) {
163*4318c66eSSascha Wildner 				printf("The talisman is cold to the touch, ");
164*4318c66eSSascha Wildner 				puts("and it sends a chill down your spine.");
165*4318c66eSSascha Wildner 			}
166937f07e0SSascha Wildner 			wordtype[wordnumber--] = OBJECT;
167937f07e0SSascha Wildner 			return (take(from));
168937f07e0SSascha Wildner 
169937f07e0SSascha Wildner 		case NORMGOD:
170937f07e0SSascha Wildner 			if (testbit(location[position].objects, BATHGOD) &&
171937f07e0SSascha Wildner 			    (testbit(wear, AMULET) || testbit(inven, AMULET))) {
172*4318c66eSSascha Wildner 				printf("She offers a delicate hand, and you ");
173*4318c66eSSascha Wildner 				puts("help her out of the sparkling springs.");
174*4318c66eSSascha Wildner 				printf("Water droplets like liquid silver ");
175*4318c66eSSascha Wildner 				printf("bedew her golden skin, but when ");
176*4318c66eSSascha Wildner 				puts("they part");
177*4318c66eSSascha Wildner 				printf("from her, they fall as teardrops.  ");
178*4318c66eSSascha Wildner 				puts("She wraps a single cloth around her and");
179*4318c66eSSascha Wildner 				printf("ties it at the waist.  Around her ");
180*4318c66eSSascha Wildner 				puts("neck hangs a golden amulet.");
181*4318c66eSSascha Wildner 				printf("She bids you to follow her, and ");
182*4318c66eSSascha Wildner 				puts("walks away.");
183937f07e0SSascha Wildner 				pleasure++;
184*4318c66eSSascha Wildner 				followgod = ourtime;
185937f07e0SSascha Wildner 				clearbit(location[position].objects, BATHGOD);
186937f07e0SSascha Wildner 			} else
187*4318c66eSSascha Wildner 				if (!testbit(location[position].objects,
188*4318c66eSSascha Wildner 				    BATHGOD)) {
189*4318c66eSSascha Wildner 					printf("You're in no position to ");
190*4318c66eSSascha Wildner 					puts("take her.");
191*4318c66eSSascha Wildner 				} else
192937f07e0SSascha Wildner 					puts("She moves away from you.");
193937f07e0SSascha Wildner 			break;
194937f07e0SSascha Wildner 
195937f07e0SSascha Wildner 		default:
196937f07e0SSascha Wildner 			puts("It doesn't seem to work.");
197937f07e0SSascha Wildner 		}
198937f07e0SSascha Wildner 	else
199937f07e0SSascha Wildner 		puts("You've got to be kidding.");
200937f07e0SSascha Wildner 	return (firstnumber);
201937f07e0SSascha Wildner }
202937f07e0SSascha Wildner 
203937f07e0SSascha Wildner int
throw(const char * name)204937f07e0SSascha Wildner throw(const char *name)
205937f07e0SSascha Wildner {
206*4318c66eSSascha Wildner 	unsigned int     n;
207*4318c66eSSascha Wildner 	int     deposit = 0;
208937f07e0SSascha Wildner 	int     first, value;
209937f07e0SSascha Wildner 
210937f07e0SSascha Wildner 	first = wordnumber;
211937f07e0SSascha Wildner 	if (drop(name) != -1) {
212937f07e0SSascha Wildner 		switch (wordvalue[wordnumber]) {
213*4318c66eSSascha Wildner 
214937f07e0SSascha Wildner 		case AHEAD:
215937f07e0SSascha Wildner 			deposit = ahead;
216937f07e0SSascha Wildner 			break;
217937f07e0SSascha Wildner 
218937f07e0SSascha Wildner 		case BACK:
219937f07e0SSascha Wildner 			deposit = back;
220937f07e0SSascha Wildner 			break;
221937f07e0SSascha Wildner 
222937f07e0SSascha Wildner 		case LEFT:
223937f07e0SSascha Wildner 			deposit = left;
224937f07e0SSascha Wildner 			break;
225937f07e0SSascha Wildner 
226937f07e0SSascha Wildner 		case RIGHT:
227937f07e0SSascha Wildner 			deposit = right;
228937f07e0SSascha Wildner 			break;
229937f07e0SSascha Wildner 
230937f07e0SSascha Wildner 		case UP:
231937f07e0SSascha Wildner 			deposit = location[position].up *
232937f07e0SSascha Wildner 			    (location[position].access || position == FINAL);
233937f07e0SSascha Wildner 			break;
234937f07e0SSascha Wildner 
235937f07e0SSascha Wildner 		case DOWN:
236937f07e0SSascha Wildner 			deposit = location[position].down;
237937f07e0SSascha Wildner 			break;
238937f07e0SSascha Wildner 		}
239*4318c66eSSascha Wildner 		wordnumber = first + 1;
240937f07e0SSascha Wildner 		while (wordnumber <= wordcount) {
241937f07e0SSascha Wildner 			value = wordvalue[wordnumber];
242937f07e0SSascha Wildner 			if (deposit &&
243937f07e0SSascha Wildner 			    testbit(location[position].objects, value)) {
244937f07e0SSascha Wildner 				clearbit(location[position].objects, value);
245937f07e0SSascha Wildner 				if (value != GRENADE)
246*4318c66eSSascha Wildner 					setbit(location[deposit].objects,
247*4318c66eSSascha Wildner 					    value);
248937f07e0SSascha Wildner 				else {
249*4318c66eSSascha Wildner 					printf("A thundering explosion ");
250*4318c66eSSascha Wildner 					printf("nearby sends up a cloud of ");
251*4318c66eSSascha Wildner 					puts("smoke and shrapnel.");
252937f07e0SSascha Wildner 					for (n = 0; n < NUMOFWORDS; n++)
253*4318c66eSSascha Wildner 						location[deposit].objects[n] =
254*4318c66eSSascha Wildner 						    0;
255937f07e0SSascha Wildner 					setbit(location[deposit].objects, CHAR);
256937f07e0SSascha Wildner 				}
257937f07e0SSascha Wildner 				if (value == ROPE && position == FINAL)
258937f07e0SSascha Wildner 					location[position].access = 1;
259937f07e0SSascha Wildner 				switch (deposit) {
260937f07e0SSascha Wildner 				case 189:
261937f07e0SSascha Wildner 				case 231:
262937f07e0SSascha Wildner 					puts("The stone door is unhinged.");
263937f07e0SSascha Wildner 					location[189].north = 231;
264937f07e0SSascha Wildner 					location[231].south = 189;
265937f07e0SSascha Wildner 					break;
266937f07e0SSascha Wildner 				case 30:
267937f07e0SSascha Wildner 					puts("The wooden door is blown open.");
268937f07e0SSascha Wildner 					location[30].west = 25;
269937f07e0SSascha Wildner 					break;
270937f07e0SSascha Wildner 				case 31:
271937f07e0SSascha Wildner 					puts("The door is not damaged.");
272937f07e0SSascha Wildner 				}
273937f07e0SSascha Wildner 			} else
274937f07e0SSascha Wildner 				if (value == GRENADE &&
275*4318c66eSSascha Wildner 				    testbit(location[position].objects,
276*4318c66eSSascha Wildner 				    value)) {
277*4318c66eSSascha Wildner 					printf("You are blown into shreds ");
278*4318c66eSSascha Wildner 					puts("when your grenade explodes.");
279*4318c66eSSascha Wildner 					die();
280937f07e0SSascha Wildner 				}
281937f07e0SSascha Wildner 			if (wordnumber < wordcount - 1 &&
282937f07e0SSascha Wildner 			    wordvalue[++wordnumber] == AND)
283937f07e0SSascha Wildner 				wordnumber++;
284937f07e0SSascha Wildner 			else
285937f07e0SSascha Wildner 				return (first);
286937f07e0SSascha Wildner 		}
287937f07e0SSascha Wildner 		return (first);
288937f07e0SSascha Wildner 	}
289937f07e0SSascha Wildner 	return (first);
290937f07e0SSascha Wildner }
291937f07e0SSascha Wildner 
292937f07e0SSascha Wildner int
drop(const char * name)293937f07e0SSascha Wildner drop(const char *name)
294937f07e0SSascha Wildner {
295*4318c66eSSascha Wildner 
296937f07e0SSascha Wildner 	int     firstnumber, value;
297937f07e0SSascha Wildner 
298937f07e0SSascha Wildner 	firstnumber = wordnumber;
299*4318c66eSSascha Wildner 	wordnumber++;
300937f07e0SSascha Wildner 	while (wordnumber <= wordcount &&
301937f07e0SSascha Wildner 	    (wordtype[wordnumber] == OBJECT || wordtype[wordnumber] == NOUNS)) {
302937f07e0SSascha Wildner 		value = wordvalue[wordnumber];
303*4318c66eSSascha Wildner 		if (value == BODY) {	/* special case */
304*4318c66eSSascha Wildner 			wordtype[wordnumber] = OBJECT;
305*4318c66eSSascha Wildner 			if (testbit(inven, MAID) ||
306*4318c66eSSascha Wildner 			    testbit(location[position].objects, MAID))
307*4318c66eSSascha Wildner 				value = MAID;
308*4318c66eSSascha Wildner 			else if (testbit(inven, DEADWOOD) ||
309*4318c66eSSascha Wildner 			    testbit(location[position].objects, DEADWOOD))
310*4318c66eSSascha Wildner 				value = DEADWOOD;
311*4318c66eSSascha Wildner 			else if (testbit(inven, DEADGOD) ||
312*4318c66eSSascha Wildner 			    testbit(location[position].objects, DEADGOD))
313*4318c66eSSascha Wildner 				value = DEADGOD;
314*4318c66eSSascha Wildner 			else if (testbit(inven, DEADTIME) ||
315*4318c66eSSascha Wildner 			    testbit(location[position].objects, DEADTIME))
316*4318c66eSSascha Wildner 				value = DEADTIME;
317*4318c66eSSascha Wildner 			else if (testbit(inven, DEADNATIVE) ||
318*4318c66eSSascha Wildner 			    testbit(location[position].objects, DEADNATIVE))
319*4318c66eSSascha Wildner 				value = DEADNATIVE;
320*4318c66eSSascha Wildner 		}
321*4318c66eSSascha Wildner 		if (wordtype[wordnumber] == NOUNS && value == DOOR) {
322*4318c66eSSascha Wildner 			if (*name == 'K')
323*4318c66eSSascha Wildner 				puts("You hurt your foot.");
324*4318c66eSSascha Wildner 			else
325*4318c66eSSascha Wildner 				puts("You're not holding a door.");
326*4318c66eSSascha Wildner 		} else if (objsht[value] == NULL) {
327*4318c66eSSascha Wildner 			if (*name == 'K')
328*4318c66eSSascha Wildner 				puts("That's not for kicking!");
329*4318c66eSSascha Wildner 			else
330*4318c66eSSascha Wildner 				puts("You don't have that.");
331*4318c66eSSascha Wildner 		} else {
332937f07e0SSascha Wildner 			printf("%s:\n", objsht[value]);
333937f07e0SSascha Wildner 			if (testbit(inven, value)) {
334937f07e0SSascha Wildner 				clearbit(inven, value);
335937f07e0SSascha Wildner 				carrying -= objwt[value];
336937f07e0SSascha Wildner 				encumber -= objcumber[value];
337937f07e0SSascha Wildner 				if (value == BOMB) {
338*4318c66eSSascha Wildner 					printf("The bomb explodes.  A ");
339*4318c66eSSascha Wildner 					printf("blinding white light and ");
340*4318c66eSSascha Wildner 					printf("immense concussion ");
341*4318c66eSSascha Wildner 					puts("obliterate us.");
342*4318c66eSSascha Wildner 					die();
343937f07e0SSascha Wildner 				}
344*4318c66eSSascha Wildner 				if (value != AMULET && value != MEDALION &&
345*4318c66eSSascha Wildner 				    value != TALISMAN)
346*4318c66eSSascha Wildner 					setbit(location[position].objects,
347*4318c66eSSascha Wildner 					    value);
348937f07e0SSascha Wildner 				else
349937f07e0SSascha Wildner 					tempwiz = 0;
350*4318c66eSSascha Wildner 				ourtime++;
351937f07e0SSascha Wildner 				if (*name == 'K')
352937f07e0SSascha Wildner 					puts("Drop kicked.");
353937f07e0SSascha Wildner 				else
354937f07e0SSascha Wildner 					printf("%s.\n", name);
355937f07e0SSascha Wildner 			} else {
356937f07e0SSascha Wildner 				if (*name != 'K') {
357937f07e0SSascha Wildner 					printf("You aren't holding the %s.\n",
358937f07e0SSascha Wildner 					    objsht[value]);
359937f07e0SSascha Wildner 					if (testbit(location[position].objects,
360937f07e0SSascha Wildner 					    value)) {
361937f07e0SSascha Wildner 						if (*name == 'T')
362937f07e0SSascha Wildner 							puts("Kicked instead.");
363937f07e0SSascha Wildner 						else if (*name == 'G')
364937f07e0SSascha Wildner 							puts("Given anyway.");
365937f07e0SSascha Wildner 					}
366*4318c66eSSascha Wildner 				} else if (testbit(location[position].objects,
367*4318c66eSSascha Wildner 				    value))
368937f07e0SSascha Wildner 					puts("Kicked.");
369*4318c66eSSascha Wildner 				else if (testbit(wear, value))
370*4318c66eSSascha Wildner 					puts("Not while it's being worn.");
371*4318c66eSSascha Wildner 				else
372*4318c66eSSascha Wildner 					puts("Not found.");
373*4318c66eSSascha Wildner 			}
374937f07e0SSascha Wildner 		}
375937f07e0SSascha Wildner 		if (wordnumber < wordcount - 1 &&
376937f07e0SSascha Wildner 		    wordvalue[++wordnumber] == AND)
377937f07e0SSascha Wildner 			wordnumber++;
378937f07e0SSascha Wildner 		else
379937f07e0SSascha Wildner 			return (firstnumber);
380937f07e0SSascha Wildner 	}
381937f07e0SSascha Wildner 	puts("Do what?");
382937f07e0SSascha Wildner 	return (-1);
383937f07e0SSascha Wildner }
384937f07e0SSascha Wildner 
385937f07e0SSascha Wildner int
takeoff(void)386937f07e0SSascha Wildner takeoff(void)
387937f07e0SSascha Wildner {
388937f07e0SSascha Wildner 	wordnumber = take(wear);
389937f07e0SSascha Wildner 	return (drop("Dropped"));
390937f07e0SSascha Wildner }
391937f07e0SSascha Wildner 
392937f07e0SSascha Wildner int
puton(void)393937f07e0SSascha Wildner puton(void)
394937f07e0SSascha Wildner {
395937f07e0SSascha Wildner 	wordnumber = take(location[position].objects);
396937f07e0SSascha Wildner 	return (wearit());
397937f07e0SSascha Wildner }
398937f07e0SSascha Wildner 
399937f07e0SSascha Wildner int
eat(void)400937f07e0SSascha Wildner eat(void)
401937f07e0SSascha Wildner {
402937f07e0SSascha Wildner 	int     firstnumber, value;
403937f07e0SSascha Wildner 
404937f07e0SSascha Wildner 	firstnumber = wordnumber;
405*4318c66eSSascha Wildner 	wordnumber++;
406937f07e0SSascha Wildner 	while (wordnumber <= wordcount) {
407937f07e0SSascha Wildner 		value = wordvalue[wordnumber];
408*4318c66eSSascha Wildner 		if (wordtype[wordnumber] != OBJECT || objsht[value] == NULL)
409*4318c66eSSascha Wildner 			value = -2;
410937f07e0SSascha Wildner 		switch (value) {
411*4318c66eSSascha Wildner 
412*4318c66eSSascha Wildner 		case -2:
413*4318c66eSSascha Wildner 			puts("You can't eat that!");
414*4318c66eSSascha Wildner 			return (firstnumber);
415*4318c66eSSascha Wildner 
416937f07e0SSascha Wildner 		case -1:
417937f07e0SSascha Wildner 			puts("Eat what?");
418937f07e0SSascha Wildner 			return (firstnumber);
419937f07e0SSascha Wildner 
420937f07e0SSascha Wildner 		default:
421937f07e0SSascha Wildner 			printf("You can't eat %s%s!\n",
422*4318c66eSSascha Wildner 			    A_OR_AN_OR_BLANK(value), objsht[value]);
423937f07e0SSascha Wildner 			return (firstnumber);
424937f07e0SSascha Wildner 
425937f07e0SSascha Wildner 		case PAPAYAS:
426937f07e0SSascha Wildner 		case PINEAPPLE:
427937f07e0SSascha Wildner 		case KIWI:
428937f07e0SSascha Wildner 		case COCONUTS:	/* eatable things */
429937f07e0SSascha Wildner 		case MANGO:
430937f07e0SSascha Wildner 
431937f07e0SSascha Wildner 			printf("%s:\n", objsht[value]);
432937f07e0SSascha Wildner 			if (testbit(inven, value) &&
433*4318c66eSSascha Wildner 			    ourtime > ate - CYCLE &&
434937f07e0SSascha Wildner 			    testbit(inven, KNIFE)) {
435937f07e0SSascha Wildner 				clearbit(inven, value);
436937f07e0SSascha Wildner 				carrying -= objwt[value];
437937f07e0SSascha Wildner 				encumber -= objcumber[value];
438*4318c66eSSascha Wildner 				ate = max(ourtime, ate) + CYCLE / 3;
439937f07e0SSascha Wildner 				snooze += CYCLE / 10;
440*4318c66eSSascha Wildner 				ourtime++;
441*4318c66eSSascha Wildner 				printf("Eaten.  You can explore a little ");
442*4318c66eSSascha Wildner 				puts("longer now.");
443*4318c66eSSascha Wildner 			} else if (!testbit(inven, value)) {
444937f07e0SSascha Wildner 				printf("You aren't holding the %s.\n",
445937f07e0SSascha Wildner 				    objsht[value]);
446*4318c66eSSascha Wildner 			} else if (!testbit(inven, KNIFE))
447*4318c66eSSascha Wildner 				puts("You need a knife.");
448*4318c66eSSascha Wildner 			else
449*4318c66eSSascha Wildner 				puts("You're stuffed.");
450937f07e0SSascha Wildner 			if (wordnumber < wordcount - 1 &&
451937f07e0SSascha Wildner 			    wordvalue[++wordnumber] == AND)
452937f07e0SSascha Wildner 				wordnumber++;
453937f07e0SSascha Wildner 			else
454937f07e0SSascha Wildner 				return (firstnumber);
455937f07e0SSascha Wildner 		}		/* end switch */
456937f07e0SSascha Wildner 	}			/* end while */
457937f07e0SSascha Wildner 	return (firstnumber);
458937f07e0SSascha Wildner }
459