[BACK]Return to rogue.h CVS log [TXT][DIR] Up to [contributed] / early-roguelike / srogue

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