|
|
1.1 root 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 are permitted
6: * provided that the above copyright notice and this paragraph are
7: * duplicated in all such forms and that any documentation,
8: * advertising materials, and other materials related to such
9: * distribution and use acknowledge that the software was developed
10: * by the University of California, Berkeley. The name of the
11: * University may not be used to endorse or promote products derived
12: * from this software without specific prior written permission.
13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16: */
17:
18: #ifndef lint
19: static char sccsid[] = "@(#)com2.c 5.2 (Berkeley) 6/19/88";
20: #endif /* not lint */
21:
22: #include "externs.h"
23:
24: wearit() /* synonyms = {sheathe, sheath} */
25: {
26: register int n;
27: int firstnumber, value;
28:
29: firstnumber = wordnumber;
30: while(wordtype[++wordnumber] == ADJS);
31: while(wordnumber <= wordcount){
32: value = wordvalue[wordnumber];
33: for (n=0; objsht[value][n]; n++);
34: switch(value){
35:
36: case -1:
37: puts("Wear what?");
38: return(firstnumber);
39:
40: default:
41: printf("You can't wear%s%s!\n",(objsht[value][n-1] == 's' ? " " : " a "),objsht[value]);
42: return(firstnumber);
43:
44: case KNIFE:
45: /* case SHIRT: */
46: case ROBE:
47: case LEVIS: /* wearable things */
48: case SWORD:
49: case MAIL:
50: case HELM:
51: case SHOES:
52: case PAJAMAS:
53: case COMPASS:
54: case LASER:
55: case AMULET:
56: case TALISMAN:
57: case MEDALION:
58: case ROPE:
59: case RING:
60: case BRACELET:
61: case GRENADE:
62:
63: if (testbit(inven,value)){
64: clearbit(inven,value);
65: setbit(wear,value);
66: carrying -= objwt[value];
67: encumber -= objcumber[value];
68: time++;
69: printf("You are now wearing %s %s.\n",(objsht[value][n-1] == 's' ? "the" : "a"), objsht[value]);
70: }
71: else if (testbit(wear,value))
72: printf("You are already wearing the %s.\n", objsht[value]);
73: else
74: printf("You aren't holding the %s.\n", objsht[value]);
75: if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND)
76: wordnumber++;
77: else
78: return(firstnumber);
79: } /* end switch */
80: } /* end while */
81: puts("Don't be ridiculous.");
82: return(firstnumber);
83: }
84:
85: put() /* synonyms = {buckle, strap, tie} */
86: {
87: if (wordvalue[wordnumber + 1] == ON){
88: wordvalue[++wordnumber] = PUTON;
89: return(cypher());
90: }
91: if (wordvalue[wordnumber + 1] == DOWN){
92: wordvalue[++wordnumber] = DROP;
93: return(cypher());
94: }
95: puts("I don't understand what you want to put.");
96: return(-1);
97:
98: }
99:
100: draw() /* synonyms = {pull, carry} */
101: {
102: return(take(wear));
103: }
104:
105: use()
106: {
107: while (wordtype[++wordnumber] == ADJS && wordnumber < wordcount);
108: if (wordvalue[wordnumber] == AMULET && testbit(inven,AMULET) && position != FINAL){
109: puts("The amulet begins to glow.");
110: if (testbit(inven,MEDALION)){
111: puts("The medallion comes to life too.");
112: if (position == 114){
113: location[position].down = 160;
114: whichway(location[position]);
115: puts("The waves subside and it is possible to descend to the sea cave now.");
116: time++;
117: return(-1);
118: }
119: }
120: puts("A light mist falls over your eyes and the sound of purling water trickles in");
121: puts("your ears. When the mist lifts you are standing beside a cool stream.");
122: if (position == 229)
123: position = 224;
124: else
125: position = 229;
126: time++;
127: return(0);
128: }
129: else if (position == FINAL)
130: puts("The amulet won't work in here.");
131: else if (wordvalue[wordnumber] == COMPASS && testbit(inven,COMPASS))
132: printf("Your compass points %s.\n",truedirec(NORTH,'-'));
133: else if (wordvalue[wordnumber] == COMPASS)
134: puts("You aren't holding the compass.");
135: else if (wordvalue[wordnumber] == AMULET)
136: puts("You aren't holding the amulet.");
137: else
138: puts("There is no apparent use.");
139: return(-1);
140: }
141:
142: murder()
143: {
144: register int n;
145:
146: for (n=0; !((n == SWORD || n == KNIFE || n == TWO_HANDED || n == MACE || n == CLEAVER || n == BROAD || n == CHAIN || n == SHOVEL || n == HALBERD) && testbit(inven,n)) && n < NUMOFOBJECTS; n++);
147: if (n == NUMOFOBJECTS)
148: puts("You don't have suitable weapons to kill.");
149: else {
150: printf("Your %s should do the trick.\n",objsht[n]);
151: while (wordtype[++wordnumber] == ADJS);
152: switch(wordvalue[wordnumber]){
153:
154: case NORMGOD:
155: if (testbit(location[position].objects,BATHGOD)){
156: puts("The goddess's head slices off. Her corpse floats in the water.");
157: clearbit(location[position].objects,BATHGOD);
158: setbit(location[position].objects,DEADGOD);
159: power += 5;
160: notes[JINXED]++;
161: } else if (testbit(location[position].objects,NORMGOD)){
162: puts("The goddess pleads but you strike her mercilessly. Her broken body lies in a\npool of blood.");
163: clearbit(location[position].objects,NORMGOD);
164: setbit(location[position].objects,DEADGOD);
165: power += 5;
166: notes[JINXED]++;
167: if (wintime)
168: live();
169: } else puts("I dont see her anywhere.");
170: break;
171: case TIMER:
172: if (testbit(location[position].objects,TIMER)){
173: puts("The old man offers no resistance.");
174: clearbit(location[position].objects,TIMER);
175: setbit(location[position].objects,DEADTIME);
176: power++;
177: notes[JINXED]++;
178: } else puts("Who?");
179: break;
180: case NATIVE:
181: if (testbit(location[position].objects,NATIVE)){
182: puts("The girl screams as you cut her body to shreds. She is dead.");
183: clearbit(location[position].objects,NATIVE);
184: setbit(location[position].objects,DEADNATIVE);
185: power += 5;
186: notes[JINXED]++;
187: } else puts("What girl?");
188: break;
189: case MAN:
190: if (testbit(location[position].objects,MAN)){
191: puts("You strike him to the ground, and he coughs up blood.");
192: puts("Your fantasy is over.");
193: die();
194: }
195: case -1:
196: puts("Kill what?");
197: break;
198:
199: default:
200: if (wordtype[wordnumber] != NOUNS)
201: puts("Kill what?");
202: else
203: printf("You can't kill the %s!\n",objsht[wordvalue[wordnumber]]);
204: }
205: }
206: }
207:
208: ravage()
209: {
210: while (wordtype[++wordnumber] != NOUNS && wordnumber <= wordcount);
211: if (wordtype[wordnumber] == NOUNS && testbit(location[position].objects,wordvalue[wordnumber])){
212: time++;
213: switch(wordvalue[wordnumber]){
214: case NORMGOD:
215: puts("You attack the goddess, and she screams as you beat her. She falls down");
216: puts("crying and tries to hold her torn and bloodied dress around her.");
217: power += 5;
218: pleasure += 8;
219: ego -= 10;
220: wordnumber--;
221: godready = -30000;
222: murder();
223: win = -30000;
224: break;
225: case NATIVE:
226: puts("The girl tries to run, but you catch her and throw her down. Her face is");
227: puts("bleeding, and she screams as you tear off her clothes.");
228: power += 3;
229: pleasure += 5;
230: ego -= 10;
231: wordnumber--;
232: murder();
233: if (rnd(100) < 50){
234: puts("Her screams have attracted attention. I think we are surrounded.");
235: setbit(location[ahead].objects,WOODSMAN);
236: setbit(location[ahead].objects,DEADWOOD);
237: setbit(location[ahead].objects,MALLET);
238: setbit(location[back].objects,WOODSMAN);
239: setbit(location[back].objects,DEADWOOD);
240: setbit(location[back].objects,MALLET);
241: setbit(location[left].objects,WOODSMAN);
242: setbit(location[left].objects,DEADWOOD);
243: setbit(location[left].objects,MALLET);
244: setbit(location[right].objects,WOODSMAN);
245: setbit(location[right].objects,DEADWOOD);
246: setbit(location[right].objects,MALLET);
247: }
248: break;
249: default:
250: puts("You are perverted.");
251: }
252: }
253: else
254: puts("Who?");
255: }
256:
257: follow()
258: {
259: if (followfight == time){
260: puts("The Dark Lord leaps away and runs down secret tunnels and corridoors.");
261: puts("You chase him through the darkness and splash in pools of water.");
262: puts("You have cornered him. His laser sword extends as he steps forward.");
263: position = FINAL;
264: fight(DARK,75);
265: setbit(location[position].objects,TALISMAN);
266: setbit(location[position].objects,AMULET);
267: return(0);
268: }
269: else if (followgod == time){
270: puts("The goddess leads you down a steamy tunnel and into a high, wide chamber.");
271: puts("She sits down on a throne.");
272: position = 268;
273: setbit(location[position].objects,NORMGOD);
274: notes[CANTSEE] = 1;
275: return(0);
276: }
277: else
278: puts("There is no one to follow.");
279: return(-1);
280: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.