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 * @(#)extern.h 5.2 (Berkeley) 06/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[]; 285