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

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

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

CVSweb