Annotation of early-roguelike/arogue5/rogue.h, Revision 1.1.1.1
1.1 rubenllo 1: /*
2: * Rogue definitions and variable declarations
3: *
4: * Advanced Rogue
5: * Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka and AT&T
6: * All rights reserved.
7: *
8: * Based on "Rogue: Exploring the Dungeons of Doom"
9: * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
10: * All rights reserved.
11: *
12: * See the file LICENSE.TXT for full copyright and licensing information.
13: */
14:
15: #ifdef HAVE_CONFIG_H
16: #include "config.h"
17: #endif
18:
19: #define reg register /* register abbr. */
20: #define NOOP(x) (x += 0)
21: #define CCHAR(x) ( (char) (x & A_CHARTEXT) )
22:
23: /*
24: * Maximum number of different things
25: */
26:
27: #define MAXDAEMONS 10
28: #define MAXFUSES 20
29:
30: #define NCOLORS 32
31: #define NSTONES 47
32: #define NWOOD 24
33: #define NMETAL 16
34: #define NSYLLS 159
35:
36: #define MAXROOMS 9
37: #define MAXTHINGS 9
38: #define MAXOBJ 9
39: #define MAXSTATS 62 /* max total of all stats at startup */
40: #define MAXPACK 23
41: #define MAXCONTENTS 10
42: #define MAXENCHANT 10 /* max number of enchantments on an item */
43: #define MAXTREAS 15 /* number monsters/treasure in treasure room */
44: #define MAXTRAPS 20
45: #define MAXTRPTRY 8 /* attempts/level allowed for setting traps */
46: #define MAXDOORS 4 /* Maximum doors to a room */
47: #define MAXPRAYERS 15 /* Maximum number of prayers for cleric */
48: #define MAXSPELLS 20 /* Maximum number of spells (for magician) */
49: #define NUMMONST 120 /* Current number of monsters */
50: #define NUMUNIQUE 24 /* number of UNIQUE creatures */
51: #define NLEVMONS 3 /* Number of new monsters per level */
52: #define MAXFOODS 1
53: #define NUMSCORE 20 /* number of entries in score file */
54: #define HARDER 35 /* at this level start making things harder */
55: #define MAXPURCH 4 /* max purchases per trading post visit */
56: #define LINELEN 80 /* characters in a buffer */
57: #define JUG_EMPTY -1 /* signifys that the alchemy jug is empty */
58:
59: /* Movement penalties */
60: #define BACKPENALTY 3
61: #define SHOTPENALTY 2 /* In line of sight of missile */
62: #define DOORPENALTY 1 /* Moving out of current room */
63:
64: /*
65: * these defines are used in calls to get_item() to signify what
66: * it is we want
67: */
68: #define ALL -1
69: #define WEARABLE -2
70: #define CALLABLE -3
71: #define WIELDABLE -4
72: #define USEABLE -5
73: #define IDENTABLE -6
74: #define REMOVABLE -7
75: #define PROTECTABLE -8
76: #define ZAPPABLE -9
77:
78: /*
79: * stuff to do with encumberance
80: */
81: #define NORMENCB 1500 /* normal encumberance */
82: #define F_OKAY 0 /* have plenty of food in stomach */
83: #define F_HUNGRY 1 /* player is hungry */
84: #define F_WEAK 2 /* weak from lack of food */
85: #define F_FAINT 3 /* fainting from lack of food */
86:
87: /*
88: * return values for get functions
89: */
90: #define NORM 0 /* normal exit */
91: #define QUIT 1 /* quit option setting */
92: #define MINUS 2 /* back up one option */
93:
94: /*
95: * The character types
96: */
97: #define C_FIGHTER 0
98: #define C_MAGICIAN 1
99: #define C_CLERIC 2
100: #define C_THIEF 3
101: #define C_MONSTER 4
102:
103: /*
104: * Number of hit points for going up a level
105: */
106: #define HIT_FIGHTER 10
107: #define HIT_MAGICIAN 8
108: #define HIT_CLERIC 8
109: #define HIT_THIEF 6
110:
111: /*
112: * values for games end
113: */
114: #define UPDATE -2
115: #define SCOREIT -1
116: #define KILLED 0
117: #define CHICKEN 1
118: #define WINNER 2
119:
120: /*
121: * definitions for function step_ok:
122: * MONSTOK indicates it is OK to step on a monster -- it
123: * is only OK when stepping diagonally AROUND a monster
124: */
125: #define MONSTOK 1
126: #define NOMONST 2
127:
128: /*
129: * used for ring stuff
130: */
131: #define LEFT_1 0
132: #define LEFT_2 1
133: #define LEFT_3 2
134: #define LEFT_4 3
135: #define RIGHT_1 4
136: #define RIGHT_2 5
137: #define RIGHT_3 6
138: #define RIGHT_4 7
139: #define NUM_FINGERS 8
140:
141: /*
142: * used for micellaneous magic (MM) stuff
143: */
144: #define WEAR_BOOTS 0
145: #define WEAR_BRACERS 1
146: #define WEAR_CLOAK 2
147: #define WEAR_GAUNTLET 3
148: #define WEAR_JEWEL 4
149: #define WEAR_NECKLACE 5
150: #define NUM_MM 6
151:
152: /*
153: * All the fun defines
154: */
155: #define next(ptr) (*ptr).l_next
156: #define prev(ptr) (*ptr).l_prev
157: #define ldata(ptr) (*ptr).l_data
158: #define inroom(rp, cp) (\
159: (cp)->x <= (rp)->r_pos.x + ((rp)->r_max.x - 1) && (rp)->r_pos.x <= (cp)->x \
160: && (cp)->y <= (rp)->r_pos.y + ((rp)->r_max.y - 1) && (rp)->r_pos.y <= (cp)->y)
161: #define winat(y, x) (mvwinch(mw, y, x)==' '?mvwinch(stdscr, y, x):winch(mw))
162: #define debug if (wizard) msg
163: #define RN (((seed = seed*11109+13849) & 0x7fff) >> 1)
164: #define unc(cp) (cp).y, (cp).x
165: #define cmov(xy) move((xy).y, (xy).x)
166: #define DISTANCE(y1, x1, y2, x2) ((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1))
167: #define OBJPTR(what) (struct object *)((*what).l_data)
168: #define THINGPTR(what) (struct thing *)((*what).l_data)
169: #define DOORPTR(what) (coord *)((*what).l_data)
170: #define when break;case
171: #define otherwise break;default
172: #define until(expr) while(!(expr))
173: #define ce(a, b) ((a).x == (b).x && (a).y == (b).y)
174: #define draw(window) wrefresh(window)
175: #define hero player.t_pos
176: #define pstats player.t_stats
177: #define max_stats player.maxstats
178: #define pack player.t_pack
179: #define attach(a, b) _attach(&a, b)
180: #define detach(a, b) _detach(&a, b)
181: #define o_free_list(a) _o_free_list(&a)
182: #define t_free_list(a) _t_free_list(&a)
183: #undef max
184: #undef min
185: #define max(a, b) ((a) > (b) ? (a) : (b))
186: #define min(a, b) ((a) < (b) ? (a) : (b))
187: #define on(thing, flag) \
188: (((thing).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] & flag) != 0)
189: #define off(thing, flag) \
190: (((thing).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] & flag) == 0)
191: #define turn_on(thing, flag) \
192: ((thing).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] |= (flag & ~FLAGMASK))
193: #define turn_off(thing, flag) \
194: ((thing).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] &= ~flag)
195:
196: #undef CTRL
197: #define CTRL(ch) (ch & 037)
198:
199: #define ALLOC(x) calloc((unsigned int) x,1)
200: #define FREE(x) free((char *) x)
201: #define EQSTR(a, b, c) (strncmp(a, b, c) == 0)
202: #define EQUAL(a, b) (strcmp(a, b) == 0)
203: #define GOLDCALC (rnd(50 + 10 * level) + 2)
204: #define ISRING(h, r) (cur_ring[h] != NULL && cur_ring[h]->o_which == r)
205: #define ISWEARING(r) (ISRING(LEFT_1, r) || ISRING(LEFT_2, r) ||\
206: ISRING(LEFT_3, r) || ISRING(LEFT_4, r) ||\
207: ISRING(RIGHT_1, r) || ISRING(RIGHT_2, r) ||\
208: ISRING(RIGHT_3, r) || ISRING(RIGHT_4, r))
209: #define newgrp() ++group
210: #define o_charges o_ac
211: #define ISMULT(type) (type == FOOD)
212: #define isrock(ch) ((ch == WALL) || (ch == '-') || (ch == '|'))
213: #define invisible(monst) \
214: (((on(*monst, ISINVIS) || \
215: (on(*monst, ISSHADOW) && rnd(100) < 90)) && \
216: off(player, CANSEE)) || \
217: (on(*monst, CANSURPRISE) && !ISWEARING(R_ALERT)))
218: #define is_stealth(tp) \
219: (rnd(25) < (tp)->t_stats.s_dext || (tp == &player && ISWEARING(R_STEALTH)))
220:
221: #define has_light(rp) (((rp)->r_flags & HASFIRE) || ISWEARING(R_LIGHT))
222: #define mi_wght mi_worth
223:
224: /*
225: * Ways to die
226: */
227: #define D_PETRIFY -1
228: #define D_ARROW -2
229: #define D_DART -3
230: #define D_POISON -4
231: #define D_BOLT -5
232: #define D_SUFFOCATION -6
233: #define D_POTION -7
234: #define D_INFESTATION -8
235: #define D_DROWN -9
236: #define D_ROT -10
237: #define D_CONSTITUTION -11
238: #define D_STRENGTH -12
239: #define D_SIGNAL -13
240: #define D_CHOKE -14
241: #define D_STRANGLE -15
242: #define D_FALL -16
243: #define D_RELIC -17
244: #define DEATHNUM 17 /* number of ways to die */
245:
246: /*
247: * Things that appear on the screens
248: */
249: #define WALL ' '
250: #define PASSAGE '#'
251: #define DOOR '+'
252: #define FLOOR '.'
253: #define VPLAYER '@'
254: #define IPLAYER '_'
255: #define POST '^'
256: #define TRAPDOOR '>'
257: #define ARROWTRAP '{'
258: #define SLEEPTRAP '$'
259: #define BEARTRAP '}'
260: #define TELTRAP '~'
261: #define DARTTRAP '`'
262: #define POOL '"'
263: #define MAZETRAP '\''
264: #define SECRETDOOR '&'
265: #define STAIRS '%'
266: #define GOLD '*'
267: #define POTION '!'
268: #define SCROLL '?'
269: #define MAGIC '$'
270: #define BMAGIC '>' /* Blessed magic */
271: #define CMAGIC '<' /* Cursed magic */
272: #define FOOD ':'
273: #define WEAPON ')'
274: #define MISSILE '*' /* Magic Missile */
275: #define ARMOR ']'
276: #define MM ';'
277: #define RELIC ','
278: #define RING '='
279: #define STICK '/'
280: #define FOREST '\\'
281:
282: /*
283: * Various constants
284: */
285: #define PASSWD "SihQX7.LYSmbo"
286: #define BEARTIME 3
287: #define SLEEPTIME 4
288: #define FREEZETIME 6
289: #define PAINTIME (roll(1, 6))
290: #define HEALTIME 30
291: #define CHILLTIME (roll(20, 4))
292: #define SMELLTIME 20
293: #define STONETIME 8
294: #define HASTETIME 6
295: #define SICKTIME 10
296: #define STPOS 0
297: #define WANDERTIME (max(5, HARDER-rnd(vlevel)))
298: #define BEFORE 1
299: #define AFTER 2
300: #define HUHDURATION 20
301: #define SEEDURATION 850
302: #define CLRDURATION 15
303: #define GONETIME 200
304: #define FLYTIME 300
305: #define DUSTTIME (20+roll(1,10))
306: #define PHASEDURATION 300
307: #define HUNGERTIME 1300
308: #define MORETIME 150
309: #define STINKTIME 6
310: #define STOMACHSIZE 2000
311: #define ESCAPE 27
312: #define BOLT_LENGTH 10
313: #define MARKLEN 20
314: #define DAYLENGTH 400
315: #define ALCHEMYTIME (400+rnd(100))
316:
317: /*
318: * Save against things
319: */
320: #define VS_POISON 00
321: #define VS_PARALYZATION 00
322: #define VS_DEATH 00
323: #define VS_PETRIFICATION 01
324: #define VS_WAND 02
325: #define VS_BREATH 03
326: #define VS_MAGIC 04
327:
328: /*
329: * attributes for treasures in dungeon
330: */
331: #define ISCURSED 01
332: #define ISKNOW 02
333: #define ISPOST 04 /* object is in a trading post */
334: #define ISMETAL 010
335: #define ISPROT 020 /* object is protected */
336: #define ISBLESSED 040
337: #define ISMISL 020000
338: #define ISMANY 040000
339: /*
340: * Various flag bits
341: */
342: #define ISDARK 01
343: #define ISGONE 02
344: #define ISTREAS 04
345: #define ISFOUND 010
346: #define ISTHIEFSET 020
347: #define FORCEDARK 040
348: /*
349: * 1st set of creature flags (this might include player)
350: */
351: #define ISBLIND 0x00000001
352: #define ISINWALL 0x00000002
353: #define ISRUN 0x00000004
354: #define ISFLEE 0x00000008
355: #define ISINVIS 0x00000010
356: #define ISMEAN 0x00000020
357: #define ISGREED 0x00000040
358: #define CANSHOOT 0x00000080
359: #define ISHELD 0x00000100
360: #define ISHUH 0x00000200
361: #define ISREGEN 0x00000400
362: #define CANHUH 0x00000800
363: #define CANSEE 0x00001000
364: #define HASFIRE 0x00002000
365: #define ISSLOW 0x00004000
366: #define ISHASTE 0x00008000
367: #define ISCLEAR 0x00010000
368: #define CANINWALL 0x00020000
369: #define ISDISGUISE 0x00040000
370: #define CANBLINK 0x00080000
371: #define CANSNORE 0x00100000
372: #define HALFDAMAGE 0x00200000
373: #define CANSUCK 0x00400000
374: #define CANRUST 0x00800000
375: #define CANPOISON 0x01000000
376: #define CANDRAIN 0x02000000
377: #define ISUNIQUE 0x04000000
378: #define STEALGOLD 0x08000000
379: /*
380: * Second set of flags
381: */
382: #define STEALMAGIC 0x10000001
383: #define CANDISEASE 0x10000002
384: #define HASDISEASE 0x10000004
385: #define CANSUFFOCATE 0x10000008
386: #define DIDSUFFOCATE 0x10000010
387: #define BOLTDIVIDE 0x10000020
388: #define BLOWDIVIDE 0x10000040
389: #define NOCOLD 0x10000080
390: #define TOUCHFEAR 0x10000100
391: #define BMAGICHIT 0x10000200
392: #define NOFIRE 0x10000400
393: #define NOBOLT 0x10000800
394: #define CARRYGOLD 0x10001000
395: #define CANITCH 0x10002000
396: #define HASITCH 0x10004000
397: #define DIDDRAIN 0x10008000
398: #define WASTURNED 0x10010000
399: #define CANSELL 0x10020000
400: #define CANBLIND 0x10040000
401: #define NOACID 0x10080000
402: #define NOSLOW 0x10100000
403: #define NOFEAR 0x10200000
404: #define NOSLEEP 0x10400000
405: #define NOPARALYZE 0x10800000
406: #define NOGAS 0x11000000
407: #define CANMISSILE 0x12000000
408: #define CMAGICHIT 0x14000000
409: #define CANPAIN 0x18000000
410:
411: /*
412: * Third set of flags
413: */
414: #define CANSLOW 0x20000001
415: #define CANTUNNEL 0x20000002
416: #define TAKEWISDOM 0x20000004
417: #define NOMETAL 0x20000008
418: #define MAGICHIT 0x20000010
419: #define CANINFEST 0x20000020
420: #define HASINFEST 0x20000040
421: #define NOMOVE 0x20000080
422: #define CANSHRIEK 0x20000100
423: #define CANDRAW 0x20000200
424: #define CANSMELL 0x20000400
425: #define CANPARALYZE 0x20000800
426: #define CANROT 0x20001000
427: #define ISSCAVENGE 0x20002000
428: #define DOROT 0x20004000
429: #define CANSTINK 0x20008000
430: #define HASSTINK 0x20010000
431: #define ISSHADOW 0x20020000
432: #define CANCHILL 0x20040000
433: #define CANHUG 0x20080000
434: #define CANSURPRISE 0x20100000
435: #define CANFRIGHTEN 0x20200000
436: #define CANSUMMON 0x20400000
437: #define TOUCHSTONE 0x20800000
438: #define LOOKSTONE 0x21000000
439: #define CANHOLD 0x22000000
440: #define DIDHOLD 0x24000000
441: #define DOUBLEDRAIN 0x28000000
442:
443: /*
444: * Fourth set of flags
445: */
446: #define CANBRANDOM 0x30000001 /* Types of breath */
447: #define CANBACID 0x30000002 /* acid */
448: #define CANBFIRE 0x30000004 /* Fire */
449: #define CANBCGAS 0x30000008 /* confusion gas */
450: #define CANBBOLT 0x30000010 /* lightning bolt */
451: #define CANBGAS 0x30000020 /* clorine gas */
452: #define CANBICE 0x30000040 /* ice */
453: #define CANBFGAS 0x30000080 /* Fear gas */
454: #define CANBPGAS 0x30000100 /* Paralyze gas */
455: #define CANBSGAS 0x30000200 /* Sleeping gas */
456: #define CANBSLGAS 0x30000400 /* Slow gas */
457: #define CANBREATHE 0x300007ff /* Can it breathe at all? */
458: /*
459: * Fifth set of flags
460: */
461: #define ISUNDEAD 0x40000001
462: #define CANSONIC 0x40000002
463: #define TURNABLE 0x40000004
464: #define TAKEINTEL 0x40000008
465: #define NOSTAB 0x40000010
466: #define CANDISSOLVE 0x40000020
467: #define ISFLY 0x40000040 /* creature can fly */
468: #define CANTELEPORT 0x40000080 /* creature can teleport */
469: #define CANEXPLODE 0x40000100 /* creature explodes when hit */
470: #define CANDANCE 0x40000200 /* creature can make hero "dance" */
471: #define ISDANCE 0x40000400 /* creature (hero) is dancing */
472: #define CARRYFOOD 0x40000800
473: #define CARRYSCROLL 0x40001000
474: #define CARRYPOTION 0x40002000
475: #define CARRYRING 0x40004000
476: #define CARRYSTICK 0x40008000
477: #define CARRYMISC 0x40010000
478: #define CARRYDAGGER 0x40020000 /* Dagger of Musty */
479: #define CARRYCLOAK 0x40040000 /* Cloak of Emori */
480: #define CARRYANKH 0x40080000 /* Ankh of Heil */
481: #define CARRYSTAFF 0x40100000 /* Staff of Ming */
482: #define CARRYWAND 0x40200000 /* Wand of Orcus */
483: #define CARRYROD 0x40400000 /* Rod of Asmodeus */
484: #define CARRYAMULET 0x40800000 /* Amulet of Yendor */
485: #define CARRYMANDOLIN 0x41000000 /* Mandolin of Brian */
486: #define MISSEDDISP 0x42000000 /* Missed Cloak of Displacement */
487: #define CANBSTAB 0x44000000 /* Can backstab */
488:
489:
490: #define CARRYHORN 0x50000001 /* Horn of Geryon */
491: #define CARRYMSTAR 0x50000002 /* Morning Star of Hruggek */
492: #define CARRYFLAIL 0x50000004 /* Flail of Yeenoghu */
493: #define CARRYWEAPON 0x50000008 /* A generic weapon */
494: #define CANAGE 0x50000010 /* can age you */
495:
496: #define ISREADY 0x60000001
497: #define ISDEAD 0x60000002
498: #define ISELSEWHERE 0x60000004
499:
500: /* Masks for choosing the right flag */
501: #define FLAGMASK 0xf0000000
502: #define FLAGINDEX 0x0000000f
503: #define FLAGSHIFT 28
504: #define MAXFLAGS 25 /* max initial flags per creature */
505:
506: /*
507: * Mask for cancelling special abilities
508: * The flags listed here will be the ones left on after the
509: * cancellation takes place
510: */
511: #define CANC0MASK ( ISBLIND | ISINWALL | ISRUN | \
512: ISFLEE | ISMEAN | ISGREED | \
513: CANSHOOT | ISHELD | ISHUH | \
514: ISSLOW | ISHASTE | ISCLEAR | \
515: ISUNIQUE )
516: #define CANC1MASK ( HASDISEASE | DIDSUFFOCATE | CARRYGOLD | \
517: HASITCH | CANSELL | DIDDRAIN | \
518: WASTURNED )
519: #define CANC2MASK ( HASINFEST | NOMOVE | ISSCAVENGE | \
520: DOROT | HASSTINK | DIDHOLD )
521: #define CANC3MASK ( CANBREATHE )
522: #define CANC4MASK ( ISUNDEAD | CANSONIC | NOSTAB | \
523: ISFLY | CARRYFOOD | CANEXPLODE | \
524: ISDANCE | CARRYSCROLL | CARRYPOTION | \
525: CARRYRING | CARRYSTICK | CARRYMISC | \
526: CARRYDAGGER | CARRYCLOAK | CARRYANKH | \
527: CARRYSTAFF | CARRYWAND | CARRYROD | \
528: CARRYAMULET | CARRYMANDOLIN )
529: #define CANC5MASK ( CARRYHORN | CARRYMSTAR | CARRYFLAIL )
530:
531: /* types of things */
532: #define TYP_POTION 0
533: #define TYP_SCROLL 1
534: #define TYP_FOOD 2
535: #define TYP_WEAPON 3
536: #define TYP_ARMOR 4
537: #define TYP_RING 5
538: #define TYP_STICK 6
539: #define TYP_MM 7
540: #define TYP_RELIC 8
541: #define NUMTHINGS 9
542: /*
543: * Potion types
544: */
545: #define P_CLEAR 0
546: #define P_ABIL 1
547: #define P_SEEINVIS 2
548: #define P_HEALING 3
549: #define P_MFIND 4
550: #define P_TFIND 5
551: #define P_RAISE 6
552: #define P_HASTE 7
553: #define P_RESTORE 8
554: #define P_PHASE 9
555: #define P_INVIS 10
556: #define P_FLY 11
557: #define MAXPOTIONS 12
558: /*
559: * Scroll types
560: */
561: #define S_CONFUSE 0
562: #define S_MAP 1
563: #define S_LIGHT 2
564: #define S_HOLD 3
565: #define S_SLEEP 4
566: #define S_ALLENCH 5
567: #define S_IDENT 6
568: #define S_SCARE 7
569: #define S_GFIND 8
570: #define S_TELEP 9
571: #define S_CREATE 10
572: #define S_REMOVE 11
573: #define S_PETRIFY 12
574: #define S_GENOCIDE 13
575: #define S_CURING 14
576: #define S_MAKEIT 15
577: #define S_PROTECT 16
578: #define MAXSCROLLS 17
579:
580: /*
581: * Weapon types
582: */
583: #define MACE 0 /* mace */
584: #define SWORD 1 /* long sword */
585: #define BOW 2 /* short bow */
586: #define ARROW 3 /* arrow */
587: #define DAGGER 4 /* dagger */
588: #define ROCK 5 /* rocks */
589: #define TWOSWORD 6 /* two-handed sword */
590: #define SLING 7 /* sling */
591: #define DART 8 /* darts */
592: #define CROSSBOW 9 /* crossbow */
593: #define BOLT 10 /* crossbow bolt */
594: #define SPEAR 11 /* spear */
595: #define TRIDENT 12 /* trident */
596: #define SPETUM 13 /* spetum */
597: #define BARDICHE 14 /* bardiche */
598: #define PIKE 15 /* pike */
599: #define BASWORD 16 /* bastard sword */
600: #define HALBERD 17 /* halberd */
601: #define BATTLEAXE 18 /* battle axe */
602: #define MAXWEAPONS 19 /* types of weapons */
603: #define NONE 100 /* no weapon */
604:
605: /*
606: * Armor types
607: */
608: #define LEATHER 0
609: #define RING_MAIL 1
610: #define STUDDED_LEATHER 2
611: #define SCALE_MAIL 3
612: #define PADDED_ARMOR 4
613: #define CHAIN_MAIL 5
614: #define SPLINT_MAIL 6
615: #define BANDED_MAIL 7
616: #define PLATE_MAIL 8
617: #define PLATE_ARMOR 9
618: #define MAXARMORS 10
619:
620: /*
621: * Ring types
622: */
623: #define R_PROTECT 0
624: #define R_ADDSTR 1
625: #define R_SUSABILITY 2
626: #define R_SEARCH 3
627: #define R_SEEINVIS 4
628: #define R_ALERT 5
629: #define R_AGGR 6
630: #define R_ADDHIT 7
631: #define R_ADDDAM 8
632: #define R_REGEN 9
633: #define R_DIGEST 10
634: #define R_TELEPORT 11
635: #define R_STEALTH 12
636: #define R_ADDINTEL 13
637: #define R_ADDWISDOM 14
638: #define R_HEALTH 15
639: #define R_HEAVY 16
640: #define R_LIGHT 17
641: #define R_DELUSION 18
642: #define R_FEAR 19
643: #define R_HEROISM 20
644: #define R_FIRE 21
645: #define R_WARMTH 22
646: #define R_VAMPREGEN 23
647: #define MAXRINGS 24
648:
649: /*
650: * Rod/Wand/Staff types
651: */
652:
653: #define WS_LIGHT 0
654: #define WS_HIT 1
655: #define WS_ELECT 2
656: #define WS_FIRE 3
657: #define WS_COLD 4
658: #define WS_POLYMORPH 5
659: #define WS_MISSILE 6
660: #define WS_SLOW_M 7
661: #define WS_DRAIN 8
662: #define WS_CHARGE 9
663: #define WS_TELMON 10
664: #define WS_CANCEL 11
665: #define WS_CONFMON 12
666: #define WS_DISINTEGRATE 13
667: #define WS_PETRIFY 14
668: #define WS_PARALYZE 15
669: #define WS_MDEG 16
670: #define WS_CURING 17
671: #define WS_WONDER 18
672: #define WS_FEAR 19
673: #define MAXSTICKS 20
674:
675: /*
676: * miscellaneous magic items
677: */
678: #define MM_JUG 0
679: #define MM_BEAKER 1
680: #define MM_BOOK 2
681: #define MM_ELF_BOOTS 3
682: #define MM_BRACERS 4
683: #define MM_OPEN 5
684: #define MM_HUNGER 6
685: #define MM_DISP 7
686: #define MM_PROTECT 8
687: #define MM_DRUMS 9
688: #define MM_DISAPPEAR 10
689: #define MM_CHOKE 11
690: #define MM_G_DEXTERITY 12
691: #define MM_G_OGRE 13
692: #define MM_JEWEL 14
693: #define MM_KEOGHTOM 15
694: #define MM_R_POWERLESS 16
695: #define MM_FUMBLE 17
696: #define MM_ADAPTION 18
697: #define MM_STRANGLE 19
698: #define MM_DANCE 20
699: #define MM_SKILLS 21
700: #define MAXMM 22
701:
702: /*
703: * Relic types
704: */
705: #define MUSTY_DAGGER 0
706: #define EMORI_CLOAK 1
707: #define HEIL_ANKH 2
708: #define MING_STAFF 3
709: #define ORCUS_WAND 4
710: #define ASMO_ROD 5
711: #define YENDOR_AMULET 6
712: #define BRIAN_MANDOLIN 7
713: #define GERYON_HORN 8
714: #define HRUGGEK_MSTAR 9
715: #define YEENOGHU_FLAIL 10
716: #define MAXRELIC 11
717:
718:
719: #define LEVEL 600
720: #define vlevel max(level, turns/LEVEL + 1)
721: /*
722: * Now we define the structures and types
723: */
724:
725: struct delayed_action {
726: int d_type;
727: void (*d_func)();
728: void *d_arg;
729: int d_time;
730: };
731:
732: /*
733: * level types
734: */
735: typedef enum {
736: NORMLEV, /* normal level */
737: POSTLEV, /* trading post level */
738: MAZELEV, /* maze level */
739: OUTSIDE /* outside level */
740: } LEVTYPE;
741:
742: /*
743: * Help list
744: */
745:
746: struct h_list {
747: char h_ch;
748: char *h_desc;
749: };
750:
751: /*
752: * Coordinate data type
753: */
754: typedef struct {
755: int x;
756: int y;
757: } coord;
758:
759: /*
760: * structure for the ways to die
761: */
762: struct death_type {
763: int reason;
764: char *name;
765: };
766:
767:
768: /*
769: * Linked list data type
770: */
771: struct linked_list {
772: struct linked_list *l_next;
773: struct linked_list *l_prev;
774: char *l_data; /* Various structure pointers */
775: };
776:
777: /*
778: * Stuff about magic items
779: */
780:
781: struct magic_item {
782: char *mi_name;
783: int mi_prob;
784: int mi_worth;
785: int mi_curse;
786: int mi_bless;
787: };
788:
789: /*
790: * Room structure
791: */
792: struct room {
793: coord r_pos; /* Upper left corner */
794: coord r_max; /* Size of room */
795: long r_flags; /* Info about the room */
796: struct linked_list *r_fires; /* List of fire creatures in room */
797: struct linked_list *r_exit; /* Linked list of exits */
798: };
799:
800: /*
801: * Array of all traps on this level
802: */
803:
804: struct trap {
805: char tr_type; /* What kind of trap */
806: char tr_show; /* Where disguised trap looks like */
807: coord tr_pos; /* Where trap is */
808: long tr_flags; /* Info about trap (i.e. ISFOUND) */
809: };
810:
811: /*
812: * Structure describing a fighting being
813: */
814: struct stats {
815: short s_str; /* Strength */
816: short s_intel; /* Intelligence */
817: short s_wisdom; /* Wisdom */
818: short s_dext; /* Dexterity */
819: short s_const; /* Constitution */
820: short s_charisma; /* Charisma */
821: unsigned long s_exp; /* Experience */
822: int s_lvl; /* Level of mastery */
823: int s_arm; /* Armor class */
824: int s_hpt; /* Hit points */
825: int s_pack; /* current weight of his pack */
826: int s_carry; /* max weight he can carry */
827: char s_dmg[30]; /* String describing damage done */
828: };
829:
830: /*
831: * Structure describing a fighting being (monster at initialization)
832: */
833: struct mstats {
834: short s_str; /* Strength */
835: unsigned long s_exp; /* Experience */
836: int s_lvl; /* Level of mastery */
837: int s_arm; /* Armor class */
838: char *s_hpt; /* Hit points */
839: char *s_dmg; /* String describing damage done */
840: };
841:
842: /*
843: * Structure for monsters and player
844: */
845: struct thing {
846: bool t_turn; /* If slowed, is it a turn to move */
847: bool t_wasshot; /* Was character shot last round? */
848: char t_type; /* What it is */
849: char t_disguise; /* What mimic looks like */
850: char t_oldch; /* Character that was where it was */
851: short t_ctype; /* Character type */
852: short t_index; /* Index into monster table */
853: short t_no_move; /* How long the thing can't move */
854: short t_quiet; /* used in healing */
855: coord *t_doorgoal; /* What door are we heading to? */
856: coord t_pos; /* Position */
857: coord t_oldpos; /* Last position */
858: coord *t_dest; /* Where it is running to */
859: unsigned long t_flags[16]; /* State word */
860: struct linked_list *t_pack; /* What the thing is carrying */
861: struct stats t_stats; /* Physical description */
862: struct stats maxstats; /* maximum(or initial) stats */
863: int t_reserved;
864: int t_reserved2;
865: int t_reserved3;
866: };
867:
868: /*
869: * Array containing information on all the various types of monsters
870: */
871: struct monster {
872: const char *m_name; /* What to call the monster */
873: const short m_carry; /* Probability of carrying something */
874: bool m_normal; /* Does monster exist? */
875: bool m_wander; /* Does monster wander? */
876: const char m_appear; /* What does monster look like? */
877: const char *m_intel; /* Intelligence range */
878: const long m_flags[MAXFLAGS]; /* Things about the monster */
879: const char *m_typesum; /* type of creature can he summon */
880: short m_numsum; /* how many creatures can he summon */
881: const short m_add_exp; /* Added experience per hit point */
882: const struct mstats m_stats; /* Initial stats */
883: };
884:
885: /*
886: * Structure for a thing that the rogue can carry
887: */
888:
889: struct object {
890: int o_type; /* What kind of object it is */
891: coord o_pos; /* Where it lives on the screen */
892: char *o_text; /* What it says if you read it */
893: char o_launch; /* What you need to launch it */
894: char o_damage[8]; /* Damage if used like sword */
895: char o_hurldmg[8]; /* Damage if thrown */
896: struct linked_list *contents; /* contents of this object */
897: int o_count; /* Count for plural objects */
898: int o_which; /* Which object of a type it is */
899: int o_hplus; /* Plusses to hit */
900: int o_dplus; /* Plusses to damage */
901: int o_ac; /* Armor class */
902: long o_flags; /* Information about objects */
903: int o_group; /* Group number for this object */
904: int o_weight; /* weight of this object */
905: char o_mark[MARKLEN]; /* Mark the specific object */
906: };
907: /*
908: * weapon structure
909: */
910: struct init_weps {
911: char *w_name; /* name of weapon */
912: char *w_dam; /* hit damage */
913: char *w_hrl; /* hurl damage */
914: char w_launch; /* need to launch it */
915: int w_flags; /* flags */
916: int w_wght; /* weight of weapon */
917: int w_worth; /* worth of this weapon */
918: };
919:
920: /*
921: * armor structure
922: */
923: struct init_armor {
924: char *a_name; /* name of armor */
925: int a_prob; /* chance of getting armor */
926: int a_class; /* normal armor class */
927: int a_worth; /* worth of armor */
928: int a_wght; /* weight of armor */
929: };
930:
931: struct matrix {
932: int base; /* Base to-hit value (AC 10) */
933: int max_lvl; /* Maximum level for changing value */
934: int factor; /* Amount base changes each time */
935: int offset; /* What to offset level */
936: int range; /* Range of levels for each offset */
937: };
938:
939: struct spells {
940: short s_which; /* which scroll or potion */
941: short s_cost; /* cost of casting spell */
942: short s_type; /* scroll or potion */
943: int s_flag; /* is the spell blessed/cursed? */
944: };
945:
946: void _attach(struct linked_list **list, struct linked_list *item);
947: void _detach(struct linked_list **list, struct linked_list *item);
948: void _o_free_list(struct linked_list **ptr);
949: void _t_free_list(struct linked_list **ptr);
950: int ac_compute(void);
951: void activity(void);
952: void add_dexterity(bool cursed);
953: void add_intelligence(bool cursed);
954: bool add_pack(struct linked_list *item, bool silent,
955: struct linked_list **packret);
956: void add_slow(void);
957: void add_wisdom(bool cursed);
958: void addmsg(char *fmt, ...);
959: void affect(void);
960: void aggravate(void);
961: void alchemy(struct object *obj);
962: void appear(void);
963: bool attack(struct thing *mp, struct object *weapon, bool thrown);
964: void auto_save(int sig);
965: char be_trapped(struct thing *th, coord *tc);
966: char *blesscurse(int flags);
967: bool blue_light(bool blessed, bool cursed);
968: void bugkill(int sig);
969: void buy_it(void);
970: void byebye(int sig);
971: void cast(void);
972: bool can_blink(struct thing *tp);
973: coord *can_shoot(coord *er, coord *ee);
974: bool cansee(int y, int x);
975: void carry_obj(struct thing *mp, int chance);
976: long check_level(bool get_spells);
977: void check_residue(struct thing *tp);
978: void chg_str(int amt);
979: void command(void);
980: int const_bonus(void);
981: void corr_move(int dy, int dx);
982: struct linked_list *creat_item(void);
983: bool creat_mons(struct thing *person, short monster, bool report);
984: void create_obj(bool prompt, int which_item, int which_type);
985: void cur_null(struct object *op);
986: void cure_disease(void);
987: void dbotline(WINDOW *scr, char *message);
988: void death(short monst);
989: void del_pack(struct linked_list *item);
990: void destroy_item(struct linked_list *item);
991: int dex_compute(void);
992: int dext_prot(int dexterity);
993: bool diag_ok(coord *sp, coord *ep, struct thing *flgptr);
994: void dip_it(void);
995: void do_daemons(int flag);
996: void do_fuses(int flag);
997: void do_maze(void);
998: void do_motion(struct object *obj, int ydelta, int xdelta, struct thing *tp);
999: void do_move(int dy, int dx);
1000: void do_passages(void);
1001: void do_post(void);
1002: void do_rooms(void);
1003: void do_run(char ch);
1004: void do_terrain(int basey, int basex, int deltay, int deltax, bool fresh);
1005: bool do_zap(bool gotdir, int which, int flag);
1006: void doctor(struct thing *tp);
1007: void draw_room(struct room *rp);
1008: bool drop(struct linked_list *item);
1009: bool dropcheck(struct object *op);
1010: void dust_appear(void);
1011: void eat(void);
1012: int encread(char *start, unsigned int size, FILE *inf);
1013: int encwrite(char *start, unsigned int size, FILE *outf);
1014: void endit(int sig);
1015: void endmsg(void);
1016: void extinguish(void (*func)());
1017: void fall(struct linked_list *item, bool pr);
1018: coord *fallpos(coord *pos, bool be_clear, int range);
1019: void fatal(char *s);
1020: bool fight(coord *mp, struct object *weap, bool thrown);
1021: struct linked_list *find_mons(int y, int x);
1022: struct linked_list *find_obj(int y, int x);
1023: struct delayed_action *find_slot(void (*func)());
1024: void fix_stick(struct object *cur);
1025: void fumble(void);
1026: void fuse(void (*func)(), void *arg, int time, int type);
1027: void genmonsters(int least, bool treas);
1028: bool get_dir(void);
1029: struct linked_list *get_item(struct linked_list *list, char *purpose, int type);
1030: int get_str(char *opt, WINDOW *win);
1031: int get_worth(struct object *obj);
1032: int getbless(void);
1033: int getdeath(void);
1034: bool getdelta(char match, int *dy, int *dx);
1035: int grab(int y, int x);
1036: void gsense(void);
1037: bool hit_monster(int y, int x, struct object *obj, struct thing *tp);
1038: int hitweight(void);
1039: short id_monst(char monster);
1040: void idenpack(void);
1041: void init_colors(void);
1042: void init_materials(void);
1043: void init_misc(void);
1044: void init_names(void);
1045: void init_player(void);
1046: void init_stones(void);
1047: void init_terrain(void);
1048: void init_things(void);
1049: void init_weapon(struct object *weap, char type);
1050: char *inv_name(struct object *obj, bool drop);
1051: bool inventory(struct linked_list *list, int type);
1052: bool is_current(struct object *obj);
1053: bool is_magic(struct object *obj);
1054: bool isatrap(char ch);
1055: int itemweight(struct object *wh);
1056: void kill_daemon(void (*func)());
1057: void killed(struct linked_list *item, bool pr, bool points);
1058: void lake_check(coord *place);
1059: void land(void);
1060: void lengthen(void (*func)(), int xtime);
1061: void light(coord *cp);
1062: bool lit_room(struct room *rp);
1063: void look(bool wakeup, bool runend);
1064: void lower_level(short who);
1065: bool m_use_item(struct thing *monster, coord *monst_pos, coord *defend_pos);
1066: short makemonster(bool create);
1067: bool maze_view(int y, int x);
1068: char *misc_name(struct object *obj);
1069: void missile(int ydelta, int xdelta, struct linked_list *item,
1070: struct thing *tp);
1071: void msg(char *fmt, ...);
1072: unsigned long netread(int *error, int size, FILE *stream);
1073: int netwrite(unsigned long value, int size, FILE *stream);
1074: char *new(int size);
1075: struct linked_list *new_item(int size);
1076: void new_level(LEVTYPE ltype);
1077: void new_monster(struct linked_list *item, short type, coord *cp,
1078: bool max_monster);
1079: struct linked_list *new_thing(int thing_type);
1080: void nohaste(void);
1081: void noslow(void);
1082: char *num(int n1, int n2);
1083: void o_discard(struct linked_list *item);
1084: void option(void);
1085: char pack_char(struct linked_list *list, struct object *obj);
1086: void parse_opts(char *str);
1087: bool passwd(void);
1088: int pick_one(struct magic_item *magic, int nitems);
1089: void pick_up(char ch);
1090: void picky_inven(void);
1091: void playit(void);
1092: void pray(void);
1093: bool price_it(void);
1094: void quaff(int which, int flag, bool is_potion);
1095: void quit(int sig);
1096: void raise_level(bool get_spells);
1097: short randmonster(bool wander, bool no_unique);
1098: void read_scroll(int which, int flag, bool is_scroll);
1099: int readchar(void);
1100: void reopen_score(void);
1101: void res_dexterity(int howmuch);
1102: void res_strength(void);
1103: bool restore(char *file, char **envp);
1104: void restscr(WINDOW *scr);
1105: int ring_eat(int hand);
1106: char *ring_num(struct object *obj);
1107: void ring_on(struct object *obj);
1108: void ring_search(void);
1109: void ring_teleport(void);
1110: int ring_value(int type);
1111: int rnd(int range);
1112: void rnd_pos(struct room *rp, coord *cp);
1113: int rnd_room(void);
1114: coord *rndmove(struct thing *who);
1115: int roll(int number, int sides);
1116: void rollwand(void);
1117: struct room *roomin(coord *cp);
1118: int rs_restore_file(FILE *inf);
1119: int rs_save_file(FILE *savef);
1120: void runners(void);
1121: void runto(struct thing *runner, coord *spot);
1122: bool save(int which, struct thing *who, int adj);
1123: bool save_game(void);
1124: void score(unsigned long amount, int flags, short monst);
1125: void search(bool is_thief, bool door_chime);
1126: char secretdoor(int y, int x);
1127: void sell(struct thing *tp);
1128: void sell_it(void);
1129: void set_trap(struct thing *tp, int y, int x);
1130: void setup(void);
1131: bool shoot_bolt(struct thing *shooter, coord start, coord dir,
1132: bool get_points, short reason, char *name, int damage);
1133: bool shoot_ok(char ch);
1134: char show(int y, int x);
1135: void sight(void);
1136: struct linked_list *spec_item(int type, int which, int hit, int damage);
1137: void start_daemon(void (*func)(), void *arg, int type);
1138: void status(bool display);
1139: void steal(void);
1140: bool step_ok(int y, int x, int can_on_monst, struct thing *flgptr);
1141: void stomach(void);
1142: int str_compute(void);
1143: void strangle(void);
1144: void strucpy(char *s1, char *s2, int len);
1145: void suffocate(void);
1146: void swander(void);
1147: bool swing(short class, int at_lvl, int op_arm, int wplus);
1148: void t_discard(struct linked_list *item);
1149: void take_off(void);
1150: int teleport(void);
1151: void total_winner(void);
1152: int totalenc(void);
1153: char *tr_name(char ch);
1154: struct trap *trap_at(int y, int x);
1155: void trap_look(void);
1156: void un_itch(void);
1157: void unchoke(void);
1158: void unclrhead(void);
1159: void unconfuse(void);
1160: void undance(void);
1161: void unphase(void);
1162: void unsee(void);
1163: void unstink(void);
1164: void updpack(bool getmax);
1165: void use_mm(int which);
1166: char *vowelstr(char *str);
1167: void wait_for(WINDOW *win, char ch);
1168: struct linked_list *wake_monster(int y, int x);
1169: void wanderer(void);
1170: void waste_time(void);
1171: char *weap_name(struct object *obj);
1172: void wear(void);
1173: void wghtchk(void);
1174: void whatis(struct linked_list *what);
1175: void wield(void);
1176: void writelog(unsigned long amount, int flags, short monst);
1177:
1178: #ifdef CHECKTIME
1179: int checkout();
1180: #endif
1181: extern char *md_getusername(void);
1182: extern char *md_gethomedir(void);
1183: extern void md_flushinp(void);
1184: extern char *md_getshell(void);
1185: extern char *md_gethostname(void);
1186: extern char *md_getpass(char *prompt);
1187: extern char *md_crypt(char *key, char *salt);
1188: extern char *md_getroguedir(void);
1189: extern void md_init(void);
1190: extern FILE * md_fdopen(int fd, char *mode);
1191: extern int md_unlink(char *file);
1192: extern void md_normaluser(void);
1193: extern int md_getuid(void);
1194: extern long md_memused(void);
1195: extern int md_readchar(WINDOW *win);
1196: extern int md_shellescape(void);
1197: extern void md_srand(int seed);
1198: extern int md_rand(void);
1199: extern int md_erasechar(void);
1200: extern int md_killchar(void);
1201: extern unsigned int md_random_seed(void);
1202:
1203: /*
1204: * Now all the global variables
1205: */
1206:
1207: extern char outstring[]; /* string for use with msg */
1208: extern struct trap traps[];
1209: extern struct h_list helpstr[];
1210: extern struct h_list wiz_help[];
1211: extern struct room rooms[]; /* One for each room -- A level */
1212: extern struct room *oldrp; /* Roomin(&oldpos) */
1213: extern struct linked_list *mlist; /* List of monsters on the level */
1214: extern struct linked_list *tlist; /* list of monsters fallen down traps */
1215: extern struct death_type deaths[]; /* all the ways to die */
1216: extern struct thing player; /* The rogue */
1217: extern struct monster monsters[]; /* The initial monster states */
1218: extern struct linked_list *lvl_obj; /* List of objects on this level */
1219: extern struct linked_list *monst_dead; /* Indicates monster that got killed */
1220: extern struct object *cur_weapon; /* Which weapon he is weilding */
1221: extern struct object *cur_armor; /* What a well dresssed rogue wears */
1222: extern struct object *cur_ring[]; /* Which rings are being worn */
1223: extern struct object *cur_misc[]; /* which MM's are in use */
1224: extern struct magic_item things[]; /* Chances for each type of item */
1225: extern struct magic_item s_magic[]; /* Names and chances for scrolls */
1226: extern struct magic_item p_magic[]; /* Names and chances for potions */
1227: extern struct magic_item r_magic[]; /* Names and chances for rings */
1228: extern struct magic_item ws_magic[]; /* Names and chances for sticks */
1229: extern struct magic_item m_magic[]; /* Names and chances for MM */
1230: extern struct magic_item rel_magic[]; /* Names and chances for relics */
1231: extern struct spells magic_spells[]; /* spells for magic users */
1232: extern struct spells cleric_spells[]; /* spells for magic users */
1233: extern char *cnames[][11]; /* Character level names */
1234: extern char curpurch[]; /* name of item ready to buy */
1235: extern char PLAYER; /* what the player looks like */
1236: extern char nfloors; /* Number of floors in this dungeon */
1237: extern int char_type; /* what type of character is player */
1238: extern int foodlev; /* how fast he eats food */
1239: extern int level; /* What level rogue is on */
1240: extern int trader; /* number of purchases */
1241: extern int curprice; /* price of an item */
1242: extern int purse; /* How much gold the rogue has */
1243: extern int mpos; /* Where cursor is on top line */
1244: extern int ntraps; /* Number of traps on this level */
1245: extern int no_move; /* Number of turns held in place */
1246: extern int no_command; /* Number of turns asleep */
1247: extern int inpack; /* Number of things in pack */
1248: extern int total; /* Total dynamic memory bytes */
1249: extern int lastscore; /* Score before this turn */
1250: extern int no_food; /* Number of levels without food */
1251: extern int foods_this_level; /* num of foods this level */
1252: extern int seed; /* Random number seed */
1253: extern int count; /* Number of times to repeat command */
1254: extern int dnum; /* Dungeon number */
1255: extern int max_level; /* Deepest player has gone */
1256: extern int cur_max; /* Deepest player has gone currently */
1257: extern int food_left; /* Amount of food in hero's stomach */
1258: extern int group; /* Current group number */
1259: extern int hungry_state; /* How hungry is he */
1260: extern int infest_dam; /* Damage from parasites */
1261: extern int lost_str; /* Amount of strength lost */
1262: extern int lost_dext; /* amount of dexterity lost */
1263: extern int hold_count; /* Number of monsters holding player */
1264: extern int trap_tries; /* Number of attempts to set traps */
1265: extern int pray_time; /* Number of prayer points/exp level */
1266: extern int spell_power; /* Spell power left at this level */
1267: extern int turns; /* Number of turns player has taken */
1268: extern int quest_item; /* Item hero is looking for */
1269: extern int cur_relic[]; /* Current relics */
1270: extern char take; /* Thing the rogue is taking */
1271: extern char prbuf[]; /* Buffer for sprintfs */
1272: extern char outbuf[]; /* Output buffer for stdout */
1273: extern char runch; /* Direction player is running */
1274: extern char *s_names[]; /* Names of the scrolls */
1275: extern char *p_colors[]; /* Colors of the potions */
1276: extern char *r_stones[]; /* Stone settings of the rings */
1277: extern struct init_weps weaps[]; /* weapons and attributes */
1278: extern struct init_armor armors[]; /* armors and attributes */
1279: extern char *ws_made[]; /* What sticks are made of */
1280: extern char *release; /* Release number of rogue */
1281: extern char whoami[]; /* Name of player */
1282: extern char fruit[]; /* Favorite fruit */
1283: extern char huh[LINELEN]; /* The last message printed */
1284: extern char *s_guess[]; /* Players guess at what scroll is */
1285: extern char *p_guess[]; /* Players guess at what potion is */
1286: extern char *r_guess[]; /* Players guess at what ring is */
1287: extern char *ws_guess[]; /* Players guess at what wand is */
1288: extern char *m_guess[]; /* Players guess at what MM is */
1289: extern char *ws_type[]; /* Is it a wand or a staff */
1290: extern char file_name[]; /* Save file name */
1291: extern char score_file[]; /* Score file name */
1292: extern char home[]; /* User's home directory */
1293: extern WINDOW *cw; /* Window that the player sees */
1294: extern WINDOW *hw; /* Used for the help command */
1295: extern WINDOW *mw; /* Used to store mosnters */
1296: extern WINDOW *msgw; /* Used to display messages */
1297: extern bool pool_teleport; /* just teleported from a pool */
1298: extern bool inwhgt; /* true if from wghtchk() */
1299: extern bool running; /* True if player is running */
1300: extern bool playing; /* True until he quits */
1301: extern bool wizard; /* True if allows wizard commands */
1302: extern bool after; /* True if we want after daemons */
1303: extern bool notify; /* True if player wants to know */
1304: extern bool fight_flush; /* True if toilet input */
1305: extern bool terse; /* True if we should be short */
1306: extern bool auto_pickup; /* pick up things automatically? */
1307: extern bool door_stop; /* Stop running when we pass a door */
1308: extern bool jump; /* Show running as series of jumps */
1309: extern bool slow_invent; /* Inventory one line at a time */
1310: extern bool firstmove; /* First move after setting door_stop */
1311: extern bool waswizard; /* Was a wizard sometime */
1312: extern bool askme; /* Ask about unidentified things */
1313: extern bool s_know[]; /* Does he know what a scroll does */
1314: extern bool p_know[]; /* Does he know what a potion does */
1315: extern bool r_know[]; /* Does he know what a ring does */
1316: extern bool ws_know[]; /* Does he know what a stick does */
1317: extern bool m_know[]; /* Does he know what a MM does */
1318: extern bool in_shell; /* True if executing a shell */
1319: extern bool daytime; /* Indicates whether it is daytime */
1320: extern bool use_savedir; /* True if using systemwide save area */
1321: extern coord oldpos; /* Position before last look() call */
1322: extern coord delta; /* Change indicated to get_dir() */
1323: extern coord grid[]; /* used for random pos generation */
1324: extern char *nothing; /* "nothing happens" msg */
1325: extern char *spacemsg;
1326: extern char *morestr;
1327: extern char *retstr;
1328: extern LEVTYPE levtype;
1329: extern int demoncnt;
1330: extern int fusecnt;
1331: extern int between;
1332: extern struct delayed_action d_list[MAXDAEMONS];
1333: extern struct delayed_action f_list[MAXFUSES];
1334: extern char *rainbow[NCOLORS];
1335: extern char *sylls[NSYLLS];
1336: extern char *stones[NSTONES];
1337: extern char *metal[NMETAL];
1338: extern char *wood[NWOOD];
1339: extern coord ch_ret;
1340: extern FILE *scoreboard; /* The scorefile */
1341: extern FILE *logfile;
CVSweb