1/* $NetBSD: header.h,v 1.21 2008/02/03 20:11:05 dholland Exp $	 */
2
3/* header.h		Larn is copyrighted 1986 by Noah Morgan. */
4
5#include <sys/types.h>
6
7#define MAXLEVEL 11
8/* max # levels in the dungeon			 */
9#define MAXVLEVEL 3
10/* max # of levels in the temple of the luran	 */
11#define MAXX 67
12#define MAXY 17
13
14#define SCORESIZE 10
15/* this is the number of people on a scoreboard max */
16#define MAXPLEVEL 100
17/* maximum player level allowed		 */
18#define MAXMONST 56
19/* maximum # monsters in the dungeon	 */
20#define SPNUM 38
21/* maximum number of spells in existence	 */
22#define MAXSCROLL 28
23/* maximum number of scrolls that are possible	 */
24#define MAXPOTION 35
25/* maximum number of potions that are possible	 */
26#define TIMELIMIT 30000
27/* the maximum number of moves before the game is called */
28#define TAXRATE 1/20
29/* the tax rate for the LRS */
30#define MAXOBJ 93
31/* the maximum number of objects   n < MAXOBJ */
32
33/* this is the structure definition of the monster data	 */
34struct monst {
35	const char     *name;
36	char            level;
37	short           armorclass;
38	char            damage;
39	char            attack;
40	char            defense;
41	char            genocided;
42	char            intelligence;	/* monsters intelligence -- used to
43					 * choose movement */
44	short           gold;
45	short           hitpoints;
46	unsigned long   experience;
47};
48
49/* this is the structure definition for the items in the dnd store */
50struct _itm {
51	short           price;
52	u_char          obj;
53	u_char          arg;
54	char            qty;
55};
56
57/* this is the structure that holds the entire dungeon specifications	 */
58struct cel {
59	short           hitp;	/* monster's hit points	 */
60	char            mitem;	/* the monster ID			 */
61	char            item;	/* the object's ID			 */
62	short           iarg;	/* the object's argument	 */
63	char            know;	/* have we been here before */
64};
65
66/* this is the structure for maintaining & moving the spheres of annihilation */
67struct sphere {
68	struct sphere  *p;	/* pointer to next structure */
69	char            x, y, lev;	/* location of the sphere */
70	char            dir;	/* direction sphere is going in */
71	short           lifetime;	/* duration of the sphere */
72};
73
74/* defines for the character attribute array	c[]	 */
75#define STRENGTH 0		/* characters physical strength not due to
76				 * objects */
77#define INTELLIGENCE 1
78#define WISDOM 2
79#define CONSTITUTION 3
80#define DEXTERITY 4
81#define CHARISMA 5
82#define HPMAX 6
83#define HP 7
84#define GOLD 8
85#define EXPERIENCE 9
86#define LEVEL 10
87#define REGEN 11
88#define WCLASS 12
89#define AC 13
90#define BANKACCOUNT 14
91#define SPELLMAX 15
92#define SPELLS 16
93#define ENERGY 17
94#define ECOUNTER 18
95#define MOREDEFENSES 19
96#define WEAR 20
97#define PROTECTIONTIME 21
98#define WIELD 22
99#define AMULET 23
100#define REGENCOUNTER 24
101#define MOREDAM 25
102#define DEXCOUNT 26
103#define STRCOUNT 27
104#define BLINDCOUNT 28
105#define CAVELEVEL 29
106#define CONFUSE 30
107#define ALTPRO 31
108#define HERO 32
109#define CHARMCOUNT 33
110#define INVISIBILITY 34
111#define CANCELLATION 35
112#define HASTESELF 36
113#define EYEOFLARN 37
114#define AGGRAVATE 38
115#define GLOBE 39
116#define TELEFLAG 40
117#define SLAYING 41
118#define NEGATESPIRIT 42
119#define SCAREMONST 43
120#define AWARENESS 44
121#define HOLDMONST 45
122#define TIMESTOP 46
123#define HASTEMONST 47
124#define CUBEofUNDEAD 48
125#define GIANTSTR 49
126#define FIRERESISTANCE 50
127#define BESSMANN 51
128#define NOTHEFT 52
129#define HARDGAME 53
130#define CPUTIME 54
131#define BYTESIN 55
132#define BYTESOUT 56
133#define MOVESMADE 57
134#define MONSTKILLED 58
135#define SPELLSCAST 59
136#define LANCEDEATH 60
137#define SPIRITPRO 61
138#define UNDEADPRO 62
139#define SHIELD 63
140#define STEALTH 64
141#define ITCHING 65
142#define LAUGHING 66
143#define DRAINSTRENGTH 67
144#define CLUMSINESS 68
145#define INFEEBLEMENT 69
146#define HALFDAM 70
147#define SEEINVISIBLE 71
148#define FILLROOM 72
149#define RANDOMWALK 73
150#define SPHCAST 74		/* nz if an active sphere of annihilation */
151#define WTW 75			/* walk through walls */
152#define STREXTRA 76		/* character strength due to objects or
153				 * enchantments */
154#define TMP 77			/* misc scratch space */
155#define LIFEPROT 78		/* life protection counter */
156
157/* defines for the objects in the game		 */
158
159#define OALTAR 1
160#define OTHRONE 2
161#define OORB 3
162#define OPIT 4
163#define OSTAIRSUP 5
164#define OELEVATORUP 6
165#define OFOUNTAIN 7
166#define OSTATUE 8
167#define OTELEPORTER 9
168#define OSCHOOL 10
169#define OMIRROR 11
170#define ODNDSTORE 12
171#define OSTAIRSDOWN 13
172#define OELEVATORDOWN 14
173#define OBANK2 15
174#define OBANK 16
175#define ODEADFOUNTAIN 17
176#define OMAXGOLD 70
177#define OGOLDPILE 18
178#define OOPENDOOR 19
179#define OCLOSEDDOOR 20
180#define OWALL 21
181#define OTRAPARROW 66
182#define OTRAPARROWIV 67
183
184#define OLARNEYE 22
185
186#define OPLATE 23
187#define OCHAIN 24
188#define OLEATHER 25
189#define ORING 60
190#define OSTUDLEATHER 61
191#define OSPLINT 62
192#define OPLATEARMOR 63
193#define OSSPLATE 64
194#define OSHIELD 68
195#define OELVENCHAIN 92
196
197#define OSWORDofSLASHING 26
198#define OHAMMER 27
199#define OSWORD 28
200#define O2SWORD 29
201#define OSPEAR 30
202#define ODAGGER 31
203#define OBATTLEAXE 57
204#define OLONGSWORD 58
205#define OFLAIL 59
206#define OLANCE 65
207#define OVORPAL 90
208#define OSLAYER 91
209
210#define ORINGOFEXTRA 32
211#define OREGENRING 33
212#define OPROTRING 34
213#define OENERGYRING 35
214#define ODEXRING 36
215#define OSTRRING 37
216#define OCLEVERRING 38
217#define ODAMRING 39
218
219#define OBELT 40
220
221#define OSCROLL 41
222#define OPOTION 42
223#define OBOOK 43
224#define OCHEST 44
225#define OAMULET 45
226
227#define OORBOFDRAGON 46
228#define OSPIRITSCARAB 47
229#define OCUBEofUNDEAD 48
230#define ONOTHEFT 49
231
232#define ODIAMOND 50
233#define ORUBY 51
234#define OEMERALD 52
235#define OSAPPHIRE 53
236
237#define OENTRANCE 54
238#define OVOLDOWN 55
239#define OVOLUP 56
240#define OHOME 69
241
242#define OKGOLD 71
243#define ODGOLD 72
244#define OIVDARTRAP 73
245#define ODARTRAP 74
246#define OTRAPDOOR 75
247#define OIVTRAPDOOR 76
248#define OTRADEPOST 77
249#define OIVTELETRAP 78
250#define ODEADTHRONE 79
251#define OANNIHILATION 80	/* sphere of annihilation */
252#define OTHRONE2 81
253#define OLRS 82			/* Larn Revenue Service */
254#define OCOOKIE 83
255#define OURN 84
256#define OBRASSLAMP 85
257#define OHANDofFEAR 86		/* hand of fear */
258#define OSPHTAILSMAN 87		/* tailsman of the sphere */
259#define OWWAND 88		/* wand of wonder */
260#define OPSTAFF 89		/* staff of power */
261/* used up to 92 */
262
263/* defines for the monsters as objects		 */
264
265#define BAT 1
266#define GNOME 2
267#define HOBGOBLIN 3
268#define JACKAL 4
269#define KOBOLD 5
270#define ORC 6
271#define SNAKE 7
272#define CENTIPEDE 8
273#define JACULI 9
274#define TROGLODYTE 10
275#define ANT 11
276#define EYE 12
277#define LEPRECHAUN 13
278#define NYMPH 14
279#define QUASIT 15
280#define RUSTMONSTER 16
281#define ZOMBIE 17
282#define ASSASSINBUG 18
283#define BUGBEAR 19
284#define HELLHOUND 20
285#define ICELIZARD 21
286#define CENTAUR 22
287#define TROLL 23
288#define YETI 24
289#define WHITEDRAGON 25
290#define ELF 26
291#define CUBE 27
292#define METAMORPH 28
293#define VORTEX 29
294#define ZILLER 30
295#define VIOLETFUNGI 31
296#define WRAITH 32
297#define FORVALAKA 33
298#define LAMANOBE 34
299#define OSEQUIP 35
300#define ROTHE 36
301#define XORN 37
302#define VAMPIRE 38
303#define INVISIBLESTALKER 39
304#define POLTERGEIST 40
305#define DISENCHANTRESS 41
306#define SHAMBLINGMOUND 42
307#define YELLOWMOLD 43
308#define UMBERHULK 44
309#define GNOMEKING 45
310#define MIMIC 46
311#define WATERLORD 47
312#define BRONZEDRAGON 48
313#define GREENDRAGON 49
314#define PURPLEWORM 50
315#define XVART 51
316#define SPIRITNAGA 52
317#define SILVERDRAGON 53
318#define PLATINUMDRAGON 54
319#define GREENURCHIN 55
320#define REDDRAGON 56
321#define DEMONLORD 57
322#define DEMONPRINCE 64
323
324#ifndef NULL
325#define NULL 0
326#endif
327#define BUFBIG	4096		/* size of the output buffer */
328#define MAXIBUF	4096		/* size of the input buffer */
329#define LOGNAMESIZE 40		/* max size of the players name */
330#define PSNAMESIZE 40		/* max size of the process name */
331
332#ifndef NODEFS
333extern char     VERSION, SUBVERSION;
334extern u_char   beenhere[], boldon, cheat, ckpflag;
335extern const char *class[];
336extern u_char   course[];
337extern char     diagfile[], helpfile[], ckpfile[], larnlevels[],
338		playerids[], optsfile[1024], psname[], savefilename[],
339		scorefile[];
340extern u_char  *inbuffer;
341extern u_char   item[MAXX][MAXY], iven[], know[MAXX][MAXY];
342extern const char *levelname[];
343extern char     logfile[], loginname[], logname[], lastmonst[];
344extern u_char  *lpbuf, *lpend;
345extern u_char  *lpnt, moved[MAXX][MAXY], mitem[MAXX][MAXY], monstlevel[];
346extern char     monstnamelist[], objnamelist[];
347extern u_char   nch[], ndgg[], nlpts[], nomove, nosignal, nowelcome;
348extern u_char   nplt[], nsw[];
349extern const char *objectname[];
350extern const char *potionhide[], *potionname[];
351extern const char *spelcode[], *spelname[], *spelmes[];
352extern char     aborted[], spelweird[MAXMONST + 8][SPNUM];
353extern u_char   potprob[];
354extern u_char   predostuff, restorflag, scprob[];
355extern u_char   screen[MAXX][MAXY], sex;
356extern const char *speldescript[];
357extern const char *scrollhide[], *scrollname[];
358extern u_char   spelknow[];
359extern u_char   splev[], stealth[MAXX][MAXY], wizard;
360extern short    diroffx[], diroffy[], hitflag, hit2flag, hit3flag, hitp[MAXX][MAXY];
361extern short    iarg[MAXX][MAXY], ivenarg[], lasthx, lasthy, lastnum, lastpx,
362                lastpy;
363extern short    nobeep, oldx, oldy, playerx, playery, level;
364extern int      enable_scroll, srcount, yrepcount, userid, wisid,
365		io_outfd, io_infd;
366extern gid_t    gid, egid;
367extern long     outstanding_taxes, skill[], gltime, c[], cbak[];
368extern time_t	initialtime;
369extern unsigned long randx;
370extern struct cel *cell;
371extern struct monst monster[];
372extern struct sphere *spheres;
373extern struct _itm itm[];
374extern int      rmst, lasttime;
375
376/* macro to create scroll #'s with probability of occurrence */
377#define newscroll() (scprob[rund(81)])
378/* macro to return a potion # created with probability of occurrence */
379#define newpotion() (potprob[rund(41)])
380/* macro to return the + points on created leather armor */
381#define newleather() (nlpts[rund(c[HARDGAME]?13:15)])
382/* macro to return the + points on chain armor */
383#define newchain() (nch[rund(10)])
384/* macro to return + points on plate armor */
385#define newplate() (nplt[rund(c[HARDGAME]?4:12)])
386/* macro to return + points on new daggers */
387#define newdagger() (ndgg[rund(13)])
388/* macro to return + points on new swords */
389#define newsword() (nsw[rund(c[HARDGAME]?6:13)])
390/* macro to destroy object at present location */
391#define forget() (item[playerx][playery]=know[playerx][playery]=0)
392/* macro to wipe out a monster at a location */
393#define disappear(x,y) (mitem[x][y]=know[x][y]=0)
394
395#ifdef VT100
396/* macro to turn on bold display for the terminal */
397#define setbold() (lprcat(boldon?"\33[1m":"\33[7m"))
398/* macro to turn off bold display for the terminal */
399#define resetbold() (lprcat("\33[m"))
400/* macro to setup the scrolling region for the terminal */
401#define setscroll() (lprcat("\33[20;24r"))
402/* macro to clear the scrolling region for the terminal */
403#define resetscroll() (lprcat("\33[;24r"))
404/* macro to clear the screen and home the cursor */
405#define clear() (lprcat("\33[2J\33[f"), cbak[SPELLS]= -50)
406#define cltoeoln() lprcat("\33[K")
407#else	/* VT100 */
408/* defines below are for use in the termcap mode only */
409#define ST_START 1
410#define ST_END   2
411#define BOLD     3
412#define END_BOLD 4
413#define CLEAR    5
414#define CL_LINE  6
415#define CL_DOWN 14
416#define CURSOR  15
417/* macro to turn on bold display for the terminal */
418#define setbold() (*lpnt++ = ST_START)
419/* macro to turn off bold display for the terminal */
420#define resetbold() (*lpnt++ = ST_END)
421/* macro to setup the scrolling region for the terminal */
422#define setscroll() enable_scroll=1
423/* macro to clear the scrolling region for the terminal */
424#define resetscroll() enable_scroll=0
425/* macro to clear the screen and home the cursor */
426#define clear() (*lpnt++ =CLEAR, cbak[SPELLS]= -50)
427/* macro to clear to end of line */
428#define cltoeoln() (*lpnt++ = CL_LINE)
429#endif	/* VT100 */
430
431/* macro to output one byte to the output buffer */
432#define lprc(ch) ((lpnt>=lpend)?(void)(*lpnt++ = (ch), lflush()):(void)(*lpnt++ = (ch)))
433
434/* macro to seed the random number generator */
435#define seedrand(x) (randx=x)
436#ifdef MACRORND
437/* macros to generate random numbers   1<=rnd(N)<=N   0<=rund(N)<=N-1 */
438#define rnd(x)  ((((randx=randx*1103515245+12345)>>7)%(x))+1)
439#define rund(x) ((((randx=randx*1103515245+12345)>>7)%(x))  )
440#endif	/* MACRORND */
441/* macros for miscellaneous data conversion */
442#define min(x,y) (((x)>(y))?(y):(x))
443#define max(x,y) (((x)>(y))?(x):(y))
444#endif	/* NODEFS */
445