118725Sedward /* 2*60750Sbostic * Copyright (c) 1983, 1993 3*60750Sbostic * The Regents of the University of California. All rights reserved. 434234Sbostic * 542569Sbostic * %sccs.include.redist.c% 634234Sbostic * 7*60750Sbostic * @(#)extern.h 8.1 (Berkeley) 05/31/93 818725Sedward */ 917393Sedward 1017393Sedward #include <sys/signal.h> 1117393Sedward #include <stdio.h> 1217393Sedward 1317393Sedward #define BITS (8 * sizeof (int)) 1417393Sedward 1517393Sedward #define OUTSIDE (position > 68 && position < 246 && position != 218) 1617393Sedward #define rnd(x) (rand() % (x)) 1717393Sedward #define max(a,b) ((a) < (b) ? (b) : (a)) 1817393Sedward #define testbit(array, index) (array[index/BITS] & (1 << (index % BITS))) 1917393Sedward #define setbit(array, index) (array[index/BITS] |= (1 << (index % BITS))) 2017393Sedward #define clearbit(array, index) (array[index/BITS] &= ~(1 << (index % BITS))) 2117393Sedward 2217393Sedward /* well known rooms */ 2317393Sedward #define FINAL 275 2417393Sedward #define GARDEN 197 2517393Sedward #define POOLS 126 2617393Sedward #define DOCK 93 2717393Sedward 2817393Sedward /* word types */ 2917393Sedward #define VERB 0 3017393Sedward #define OBJECT 1 3117393Sedward #define NOUNS 2 3217393Sedward #define PREPS 3 3317393Sedward #define ADJS 4 3417393Sedward #define CONJ 5 3517393Sedward 3617393Sedward /* words numbers */ 3717393Sedward #define KNIFE 0 3817393Sedward #define SWORD 1 3917393Sedward #define LAND 2 4017393Sedward #define WOODSMAN 3 4117393Sedward #define TWO_HANDED 4 4217393Sedward #define CLEAVER 5 4317393Sedward #define BROAD 6 4417393Sedward #define MAIL 7 4517393Sedward #define HELM 8 4617393Sedward #define SHIELD 9 4717393Sedward #define MAID 10 4817393Sedward #define BODY 10 4917393Sedward #define VIPER 11 5017393Sedward #define LAMPON 12 5117393Sedward #define SHOES 13 5217393Sedward #define CYLON 14 5317393Sedward #define PAJAMAS 15 5417393Sedward #define ROBE 16 5517393Sedward #define AMULET 17 5617393Sedward #define MEDALION 18 5717393Sedward #define TALISMAN 19 5817393Sedward #define DEADWOOD 20 5917393Sedward #define MALLET 21 6017393Sedward #define LASER 22 6117393Sedward #define BATHGOD 23 6217393Sedward #define NORMGOD 24 6317393Sedward #define GRENADE 25 6417393Sedward #define CHAIN 26 6517393Sedward #define ROPE 27 6617393Sedward #define LEVIS 28 6717393Sedward #define MACE 29 6817393Sedward #define SHOVEL 30 6917393Sedward #define HALBERD 31 7017393Sedward #define COMPASS 32 7117393Sedward #define CRASH 33 7217393Sedward #define ELF 34 7317393Sedward #define FOOT 35 7417393Sedward #define COINS 36 7517393Sedward #define MATCHES 37 7617393Sedward #define MAN 38 7717393Sedward #define PAPAYAS 39 7817393Sedward #define PINEAPPLE 40 7917393Sedward #define KIWI 41 8017393Sedward #define COCONUTS 42 8117393Sedward #define MANGO 43 8217393Sedward #define RING 44 8317393Sedward #define POTION 45 8417393Sedward #define BRACELET 46 8517393Sedward #define GIRL 47 8617393Sedward #define GIRLTALK 48 8717393Sedward #define DARK 49 8817393Sedward #define TIMER 50 8917393Sedward #define CHAR 53 9017393Sedward #define BOMB 54 9117393Sedward #define DEADGOD 55 9217393Sedward #define DEADTIME 56 9317393Sedward #define DEADNATIVE 57 9417393Sedward #define NATIVE 58 9517393Sedward #define HORSE 59 9617393Sedward #define CAR 60 9717393Sedward #define POT 61 9817393Sedward #define BAR 62 9917393Sedward #define BLOCK 63 10017393Sedward #define NUMOFOBJECTS 64 10117393Sedward /* non-objects below */ 10217393Sedward #define UP 1000 10317393Sedward #define DOWN 1001 10417393Sedward #define AHEAD 1002 10517393Sedward #define BACK 1003 10617393Sedward #define RIGHT 1004 10717393Sedward #define LEFT 1005 10817393Sedward #define TAKE 1006 10917393Sedward #define USE 1007 11017393Sedward #define LOOK 1008 11117393Sedward #define QUIT 1009 11217393Sedward #define NORTH 1010 11317393Sedward #define SOUTH 1011 11417393Sedward #define EAST 1012 11517393Sedward #define WEST 1013 11617393Sedward #define SU 1014 11717393Sedward #define DROP 1015 11817393Sedward #define TAKEOFF 1016 11917393Sedward #define DRAW 1017 12017393Sedward #define PUTON 1018 12117393Sedward #define WEARIT 1019 12217393Sedward #define PUT 1020 12317393Sedward #define INVEN 1021 12417393Sedward #define EVERYTHING 1022 12517393Sedward #define AND 1023 12617393Sedward #define KILL 1024 12717393Sedward #define RAVAGE 1025 12817393Sedward #define UNDRESS 1026 12917393Sedward #define THROW 1027 13017393Sedward #define LAUNCH 1028 13117393Sedward #define LANDIT 1029 13217393Sedward #define LIGHT 1030 13317393Sedward #define FOLLOW 1031 13417393Sedward #define KISS 1032 13517393Sedward #define LOVE 1033 13617393Sedward #define GIVE 1034 13717393Sedward #define SMITE 1035 13817393Sedward #define SHOOT 1036 13917393Sedward #define ON 1037 14017393Sedward #define OFF 1038 14117393Sedward #define TIME 1039 14217393Sedward #define SLEEP 1040 14317393Sedward #define DIG 1041 14417393Sedward #define EAT 1042 14517393Sedward #define SWIM 1043 14617393Sedward #define DRINK 1044 14717393Sedward #define DOOR 1045 14817393Sedward #define SAVE 1046 14917393Sedward #define RIDE 1047 15017393Sedward #define DRIVE 1048 15117393Sedward #define SCORE 1049 15217393Sedward #define BURY 1050 15317393Sedward #define JUMP 1051 15417441Sedward #define KICK 1052 15517393Sedward 15617393Sedward /* injuries */ 15717393Sedward #define ARM 6 /* broken arm */ 15817393Sedward #define RIBS 7 /* broken ribs */ 15917393Sedward #define SPINE 9 /* broken back */ 16017393Sedward #define SKULL 11 /* fractured skull */ 16117393Sedward #define INCISE 10 /* deep incisions */ 16217393Sedward #define NECK 12 /* broken NECK */ 16317393Sedward #define NUMOFINJURIES 13 16417393Sedward 16517393Sedward /* notes */ 16617393Sedward #define CANTLAUNCH 0 16717393Sedward #define LAUNCHED 1 16817393Sedward #define CANTSEE 2 16917393Sedward #define CANTMOVE 3 17017393Sedward #define JINXED 4 17117393Sedward #define DUG 5 17217393Sedward #define NUMOFNOTES 6 17317393Sedward 17417393Sedward /* fundamental constants */ 17517393Sedward #define NUMOFROOMS 275 17617393Sedward #define NUMOFWORDS ((NUMOFOBJECTS + BITS - 1) / BITS) 17717393Sedward #define LINELENGTH 81 17817393Sedward 17917393Sedward #define TODAY 0 18017393Sedward #define TONIGHT 1 18117393Sedward #define CYCLE 100 18217393Sedward 18317393Sedward /* initial variable values */ 18417441Sedward #define TANKFULL 250 18517393Sedward #define TORPEDOES 10 18617393Sedward #define MAXWEIGHT 60 18717393Sedward #define MAXCUMBER 10 18817393Sedward 18917393Sedward struct room { 19017393Sedward char *name; 19117393Sedward int link[8]; 19217393Sedward #define north link[0] 19317393Sedward #define south link[1] 19417393Sedward #define east link[2] 19517393Sedward #define west link[3] 19617393Sedward #define up link[4] 19717393Sedward #define access link[5] 19817393Sedward #define down link[6] 19917393Sedward #define flyhere link[7] 20017393Sedward char *desc; 20117393Sedward unsigned int objects[NUMOFWORDS]; 20217393Sedward }; 20317393Sedward struct room dayfile[]; 20417393Sedward struct room nightfile[]; 20517393Sedward struct room *location; 20617393Sedward 20717393Sedward /* object characteristics */ 20817393Sedward char *objdes[NUMOFOBJECTS]; 20917393Sedward char *objsht[NUMOFOBJECTS]; 21017393Sedward char *ouch[NUMOFINJURIES]; 21117393Sedward int objwt[NUMOFOBJECTS]; 21217393Sedward int objcumber[NUMOFOBJECTS]; 21317393Sedward 21417393Sedward /* current input line */ 21517393Sedward #define NWORD 20 /* words per line */ 21617393Sedward char words[NWORD][15]; 21717393Sedward int wordvalue[NWORD]; 21817393Sedward int wordtype[NWORD]; 21917393Sedward int wordcount, wordnumber; 22017393Sedward 22117393Sedward char *truedirec(), *rate(); 22217393Sedward char *getcom(), *getword(); 22317393Sedward 22417393Sedward /* state of the game */ 22517393Sedward int time; 22617393Sedward int position; 22717393Sedward int direction; 22817393Sedward int left, right, ahead, back; 22917393Sedward int clock, fuel, torps; 23017393Sedward int carrying, encumber; 23117393Sedward int rythmn; 23217393Sedward int followfight; 23317393Sedward int ate; 23417393Sedward int snooze; 23517393Sedward int meetgirl; 23617393Sedward int followgod; 23717393Sedward int godready; 23817393Sedward int win; 23917393Sedward int wintime; 24017393Sedward int wiz; 24117393Sedward int tempwiz; 24217393Sedward int matchlight, matchcount; 24317393Sedward int loved; 24417393Sedward int pleasure, power, ego; 24517393Sedward int WEIGHT; 24617393Sedward int CUMBER; 24717393Sedward int notes[NUMOFNOTES]; 24817393Sedward unsigned int inven[NUMOFWORDS]; 24917393Sedward unsigned int wear[NUMOFWORDS]; 25017393Sedward char beenthere[NUMOFROOMS+1]; 25117393Sedward char injuries[NUMOFINJURIES]; 25217393Sedward 25317393Sedward char uname[9]; 25417393Sedward 25517393Sedward struct wlist { 25617393Sedward char *string; 25717393Sedward int value, article; 25817393Sedward struct wlist *next; 25917393Sedward }; 26017393Sedward #define HASHSIZE 256 26117393Sedward #define HASHMUL 81 26217393Sedward #define HASHMASK (HASHSIZE - 1) 26317393Sedward struct wlist *hashtab[HASHSIZE]; 26417393Sedward struct wlist wlist[]; 26517393Sedward 26617393Sedward struct objs { 26717393Sedward short room; 26817393Sedward short obj; 26917393Sedward }; 27017393Sedward struct objs dayobjs[]; 27117393Sedward struct objs nightobjs[]; 272