|
|
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: * @(#)externs.h 5.2 (Berkeley) 6/19/88
18: */
19:
20: #include <sys/signal.h>
21: #include <stdio.h>
22:
23: #define PATH(x) "/usr/games/lib/x"
24: #define logfile PATH(battlestar.log)
25:
26: #define BITS (8 * sizeof (int))
27:
28: #define OUTSIDE (position > 68 && position < 246 && position != 218)
29: #define rnd(x) (rand() % (x))
30: #define max(a,b) ((a) < (b) ? (b) : (a))
31: #define testbit(array, index) (array[index/BITS] & (1 << (index % BITS)))
32: #define setbit(array, index) (array[index/BITS] |= (1 << (index % BITS)))
33: #define clearbit(array, index) (array[index/BITS] &= ~(1 << (index % BITS)))
34:
35: /* well known rooms */
36: #define FINAL 275
37: #define GARDEN 197
38: #define POOLS 126
39: #define DOCK 93
40:
41: /* word types */
42: #define VERB 0
43: #define OBJECT 1
44: #define NOUNS 2
45: #define PREPS 3
46: #define ADJS 4
47: #define CONJ 5
48:
49: /* words numbers */
50: #define KNIFE 0
51: #define SWORD 1
52: #define LAND 2
53: #define WOODSMAN 3
54: #define TWO_HANDED 4
55: #define CLEAVER 5
56: #define BROAD 6
57: #define MAIL 7
58: #define HELM 8
59: #define SHIELD 9
60: #define MAID 10
61: #define BODY 10
62: #define VIPER 11
63: #define LAMPON 12
64: #define SHOES 13
65: #define CYLON 14
66: #define PAJAMAS 15
67: #define ROBE 16
68: #define AMULET 17
69: #define MEDALION 18
70: #define TALISMAN 19
71: #define DEADWOOD 20
72: #define MALLET 21
73: #define LASER 22
74: #define BATHGOD 23
75: #define NORMGOD 24
76: #define GRENADE 25
77: #define CHAIN 26
78: #define ROPE 27
79: #define LEVIS 28
80: #define MACE 29
81: #define SHOVEL 30
82: #define HALBERD 31
83: #define COMPASS 32
84: #define CRASH 33
85: #define ELF 34
86: #define FOOT 35
87: #define COINS 36
88: #define MATCHES 37
89: #define MAN 38
90: #define PAPAYAS 39
91: #define PINEAPPLE 40
92: #define KIWI 41
93: #define COCONUTS 42
94: #define MANGO 43
95: #define RING 44
96: #define POTION 45
97: #define BRACELET 46
98: #define GIRL 47
99: #define GIRLTALK 48
100: #define DARK 49
101: #define TIMER 50
102: #define CHAR 53
103: #define BOMB 54
104: #define DEADGOD 55
105: #define DEADTIME 56
106: #define DEADNATIVE 57
107: #define NATIVE 58
108: #define HORSE 59
109: #define CAR 60
110: #define POT 61
111: #define BAR 62
112: #define BLOCK 63
113: #define NUMOFOBJECTS 64
114: /* non-objects below */
115: #define UP 1000
116: #define DOWN 1001
117: #define AHEAD 1002
118: #define BACK 1003
119: #define RIGHT 1004
120: #define LEFT 1005
121: #define TAKE 1006
122: #define USE 1007
123: #define LOOK 1008
124: #define QUIT 1009
125: #define NORTH 1010
126: #define SOUTH 1011
127: #define EAST 1012
128: #define WEST 1013
129: #define SU 1014
130: #define DROP 1015
131: #define TAKEOFF 1016
132: #define DRAW 1017
133: #define PUTON 1018
134: #define WEARIT 1019
135: #define PUT 1020
136: #define INVEN 1021
137: #define EVERYTHING 1022
138: #define AND 1023
139: #define KILL 1024
140: #define RAVAGE 1025
141: #define UNDRESS 1026
142: #define THROW 1027
143: #define LAUNCH 1028
144: #define LANDIT 1029
145: #define LIGHT 1030
146: #define FOLLOW 1031
147: #define KISS 1032
148: #define LOVE 1033
149: #define GIVE 1034
150: #define SMITE 1035
151: #define SHOOT 1036
152: #define ON 1037
153: #define OFF 1038
154: #define TIME 1039
155: #define SLEEP 1040
156: #define DIG 1041
157: #define EAT 1042
158: #define SWIM 1043
159: #define DRINK 1044
160: #define DOOR 1045
161: #define SAVE 1046
162: #define RIDE 1047
163: #define DRIVE 1048
164: #define SCORE 1049
165: #define BURY 1050
166: #define JUMP 1051
167: #define KICK 1052
168:
169: /* injuries */
170: #define ARM 6 /* broken arm */
171: #define RIBS 7 /* broken ribs */
172: #define SPINE 9 /* broken back */
173: #define SKULL 11 /* fractured skull */
174: #define INCISE 10 /* deep incisions */
175: #define NECK 12 /* broken NECK */
176: #define NUMOFINJURIES 13
177:
178: /* notes */
179: #define CANTLAUNCH 0
180: #define LAUNCHED 1
181: #define CANTSEE 2
182: #define CANTMOVE 3
183: #define JINXED 4
184: #define DUG 5
185: #define NUMOFNOTES 6
186:
187: /* fundamental constants */
188: #define NUMOFROOMS 275
189: #define NUMOFWORDS ((NUMOFOBJECTS + BITS - 1) / BITS)
190: #define LINELENGTH 81
191:
192: #define TODAY 0
193: #define TONIGHT 1
194: #define CYCLE 100
195:
196: /* initial variable values */
197: #define TANKFULL 250
198: #define TORPEDOES 10
199: #define MAXWEIGHT 60
200: #define MAXCUMBER 10
201:
202: struct room {
203: char *name;
204: int link[8];
205: #define north link[0]
206: #define south link[1]
207: #define east link[2]
208: #define west link[3]
209: #define up link[4]
210: #define access link[5]
211: #define down link[6]
212: #define flyhere link[7]
213: char *desc;
214: unsigned int objects[NUMOFWORDS];
215: };
216: struct room dayfile[];
217: struct room nightfile[];
218: struct room *location;
219:
220: /* object characteristics */
221: char *objdes[NUMOFOBJECTS];
222: char *objsht[NUMOFOBJECTS];
223: char *ouch[NUMOFINJURIES];
224: int objwt[NUMOFOBJECTS];
225: int objcumber[NUMOFOBJECTS];
226:
227: /* current input line */
228: #define NWORD 20 /* words per line */
229: char words[NWORD][15];
230: int wordvalue[NWORD];
231: int wordtype[NWORD];
232: int wordcount, wordnumber;
233:
234: char *truedirec(), *rate();
235: char *getcom(), *getword();
236:
237: /* state of the game */
238: int time;
239: int position;
240: int direction;
241: int left, right, ahead, back;
242: int clock, fuel, torps;
243: int carrying, encumber;
244: int rythmn;
245: int followfight;
246: int ate;
247: int snooze;
248: int meetgirl;
249: int followgod;
250: int godready;
251: int win;
252: int wintime;
253: int wiz;
254: int tempwiz;
255: int matchlight, matchcount;
256: int loved;
257: int pleasure, power, ego;
258: int WEIGHT;
259: int CUMBER;
260: int notes[NUMOFNOTES];
261: unsigned int inven[NUMOFWORDS];
262: unsigned int wear[NUMOFWORDS];
263: char beenthere[NUMOFROOMS+1];
264: char injuries[NUMOFINJURIES];
265:
266: char uname[9];
267:
268: struct wlist {
269: char *string;
270: int value, article;
271: struct wlist *next;
272: };
273: #define HASHSIZE 256
274: #define HASHMUL 81
275: #define HASHMASK (HASHSIZE - 1)
276: struct wlist *hashtab[HASHSIZE];
277: struct wlist wlist[];
278:
279: struct objs {
280: short room;
281: short obj;
282: };
283: struct objs dayobjs[];
284: struct objs nightobjs[];
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.