/* header.h Larn is copyrighted 1986 by Noah Morgan. */ #include #include #include #include #include #include #include #define MAXLEVEL 11 /* max # levels in the dungeon */ #define MAXVLEVEL 3 /* max # of levels in the temple of the luran */ #define MAXX 67 #define MAXY 17 #define SCORESIZE 10 /* this is the number of people on a scoreboard max */ #define MAXPLEVEL 100 /* maximum player level allowed */ #define MAXMONST 56 /* maximum # monsters in the dungeon */ #define SPNUM 38 /* maximum number of spells in existence */ #define MAXSCROLL 28 /* maximum number of scrolls that are possible */ #define MAXPOTION 35 /* maximum number of potions that are possible */ #define TIMELIMIT 30000 /* the maximum number of moves before the game is called */ #define TAXRATE 1/20 /* the tax rate for the LRS */ #define MAXOBJ 93 /* the maximum number of objects n < MAXOBJ */ /* this is the structure definition of the monster data */ struct monst { const char *name; char level; short armorclass; char damage; char attack; char defense; char genocided; char intelligence; /* monsters intelligence -- used to choose movement */ short gold; short hitpoints; unsigned long experience; }; /* this is the structure definition for the items in the dnd store */ struct _itm { short price; short obj; short arg; short qty; }; /* this is the structure that holds the entire dungeon specifications */ struct cel { short hitp; /* monster's hit points */ char mitem; /* the monster ID */ char item; /* the object's ID */ short iarg; /* the object's argument */ char know; /* have we been here before */ }; /* this is the structure for maintaining & moving the spheres of annihilation */ struct sphere { struct sphere *p; /* pointer to next structure */ char x,y,lev; /* location of the sphere */ char dir; /* direction sphere is going in */ char lifetime; /* duration of the sphere */ }; /* defines for the character attribute array c[] */ #define STRENGTH 0 /* characters physical strength not due to objects */ #define INTELLIGENCE 1 #define WISDOM 2 #define CONSTITUTION 3 #define DEXTERITY 4 #define CHARISMA 5 #define HPMAX 6 #define HP 7 #define GOLD 8 #define EXPERIENCE 9 #define LEVEL 10 #define REGEN 11 #define WCLASS 12 #define AC 13 #define BANKACCOUNT 14 #define SPELLMAX 15 #define SPELLS 16 #define ENERGY 17 #define ECOUNTER 18 #define MOREDEFENSES 19 #define WEAR 20 #define PROTECTIONTIME 21 #define WIELD 22 #define AMULET 23 #define REGENCOUNTER 24 #define MOREDAM 25 #define DEXCOUNT 26 #define STRCOUNT 27 #define BLINDCOUNT 28 #define CAVELEVEL 29 #define CONFUSE 30 #define ALTPRO 31 #define HERO 32 #define CHARMCOUNT 33 #define INVISIBILITY 34 #define CANCELLATION 35 #define HASTESELF 36 #define EYEOFLARN 37 #define AGGRAVATE 38 #define GLOBE 39 #define TELEFLAG 40 #define SLAYING 41 #define NEGATESPIRIT 42 #define SCAREMONST 43 #define AWARENESS 44 #define HOLDMONST 45 #define TIMESTOP 46 #define HASTEMONST 47 #define CUBEofUNDEAD 48 #define GIANTSTR 49 #define FIRERESISTANCE 50 #define BESSMANN 51 #define NOTHEFT 52 #define HARDGAME 53 #define CPUTIME 54 #define BYTESIN 55 #define BYTESOUT 56 #define MOVESMADE 57 #define MONSTKILLED 58 #define SPELLSCAST 59 #define LANCEDEATH 60 #define SPIRITPRO 61 #define UNDEADPRO 62 #define SHIELD 63 #define STEALTH 64 #define ITCHING 65 #define LAUGHING 66 #define DRAINSTRENGTH 67 #define CLUMSINESS 68 #define INFEEBLEMENT 69 #define HALFDAM 70 #define SEEINVISIBLE 71 #define FILLROOM 72 #define RANDOMWALK 73 #define SPHCAST 74 /* nz if an active sphere of annihilation */ #define WTW 75 /* walk through walls */ #define STREXTRA 76 /* character strength due to objects or enchantments */ #define TMP 77 /* misc scratch space */ #define LIFEPROT 78 /* life protection counter */ /* defines for the objects in the game */ #define OALTAR 1 #define OTHRONE 2 #define OORB 3 #define OPIT 4 #define OSTAIRSUP 5 #define OELEVATORUP 6 #define OFOUNTAIN 7 #define OSTATUE 8 #define OTELEPORTER 9 #define OSCHOOL 10 #define OMIRROR 11 #define ODNDSTORE 12 #define OSTAIRSDOWN 13 #define OELEVATORDOWN 14 #define OBANK2 15 #define OBANK 16 #define ODEADFOUNTAIN 17 #define OMAXGOLD 70 #define OGOLDPILE 18 #define OOPENDOOR 19 #define OCLOSEDDOOR 20 #define OWALL 21 #define OTRAPARROW 66 #define OTRAPARROWIV 67 #define OLARNEYE 22 #define OPLATE 23 #define OCHAIN 24 #define OLEATHER 25 #define ORING 60 #define OSTUDLEATHER 61 #define OSPLINT 62 #define OPLATEARMOR 63 #define OSSPLATE 64 #define OSHIELD 68 #define OELVENCHAIN 92 #define OSWORDofSLASHING 26 #define OHAMMER 27 #define OSWORD 28 #define O2SWORD 29 #define OSPEAR 30 #define ODAGGER 31 #define OBATTLEAXE 57 #define OLONGSWORD 58 #define OFLAIL 59 #define OLANCE 65 #define OVORPAL 90 #define OSLAYER 91 #define ORINGOFEXTRA 32 #define OREGENRING 33 #define OPROTRING 34 #define OENERGYRING 35 #define ODEXRING 36 #define OSTRRING 37 #define OCLEVERRING 38 #define ODAMRING 39 #define OBELT 40 #define OSCROLL 41 #define OPOTION 42 #define OBOOK 43 #define OCHEST 44 #define OAMULET 45 #define OORBOFDRAGON 46 #define OSPIRITSCARAB 47 #define OCUBEofUNDEAD 48 #define ONOTHEFT 49 #define ODIAMOND 50 #define ORUBY 51 #define OEMERALD 52 #define OSAPPHIRE 53 #define OENTRANCE 54 #define OVOLDOWN 55 #define OVOLUP 56 #define OHOME 69 #define OKGOLD 71 #define ODGOLD 72 #define OIVDARTRAP 73 #define ODARTRAP 74 #define OTRAPDOOR 75 #define OIVTRAPDOOR 76 #define OTRADEPOST 77 #define OIVTELETRAP 78 #define ODEADTHRONE 79 #define OANNIHILATION 80 /* sphere of annihilation */ #define OTHRONE2 81 #define OLRS 82 /* Larn Revenue Service */ #define OCOOKIE 83 #define OURN 84 #define OBRASSLAMP 85 #define OHANDofFEAR 86 /* hand of fear */ #define OSPHTAILSMAN 87 /* tailsman of the sphere */ #define OWWAND 88 /* wand of wonder */ #define OPSTAFF 89 /* staff of power */ /* used up to 92 */ /* defines for the monsters as objects */ #define BAT 1 #define GNOME 2 #define HOBGOBLIN 3 #define JACKAL 4 #define KOBOLD 5 #define ORC 6 #define SNAKE 7 #define CENTIPEDE 8 #define JACULI 9 #define TROGLODYTE 10 #define ANT 11 #define EYE 12 #define LEPRECHAUN 13 #define NYMPH 14 #define QUASIT 15 #define RUSTMONSTER 16 #define ZOMBIE 17 #define ASSASSINBUG 18 #define BUGBEAR 19 #define HELLHOUND 20 #define ICELIZARD 21 #define CENTAUR 22 #define TROLL 23 #define YETI 24 #define WHITEDRAGON 25 #define ELF 26 #define CUBE 27 #define METAMORPH 28 #define VORTEX 29 #define ZILLER 30 #define VIOLETFUNGI 31 #define WRAITH 32 #define FORVALAKA 33 #define LAMANOBE 34 #define OSEQUIP 35 #define ROTHE 36 #define XORN 37 #define VAMPIRE 38 #define INVISIBLESTALKER 39 #define POLTERGEIST 40 #define DISENCHANTRESS 41 #define SHAMBLINGMOUND 42 #define YELLOWMOLD 43 #define UMBERHULK 44 #define GNOMEKING 45 #define MIMIC 46 #define WATERLORD 47 #define BRONZEDRAGON 48 #define GREENDRAGON 49 #define PURPLEWORM 50 #define XVART 51 #define SPIRITNAGA 52 #define SILVERDRAGON 53 #define PLATINUMDRAGON 54 #define GREENURCHIN 55 #define REDDRAGON 56 #define DEMONLORD 57 #define DEMONPRINCE 64 #define BUFBIG 4096 /* size of the output buffer */ #define MAXIBUF 4096 /* size of the input buffer */ #define LOGNAMESIZE 40 /* max size of the players name */ #define PSNAMESIZE 40 /* max size of the process name */ #ifndef NODEFS extern char VERSION, SUBVERSION; extern char aborted[], alpha[], beenhere[], boldon, cheat, ckpfile[], ckpflag; extern char *class[], course[], diagfile[], fortfile[], helpfile[]; extern char *inbuffer, is_alpha[], is_digit[]; extern char item[MAXX][MAXY], iven[], know[MAXX][MAXY], larnlevels[], lastmonst[]; extern char level, *levelname[], logfile[], loginname[], logname[], *lpbuf, *lpend; extern char *lpnt, moved[MAXX][MAXY], mitem[MAXX][MAXY], monstlevel[]; extern char monstnamelist[], nch[], ndgg[], nlpts[], nomove, nosignal, nowelcome; extern char nplt[], nsw[], *objectname[]; extern char objnamelist[], optsfile[], playerids[], potprob[]; extern char predostuff, psname[], restorflag, savefilename[], scorefile[], scprob[]; extern char screen[MAXX][MAXY], sex, *spelcode[], *speldescript[]; extern char spelknow[], *spelname[], *spelmes[], spelweird[MAXMONST + 8][SPNUM]; extern char splev[], stealth[MAXX][MAXY], to_lower[], to_upper[], wizard; extern short diroffx[], diroffy[], hitflag, hit2flag, hit3flag, hitp[MAXX][MAXY]; extern short iarg[MAXX][MAXY], ivenarg[], lasthx, lasthy, lastnum, lastpx, lastpy; extern short nobeep, oldx, oldy, playerx, playery; extern int dayplay, enable_scroll, srcount, yrepcount, userid, wisid, io_outfd, io_infd; extern time_t initialtime; extern long outstanding_taxes, skill[], gtime, c[], cbak[]; extern struct cel *cell; extern struct monst monster[]; extern struct sphere *spheres; extern struct _itm itm_[]; extern const char *potionhide[], *potionname[], *scrollhide[], *scrollname[]; /* bill.c */ void mailbill(void) __dead2; /* create.c */ void makeplayer(void); void newcavelevel(int); void eat(int, int); int fillmonst(char); /* diag.c */ #ifdef EXTRA int diag(void); #endif int savegame(char *); void restoregame(char *); /* display.c */ void bottomline(void); void bottomhp(void); void bottomspell(void); void bottomdo(void); void bot_linex(void); void bottomgold(void); void draws(int, int, int, int); void drawscreen(void); void showcell(int, int); void show1cell(int, int); void showplayer(void); int moveplayer(int); void seemagic(int); /* fortune.c */ const char *fortune(void); /* global.c */ void raiselevel(void); void loselevel(void); void raiseexperience(long); void loseexperience(long); void losehp(int); void losemhp(int); void raisehp(int); void raisemhp(int); void raisemspells(int); void losemspells(int); int makemonst(int); void positionplayer(void); void recalc(void); void quit(void); void more(void); int take(int, int); int drop_object(int); void enchantarmor(void); void enchweapon(void); int pocketfull(void); int nearbymonst(void); int stealsomething(void); int emptyhanded(void); void creategem(void); void adjustcvalues(int, int); int getpassword(void); int getyn(void); int packweight(void); #ifndef MACRORND int rnd(int); int rund(int); #endif /* help.c */ void help(void); void welcome(void); /* io.c */ void setupvt100(void); void clearvt100(void); char getchr(void); void scbr(void); void sncbr(void); void newgame(void); void lprintf(const char *, ...); void lprint(long); void lwrite(char *, int); long lgetc(void); long lrint_x(void); void lrfill(char *, int); char *lgetw(void); char *lgetl(void); int lcreat(char *); int lopen(char *); int lappend(char *); void lrclose(void); void lwclose(void); void lprcat(const char *); void cursor(int, int); void cursors(void); #ifndef VT100 void init_term(void); #endif void cl_line(int, int); void cl_up(int, int); void cl_dn(int, int); void standout(const char *); void set_score_output(void); void lflush(void); #ifndef VT100 char *tmcapcnv(char *, char *); #endif void beep(void); /* main.c */ void qshowstr(void); void show3(int); void parse2(void); unsigned long readnum(long); /* monster.c */ void createmonster(int); void createitem(int, int); void cast(void); void godirect(int, int, const char *, int, char); int vxy(int *, int *); void hitmonster(int, int); int hitm(int, int, int); void hitplayer(int, int); void dropgold(int); void something(int); int newobject(int, int *); void checkloss(int); long annihilate(void); long newsphere(int, int, int, int); long rmsphere(int, int); /* moreobj.c */ void oaltar(void); void othrone(int); void odeadthrone(void); void ochest(void); void ofountain(void); /* movem.c */ void movemonst(void); /* nap.c */ void nap(int); /* object.c */ void lookforobject(void); void oteleport(int); void quaffpotion(int); void larn_adjtime(long); void read_scroll(int); void readbook(int); void iopts(void); void ignore(void); /* regen.c */ void regen(void); /* savelev.c */ void savelevel(void); void getlevel(void); /* scores.c */ int makeboard(void); int hashewon(void); long paytaxes(long); void showscores(void); void showallscores(void); void died(int); void diedlog(void); #ifndef UIDSCORE int getplid(char *); #endif /* signal.c */ void sigsetup(void); /* store.c */ void dndstore(void); void oschool(void); void obank(void); void obank2(void); void ointerest(void); void otradepost(void); void olrs(void); /* tok.c */ int yylex(void); void flushall(void); void sethard(int); void readopts(void); /* macro to create scroll #'s with probability of occurrence */ #define newscroll() (scprob[rund(81)]) /* macro to return a potion # created with probability of occurrence */ #define newpotion() (potprob[rund(41)]) /* macro to return the + points on created leather armor */ #define newleather() (nlpts[rund(c[HARDGAME]?13:15)]) /* macro to return the + points on chain armor */ #define newchain() (nch[rund(10)]) /* macro to return + points on plate armor */ #define newplate() (nplt[rund(c[HARDGAME]?4:12)]) /* macro to return + points on new daggers */ #define newdagger() (ndgg[rund(13)]) /* macro to return + points on new swords */ #define newsword() (nsw[rund(c[HARDGAME]?6:13)]) /* macro to destroy object at present location */ #define forget() (item[playerx][playery]=know[playerx][playery]=0) /* macro to wipe out a monster at a location */ #define disappear(x,y) (mitem[x][y]=know[x][y]=0) #ifdef VT100 /* macro to turn on bold display for the terminal */ #define setbold() (lprcat(boldon?"\33[1m":"\33[7m")) /* macro to turn off bold display for the terminal */ #define resetbold() (lprcat("\33[m")) /* macro to setup the scrolling region for the terminal */ #define setscroll() (lprcat("\33[20;24r")) /* macro to clear the scrolling region for the terminal */ #define resetscroll() (lprcat("\33[;24r")) /* macro to clear the screen and home the cursor */ #define clear() (lprcat("\33[2J\33[f"), cbak[SPELLS]= -50) #define cltoeoln() lprcat("\33[K") #else /* VT100 */ /* defines below are for use in the termcap mode only */ #define ST_START 1 #define ST_END 2 #define BOLD 3 #define END_BOLD 4 #define CLEAR 5 #define CL_LINE 6 #define CL_DOWN 14 #define CURSOR 15 /* macro to turn on bold display for the terminal */ #define setbold() (*lpnt++ = ST_START) /* macro to turn off bold display for the terminal */ #define resetbold() (*lpnt++ = ST_END) /* macro to setup the scrolling region for the terminal */ #define setscroll() enable_scroll=1 /* macro to clear the scrolling region for the terminal */ #define resetscroll() enable_scroll=0 /* macro to clear the screen and home the cursor */ #define clear() (*lpnt++ =CLEAR, cbak[SPELLS]= -50) /* macro to clear to end of line */ #define cltoeoln() (*lpnt++ = CL_LINE) #endif /* VT100 */ /* macro to output one byte to the output buffer */ #define lprc(ch) ((lpnt>=lpend)?(*lpnt++ =(ch), lflush()):(*lpnt++ = (ch))) #ifdef MACRORND extern unsigned long randx; /* macro to seed the random number generator */ #define srand(x) (randx=x) /* macros to generate random numbers 1<=rnd(N)<=N 0<=rund(N)<=N-1 */ #define rnd(x) ((((randx=randx*1103515245+12345)>>7)%(x))+1) #define rund(x) ((((randx=randx*1103515245+12345)>>7)%(x)) ) #endif /* MACRORND */ /* macros for miscellaneous data conversion */ #define min(x,y) (((x)>(y))?(y):(x)) #define max(x,y) (((x)>(y))?(x):(y)) #define isalpha(x) (is_alpha[x]) #define isdigit(x) (is_digit[x]) #define tolower(x) (to_lower[x]) #define toupper(x) (to_upper[x]) #define lcc(x) (to_lower[x]) #define ucc(x) (to_upper[x]) #endif /* NODEFS */