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

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

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

CVSweb