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

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

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

CVSweb