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

Annotation of early-roguelike/xrogue/rogue.h, Revision 1.1

1.1     ! rubenllo    1: /*
        !             2:     rogue.h - Rogue definitions and variable declarations
        !             3:
        !             4:     XRogue: Expeditions into the Dungeons of Doom
        !             5:     Copyright (C) 1991 Robert Pietkivitch
        !             6:     All rights reserved.
        !             7:
        !             8:     Based on "Advanced Rogue"
        !             9:     Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka and AT&T
        !            10:     All rights reserved.
        !            11:
        !            12:     Based on "Rogue: Exploring the Dungeons of Doom"
        !            13:     Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
        !            14:     All rights reserved.
        !            15:
        !            16:     See the file LICENSE.TXT for full copyright and licensing information.
        !            17: */
        !            18:
        !            19: #ifdef HAVE_CONFIG_H
        !            20: #include "config.h"
        !            21: #endif
        !            22:
        !            23: #include <assert.h>
        !            24: #define reg  register
        !            25: #undef lines
        !            26: #define ENCREAD encread
        !            27: #define ENCWRITE encwrite
        !            28: #undef SCROLL   /* UNIX/370 defines SCROLL for some bizarre reason */
        !            29: #define exfork fork     /* Standard fork with no paging available */
        !            30:
        !            31: /*
        !            32:  * Maximum number of different things
        !            33:  */
        !            34:
        !            35: #define MINCOLS         70
        !            36: #define MINLINES        22
        !            37: #define MAXROOMS        9
        !            38: #define MAXTHINGS       9
        !            39: #define MAXOBJ          9
        !            40: #define MAXSTATS        74      /* max total of all stats at startup */
        !            41: #define MAXPACK         27      /* max number of items in pack */
        !            42: #define MAXDOUBLE       14      /* max number of times exppts is doubled */
        !            43: #define MAXCONTENTS     20      /* max number of things beaker/book can hold */
        !            44: #define MAXENCHANT      30      /* max number of enchantments on an item */
        !            45: #define MAXTREAS        25      /* number monsters/treasure in treasure room */
        !            46: #define MAXTRAPS        20      /* max number of traps that may be on level */
        !            47: #define MAXTRPTRY       15      /* attempts/level allowed for setting traps */
        !            48: #define MAXDOORS        4       /* maximum doors to a room */
        !            49: #define MAXCHANTS       16      /* maximum number of chants for a druid */
        !            50: #define MAXPRAYERS      16      /* maximum number of prayers for cleric */
        !            51: #define MAXSPELLS       16      /* maximum number of spells for magician */
        !            52: #define MAXQUILL        14      /* scrolls the Quill of Nagrom can write */
        !            53: #define QUILLCHARGES    300     /* max num of charges in the Quill of Nagrom */
        !            54: #define NUM_CNAMES      26      /* number of names per character level */
        !            55: #define NUMMONST        211     /* current number of monsters */
        !            56: #define NUMUNIQUE       60      /* number of UNIQUEs (minus jacaranda) */
        !            57: #define NUMDINOS        30      /* number of dinosaurs (for OUTSIDE level) */
        !            58: #define NLEVMONS        3       /* number of new monsters per level */
        !            59: #define NUMSCORE        20      /* number of entries in score file */
        !            60: #define HARDER          40      /* at this level start making things harder */
        !            61: #define LINELEN         256     /* characters in a buffer */
        !            62: #define JUG_EMPTY       -1      /* signifys that the alchemy jug is empty */
        !            63: #define MAXPURCH        (pstats.s_charisma/3) /* num of purchases at t.post */
        !            64: #define MAXATT          50      /* charactor's attribute maximum number */
        !            65:
        !            66: /* Movement penalties */
        !            67: #define BACKPENALTY 3
        !            68: #define SHOTPENALTY 2           /* In line of sight of missile */
        !            69: #define DOORPENALTY 1           /* Moving out of current room */
        !            70:
        !            71: /*
        !            72:  * these defines are used in calls to get_item() to signify what
        !            73:  * it is we want
        !            74:  */
        !            75:
        !            76: #define ALL             -1
        !            77: #define WEARABLE        -2
        !            78: #define CALLABLE        -3
        !            79: #define WIELDABLE       -4
        !            80: #define USEABLE         -5
        !            81: #define IDENTABLE       -6
        !            82: #define REMOVABLE       -7
        !            83: #define PROTECTABLE     -8
        !            84: #define ZAPPABLE        -9
        !            85: #define READABLE        -10
        !            86: #define QUAFFABLE       -11
        !            87:
        !            88: /*
        !            89:  * stuff to do with encumberance
        !            90:  */
        !            91:
        !            92: #define NORMENCB        1400    /* normal encumberance */
        !            93: #define F_SATIATED       0      /* player's stomach is very full */
        !            94: #define F_OKAY           1      /* have plenty of food in stomach */
        !            95: #define F_HUNGRY         2      /* player is hungry */
        !            96: #define F_WEAK           3      /* weak from lack of food */
        !            97: #define F_FAINT          4      /* fainting from lack of food */
        !            98:
        !            99: /*
        !           100:  * actions a player/monster will take
        !           101:  */
        !           102:
        !           103: #define A_MOVE          0200    /* normal movement */
        !           104: #define A_FREEZE        0201    /* frozen in place */
        !           105: #define A_ATTACK        0202    /* trying to hit */
        !           106: #define A_SELL          0203    /* trying to sell goods */
        !           107: #define A_NIL           0204    /* not doing anything */
        !           108: #define A_BREATHE       0205    /* breathing */
        !           109: #define A_MISSILE       0206    /* Firing magic missiles */
        !           110: #define A_SONIC         0207    /* Sounding a sonic blast */
        !           111: #define A_SUMMON        0210    /* Summoning help */
        !           112: #define A_USERELIC      0211    /* Monster uses a relic */
        !           113: #define A_SLOW          0212    /* monster slows the player */
        !           114: #define A_ZAP           0213    /* monster shoots a wand */
        !           115: #define A_PICKUP        0214    /* player is picking something up */
        !           116: #define A_USEWAND       0215    /* monster is shooting a wand */
        !           117: #define A_THROW         't'
        !           118: #define C_CAST          'C'
        !           119: #define C_COUNT         '*'
        !           120: #define C_DIP           'D'
        !           121: #define C_DROP          'd'
        !           122: #define C_EAT           'e'
        !           123: #define C_PRAY          'p'
        !           124: #define C_CHANT         'c'
        !           125: #define C_QUAFF         'q'
        !           126: #define C_READ          'r'
        !           127: #define C_SEARCH        's'
        !           128: #define C_SETTRAP       '^'
        !           129: #define C_TAKEOFF       'T'
        !           130: #define C_USE           CTRL('U')
        !           131: #define C_WEAR          'W'
        !           132: #define C_WIELD         'w'
        !           133: #define C_ZAP           'z'
        !           134:
        !           135: /* Possible ways for the hero to move */
        !           136:
        !           137: #define H_TELEPORT 0
        !           138:
        !           139: /*
        !           140:  * return values for get functions
        !           141:  */
        !           142:
        !           143: #define NORM    0       /* normal exit */
        !           144: #define QUIT    1       /* quit option setting */
        !           145: #define MINUS   2       /* back up one option */
        !           146:
        !           147: /*
        !           148:  * The character types
        !           149:  */
        !           150:
        !           151: #define C_FIGHTER       0
        !           152: #define C_RANGER        1
        !           153: #define C_PALADIN       2
        !           154: #define C_MAGICIAN      3
        !           155: #define C_CLERIC        4
        !           156: #define C_THIEF         5
        !           157: #define C_ASSASSIN      6
        !           158: #define C_DRUID         7
        !           159: #define C_MONK          8
        !           160: #define C_MONSTER       9
        !           161: #define NUM_CHARTYPES   10
        !           162:
        !           163: /*
        !           164:  * define the ability types
        !           165:  */
        !           166:
        !           167: #define A_INTELLIGENCE  0
        !           168: #define A_STRENGTH      1
        !           169: #define A_WISDOM        2
        !           170: #define A_DEXTERITY     3
        !           171: #define A_CONSTITUTION  4
        !           172: #define A_CHARISMA      5
        !           173: #define NUMABILITIES    6
        !           174:
        !           175: /*
        !           176:  * values for games end
        !           177:  */
        !           178:
        !           179: #define UPDATE  -2
        !           180: #define SCOREIT -1
        !           181: #define KILLED   0
        !           182: #define CHICKEN  1
        !           183: #define WINNER   2
        !           184:
        !           185: /*
        !           186:  * definitions for function step_ok:
        !           187:  *      MONSTOK indicates it is OK to step on a monster -- it
        !           188:  *      is only OK when stepping diagonally AROUND a monster;
        !           189:  *      it is also OK if the stepper is a friendly monster and
        !           190:  *      is in a fighting mood.
        !           191:  */
        !           192:
        !           193: #define MONSTOK 1
        !           194: #define NOMONST 2
        !           195: #define FIGHTOK 3
        !           196:
        !           197: /*
        !           198:  * used for ring stuff
        !           199:  */
        !           200:
        !           201: #define LEFT_1          0
        !           202: #define LEFT_2          1
        !           203: #define LEFT_3          2
        !           204: #define LEFT_4          3
        !           205: #define RIGHT_1         4
        !           206: #define RIGHT_2         5
        !           207: #define RIGHT_3         6
        !           208: #define RIGHT_4         7
        !           209: #define NUM_FINGERS     8
        !           210:
        !           211: /*
        !           212:  * used for micellaneous magic (MM) stuff
        !           213:  */
        !           214:
        !           215: #define WEAR_BOOTS      0
        !           216: #define WEAR_BRACERS    1
        !           217: #define WEAR_CLOAK      2
        !           218: #define WEAR_GAUNTLET   3
        !           219: #define WEAR_JEWEL      4
        !           220: #define WEAR_NECKLACE   5
        !           221: #define NUM_MM          6
        !           222:
        !           223: /*
        !           224:     How to exit flags:
        !           225: */
        !           226:
        !           227: #define EXIT_CLS        1    /* Clear screen first */
        !           228: #define EXIT_ENDWIN     2    /* Shutdown Curses    */
        !           229:
        !           230:
        !           231: /*
        !           232:  * All the fun defines
        !           233:  */
        !           234:
        !           235: #define next(ptr) (*ptr).l_next
        !           236: #define prev(ptr) (*ptr).l_prev
        !           237: #define ldata(ptr) (*ptr).l_data
        !           238: #define inroom(rp, cp) (\
        !           239:     (cp)->x <= (rp)->r_pos.x + ((rp)->r_max.x - 1) && (rp)->r_pos.x <= (cp)->x \
        !           240:  && (cp)->y <= (rp)->r_pos.y + ((rp)->r_max.y - 1) && (rp)->r_pos.y <= (cp)->y)
        !           241: #define winat(y, x) (mvwinch(mw, y, x)==' '?mvwinch(stdscr, y, x):winch(mw))
        !           242: #define debug if (wizard) msg
        !           243: #define RN (((seed = seed*11109+13849) & 0x7fff) >> 1)
        !           244: #define unc(cp) (cp).y, (cp).x
        !           245: #define cmov(xy) move((xy).y, (xy).x)
        !           246: #define DISTANCE(y1, x1, y2, x2) ((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1))
        !           247: #define OBJPTR(what)    (struct object *)((*what).l_data)
        !           248: #define THINGPTR(what)  (struct thing *)((*what).l_data)
        !           249: #define DOORPTR(what)   (coord *)((*what).l_data)
        !           250: #define when break;case
        !           251: #define otherwise break;default
        !           252: #define until(expr) while(!(expr))
        !           253: #define ce(a, b) ((a).x == (b).x && (a).y == (b).y)
        !           254: #define draw(window) wrefresh(window)
        !           255: #define newfont(window) if (funfont) wattron(window, A_ALTCHARSET);
        !           256: #define nofont(window) if (funfont) wattroff(window, A_ALTCHARSET);
        !           257: #define hero player.t_pos
        !           258: #define pstats player.t_stats
        !           259: #define max_stats player.maxstats
        !           260: #define pack player.t_pack
        !           261: #define attach(a, b) _attach(&a, b)
        !           262: #define detach(a, b) _detach(&a, b)
        !           263: #define o_free_list(a) _o_free_list(&a)
        !           264: #define r_free_list(a) _r_free_list(&a)
        !           265: #define t_free_list(a) _t_free_list(&a)
        !           266: #undef min
        !           267: #undef max
        !           268: #define max(a, b) ((a) > (b) ? (a) : (b))
        !           269: #define min(a, b) ((a) < (b) ? (a) : (b))
        !           270: #define on(thing, flag) \
        !           271:     (((thing).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] & flag) != 0)
        !           272: #define off(thing, flag) \
        !           273:     (((thing).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] & flag) == 0)
        !           274: #define turn_on(thing, flag) \
        !           275:     ((thing).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] |= (flag & ~FLAGMASK))
        !           276: #define turn_off(thing, flag) \
        !           277:     ((thing).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] &= ~flag)
        !           278:
        !           279: /* define the control character */
        !           280:
        !           281: #undef CTRL
        !           282: #define CTRL(ch) (ch & 037)
        !           283:
        !           284: #define ALLOC(x) malloc((unsigned int) x)
        !           285: #define FREE(x) free((char *) x)
        !           286: #define EQSTR(a, b, c)  (strncmp(a, b, c) == 0)
        !           287: #define EQUAL(a, b)     (strcmp(a, b) == 0)
        !           288: #define GOLDCALC (rnd(50 + 10 * level) + 2)
        !           289: #define ISRING(h, r) (cur_ring[h] != NULL && cur_ring[h]->o_which == r)
        !           290: #define ISWEARING(r)    (ISRING(LEFT_1, r)  || ISRING(LEFT_2, r)  ||\
        !           291:                          ISRING(LEFT_3, r)  || ISRING(LEFT_4, r)  ||\
        !           292:                          ISRING(RIGHT_1, r) || ISRING(RIGHT_2, r) ||\
        !           293:              ISRING(RIGHT_3, r) || ISRING(RIGHT_4, r))
        !           294: #define newgrp() ++group
        !           295: #define o_charges o_ac
        !           296: #define o_kind o_ac
        !           297: #define ISMULT(type) (type == FOOD)
        !           298: #define isrock(ch) ((ch == WALL) || (ch == HORZWALL) || (ch == VERTWALL) || (ch == SECRETDOOR))
        !           299: #define is_stealth(tp) \
        !           300:     (rnd(25) < (tp)->t_stats.s_dext || (tp == &player && ISWEARING(R_STEALTH)))
        !           301:
        !           302: #define has_light(rp) (((rp)->r_flags & HASFIRE) || ISWEARING(R_LIGHT))
        !           303:
        !           304: #define mi_wght mi_worth
        !           305: #define mi_food mi_curse
        !           306:
        !           307: /*
        !           308:  * Ways to die
        !           309:  */
        !           310:
        !           311: #define D_PETRIFY       -1
        !           312: #define D_ARROW         -2
        !           313: #define D_DART          -3
        !           314: #define D_POISON        -4
        !           315: #define D_BOLT          -5
        !           316: #define D_SUFFOCATION   -6
        !           317: #define D_POTION        -7
        !           318: #define D_INFESTATION   -8
        !           319: #define D_DROWN         -9
        !           320: #define D_ROT           -10
        !           321: #define D_CONSTITUTION  -11
        !           322: #define D_STRENGTH      -12
        !           323: #define D_SIGNAL        -13
        !           324: #define D_CHOKE         -14
        !           325: #define D_STRANGLE      -15
        !           326: #define D_FALL          -16
        !           327: #define D_RELIC         -17
        !           328: #define D_STARVATION    -18
        !           329: #define D_FOOD_CHOKE    -19
        !           330: #define D_SCROLL        -20
        !           331: #define D_FRIGHT        -21
        !           332: #define D_CRYSTAL       -22
        !           333: #define D_CARD          -23
        !           334: #define DEATHNUM         23      /* number of ways to die */
        !           335:
        !           336: /*
        !           337:  * Things that appear on the screens
        !           338:  */
        !           339:
        !           340: #define WALL            ' '
        !           341: #define PASSAGE         '#'
        !           342: #define DOOR            '+'
        !           343: #define FLOOR           '.'
        !           344: #define HORZWALL        '-'
        !           345: #define VERTWALL        '|'
        !           346: #define VPLAYER         '@'
        !           347: #define IPLAYER         '_'
        !           348: #define POST            '^'
        !           349: #define TRAPDOOR        '>'
        !           350: #define ARROWTRAP       '{'
        !           351: #define SLEEPTRAP       '$'
        !           352: #define BEARTRAP        '}'
        !           353: #define TELTRAP         '~'
        !           354: #define DARTTRAP        '`'
        !           355: #define WORMHOLE        '<'
        !           356: #define POOL            '"'
        !           357: #define MAZETRAP        '\''
        !           358: #define SECRETDOOR      '&'
        !           359: #define STAIRS          '%'
        !           360: #define GOLD            '*'
        !           361: #define POTION          '!'
        !           362: #define SCROLL          '?'
        !           363: #define MAGIC           '$'
        !           364: #define BMAGIC          '>'     /*      Blessed magic   */
        !           365: #define CMAGIC          '<'     /*      Cursed  magic   */
        !           366: #define FOOD            ':'
        !           367: #define WEAPON          ')'
        !           368: #define MISSILE         '*'     /*      Magic Missile   */
        !           369: #define ARMOR           ']'
        !           370: #define MM              ';'
        !           371: #define RELIC           ','
        !           372: #define RING            '='
        !           373: #define STICK           '/'
        !           374: #define FOREST          '\\'
        !           375:
        !           376: /*
        !           377:  * Various constants
        !           378:  * Crypt() returns a different string on the PC for some silly reason
        !           379:  */
        !           380:
        !           381: #define PASSWD          "mT5uKwhm5WDRs"
        !           382: #define FIGHTBASE       10
        !           383: #define BEFORE          1
        !           384: #define AFTER           2
        !           385: #define ESC             27
        !           386: #define BOLT_LENGTH     12
        !           387: #define MARKLEN         20
        !           388: #define SLEEPTIME       (roll(15, 2))
        !           389: #define BEARTIME        (roll(15, 2))
        !           390: #define FREEZETIME      30
        !           391: #define HEALTIME        40
        !           392: #define SICKTIME        40
        !           393: #define MORETIME        80
        !           394: #define STOMACHSIZE     2100
        !           395: #define PAINTIME        (roll(15, 2))
        !           396: #define CLOAK_TIME      (roll(15, 2))
        !           397: #define CHILLTIME       (roll(15, 2))
        !           398: #define STONETIME       (roll(15, 2))
        !           399: #define SMELLTIME       (50+rnd(30))
        !           400: #define DUSTTIME        (50+rnd(30))
        !           401: #define STINKTIME       (50+rnd(30))
        !           402: #define HASTETIME       (50+rnd(30))
        !           403: #define HUHDURATION     (50+rnd(30))
        !           404: #define GONETIME        (50+rnd(30))
        !           405: #define SKILLDURATION   (50+rnd(30))
        !           406: #define SEEDURATION     (150+rnd(50))
        !           407: #define CLRDURATION     (150+rnd(50))
        !           408: #define FLYTIME         (150+rnd(50))
        !           409: #define PHASEDURATION   (150+rnd(50))
        !           410: #define ALCHEMYTIME     (250+rnd(100))
        !           411: #define FIRETIME        (180+roll(20, 2))
        !           412: #define COLDTIME        (180+roll(20, 2))
        !           413: #define BOLTTIME        (180+roll(20, 2))
        !           414: #define DAYLENGTH       700
        !           415: #define LEVEL           700  /* make depth of dungeon equal to DAYLENGTH */
        !           416: #define WANDERTIME      (max(5, (HARDER+rnd(25))-rnd(vlevel*2)))
        !           417: #define SPELLTIME       ((max(30-pstats.s_lvl,5)))
        !           418: #define vlevel          (max(level, turns/LEVEL + 1))
        !           419:
        !           420: /*
        !           421:  * Save against things
        !           422:  */
        !           423:
        !           424: #define VS_POISON               00
        !           425: #define VS_PARALYZATION         00
        !           426: #define VS_DEATH                00
        !           427: #define VS_PETRIFICATION        01
        !           428: #define VS_WAND                 02
        !           429: #define VS_BREATH               03
        !           430: #define VS_MAGIC                04
        !           431:
        !           432: /*
        !           433:  * attributes for treasures in dungeon
        !           434:  */
        !           435:
        !           436: #define ISCURSED               01
        !           437: #define ISKNOW                 02
        !           438: #define ISPOST                 04       /* object is in a trading post */
        !           439: #define ISMETAL               010
        !           440: #define ISPROT                020       /* object is protected */
        !           441: #define ISBLESSED             040
        !           442: #define ISPOISON             0100
        !           443: #define ISMISL             020000
        !           444: #define ISMANY             040000
        !           445:
        !           446: /*
        !           447:  * Various flag bits
        !           448:  */
        !           449:
        !           450: #define ISDARK                 01
        !           451: #define ISGONE                 02
        !           452: #define ISTREAS                04
        !           453: #define ISFOUND               010
        !           454: #define ISTHIEFSET            020
        !           455: #define FORCEDARK             040
        !           456:
        !           457: /*
        !           458:  * 1st set of creature flags (this might include player)
        !           459:  */
        !           460:
        !           461: #define ISBLIND         0x00000001
        !           462: #define ISINWALL        0x00000002
        !           463: #define ISRUN           0x00000004
        !           464: #define ISFLEE          0x00000008
        !           465: #define ISINVIS         0x00000010
        !           466: #define ISMEAN          0x00000020
        !           467: #define ISGREED         0x00000040
        !           468: #define CANSHOOT        0x00000080
        !           469: #define ISHELD          0x00000100
        !           470: #define ISHUH           0x00000200
        !           471: #define ISREGEN         0x00000400
        !           472: #define CANHUH          0x00000800
        !           473: #define CANSEE          0x00001000
        !           474: #define HASFIRE         0x00002000
        !           475: #define ISSLOW          0x00004000
        !           476: #define ISHASTE         0x00008000
        !           477: #define ISCLEAR         0x00010000
        !           478: #define CANINWALL       0x00020000
        !           479: #define ISDISGUISE      0x00040000
        !           480: #define CANBLINK        0x00080000
        !           481: #define CANSNORE        0x00100000
        !           482: #define HALFDAMAGE      0x00200000
        !           483: #define CANSUCK         0x00400000
        !           484: #define CANRUST         0x00800000
        !           485: #define CANPOISON       0x01000000
        !           486: #define CANDRAIN        0x02000000
        !           487: #define ISUNIQUE        0x04000000
        !           488: #define STEALGOLD       0x08000000
        !           489:
        !           490: /*
        !           491:  * Second set of flags
        !           492:  */
        !           493:
        !           494: #define STEALMAGIC      0x10000001
        !           495: #define CANDISEASE      0x10000002
        !           496: #define HASDISEASE      0x10000004
        !           497: #define CANSUFFOCATE    0x10000008
        !           498: #define DIDSUFFOCATE    0x10000010
        !           499: #define BOLTDIVIDE      0x10000020
        !           500: #define BLOWDIVIDE      0x10000040
        !           501: #define NOCOLD          0x10000080
        !           502: #define TOUCHFEAR       0x10000100
        !           503: #define BMAGICHIT       0x10000200
        !           504: #define NOFIRE          0x10000400
        !           505: #define NOBOLT          0x10000800
        !           506: #define CARRYGOLD       0x10001000
        !           507: #define CANITCH         0x10002000
        !           508: #define HASITCH         0x10004000
        !           509: #define DIDDRAIN        0x10008000
        !           510: #define WASTURNED       0x10010000
        !           511: #define CANSELL         0x10020000
        !           512: #define CANBLIND        0x10040000
        !           513: #define NOACID          0x10080000
        !           514: #define NOSLOW          0x10100000
        !           515: #define NOFEAR          0x10200000
        !           516: #define NOSLEEP         0x10400000
        !           517: #define NOPARALYZE      0x10800000
        !           518: #define NOGAS           0x11000000
        !           519: #define CANMISSILE      0x12000000
        !           520: #define CMAGICHIT       0x14000000
        !           521: #define CANPAIN         0x18000000
        !           522:
        !           523: /*
        !           524:  * Third set of flags
        !           525:  */
        !           526:
        !           527: #define CANSLOW         0x20000001
        !           528: #define CANTUNNEL       0x20000002
        !           529: #define TAKEWISDOM      0x20000004
        !           530: #define NOMETAL         0x20000008
        !           531: #define MAGICHIT        0x20000010
        !           532: #define CANINFEST       0x20000020
        !           533: #define HASINFEST       0x20000040
        !           534: #define NOMOVE          0x20000080
        !           535: #define CANSHRIEK       0x20000100
        !           536: #define CANDRAW         0x20000200
        !           537: #define CANSMELL        0x20000400
        !           538: #define CANPARALYZE     0x20000800
        !           539: #define CANROT          0x20001000
        !           540: #define ISSCAVENGE      0x20002000
        !           541: #define DOROT           0x20004000
        !           542: #define CANSTINK        0x20008000
        !           543: #define HASSTINK        0x20010000
        !           544: #define ISSHADOW        0x20020000
        !           545: #define CANCHILL        0x20040000
        !           546: #define CANHUG          0x20080000
        !           547: #define CANSURPRISE     0x20100000
        !           548: #define CANFRIGHTEN     0x20200000
        !           549: #define CANSUMMON       0x20400000
        !           550: #define TOUCHSTONE      0x20800000
        !           551: #define LOOKSTONE       0x21000000
        !           552: #define CANHOLD         0x22000000
        !           553: #define DIDHOLD         0x24000000
        !           554: #define DOUBLEDRAIN     0x28000000
        !           555:
        !           556: /*
        !           557:  * Fourth set of flags
        !           558:  */
        !           559:
        !           560: #define CANBRANDOM      0x30000001      /* Types of breath */
        !           561: #define CANBACID        0x30000002      /* acid */
        !           562: #define CANBFIRE        0x30000004      /* Fire */
        !           563: #define CANBCGAS        0x30000008      /* confusion gas */
        !           564: #define CANBBOLT        0x30000010      /* lightning bolt */
        !           565: #define CANBGAS         0x30000020      /* chlorine gas */
        !           566: #define CANBICE         0x30000040      /* ice */
        !           567: #define CANBFGAS        0x30000080      /* Fear gas */
        !           568: #define CANBPGAS        0x30000100      /* Paralyze gas */
        !           569: #define CANBSGAS        0x30000200      /* Sleeping gas */
        !           570: #define CANBSLGAS       0x30000400      /* Slow gas */
        !           571: #define CANBREATHE      0x300007ff      /* Can it breathe at all? */
        !           572:
        !           573: /*
        !           574:  * Fifth set of flags
        !           575:  */
        !           576:
        !           577: #define ISUNDEAD        0x40000001
        !           578: #define CANSONIC        0x40000002
        !           579: #define TURNABLE        0x40000004
        !           580: #define TAKEINTEL       0x40000008
        !           581: #define NOSTAB          0x40000010
        !           582: #define CANDISSOLVE     0x40000020
        !           583: #define ISFLY           0x40000040      /* creature can fly */
        !           584: #define CANTELEPORT     0x40000080      /* creature can teleport */
        !           585: #define CANEXPLODE      0x40000100      /* creature explodes when hit */
        !           586: #define CANDANCE        0x40000200      /* creature can make hero "dance" */
        !           587: #define ISDANCE         0x40000400      /* creature (hero) is dancing */
        !           588: #define CARRYFOOD       0x40000800
        !           589: #define CARRYSCROLL     0x40001000
        !           590: #define CARRYPOTION     0x40002000
        !           591: #define CARRYRING       0x40004000
        !           592: #define CARRYSTICK      0x40008000
        !           593: #define CARRYMISC       0x40010000
        !           594: #define CARRYMDAGGER    0x40020000      /* Dagger of Musty */
        !           595: #define CARRYCLOAK      0x40040000      /* Cloak of Emori */
        !           596: #define CARRYANKH       0x40080000      /* Ankh of Heil */
        !           597: #define CARRYSTAFF      0x40100000      /* Staff of Ming */
        !           598: #define CARRYWAND       0x40200000      /* Wand of Orcus */
        !           599: #define CARRYROD        0x40400000      /* Rod of Asmodeus */
        !           600: #define CARRYYAMULET    0x40800000      /* Amulet of Yendor */
        !           601: #define CARRYMANDOLIN   0x41000000      /* Mandolin of Brian */
        !           602: #define MISSEDDISP      0x42000000      /* Missed Cloak of Displacement */
        !           603: #define CANBSTAB        0x44000000      /* Can backstab */
        !           604: #define ISGUARDIAN      0x48000000      /* Guardian of a treasure room */
        !           605:
        !           606: /*
        !           607:  * Sixth set of flags
        !           608:  */
        !           609:
        !           610: #define CARRYHORN       0x50000001      /* Horn of Geryon */
        !           611: #define CARRYMSTAR      0x50000002      /* Morning Star of Hruggek */
        !           612: #define CARRYFLAIL      0x50000004      /* Flail of Yeenoghu */
        !           613: #define CARRYWEAPON     0x50000008      /* A generic weapon */
        !           614: #define CANAGE          0x50000010      /* can age you */
        !           615: #define CARRYDAGGER     0x50000020      /* carry's a dumb old dagger */
        !           616: #define AREMANY         0x50000040      /* they come in droves */
        !           617: #define CARRYEYE        0x50000080      /* has the eye of Vecna */
        !           618: #define HASSUMMONED     0x50000100      /* has already summoned */
        !           619: #define ISSTONE         0x50000200      /* has been turned to stone */
        !           620: #define NODETECT        0x50000400      /* detect monster will not show him */
        !           621: #define NOSTONE         0x50000800      /* creature made its save vrs stone */
        !           622: #define CARRYQUILL      0x50001000      /* has the quill of Nagrom */
        !           623: #define CARRYAXE        0x50002000      /* has the axe of Aklad */
        !           624: #define TOUCHSLOW       0x50004000      /* touch will slow hero */
        !           625: #define WASDISRUPTED    0x50008000      /* creature was disrupted by player */
        !           626: #define CARRYARMOR      0x50010000      /* creature will pick up armor */
        !           627: #define CARRYBAMULET    0x50020000      /* amulet of skoraus stonebones */
        !           628: #define CARRYSURTURRING 0x50040000      /* ring of Surtur */
        !           629: #define CARRYCARD       0x50080000      /* carry the card of Alteran */
        !           630: #define ISCHARMED       0x50100000      /* is the monster charmed? */
        !           631: #define ISFRIENDLY      0x50100000      /* monster friendly for any reason? */
        !           632:
        !           633: #define NEEDSTOACT      0x60000001      /* monster ready to act this turn n */
        !           634: #define ISDEAD          0x60000002      /* monster is dead                  */
        !           635: #define ISELSEWHERE     0x60000004      /* monster has been whisked away    */
        !           636:
        !           637: /* Masks for choosing the right flag */
        !           638:
        !           639: #define FLAGMASK     0xf0000000
        !           640: #define FLAGINDEX    0x0000000f
        !           641: #define FLAGSHIFT    28
        !           642: #define MAXFLAGS     25                 /* max initial flags per creature */
        !           643:
        !           644: /*
        !           645:  * Mask for cancelling special abilities
        !           646:  * The flags listed here will be the ones left on after the
        !           647:  * cancellation takes place
        !           648:  */
        !           649:
        !           650: #define CANC0MASK (     ISBLIND         | ISINWALL      | ISRUN         | \
        !           651:                         ISFLEE          | ISMEAN        | ISGREED       | \
        !           652:                         CANSHOOT        | ISHELD        | ISHUH         | \
        !           653:                         ISSLOW          | ISHASTE       | ISCLEAR       | \
        !           654:                         ISUNIQUE )
        !           655: #define CANC1MASK (     HASDISEASE      | DIDSUFFOCATE  | CARRYGOLD     | \
        !           656:                         HASITCH         | CANSELL       | DIDDRAIN      | \
        !           657:                         WASTURNED )
        !           658: #define CANC2MASK (     HASINFEST       | NOMOVE        | ISSCAVENGE    | \
        !           659:                         DOROT           | HASSTINK      | DIDHOLD )
        !           660: #define CANC3MASK (     CANBREATHE )
        !           661: #define CANC4MASK (     ISUNDEAD        | CANSONIC      | NOSTAB        | \
        !           662:                         ISFLY           | CARRYFOOD     | CANEXPLODE    | \
        !           663:                         ISDANCE         | CARRYSCROLL   | CARRYPOTION   | \
        !           664:                         CARRYRING       | CARRYSTICK    | CARRYMISC     | \
        !           665:                         CARRYMDAGGER    | CARRYCLOAK    | CARRYANKH     | \
        !           666:                         CARRYSTAFF      | CARRYWAND     | CARRYROD      | \
        !           667:                         CARRYYAMULET    | CARRYMANDOLIN | ISGUARDIAN )
        !           668: #define CANC5MASK (     CARRYHORN       | CARRYMSTAR    | CARRYFLAIL    | \
        !           669:                         CARRYEYE        | CARRYDAGGER   | HASSUMMONED   | \
        !           670:                         AREMANY         | CARRYWEAPON   | NOSTONE       | \
        !           671:                         CARRYQUILL      | CARRYAXE      | WASDISRUPTED  | \
        !           672:                         CARRYARMOR      | CARRYBAMULET  | CARRYSURTURRING )
        !           673: #define CANC6MASK (     CARRYCARD )
        !           674: #define CANC7MASK ( 0 )
        !           675: #define CANC8MASK ( 0 )
        !           676: #define CANC9MASK ( 0 )
        !           677: #define CANCAMASK ( 0 )
        !           678: #define CANCBMASK ( 0 )
        !           679: #define CANCCMASK ( 0 )
        !           680: #define CANCDMASK ( 0 )
        !           681: #define CANCEMASK ( 0 )
        !           682: #define CANCFMASK ( 0 )
        !           683:
        !           684: /* types of things */
        !           685:
        !           686: #define TYP_POTION      0
        !           687: #define TYP_SCROLL      1
        !           688: #define TYP_FOOD        2
        !           689: #define TYP_WEAPON      3
        !           690: #define TYP_ARMOR       4
        !           691: #define TYP_RING        5
        !           692: #define TYP_STICK       6
        !           693: #define TYP_MM          7
        !           694: #define TYP_RELIC       8
        !           695: #define NUMTHINGS       9
        !           696:
        !           697: /*
        !           698:  * food types
        !           699:  */
        !           700:
        !           701: #define E_RATION        0
        !           702: #define E_APPLE         1
        !           703: #define E_BANANA        2
        !           704: #define E_BLUEBERRY     3
        !           705: #define E_CANDLEBERRY   4
        !           706: #define E_CAPRIFIG      5
        !           707: #define E_DEWBERRY      6
        !           708: #define E_ELDERBERRY    7
        !           709: #define E_GOOSEBERRY    8
        !           710: #define E_GUANABANA     9
        !           711: #define E_HAGBERRY      10
        !           712: #define E_JABOTICABA    11
        !           713: #define E_PEACH         12
        !           714: #define E_PITANGA       13
        !           715: #define E_PRICKLEY      14
        !           716: #define E_RAMBUTAN      15
        !           717: #define E_SAPODILLA     16
        !           718: #define E_SOURSOP       17
        !           719: #define E_STRAWBERRY    18
        !           720: #define E_SWEETSOP      19
        !           721: #define E_WHORTLEBERRY  20
        !           722: #define E_SLIMEMOLD     21
        !           723: #define MAXFOODS        22
        !           724:
        !           725: /*
        !           726:  * Potion types
        !           727:  */
        !           728:
        !           729: #define P_CLEAR         0
        !           730: #define P_ABIL          1
        !           731: #define P_SEEINVIS      2
        !           732: #define P_HEALING       3
        !           733: #define P_MFIND         4
        !           734: #define P_TFIND         5
        !           735: #define P_RAISE         6
        !           736: #define P_HASTE         7
        !           737: #define P_RESTORE       8
        !           738: #define P_PHASE         9
        !           739: #define P_INVIS         10
        !           740: #define P_FLY           11
        !           741: #define P_FFIND         12
        !           742: #define P_SKILL         13
        !           743: #define P_FIRE          14
        !           744: #define P_COLD          15
        !           745: #define P_LIGHTNING     16
        !           746: #define P_POISON        17
        !           747: #define MAXPOTIONS      18
        !           748:
        !           749: /*
        !           750:  * Scroll types
        !           751:  */
        !           752:
        !           753: #define S_CONFUSE       0
        !           754: #define S_MAP           1
        !           755: #define S_LIGHT         2
        !           756: #define S_HOLD          3
        !           757: #define S_SLEEP         4
        !           758: #define S_ALLENCH       5
        !           759: #define S_IDENT         6
        !           760: #define S_SCARE         7
        !           761: #define S_GFIND         8
        !           762: #define S_TELEP         9
        !           763: #define S_CREATE        10
        !           764: #define S_REMOVE        11
        !           765: #define S_PETRIFY       12
        !           766: #define S_GENOCIDE      13
        !           767: #define S_CURING        14
        !           768: #define S_MAKEIT        15
        !           769: #define S_PROTECT       16
        !           770: #define S_FINDTRAPS     17
        !           771: #define S_RUNES         18
        !           772: #define S_CHARM         19
        !           773: #define MAXSCROLLS      20
        !           774:
        !           775: /*
        !           776:  * Weapon types
        !           777:  */
        !           778:
        !           779: #define MACE            0               /* mace */
        !           780: #define SWORD           1               /* long sword */
        !           781: #define BOW             2               /* short bow */
        !           782: #define ARROW           3               /* arrow */
        !           783: #define DAGGER          4               /* dagger */
        !           784: #define ROCK            5               /* rocks */
        !           785: #define TWOSWORD        6               /* two-handed sword */
        !           786: #define SLING           7               /* sling */
        !           787: #define DART            8               /* darts */
        !           788: #define CROSSBOW        9               /* crossbow */
        !           789: #define BOLT            10              /* crossbow bolt */
        !           790: #define SPEAR           11              /* spear */
        !           791: #define TRIDENT         12              /* trident */
        !           792: #define SPETUM          13              /* spetum */
        !           793: #define BARDICHE        14              /* bardiche */
        !           794: #define PIKE            15              /* pike */
        !           795: #define BASWORD         16              /* bastard sword */
        !           796: #define HALBERD         17              /* halberd */
        !           797: #define BATTLEAXE       18              /* battle axe */
        !           798: #define MAXWEAPONS      19              /* types of weapons */
        !           799: #define NONE            100             /* no weapon */
        !           800:
        !           801: /*
        !           802:  * Armor types
        !           803:  */
        !           804:
        !           805: #define LEATHER         0
        !           806: #define RING_MAIL       1
        !           807: #define STUDDED_LEATHER 2
        !           808: #define SCALE_MAIL      3
        !           809: #define PADDED_ARMOR    4
        !           810: #define CHAIN_MAIL      5
        !           811: #define SPLINT_MAIL     6
        !           812: #define BANDED_MAIL     7
        !           813: #define PLATE_MAIL      8
        !           814: #define PLATE_ARMOR     9
        !           815: #define MAXARMORS       10
        !           816:
        !           817: /*
        !           818:  * Ring types
        !           819:  */
        !           820:
        !           821: #define R_PROTECT       0
        !           822: #define R_ADDSTR        1
        !           823: #define R_SUSABILITY    2
        !           824: #define R_SEARCH        3
        !           825: #define R_SEEINVIS      4
        !           826: #define R_ALERT         5
        !           827: #define R_AGGR          6
        !           828: #define R_ADDHIT        7
        !           829: #define R_ADDDAM        8
        !           830: #define R_REGEN         9
        !           831: #define R_DIGEST        10
        !           832: #define R_TELEPORT      11
        !           833: #define R_STEALTH       12
        !           834: #define R_ADDINTEL      13
        !           835: #define R_ADDWISDOM     14
        !           836: #define R_HEALTH        15
        !           837: #define R_CARRY         16
        !           838: #define R_LIGHT         17
        !           839: #define R_DELUSION      18
        !           840: #define R_FEAR          19
        !           841: #define R_HEROISM       20
        !           842: #define R_FIRE          21
        !           843: #define R_WARMTH        22
        !           844: #define R_VAMPREGEN     23
        !           845: #define R_FREEDOM       24
        !           846: #define R_TELCONTROL    25
        !           847: #define MAXRINGS        26
        !           848:
        !           849: /*
        !           850:  * Rod/Wand/Staff types
        !           851:  */
        !           852:
        !           853: #define WS_LIGHT        0
        !           854: #define WS_HIT          1
        !           855: #define WS_ELECT        2
        !           856: #define WS_FIRE         3
        !           857: #define WS_COLD         4
        !           858: #define WS_POLYMORPH    5
        !           859: #define WS_MISSILE      6
        !           860: #define WS_SLOW_M       7
        !           861: #define WS_DRAIN        8
        !           862: #define WS_CHARGE       9
        !           863: #define WS_TELMON       10
        !           864: #define WS_CANCEL       11
        !           865: #define WS_CONFMON      12
        !           866: #define WS_DISINTEGRATE 13
        !           867: #define WS_PETRIFY      14
        !           868: #define WS_PARALYZE     15
        !           869: #define WS_MDEG         16
        !           870: #define WS_CURING       17
        !           871: #define WS_WONDER       18
        !           872: #define WS_FEAR         19
        !           873: #define MAXSTICKS       20
        !           874:
        !           875: /*
        !           876:  * miscellaneous magic items
        !           877:  */
        !           878:
        !           879: #define MM_JUG          0
        !           880: #define MM_BEAKER       1
        !           881: #define MM_BOOK         2
        !           882: #define MM_ELF_BOOTS    3
        !           883: #define MM_BRACERS      4
        !           884: #define MM_OPEN         5
        !           885: #define MM_HUNGER       6
        !           886: #define MM_DISP         7
        !           887: #define MM_PROTECT      8
        !           888: #define MM_DRUMS        9
        !           889: #define MM_DISAPPEAR    10
        !           890: #define MM_CHOKE        11
        !           891: #define MM_G_DEXTERITY  12
        !           892: #define MM_G_OGRE       13
        !           893: #define MM_JEWEL        14
        !           894: #define MM_KEOGHTOM     15
        !           895: #define MM_R_POWERLESS  16
        !           896: #define MM_FUMBLE       17
        !           897: #define MM_ADAPTION     18
        !           898: #define MM_STRANGLE     19
        !           899: #define MM_DANCE        20
        !           900: #define MM_SKILLS       21
        !           901: #define MM_CRYSTAL      22
        !           902: #define MAXMM           23
        !           903:
        !           904: /*
        !           905:  * Relic types
        !           906:  */
        !           907:
        !           908: #define MUSTY_DAGGER            0
        !           909: #define EMORI_CLOAK             1
        !           910: #define HEIL_ANKH               2
        !           911: #define MING_STAFF              3
        !           912: #define ORCUS_WAND              4
        !           913: #define ASMO_ROD                5
        !           914: #define YENDOR_AMULET           6
        !           915: #define BRIAN_MANDOLIN          7
        !           916: #define GERYON_HORN             8
        !           917: #define HRUGGEK_MSTAR           9
        !           918: #define YEENOGHU_FLAIL          10
        !           919: #define EYE_VECNA               11
        !           920: #define AXE_AKLAD               12
        !           921: #define QUILL_NAGROM            13
        !           922: #define STONEBONES_AMULET       14
        !           923: #define SURTUR_RING             15
        !           924: #define ALTERAN_CARD            16
        !           925: #define MAXRELIC                17
        !           926:
        !           927: #define MAXDAEMONS      10
        !           928: #define MAXFUSES        20
        !           929:
        !           930: struct delayed_action {
        !           931:     int d_type;
        !           932:     void (*d_func)();
        !           933:        union {
        !           934:                void *vp;
        !           935:                int  i;
        !           936:        } d_arg;
        !           937:     int d_time;
        !           938: };
        !           939:
        !           940: extern struct delayed_action d_list[MAXDAEMONS];
        !           941: extern struct delayed_action f_list[MAXFUSES];
        !           942: extern int demoncnt;        /* number of active daemons */
        !           943: extern int fusecnt;
        !           944:
        !           945: /* Now define the structures and types */
        !           946:
        !           947: /*
        !           948:  * character types
        !           949:  */
        !           950:
        !           951: struct character_types {
        !           952:     char        name[40];       /* name of character class              */
        !           953:     long        start_exp;      /* starting exp pts for 2nd level       */
        !           954:     long        cap;            /* stop doubling here                   */
        !           955:     int         hit_pts;        /* hit pts gained per level             */
        !           956:     int         base;           /* Base to-hit value (AC 10)            */
        !           957:     int         max_lvl;        /* Maximum level for changing value     */
        !           958:     int         factor;         /* Amount base changes each time        */
        !           959:     int         offset;         /* What to offset level                 */
        !           960:     int         range;          /* Range of levels for each offset      */
        !           961: };
        !           962:
        !           963: /*
        !           964:  * level types
        !           965:  */
        !           966:
        !           967: typedef enum {
        !           968:         NORMLEV,        /* normal level */
        !           969:         POSTLEV,        /* trading post level */
        !           970:         MAZELEV,        /* maze level */
        !           971:         OUTSIDE,        /* outside region */
        !           972:         STARTLEV        /* beginning of the game */
        !           973: } LEVTYPE;
        !           974:
        !           975: /*
        !           976:  * Help lists
        !           977:  */
        !           978:
        !           979: struct h_list {
        !           980:     char h_ch;
        !           981:     char h_desc[40];
        !           982: };
        !           983:
        !           984: struct item_list {
        !           985:     unsigned char item_ch;
        !           986:     char item_desc[40];
        !           987: };
        !           988:
        !           989: /*
        !           990:  * Coordinate data type
        !           991:  */
        !           992:
        !           993: typedef struct {
        !           994:     int x;
        !           995:     int y;
        !           996: } coord;
        !           997:
        !           998: /*
        !           999:  * structure for the ways to die
        !          1000:  */
        !          1001:
        !          1002: struct death_type {
        !          1003:     int reason;
        !          1004:     char name[30];
        !          1005: };
        !          1006:
        !          1007: /*
        !          1008:  * Linked list data type
        !          1009:  */
        !          1010:
        !          1011: struct linked_list {
        !          1012:     struct linked_list *l_next;
        !          1013:     struct linked_list *l_prev;
        !          1014:     char *l_data;                       /* Various structure pointers */
        !          1015: };
        !          1016:
        !          1017: /*
        !          1018:  * Stuff about magic items
        !          1019:  */
        !          1020:
        !          1021: struct magic_item {
        !          1022:     char mi_name[30];
        !          1023:     int  mi_prob;
        !          1024:     int  mi_worth;
        !          1025:     int  mi_curse;
        !          1026:     int  mi_bless;
        !          1027: };
        !          1028:
        !          1029: /*
        !          1030:  * Room structure
        !          1031:  */
        !          1032:
        !          1033: struct room {
        !          1034:     coord r_pos;                        /* Upper left corner */
        !          1035:     coord r_max;                        /* Size of room */
        !          1036:     long r_flags;                       /* Info about the room */
        !          1037:     struct linked_list *r_fires;        /* List of fire creatures in room */
        !          1038:     struct linked_list *r_exit;         /* Linked list of exits */
        !          1039: };
        !          1040:
        !          1041: /*
        !          1042:  * Array of all traps on this level
        !          1043:  */
        !          1044:
        !          1045: struct trap {
        !          1046:     unsigned char tr_type;              /* What kind of trap */
        !          1047:     unsigned char tr_show;              /* Where disguised trap looks like */
        !          1048:     coord tr_pos;                       /* Where trap is */
        !          1049:     long tr_flags;                      /* Info about trap (i.e. ISFOUND) */
        !          1050: };
        !          1051:
        !          1052: /*
        !          1053:  * Structure describing a fighting being
        !          1054:  */
        !          1055:
        !          1056: struct stats {
        !          1057:     short s_str;                        /* Strength */
        !          1058:     short s_intel;                      /* Intelligence */
        !          1059:     short s_wisdom;                     /* Wisdom */
        !          1060:     short s_dext;                       /* Dexterity */
        !          1061:     short s_const;                      /* Constitution */
        !          1062:     short s_charisma;                   /* Charisma */
        !          1063:     unsigned long s_exp;                /* Experience */
        !          1064:     int s_lvladj;                       /* how much level is adjusted */
        !          1065:     int s_lvl;                          /* Level of mastery */
        !          1066:     int s_arm;                          /* Armor class */
        !          1067:     int s_hpt;                          /* Hit points */
        !          1068:     int s_pack;                         /* current weight of his pack */
        !          1069:     int s_carry;                        /* max weight he can carry */
        !          1070:     char s_dmg[30];                      /* String describing damage done */
        !          1071: };
        !          1072:
        !          1073: /*
        !          1074:  * Structure describing a fighting being (monster at initialization)
        !          1075:  */
        !          1076:
        !          1077: struct mstats {
        !          1078:     short ms_str;                        /* Strength */
        !          1079:     short ms_dex;                        /* dexterity */
        !          1080:     short ms_move;                       /* movement rate */
        !          1081:     unsigned long ms_exp;                /* Experience */
        !          1082:     short ms_lvl;                        /* Level of mastery */
        !          1083:     short ms_arm;                        /* Armor class */
        !          1084:     char ms_hpt[9];                        /* Hit points */
        !          1085:     char ms_dmg[30];                      /* String describing damage done */
        !          1086: };
        !          1087:
        !          1088: /*
        !          1089:  * Structure for monsters and player
        !          1090:  */
        !          1091:
        !          1092: struct thing {
        !          1093:     bool t_wasshot;                     /* Was character shot last round? */
        !          1094:     unsigned char t_type;                        /* What it is */
        !          1095:     unsigned char t_disguise;                    /* What mimic looks like */
        !          1096:     unsigned char t_oldch;                       /* Character that was where it was */
        !          1097:     short t_ctype;                      /* Character type */
        !          1098:     short t_index;                      /* Index into monster table */
        !          1099:     short t_no_move;                    /* How long the thing can't move */
        !          1100:     short t_quiet;                      /* used in healing */
        !          1101:     short t_movement;                   /* Base movement rate */
        !          1102:     short t_action;                     /* Action we're waiting to do */
        !          1103:     short t_artifact;                   /* base chance of using artifact */
        !          1104:     short t_wand;                       /* base chance of using wands */
        !          1105:     short t_summon;                     /* base chance of summoning */
        !          1106:     short t_cast;                       /* base chance of casting a spell */
        !          1107:     short t_breathe;                    /* base chance to swing at player */
        !          1108:     char  *t_name;                      /* name player gave his pet */
        !          1109:     coord t_doorgoal;                   /* What door are we heading to? */
        !          1110:     coord *t_dest;                      /* Where it is running to */
        !          1111:     coord t_pos;                        /* Position */
        !          1112:     coord t_oldpos;                     /* Last position */
        !          1113:     coord t_newpos;                     /* Where we want to go */
        !          1114:     unsigned long t_flags[16];          /* State word */
        !          1115:     struct linked_list *t_pack;         /* What the thing is carrying */
        !          1116:        struct linked_list *t_using;        /* What the thing is using */
        !          1117:        int t_selection;
        !          1118:     struct stats t_stats;               /* Physical description */
        !          1119:     struct stats maxstats;              /* maximum(or initial) stats */
        !          1120:     int    t_reserved;                  /* reserved for save/restore code */
        !          1121: };
        !          1122:
        !          1123: /*
        !          1124:  * Array containing information on all the various types of monsters
        !          1125:  */
        !          1126:
        !          1127: struct monster {
        !          1128:     char m_name[30];                    /* What to call the monster */
        !          1129:     short m_carry;                      /* Probability of carrying something */
        !          1130:     bool m_normal;                      /* Does monster exist? */
        !          1131:     bool m_wander;                      /* Does monster wander? */
        !          1132:     char m_appear;                      /* What does monster look like? */
        !          1133:     char m_intel[8];                    /* Intelligence range */
        !          1134:     long m_flags[MAXFLAGS];             /* Things about the monster */
        !          1135:     char m_typesum[30];                 /* type of creature can he summon */
        !          1136:     short m_numsum;                     /* how many creatures can he summon */
        !          1137:     short m_add_exp;                    /* Added experience per hit point */
        !          1138:     struct mstats m_stats;              /* Initial stats */
        !          1139: };
        !          1140:
        !          1141: /*
        !          1142:  * Structure for a thing that the rogue can carry
        !          1143:  */
        !          1144:
        !          1145: struct object {
        !          1146:     int o_type;                         /* What kind of object it is */
        !          1147:     coord o_pos;                        /* Where it lives on the screen */
        !          1148:     char o_launch;                      /* What you need to launch it */
        !          1149:     char o_damage[8];                   /* Damage if used like sword */
        !          1150:     char o_hurldmg[8];                  /* Damage if thrown */
        !          1151:     struct linked_list *contents;       /* contents of this object */
        !          1152:     int o_count;                        /* Count for plural objects */
        !          1153:     int o_which;                        /* Which object of a type it is */
        !          1154:     int o_hplus;                        /* Plusses to hit */
        !          1155:     int o_dplus;                        /* Plusses to damage */
        !          1156:     int o_ac;                           /* Armor class */
        !          1157:     long o_flags;                       /* Information about objects */
        !          1158:     int o_group;                        /* Group number for this object */
        !          1159:     int o_weight;                       /* weight of this object */
        !          1160:     unsigned char o_mark[MARKLEN];               /* Mark the specific object */
        !          1161: };
        !          1162:
        !          1163: /*
        !          1164:  * weapon structure
        !          1165:  */
        !          1166:
        !          1167: struct init_weps {
        !          1168:     char w_name[20];            /* name of weapon */
        !          1169:     char w_dam[8];              /* hit damage */
        !          1170:     char w_hrl[8];              /* hurl damage */
        !          1171:     char w_launch;              /* need to launch it */
        !          1172:     int  w_flags;               /* flags */
        !          1173:     int  w_rate;                /* rate of fire */
        !          1174:     int  w_wght;                /* weight of weapon */
        !          1175:     int  w_worth;               /* worth of this weapon */
        !          1176: };
        !          1177:
        !          1178: /*
        !          1179:  * armor structure
        !          1180:  */
        !          1181:
        !          1182: struct init_armor {
        !          1183:         char a_name[30];        /* name of armor */
        !          1184:         int  a_prob;            /* chance of getting armor */
        !          1185:         int  a_class;           /* normal armor class */
        !          1186:         int  a_worth;           /* worth of armor */
        !          1187:         int  a_wght;            /* weight of armor */
        !          1188: };
        !          1189:
        !          1190: struct spells {
        !          1191:     short s_which;              /* which scroll or potion */
        !          1192:     short s_cost;               /* cost of casting spell */
        !          1193:     short s_type;               /* scroll or potion */
        !          1194:     int   s_flag;               /* is the spell blessed/cursed? */
        !          1195: };
        !          1196:
        !          1197: struct words
        !          1198: {
        !          1199:     char w_string[30];
        !          1200: };
        !          1201:
        !          1202: #define NAMELEN 80
        !          1203: #define SYSLEN 10
        !          1204: #define LOGLEN 9
        !          1205:
        !          1206: struct sc_ent {
        !          1207:     unsigned long       sc_score;
        !          1208:     char        sc_name[NAMELEN];
        !          1209:     char        sc_system[SYSLEN];
        !          1210:     char        sc_login[LOGLEN];
        !          1211:     short       sc_flags;
        !          1212:     short       sc_level;
        !          1213:     short       sc_ctype;
        !          1214:     short       sc_monster;
        !          1215:     short       sc_quest;
        !          1216: };
        !          1217:
        !          1218: /*
        !          1219:  * Other structures
        !          1220:  */
        !          1221:
        !          1222: void    _attach(struct linked_list **list, struct linked_list *item);
        !          1223: void    _detach(struct linked_list **list, struct linked_list *item);
        !          1224: void    _o_free_list(struct linked_list **ptr);
        !          1225: void    _r_free_fire_list(struct linked_list **ptr);
        !          1226: void    _r_free_list(struct linked_list **ptr);
        !          1227: void    _t_free_list(struct linked_list **ptr);
        !          1228: int     ac_compute(bool ignoremetal);
        !          1229: void    activity(void);
        !          1230: bool    add_pack(struct linked_list *item, bool silent);
        !          1231: void    add_slow(void);
        !          1232: void    addmsg(char *fmt, ...);
        !          1233: void    affect(void);
        !          1234: void    aggravate(bool do_uniques, bool do_good);
        !          1235: void    alchemy(struct object *obj);
        !          1236: void    appear(void);
        !          1237: bool    attack(struct thing *mp, struct object *weapon, bool thrown);
        !          1238: void    auto_save(int sig);
        !          1239: char    be_trapped(struct thing *th, coord *tc);
        !          1240: bool    blue_light(bool blessed, bool cursed);
        !          1241: void    buy_it(void);
        !          1242: void    byebye(int sig);
        !          1243: bool    can_blink(struct thing *tp);
        !          1244: int     can_shoot(coord *er, coord *ee, coord *shoot_dir);
        !          1245: bool    cansee(int y, int x);
        !          1246: void    carry_obj(struct thing *mp, int chance);
        !          1247: void    cast(void);
        !          1248: void    changeclass(int newclass);
        !          1249: void    chant(void);
        !          1250: void    chant_recovery(void);
        !          1251: void    chase(struct thing *tp, coord *ee, struct room *rer, struct room *ree,
        !          1252:               bool flee);
        !          1253: long    check_level(void);
        !          1254: void    check_residue(struct thing *tp);
        !          1255: void    chg_str(int amt);
        !          1256: void    choose_qst(void);
        !          1257: void    cloak_charge(struct object *obj);
        !          1258: void    command(void);
        !          1259: void    confus_player(void);
        !          1260: int     const_bonus(void);
        !          1261: void    corr_move(int dy, int dx);
        !          1262: struct linked_list *creat_item(void);
        !          1263: bool    creat_mons(struct thing *person, short monster, bool report);
        !          1264: void    create_obj(bool prompt, int which_item, int which_type);
        !          1265: void    cur_null(struct object *op);
        !          1266: void    cure_disease(void);
        !          1267: void    dbotline(WINDOW *scr, char *message);
        !          1268: void    death(short monst);
        !          1269: void    del_pack(struct linked_list *item);
        !          1270: void    destroy_item(struct linked_list *item);
        !          1271: int     dex_compute(void);
        !          1272: int     dext_plus(int dexterity);
        !          1273: int     dext_prot(int dexterity);
        !          1274: bool    diag_ok(coord *sp, coord *ep, struct thing *flgptr);
        !          1275: void    dip_it(void);
        !          1276: void    do_chase(struct thing *th);
        !          1277: void    do_daemons(int flag);
        !          1278: void    do_fuses(int flag);
        !          1279: void    do_maze(void);
        !          1280: void    do_motion(struct object *obj, int ydelta, int xdelta, struct thing *tp);
        !          1281: void    do_move(int dy, int dx);
        !          1282: void    do_panic(int who);
        !          1283: void    do_passages(void);
        !          1284: void    do_post(bool startup);
        !          1285: void    do_rooms(void);
        !          1286: void    do_run(char ch);
        !          1287: void    do_teleport(void);
        !          1288: void    do_terrain(int basey, int basex, int deltay, int deltax, bool fresh);
        !          1289: void    do_zap(struct thing *zapper, struct object *obj, coord *direction,
        !          1290:                int which, int flags);
        !          1291: void    doctor(struct thing *tp);
        !          1292: coord  *doorway(struct room *rp, coord *door);
        !          1293: void    draw_room(struct room *rp);
        !          1294: bool    drop(struct linked_list *item);
        !          1295: bool    dropcheck(struct object *op);
        !          1296: void    dsrpt_monster(struct thing *tp, bool always, bool see_him);
        !          1297: void    dsrpt_player(void);
        !          1298: void    dust_appear(void);
        !          1299: void    eat(void);
        !          1300: void    eat_gold(struct object *obj);
        !          1301: int     effect(struct thing *att, struct thing *def, struct object *weap,
        !          1302:                bool thrown, bool see_att, bool see_def);
        !          1303: long    encread(char *start, unsigned long size, FILE *inf);
        !          1304: long    encwrite(char *start, unsigned long size, FILE *outf);
        !          1305: void    endit(int sig);
        !          1306: void    endmsg(void);
        !          1307: void    exit_game(int flag);
        !          1308: void    explode(struct thing *tp);
        !          1309: void    extinguish(void (*dfunc)());
        !          1310: void    fall(struct linked_list *item, bool pr);
        !          1311: coord  *fallpos(coord *pos, bool be_clear, int range);
        !          1312: void    fatal(char *s);
        !          1313: bool    fight(coord *mp, struct object *weap, bool thrown);
        !          1314: struct linked_list *find_mons(int y, int x);
        !          1315: struct linked_list *find_obj(int y, int x);
        !          1316: struct delayed_action *find_slot(void (*func)());
        !          1317: int     findmindex(char *name);
        !          1318: void    fix_stick(struct object *cur);
        !          1319: void    fright(struct thing *th);
        !          1320: void    fumble(void);
        !          1321: void    fuse(void (*dfunc)(), void *arg, int time, int type);
        !          1322: void    genmonsters(int least, bool treas);
        !          1323: coord   get_coordinates(void);
        !          1324: bool    get_dir(coord *direction);
        !          1325: struct linked_list *get_hurl(struct thing *tp);
        !          1326: struct linked_list *get_item(struct linked_list *list, char *purpose, int type,
        !          1327:                              bool askfirst, bool showcost);
        !          1328: int     get_str(char *opt, WINDOW *win);
        !          1329: long    get_worth(struct object *obj);
        !          1330: int     getdeath(void);
        !          1331: bool    getdelta(char match, int *dy, int *dx);
        !          1332: void    give(struct thing *th);
        !          1333: int     grab(int y, int x);
        !          1334: void    gsense(void);
        !          1335: void    help(void);
        !          1336: bool    hit_monster(int y, int x, struct object *obj, struct thing *tp);
        !          1337: int     hitweight(void);
        !          1338: void    idenpack(void);
        !          1339: void    ident_hero(void);
        !          1340: void    identify(unsigned char ch);
        !          1341: void    init_colors(void);
        !          1342: void    init_foods(void);
        !          1343: void    init_materials(void);
        !          1344: void    init_misc(void);
        !          1345: void    init_names(void);
        !          1346: void    init_player(void);
        !          1347: void    init_stones(void);
        !          1348: void    init_terrain(void);
        !          1349: void    init_things(void);
        !          1350: void    init_weapon(struct object *weap, char type);
        !          1351: char   *inv_name(struct object *obj, bool drop);
        !          1352: bool    inventory(struct linked_list *list, int type);
        !          1353: bool    invisible(struct thing *monst);
        !          1354: bool    is_current(struct object *obj);
        !          1355: bool    is_magic(struct object *obj);
        !          1356: bool    isatrap(char ch);
        !          1357: int     itemweight(struct object *wh);
        !          1358: void    kill_daemon(void (*dfunc)());
        !          1359: void    killed(struct linked_list *item, bool pr, bool points, bool treasure);
        !          1360: void    land(void);
        !          1361: void    lengthen(void (*dfunc)(), int xtime);
        !          1362: void    light(coord *cp);
        !          1363: bool    lit_room(struct room *rp);
        !          1364: void    look(bool wakeup, bool runend);
        !          1365: void    lower_level(short who);
        !          1366: void    m_use_relic(struct thing *monster);
        !          1367: void    m_use_wand(struct thing *monster);
        !          1368: void    make_sell_pack(struct thing *tp);
        !          1369: short   makemonster(bool showall, char *action);
        !          1370: bool    maze_view(int y, int x);
        !          1371: int     misc_name(char *str, struct object *obj);
        !          1372: void    missile(int ydelta, int xdelta, struct linked_list *item,
        !          1373:                 struct thing *tp);
        !          1374: char   *monster_name(struct thing *tp);
        !          1375: bool    move_hero(int why);
        !          1376: short   movement(struct thing *tp);
        !          1377: void    msg(char *fmt, ...);
        !          1378: void    nameitem(struct linked_list *item, bool mark);
        !          1379: bool    need_dir(int type, int which);
        !          1380: char   *new(int size);
        !          1381: struct linked_list *new_item(int size);
        !          1382: void    new_level(LEVTYPE ltype);
        !          1383: void    new_monster(struct linked_list *item, short type, coord *cp,
        !          1384:                     bool max_monster);
        !          1385: struct linked_list *new_thing(int thing_type, bool allow_curse);
        !          1386: void    nobolt(void);
        !          1387: void    nocold(void);
        !          1388: void    nofire(void);
        !          1389: void    nohaste(void);
        !          1390: void    noslow(void);
        !          1391: char   *num(int n1, int n2);
        !          1392: void    o_discard(struct linked_list *item);
        !          1393: void    opt_player(void);
        !          1394: void    option(void);
        !          1395: void    over_win(WINDOW *oldwin, WINDOW *newin, int maxy, int maxx, int cursory,
        !          1396:                  int cursorx, char redraw);
        !          1397: char    pack_char(struct linked_list *list, struct object *obj);
        !          1398: void    parse_opts(char *str);
        !          1399: bool    passwd(void);
        !          1400: void    picky_inven(void);
        !          1401: bool    player_zap(int which, int flag);
        !          1402: void    playit(void);
        !          1403: void    pray(void);
        !          1404: void    prayer_recovery(void);
        !          1405: bool    price_it(void);
        !          1406: char   *prname(char *who, bool upper);
        !          1407: void    quaff(int which, int kind, int flags, bool is_potion);
        !          1408: void    quill_charge(void);
        !          1409: void    quit(int sig);
        !          1410: void    raise_level(void);
        !          1411: short   randmonster(bool wander, bool no_unique);
        !          1412: void    read_scroll(int which, int flag, bool is_scroll);
        !          1413: void    reap(void);
        !          1414: void    res_strength(long howmuch);
        !          1415: bool    restore(char *file, char *envp[]);
        !          1416: void    restscr(WINDOW *scr);
        !          1417: int     ring_eat(int hand);
        !          1418: char   *ring_num(struct object *obj);
        !          1419: void    ring_on(struct linked_list *item);
        !          1420: void    ring_search(void);
        !          1421: void    ring_teleport(void);
        !          1422: int     ring_value(int type);
        !          1423: void    rmmsg(void);
        !          1424: int     rnd(int range);
        !          1425: void    rnd_pos(struct room *rp, coord *cp);
        !          1426: int     rnd_room(void);
        !          1427: coord   rndmove(struct thing *who);
        !          1428: int     roll(int number, int sides);
        !          1429: void    rollwand(void);
        !          1430: struct room *roomin(coord *cp);
        !          1431: int     runners(int segments);
        !          1432: void    runto(struct thing *runner, coord *spot);
        !          1433: bool    save(int which, struct thing *who, int adj);
        !          1434: bool    save_game(void);
        !          1435: char    secretdoor(int y, int x);
        !          1436: void    score(unsigned long amount, int flags, short monst);
        !          1437: void    search(bool is_thief, bool door_chime);
        !          1438: void    sell(struct thing *tp);
        !          1439: void    sell_it(void);
        !          1440: void    set_trap(struct thing *tp, int y, int x);
        !          1441: void    setup(void);
        !          1442: void    shoot_bolt(struct thing *shooter, coord start, coord dir,
        !          1443:                    bool get_points, short reason, char *name, int damage);
        !          1444: bool    shoot_ok(int ch);
        !          1445: char    show(int y, int x);
        !          1446: void    sight(void);
        !          1447: bool    skirmish(struct thing *attacker, coord *mp, struct object *weap,
        !          1448:                  bool thrown);
        !          1449: struct linked_list *spec_item(int type, int which, int hit, int damage);
        !          1450: void    spell_recovery(void);
        !          1451: void    start_daemon(void (*dfunc)(), void *arg, int type);
        !          1452: void    status(bool display);
        !          1453: void    steal(void);
        !          1454: bool    step_ok(int y, int x, int can_on_monst, struct thing *flgptr);
        !          1455: void    stomach(void);
        !          1456: int     str_compute(void);
        !          1457: int     str_plus(short str);
        !          1458: void    strangle(void);
        !          1459: void    strucpy(char *s1, char *s2, int len);
        !          1460: void    suffocate(void);
        !          1461: void    swander(void);
        !          1462: bool    swing(short class, int at_lvl, int op_arm, int wplus);
        !          1463: void    take_off(void);
        !          1464: void    take_with(void);
        !          1465: void    teleport(void);
        !          1466: void    total_winner(void);
        !          1467: int     totalenc(struct thing *tp);
        !          1468: char   *tr_name(char ch);
        !          1469: struct trap *trap_at(int y, int x);
        !          1470: void    trap_look(void);
        !          1471: void    unchoke(void);
        !          1472: void    unclrhead(void);
        !          1473: void    unconfuse(void);
        !          1474: void    undance(void);
        !          1475: void    unphase(void);
        !          1476: void    unsee(void);
        !          1477: void    unskill(void);
        !          1478: void    unstink(void);
        !          1479: void    updpack(int getmax, struct thing *tp);
        !          1480: int     usage_time(struct linked_list *item);
        !          1481: void    use_mm(int which);
        !          1482: char   *vowelstr(char *str);
        !          1483: void    wait_for(char ch);
        !          1484: struct linked_list *wake_monster(int y, int x);
        !          1485: void    wake_room(struct room *rp);
        !          1486: void    wanderer(void);
        !          1487: void    waste_time(void);
        !          1488: int     weap_move(struct thing *wielder, struct object *weap);
        !          1489: char   *weap_name(struct object *obj);
        !          1490: void    wear(void);
        !          1491: void    wghtchk(void);
        !          1492: void    whatis(struct linked_list *what);
        !          1493: void    wield(void);
        !          1494: struct linked_list *wield_weap(struct object *thrown, struct thing *mp);
        !          1495: void    writelog(unsigned long amount, int flags, short monst);
        !          1496: void    xsense(void);
        !          1497:
        !          1498: char *getenv(), *misc_num();
        !          1499:
        !          1500: int usage_time();
        !          1501:
        !          1502: void    tstp();
        !          1503:
        !          1504: int     md_getuid(void);
        !          1505: long    md_memused(void);
        !          1506: void    md_normaluser(void);
        !          1507: int     md_rand(int range);
        !          1508: unsigned int md_random_seed(void);
        !          1509: void    md_setup(void);
        !          1510: int     md_shellescape(void);
        !          1511: void    md_srand(int seed);
        !          1512:
        !          1513: /*
        !          1514:  * Now all the global variables
        !          1515:  */
        !          1516:
        !          1517: extern struct trap traps[];
        !          1518: extern struct character_types char_class[];  /* character classes */
        !          1519: extern struct room rooms[];             /* One for each room -- A level */
        !          1520: extern struct room *oldrp;              /* Roomin(&oldpos) */
        !          1521: extern struct linked_list *mlist;       /* List of monsters on the level */
        !          1522: extern struct linked_list *tlist;       /* list of monsters fallen down traps */
        !          1523: extern struct linked_list *rlist;       /* list of monsters that have died    */
        !          1524: extern struct death_type deaths[];      /* all the ways to die */
        !          1525: extern struct thing player;             /* The rogue */
        !          1526: extern struct monster monsters[NUMMONST+1];       /* The initial monster states */
        !          1527: extern struct linked_list *lvl_obj;     /* List of objects on this level */
        !          1528: extern struct linked_list *monst_dead;  /* Indicates monster that got killed */
        !          1529: extern struct object *cur_weapon;       /* Which weapon he is weilding */
        !          1530: extern struct object *cur_armor;        /* What a well dresssed rogue wears */
        !          1531: extern struct object *cur_ring[];       /* Which rings are being worn */
        !          1532: extern struct object *cur_misc[];       /* which MM's are in use */
        !          1533: extern struct magic_item things[];      /* Chances for each type of item */
        !          1534: extern struct magic_item s_magic[];     /* Names and chances for scrolls */
        !          1535: extern struct magic_item p_magic[];     /* Names and chances for potions */
        !          1536: extern struct magic_item r_magic[];     /* Names and chances for rings */
        !          1537: extern struct magic_item ws_magic[];    /* Names and chances for sticks */
        !          1538: extern struct magic_item m_magic[];     /* Names and chances for MM */
        !          1539: extern struct magic_item rel_magic[];   /* Names and chances for relics */
        !          1540: extern struct magic_item foods[];       /* Names and chances for foods */
        !          1541: extern struct spells magic_spells[];    /* spells for magicians */
        !          1542: extern struct spells cleric_spells[];   /* spells for clerics */
        !          1543: extern struct spells druid_spells[];    /* spells for druids */
        !          1544: extern struct spells quill_scrolls[];   /* scrolls for quill */
        !          1545: extern const char *cnames[][NUM_CNAMES];      /* Character level names */
        !          1546: extern struct words abilities[NUMABILITIES];   /* Names of the various abilities */
        !          1547: extern char curpurch[];                 /* name of item ready to buy */
        !          1548: extern char PLAYER;                     /* what the player looks like */
        !          1549: extern int nfloors;                     /* Number of floors in this dungeon */
        !          1550: extern int cols;                        /* number of columns on terminal */
        !          1551: extern int lines;                       /* number of lines in terminal */
        !          1552: extern int char_type;                   /* what type of character is player */
        !          1553: extern int foodlev;                     /* how fast he eats food */
        !          1554: extern int level;                       /* What level rogue is on */
        !          1555: extern int trader;                      /* number of purchases */
        !          1556: extern int curprice;                    /* price of an item */
        !          1557: extern long purse;                      /* How much gold the rogue has */
        !          1558: extern int mpos;                        /* Where cursor is on top line */
        !          1559: extern int ntraps;                      /* Number of traps on this level */
        !          1560: extern int inpack;                      /* Number of things in pack */
        !          1561: extern int total;                       /* Total dynamic memory bytes */
        !          1562: extern int lastscore;                   /* Score before this turn */
        !          1563: extern int no_food;                     /* Number of levels without food */
        !          1564: extern int foods_this_level;            /* num of foods this level */
        !          1565: extern int seed;                        /* Random number seed */
        !          1566: extern int count;                       /* Number of times to repeat command */
        !          1567: extern int max_level;                   /* Deepest player has gone */
        !          1568: extern int cur_max;                     /* Deepest player has gone currently */
        !          1569: extern int prev_max;                    /* A flag for worm hole */
        !          1570: extern int move_free;                   /* Free movement check */
        !          1571: extern int food_left;                   /* Amount of food in hero's stomach */
        !          1572: extern int group;                       /* Current group number */
        !          1573: extern int hungry_state;                /* How hungry is he */
        !          1574: extern int infest_dam;                  /* Damage from parasites */
        !          1575: extern int lost_str;                    /* Amount of strength lost */
        !          1576: extern int hold_count;                  /* Number of monsters holding player */
        !          1577: extern int trap_tries;                  /* Number of attempts to set traps */
        !          1578: extern int chant_time;                  /* Number of chant points/exp level */
        !          1579: extern int pray_time;                   /* Number of prayer points/exp level */
        !          1580: extern int spell_power;                 /* Spell power left at this level */
        !          1581: extern long turns;                      /* Number of turns player has taken */
        !          1582: extern int quest_item;                  /* Item hero is looking for */
        !          1583: extern int cur_relic[];                 /* Current relics */
        !          1584: extern char take;                       /* Thing the rogue is taking */
        !          1585: extern char prbuf[];                    /* Buffer for sprintfs */
        !          1586: extern char outbuf[];                   /* Output buffer for stdout */
        !          1587: extern char runch;                      /* Direction player is running */
        !          1588: extern char *s_names[];                 /* Names of the scrolls */
        !          1589: extern char *p_colors[];                /* Colors of the potions */
        !          1590: extern char *r_stones[];                /* Stone settings of the rings */
        !          1591: extern struct init_weps weaps[];        /* weapons and attributes */
        !          1592: extern struct init_armor armors[];      /* armors and attributes */
        !          1593: extern char *ws_made[];                 /* What sticks are made of */
        !          1594: extern char *release;                   /* Release number of rogue */
        !          1595: extern char whoami[];                   /* Name of player */
        !          1596: extern char fruit[];                    /* Favorite fruit */
        !          1597: extern char huh[];                      /* The last message printed */
        !          1598: extern char *s_guess[];                 /* Players guess at what scroll is */
        !          1599: extern char *p_guess[];                 /* Players guess at what potion is */
        !          1600: extern char *r_guess[];                 /* Players guess at what ring is */
        !          1601: extern char *ws_guess[];                /* Players guess at what wand is */
        !          1602: extern char *m_guess[];                 /* Players guess at what MM is */
        !          1603: extern char *ws_type[];                 /* Is it a wand or a staff */
        !          1604: extern char file_name[];                /* Save file name */
        !          1605: extern char score_file[];               /* Score file name */
        !          1606: extern char home[];                     /* User's home directory */
        !          1607: extern WINDOW *cw;                      /* Window that the player sees */
        !          1608: extern WINDOW *hw;                      /* Used for the help command */
        !          1609: extern WINDOW *mw;                      /* Used to store mosnters */
        !          1610: extern WINDOW *msgw;                    /* Message window */
        !          1611: extern bool pool_teleport;              /* just teleported from a pool */
        !          1612: extern bool inwhgt;                     /* true if from wghtchk() */
        !          1613: extern bool running;                    /* True if player is running */
        !          1614: extern bool playing;                    /* True until he quits */
        !          1615: extern bool wizard;                     /* True if allows wizard commands */
        !          1616: extern bool after;                      /* True if we want after daemons */
        !          1617: extern bool notify;                     /* True if player wants to know */
        !          1618: extern bool fight_flush;                /* True if toilet input */
        !          1619: extern bool terse;                      /* True if we should be short */
        !          1620: extern bool auto_pickup;                /* Pick up things automatically? */
        !          1621: extern bool menu_overlay;               /* Use overlay type menu */
        !          1622: extern bool door_stop;                  /* Stop running when we pass a door */
        !          1623: extern bool jump;                       /* Show running as series of jumps */
        !          1624: extern bool slow_invent;                /* Inventory one line at a time */
        !          1625: extern bool def_attr;                   /* True for default attributes */
        !          1626: extern bool firstmove;                  /* First move after setting door_stop */
        !          1627: extern bool waswizard;                  /* Was a wizard sometime */
        !          1628: extern bool askme;                      /* Ask about unidentified things */
        !          1629: extern bool use_savedir;                /* Use common save location */
        !          1630: extern bool s_know[];                   /* Does he know what a scroll does */
        !          1631: extern bool p_know[];                   /* Does he know what a potion does */
        !          1632: extern bool r_know[];                   /* Does he know what a ring does */
        !          1633: extern bool ws_know[];                  /* Does he know what a stick does */
        !          1634: extern bool m_know[];                   /* Does he know what a MM does */
        !          1635: extern bool in_shell;                   /* True if executing a shell */
        !          1636: extern bool daytime;                    /* Indicates whether it is daytime */
        !          1637: extern bool funfont;                    /* Is fun font available? */
        !          1638: extern coord oldpos;                    /* Position before last look() call */
        !          1639: extern coord grid[];                    /* used for random pos generation */
        !          1640: extern char *nothing;                   /* "Nothing seems to happen." */
        !          1641: extern char *spacemsg;
        !          1642: extern char *morestr;
        !          1643: extern char *retstr;
        !          1644: extern FILE *scorefi;
        !          1645: extern FILE *logfile;
        !          1646: extern LEVTYPE levtype;
        !          1647: extern int (*add_abil[NUMABILITIES])(int); /* Functions to change abilities */
        !          1648: extern int mf_count;       /* move_free counter - see actions.c(m_act()) */
        !          1649: extern int mf_jmpcnt;      /* move_free counter for # of jumps        */
        !          1650: extern int killed_chance;  /* cumulative chance for goodies to loose it, fight.c */
        !          1651: extern coord move_nh;        /* move.c */
        !          1652: #define NCOLORS 32
        !          1653: #define NSYLLS  127
        !          1654: #define NSTONES 47
        !          1655: #define NWOOD 24
        !          1656: #define NMETAL 16
        !          1657: extern struct words rainbow[NCOLORS];
        !          1658: extern struct words sylls[NSYLLS];
        !          1659: extern struct words stones[NSTONES];
        !          1660: extern struct words wood[NWOOD];
        !          1661: extern struct words metal[NMETAL];
        !          1662:

CVSweb