Annotation of early-roguelike/srogue/rogue.h, Revision 1.1.1.1
1.1 rubenllo 1: /*
2: * Rogue definitions and variable declarations
3: *
4: * @(#)rogue.h 9.0 (rdk) 7/17/84
5: *
6: * Super-Rogue
7: * Copyright (C) 1984 Robert D. Kindelberger
8: * All rights reserved.
9: *
10: * Based on "Rogue: Exploring the Dungeons of Doom"
11: * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
12: * All rights reserved.
13: *
14: * See the file LICENSE.TXT for full copyright and licensing information.
15: */
16:
17: #ifdef BSD
18: #include "cx.h"
19: #endif
20:
21:
22: #include <ctype.h>
23: #include <curses.h>
24:
25: #ifdef ATT
26: #define CBREAK FALSE
27: #define _IOSTRG 01
28: #endif
29:
30: #ifdef HAVE_CONFIG_H
31: #include "config.h"
32: #elif defined(_WIN32) && defined(__PDCURSES__)
33: #define HAVE_ERASECHAR
34: #define HAVE_KILLCHAR
35: #endif
36:
37: /* mdport functions */
38: #ifdef HAVE_SYS_TYPES_H
39: #include <sys/types.h>
40: #endif
41:
42: #ifndef uid_t
43: typedef unsigned int uid_t;
44: #endif
45: #ifndef gid_t
46: typedef unsigned int gid_t;
47: #endif
48:
49: int md_chmod(const char *filename, int mode);
50: char *md_crypt(const char *key, const char *salt);
51: int md_dsuspchar(void);
52: int md_erasechar(void);
53: FILE * md_fdopen(int fd, char *mode);
54: char *md_gethomedir(void);
55: char *md_getusername(void);
56: uid_t md_getuid(void);
57: gid_t md_getgid(void);
58: char *md_getpass(char *prompt);
59: char *md_getrealname(uid_t uid);
60: void md_init(void);
61: int md_killchar(void);
62: void md_normaluser(void);
63: void md_raw_standout(void);
64: void md_raw_standend(void);
65: int md_readchar(WINDOW *win);
66: int md_setdsuspchar(int c);
67: int md_shellescape(void);
68: void md_sleep(int s);
69: int md_suspchar(void);
70: int md_unlink(char *file);
71: int md_unlink_open_file(const char *file, FILE *inf);
72: void md_tstpsignal(void);
73: void md_tstphold(void);
74: void md_tstpresume(void);
75: void md_ignoreallsignals(void);
76: void md_onsignal_autosave(void);
77: void md_onsignal_exit(void);
78: void md_onsignal_default(void);
79: int md_issymlink(char *sp);
80: long md_memused(void);
81: int md_random(void);
82: void md_srandom(unsigned int seed);
83: unsigned int md_random_seed(void);
84: char *xcrypt(const char *key, const char *setting);
85:
86: #define reg register /* register abbr. */
87:
88: /*
89: * Maximum number of different things
90: */
91:
92: #define NCOLORS 32
93: #define NSYLS 159
94: #define NSTONES 35
95: #define NWOOD 24
96: #define NMETAL 15
97:
98: #define MAXDAEMONS 20
99:
100: #define TYPETRAPS 9 /* max types of traps */
101: #define MAXROOMS 9 /* max rooms per level */
102: #define MAXTHINGS 9 /* max things on each level */
103: #define MAXOBJ 9 /* max goodies on each level */
104: #define MAXPACK 23 /* max things this hero can carry */
105: #define MAXTRAPS 10 /* max traps per level */
106: #define MAXMONS 52 /* max available monsters */
107: #define MONRANGE 20 /* max # of monsters avail each level */
108: #define AMLEVEL 35 /* earliest level that amulet can appear */
109: #define MAXPURCH 4 /* max purchases in trading post */
110: #define MINABIL 3 /* minimum for any ability */
111: #define MAXSTR 24 /* maximum strength */
112: #define MAXOTHER 18 /* maximum wis, dex, con */
113: #define NORMAC 10 /* normal hero armor class (no armor) */
114: #define MONWIS 10 /* monsters standard wisdom */
115:
116: #define NORMLEV 0 /* normal level */
117: #define POSTLEV 1 /* trading post level */
118: #define MAZELEV 2 /* maze level */
119:
120: #define NORMFOOD 0 /* normal food's group no. */
121: #define FRUITFOOD 1 /* fruit's group no. */
122: #define NEWGROUP 2 /* start of group no. other than food */
123:
124: #define NUMTHINGS 8 /* types of goodies for hero */
125: #define TYP_POTION 0
126: #define TYP_SCROLL 1
127: #define TYP_FOOD 2
128: #define TYP_WEAPON 3
129: #define TYP_ARMOR 4
130: #define TYP_RING 5
131: #define TYP_STICK 6
132: #define TYP_AMULET 7
133:
134: #define V_PACK 3600 /* max volume in pack */
135: #define V_POTION 50 /* volume of potion */
136: #define V_SCROLL 80 /* volume of scroll */
137: #define V_FOOD 35 /* volume of food */
138: #define V_WEAPON 0 /* volume of weapon (depends on wep) */
139: #define V_ARMOR 0 /* volume of armor (depends on armor) */
140: #define V_RING 20 /* volume of ring */
141: #define V_STICK 0 /* volume of stick (depends on staff/wand) */
142: #define V_AMULET 30 /* volume of amulet */
143:
144: #define V_WS_STAFF 200 /* volume of a staff */
145: #define V_WS_WAND 110 /* volume of a wand */
146: #define W_WS_STAFF 100 /* weight of a staff */
147: #define W_WS_WAND 60 /* weight of a wand */
148:
149: #define FROMRING 2
150: #define DONTCARE -1
151: #define ANYTHING -1,-1 /* DONTCARE, DONTCARE */
152:
153: #define K_ARROW 240 /* killed by an arrow */
154: #define K_DART 241 /* killed by a dart */
155: #define K_BOLT 242 /* killed by a bolt */
156: #define K_POOL 243 /* killed by drowning */
157: #define K_ROD 244 /* killed by an exploding rod */
158: #define K_SCROLL 245 /* killed by a burning scroll */
159: #define K_STONE 246 /* killed by materializing in rock */
160: #define K_STARVE 247 /* killed by starvation */
161: /*
162: * return values for get functions
163: */
164:
165: #define NORM 0 /* normal exit */
166: #define QUIT 1 /* quit option setting */
167: #define MINUS 2 /* back up one option */
168:
169: /*
170: * Return values for games end
171: */
172: #define KILLED 0 /* hero was killed */
173: #define CHICKEN 1 /* hero chickened out (quit) */
174: #define WINNER 2 /* hero was a total winner */
175:
176: /*
177: * return values for chase routines
178: */
179: #define CHASE 0 /* continue chasing hero */
180: #define FIGHT 1 /* fight the hero */
181: #define GONER 2 /* chaser fell into a trap */
182:
183: /*
184: * All the fun defines
185: */
186: #define next(ptr) (*ptr).l_next
187: #define prev(ptr) (*ptr).l_prev
188: #define ldata(ptr) (*ptr).l_data
189: #define OBJPTR(what) (struct object *)((*what).l_data)
190: #define THINGPTR(what) (struct thing *)((*what).l_data)
191:
192: #define inroom(rp, cp) (\
193: (cp)->x <= (rp)->r_pos.x + ((rp)->r_max.x - 1) && \
194: (rp)->r_pos.x <= (cp)->x && (cp)->y <= (rp)->r_pos.y + \
195: ((rp)->r_max.y - 1) && (rp)->r_pos.y <= (cp)->y)
196:
197: #define unc(cp) (cp).y, (cp).x
198: #define cmov(xy) move((xy).y, (xy).x)
199: #define DISTANCE(y1,x1,y2,x2) ((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1))
200: #define when break;case
201: #define otherwise break;default
202: #define until(expr) while(!(expr))
203:
204: #define ce(a, b) ((a).x == (b).x && (a).y == (b).y)
205: #define draw(window) wrefresh(window)
206:
207: #define hero player.t_pos
208: #define pstats player.t_stats
209: #define pack player.t_pack
210:
211: #define herowis() (getpwis(him))
212: #define herodex() (getpdex(him,FALSE))
213: #define herostr() (pstats.s_ef.a_str)
214: #define herocon() (pstats.s_ef.a_con)
215:
216: #define attach(a,b) _attach(&a,b)
217: #define detach(a,b) _detach(&a,b)
218: #define free_list(a) _free_list(&a)
219: #ifndef max
220: #define max(a, b) ((a) > (b) ? (a) : (b))
221: #endif
222: #define goingup() (level < max_level)
223:
224: #define on(thing, flag) (((thing).t_flags & flag) != 0)
225: #define off(thing, flag) (((thing).t_flags & flag) == 0)
226: #undef CTRL
227: #define CTRL(ch) (ch & 0x1F)
228:
229: #define ALLOC(x) malloc((unsigned int) x)
230: #define FREE(x) free((char *) x)
231: #define EQSTR(a, b, c) (strncmp(a, b, c) == 0)
232: #define GOLDCALC (rnd(50 + 10 * level) + 2)
233: #define ISMULT(type) (type == POTION || type == SCROLL || type == FOOD)
234:
235: #define newgrp() ++group
236: #define o_charges o_ac
237:
238:
239: /*
240: * Things that appear on the screens
241: */
242: #define PASSAGE '#'
243: #define DOOR '+'
244: #define FLOOR '.'
245: #define PLAYER '@'
246: #define POST '^'
247: #define MAZETRAP '\\'
248: #define TRAPDOOR '>'
249: #define ARROWTRAP '{'
250: #define SLEEPTRAP '$'
251: #define BEARTRAP '}'
252: #define TELTRAP '~'
253: #define DARTTRAP '`'
254: #define POOL '"'
255: #define SECRETDOOR '&'
256: #define STAIRS '%'
257: #define GOLD '*'
258: #define POTION '!'
259: #define SCROLL '?'
260: #define MAGIC '$'
261: #define FOOD ':'
262: #define WEAPON ')'
263: #define ARMOR ']'
264: #define AMULET ','
265: #define RING '='
266: #define STICK '/'
267: #define CALLABLE -1
268:
269:
270: /*
271: * stuff to do with encumberence
272: */
273: #define NORMENCB 1500 /* normal encumberence */
274: #define SOMTHERE 5 /* something is in the way for dropping */
275: #define CANTDROP 6 /* cant drop it cause its cursed */
276: #define F_OKAY 0 /* have plenty of food in stomach */
277: #define F_HUNGRY 1 /* player is hungry */
278: #define F_WEAK 2 /* weak from lack of food */
279: #define F_FAINT 3 /* fainting from lack of food */
280:
281:
282: /*
283: * Various constants
284: */
285: #define PASSWD "mTuZ7WUV9RWkQ"
286: #define BEARTIME 3
287: #define SLEEPTIME 5
288: #define HEALTIME 30
289: #define HOLDTIME 2
290: #define STPOS 0
291: #define WANDERTIME 70
292: #define BEFORE 1
293: #define AFTER 2
294: #define HUHDURATION 20
295: #define SEEDURATION 850
296: #define HUNGERTIME 1300
297: #define WEAKTIME 150
298: #define HUNGTIME 300 /* 2 * WEAKTIME */
299: #define STOMACHSIZE 2000
300: #define ESCAPE 27
301: #define LEFT 0
302: #define RIGHT 1
303: #define BOLT_LENGTH 6
304:
305: #define STR 1
306: #define DEX 2
307: #define CON 3
308: #define WIS 4
309:
310: /*
311: * Save against things
312: */
313: #define VS_POISON 00
314: #define VS_PARALYZATION 00
315: #define VS_DEATH 00
316: #define VS_PETRIFICATION 01
317: #define VS_BREATH 02
318: #define VS_MAGIC 03
319:
320:
321: /*
322: * Various flag bits
323: */
324: #define ISSTUCK 0000001 /* monster can't run (violet fungi) */
325: #define ISDARK 0000001 /* room is dark */
326: #define ISCURSED 000001 /* object is cursed */
327: #define ISBLIND 0000001 /* hero is blind */
328: #define ISPARA 0000002 /* monster is paralyzed */
329: #define ISGONE 0000002 /* room is gone */
330: #define ISKNOW 0000002 /* object is known */
331: #define ISRUN 0000004 /* Hero & monsters are running */
332: #define ISTREAS 0000004 /* room is a treasure room */
333: #define ISPOST 0000004 /* object is in a trading post */
334: #define ISFOUND 0000010 /* trap is found */
335: #define ISINVINC 000010 /* player is invincible */
336: #define ISINVIS 0000020 /* monster is invisible */
337: #define ISPROT 0000020 /* object is protected somehow */
338: #define ISMEAN 0000040 /* monster is mean */
339: #define ISBLESS 0000040 /* object is blessed */
340: #define ISGREED 0000100 /* monster is greedy */
341: #define ISWOUND 0000200 /* monster is wounded */
342: #define ISHELD 0000400 /* hero is held fast */
343: #define ISHUH 0001000 /* hero | monster is confused */
344: #define ISREGEN 0002000 /* monster is regenerative */
345: #define CANHUH 0004000 /* hero can confuse monsters */
346: #define CANSEE 0010000 /* hero can see invisible monsters */
347: #define WASHIT 0010000 /* hero has hit monster at least once */
348: #define ISMISL 0020000 /* object is normally thrown in attacks */
349: #define ISCANC 0020000 /* monsters special attacks are canceled */
350: #define ISMANY 0040000 /* objects are found in a group (> 1) */
351: #define ISSLOW 0040000 /* hero | monster is slow */
352: #define ISHASTE 0100000 /* hero | monster is fast */
353: #define ISETHER 0200000 /* hero is thin as air */
354: #define NONE 100 /* equal to 'd' (used for weaps) */
355:
356:
357: /*
358: * Potion types
359: */
360: #define P_CONFUSE 0 /* confusion */
361: #define P_PARALYZE 1 /* paralysis */
362: #define P_POISON 2 /* poison */
363: #define P_STRENGTH 3 /* gain strength */
364: #define P_SEEINVIS 4 /* see invisible */
365: #define P_HEALING 5 /* healing */
366: #define P_MFIND 6 /* monster detection */
367: #define P_TFIND 7 /* magic detection */
368: #define P_RAISE 8 /* raise level */
369: #define P_XHEAL 9 /* extra healing */
370: #define P_HASTE 10 /* haste self */
371: #define P_RESTORE 11 /* restore strength */
372: #define P_BLIND 12 /* blindness */
373: #define P_NOP 13 /* thirst quenching */
374: #define P_DEX 14 /* increase dexterity */
375: #define P_ETH 15 /* etherealness */
376: #define P_SMART 16 /* wisdom */
377: #define P_REGEN 17 /* regeneration */
378: #define P_SUPHERO 18 /* super ability */
379: #define P_DECREP 19 /* decrepedness */
380: #define P_INVINC 20 /* invicibility */
381: #define MAXPOTIONS 21 /* types of potions */
382:
383:
384: /*
385: * Scroll types
386: */
387: #define S_CONFUSE 0 /* monster confusion */
388: #define S_MAP 1 /* magic mapping */
389: #define S_LIGHT 2 /* light */
390: #define S_HOLD 3 /* hold monster */
391: #define S_SLEEP 4 /* sleep */
392: #define S_ARMOR 5 /* enchant armor */
393: #define S_IDENT 6 /* identify */
394: #define S_SCARE 7 /* scare monster */
395: #define S_GFIND 8 /* gold detection */
396: #define S_TELEP 9 /* teleportation */
397: #define S_ENCH 10 /* enchant weapon */
398: #define S_CREATE 11 /* create monster */
399: #define S_REMOVE 12 /* remove curse */
400: #define S_AGGR 13 /* aggravate monster */
401: #define S_NOP 14 /* blank paper */
402: #define S_GENOCIDE 15 /* genocide */
403: #define S_KNOWALL 16 /* item knowledge */
404: #define S_PROTECT 17 /* item protection */
405: #define S_DCURSE 18 /* demons curse */
406: #define S_DLEVEL 19 /* transport */
407: #define S_ALLENCH 20 /* enchantment */
408: #define S_BLESS 21 /* gods blessing */
409: #define S_MAKEIT 22 /* aquirement */
410: #define S_BAN 23 /* banishment */
411: #define S_CWAND 24 /* charge wands */
412: #define S_LOCTRAP 25 /* locate traps */
413: #define MAXSCROLLS 26 /* types of scrolls */
414:
415:
416: /*
417: * Weapon types
418: */
419: #define MACE 0 /* mace */
420: #define SWORD 1 /* long sword */
421: #define BOW 2 /* short bow */
422: #define ARROW 3 /* arrow */
423: #define DAGGER 4 /* dagger */
424: #define ROCK 5 /* rocks */
425: #define TWOSWORD 6 /* two-handed sword */
426: #define SLING 7 /* sling */
427: #define DART 8 /* darts */
428: #define CROSSBOW 9 /* crossbow */
429: #define BOLT 10 /* crossbow bolt */
430: #define SPEAR 11 /* spear */
431: #define TRIDENT 12 /* trident */
432: #define SPETUM 13 /* spetum */
433: #define BARDICHE 14 /* bardiche */
434: #define PIKE 15 /* pike */
435: #define BASWORD 16 /* bastard sword */
436: #define HALBERD 17 /* halberd */
437: #define MAXWEAPONS 18 /* types of weapons */
438:
439:
440: /*
441: * Armor types
442: */
443: #define LEATHER 0 /* leather */
444: #define RINGMAIL 1 /* ring */
445: #define STUDDED 2 /* studded leather */
446: #define SCALE 3 /* scale */
447: #define PADDED 4 /* padded */
448: #define CHAIN 5 /* chain */
449: #define SPLINT 6 /* splint */
450: #define BANDED 7 /* banded */
451: #define PLATEMAIL 8 /* plate mail */
452: #define PLATEARMOR 9 /* plate armor */
453: #define MAXARMORS 10 /* types of armor */
454:
455:
456: /*
457: * Ring types
458: */
459: #define R_PROTECT 0 /* protection */
460: #define R_ADDSTR 1 /* add strength */
461: #define R_SUSTSTR 2 /* sustain strength */
462: #define R_SEARCH 3 /* searching */
463: #define R_SEEINVIS 4 /* see invisible */
464: #define R_CONST 5 /* constitution */
465: #define R_AGGR 6 /* aggravate monster */
466: #define R_ADDHIT 7 /* agility */
467: #define R_ADDDAM 8 /* increase damage */
468: #define R_REGEN 9 /* regeneration */
469: #define R_DIGEST 10 /* slow digestion */
470: #define R_TELEPORT 11 /* teleportation */
471: #define R_STEALTH 12 /* stealth */
472: #define R_SPEED 13 /* speed */
473: #define R_FTRAPS 14 /* find traps */
474: #define R_DELUS 15 /* delusion */
475: #define R_SUSAB 16 /* sustain ability */
476: #define R_BLIND 17 /* blindness */
477: #define R_SLOW 18 /* lethargy */
478: #define R_GIANT 19 /* ogre strength */
479: #define R_SAPEM 20 /* enfeeblement */
480: #define R_HEAVY 21 /* burden */
481: #define R_LIGHT 22 /* illumination */
482: #define R_BREATH 23 /* fire protection */
483: #define R_KNOW 24 /* wisdom */
484: #define R_DEX 25 /* dexterity */
485: #define MAXRINGS 26 /* types of rings */
486:
487:
488: /*
489: * Rod/Wand/Staff types
490: */
491:
492: #define WS_LIGHT 0 /* light */
493: #define WS_HIT 1 /* striking */
494: #define WS_ELECT 2 /* lightning */
495: #define WS_FIRE 3 /* fire */
496: #define WS_COLD 4 /* cold */
497: #define WS_POLYM 5 /* polymorph */
498: #define WS_MISSILE 6 /* magic missile */
499: #define WS_HASTE_M 7 /* haste monster */
500: #define WS_SLOW_M 8 /* slow monster */
501: #define WS_DRAIN 9 /* drain life */
502: #define WS_NOP 10 /* nothing */
503: #define WS_TELAWAY 11 /* teleport away */
504: #define WS_TELTO 12 /* teleport to */
505: #define WS_CANCEL 13 /* cancellation */
506: #define WS_SAPLIFE 14 /* sap life */
507: #define WS_CURE 15 /* curing */
508: #define WS_PYRO 16 /* pyromania */
509: #define WS_ANNIH 17 /* annihilate monster */
510: #define WS_PARZ 18 /* paralyze monster */
511: #define WS_HUNGER 19 /* food absorption */
512: #define WS_MREG 20 /* regenerate monster */
513: #define WS_MINVIS 21 /* hide monster */
514: #define WS_ANTIM 22 /* anti-matter */
515: #define WS_MOREMON 23 /* clone monster */
516: #define WS_CONFMON 24 /* confuse monster */
517: #define WS_MDEG 25 /* degenerate monster */
518: #define MAXSTICKS 26 /* max types of sticks */
519:
520: #define MAXAMULETS 1 /* types of amulets */
521: #define MAXFOODS 1 /* types of food */
522:
523:
524: /*
525: * Now we define the structures and types
526: */
527:
528: struct delayed_action {
529: int d_type;
530: void (*d_func)();
531: int d_arg;
532: int d_time;
533: };
534:
535: /*
536: * Help list
537: */
538: struct h_list {
539: char h_ch;
540: char *h_desc;
541: };
542:
543:
544: /*
545: * Coordinate data type
546: */
547: struct coord {
548: int x; /* column position */
549: int y; /* row position */
550: };
551:
552: struct monlev {
553: int l_lev; /* lowest level for a monster */
554: int h_lev; /* highest level for a monster */
555: bool d_wand; /* TRUE if monster wanders */
556: };
557:
558: /*
559: * Linked list data type
560: */
561: struct linked_list {
562: struct linked_list *l_next;
563: struct linked_list *l_prev;
564: void *l_data; /* Various structure pointers */
565: };
566:
567:
568: /*
569: * Stuff about magic items
570: */
571: #define mi_wght mi_worth
572: struct magic_item {
573: char *mi_name; /* name of item */
574: int mi_prob; /* probability of getting item */
575: int mi_worth; /* worth of item */
576: };
577:
578: struct magic_info {
579: int mf_max; /* max # of this type */
580: int mf_vol; /* volume of this item */
581: char mf_show; /* appearance on screen */
582: struct magic_item *mf_magic; /* pointer to magic tables */
583: };
584:
585: /*
586: * staff/wand stuff
587: */
588: struct rod {
589: char *ws_type; /* either "staff" or "wand" */
590: char *ws_made; /* "mahogany", etc */
591: int ws_vol; /* volume of this type stick */
592: int ws_wght; /* weight of this type stick */
593: };
594:
595: /*
596: * armor structure
597: */
598: struct init_armor {
599: int a_class; /* normal armor class */
600: int a_wght; /* weight of armor */
601: int a_vol; /* volume of armor */
602: };
603:
604: /*
605: * weapon structure
606: */
607: struct init_weps {
608: char *w_dam; /* hit damage */
609: char *w_hrl; /* hurl damage */
610: int w_flags; /* flags */
611: int w_wght; /* weight of weapon */
612: int w_vol; /* volume of weapon */
613: char w_launch; /* need to launch it */
614: };
615:
616:
617: /*
618: * Room structure
619: */
620: struct room {
621: struct coord r_pos; /* Upper left corner */
622: struct coord r_max; /* Size of room */
623: struct coord r_gold; /* Where the gold is */
624: struct coord r_exit[4]; /* Where the exits are */
625: struct room *r_ptr[4]; /* this exits' link to next rm */
626: int r_goldval; /* How much the gold is worth */
627: int r_flags; /* Info about the room */
628: int r_nexits; /* Number of exits */
629: };
630:
631: /*
632: * Array of all traps on this level
633: */
634: struct trap {
635: struct coord tr_pos; /* Where trap is */
636: struct coord tr_goto; /* where trap tranports to (if any) */
637: int tr_flags; /* Info about trap */
638: char tr_type; /* What kind of trap */
639: };
640:
641: /*
642: * structure for describing true abilities
643: */
644: struct real {
645: int a_str; /* strength (3-24) */
646: int a_dex; /* dexterity (3-18) */
647: int a_wis; /* wisdom (3-18) */
648: int a_con; /* constitution (3-18) */
649: };
650:
651: /*
652: * Structure describing a fighting being
653: */
654: struct stats {
655: struct real s_re; /* True ability */
656: struct real s_ef; /* Effective ability */
657: long s_exp; /* Experience */
658: int s_lvl; /* Level of mastery */
659: int s_arm; /* Armor class */
660: int s_hpt; /* Hit points */
661: int s_maxhp; /* max value of hit points */
662: int s_pack; /* current weight of his pack */
663: int s_carry; /* max weight he can carry */
664: char s_dmg[16]; /* String describing damage done */
665: };
666:
667: /*
668: * Structure for monsters and player
669: */
670: struct thing {
671: struct stats t_stats; /* Physical description */
672: struct coord t_pos; /* Position */
673: struct coord t_oldpos; /* last spot of it */
674: struct coord *t_dest; /* Where it is running to */
675: struct linked_list *t_pack; /* What the thing is carrying */
676: struct room *t_room; /* Room this thing is in */
677: long t_flags; /* State word */
678: int t_indx; /* Index into monster structure */
679: int t_nomove; /* # turns you cant move */
680: int t_nocmd; /* # turns you cant do anything */
681: bool t_turn; /* If slow, is it a turn to move */
682: char t_type; /* What it is */
683: char t_disguise; /* What mimic looks like */
684: char t_oldch; /* Char that was where it was */
685: char t_reserved;
686: };
687:
688: /*
689: * Array containing information on all the various types of mosnters
690: */
691: struct monster {
692: char *m_name; /* What to call the monster */
693: char m_show; /* char that monster shows */
694: short m_carry; /* Probability of having an item */
695: struct monlev m_lev; /* level stuff */
696: long m_flags; /* Things about the monster */
697: struct stats m_stats; /* Initial stats */
698: };
699:
700: /*
701: * Structure for a thing that the rogue can carry
702: */
703: struct object {
704: struct coord o_pos; /* Where it lives on the screen */
705: char o_damage[8]; /* Damage if used like sword */
706: char o_hurldmg[8]; /* Damage if thrown */
707: char *o_typname; /* name this thing is called */
708: int o_type; /* What kind of object it is */
709: int o_count; /* Count for plural objects */
710: int o_which; /* Which object of a type it is */
711: int o_hplus; /* Plusses to hit */
712: int o_dplus; /* Plusses to damage */
713: int o_ac; /* Armor class or charges */
714: int o_flags; /* Information about objects */
715: int o_group; /* Group number for this object */
716: int o_weight; /* weight of this object */
717: int o_vol; /* volume of this object */
718: char o_launch; /* What you need to launch it */
719: };
720:
721: extern WINDOW *cw, *hw, *mw;
722:
723: #define LINLEN 80 /* length of buffers */
724:
725: #define EXTLKL extern struct linked_list
726: #define EXTTHG extern struct thing
727: #define EXTOBJ extern struct object
728: #define EXTSTAT extern struct stats
729: #define EXTCORD extern struct coord
730: #define EXTMON extern struct monster
731: #define EXTARM extern struct init_armor
732: #define EXTWEP extern struct init_weps
733: #define EXTMAG extern struct magic_item
734: #define EXTROOM extern struct room
735: #define EXTTRAP extern struct trap
736: #define EXTINT extern int
737: #define EXTBOOL extern bool
738: #define EXTCHAR extern char
739:
740: #ifdef BSD
741: #define flushout() ioctl(_tty_ch, TIOCFLUSH, 0)
742: #endif
743:
744: #ifdef ATT
745:
746: struct sgttyb {
747: char sg_ispeed; /* input speed */
748: char sg_ospeed; /* output speed */
749: char sg_erase; /* erase character */
750: char sg_kill; /* kill character */
751: int sg_flags; /* mode flags */
752: };
753:
754: struct sgttyb _tty;
755: #define flushout() ioctl(2, TCFLSH, 0)
756:
757: #endif
CVSweb