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

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

1.1       rubenllo    1: /*
                      2:     rogue.h - A very large header file
                      3:
                      4:     UltraRogue: The Ultimate Adventure in the Dungeons of Doom
                      5:     Copyright (C) 1984, 1991, 1997 Herb Chong
                      6:     All rights reserved.
                      7:
                      8:     Based on "Advanced Rogue"
                      9:     Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka
                     10:     All rights reserved.
                     11:
                     12:     Based on "Rogue: Exploring the Dungeons of Doom"
                     13:     Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
                     14:     All rights reserved.
                     15:
                     16:     See the file LICENSE.TXT for full copyright and licensing information.
                     17: */
                     18:
                     19: #include <signal.h>
                     20: #include <stdio.h>
                     21: #include <stdarg.h>
                     22:
                     23: #ifndef LINT
                     24: #include <curses.h>
                     25: #else
                     26: #include "lint-curses.h"
                     27: #endif
                     28:
                     29: #define SHOTPENALTY 2       /* In line of sight of missile */
                     30: #define DOORPENALTY 1       /* Moving out of current room */
                     31:
                     32: /* Maximum number of different things */
                     33: #define MAXROOMS    9   /* max rooms per normal level */
                     34: #define MAXDOORS    4   /* max doors to a room */
                     35: #define MAXOBJ      6   /* max number of items to find on a level */
                     36: #define MAXTREAS    30  /* max number monsters/treasure in treasure room */
                     37: #define MAXTRAPS    80  /* max traps per level */
                     38: #define MAXTRPTRY   16  /* max attempts/level allowed for setting traps */
                     39: #define MAXPURCH    8   /* max purchases per trading post visit */
                     40: #define NUMMONST    (sizeof(monsters) / sizeof(struct monster) - 2)
                     41: #define NUMSUMMON   48  /* number of creatures that can summon hero */
                     42: #define NLEVMONS    8   /* number of new monsters per level */
                     43: #define LINELEN     512 /* characters in a buffer */
                     44:
                     45: /* The character types */
                     46: #define C_FIGHTER    0
                     47: #define C_PALADIN    1
                     48: #define C_RANGER     2
                     49: #define C_CLERIC     3
                     50: #define C_DRUID      4
                     51: #define C_MAGICIAN   5
                     52: #define C_ILLUSION   6
                     53: #define C_THIEF      7
                     54: #define C_ASSASIN    8
                     55: #define C_NINJA      9
                     56: #define C_MONSTER   10
                     57: #define C_NOTSET    11  /* Must not be a value from above */
                     58:
                     59: /* used for ring stuff */
                     60: #define LEFT_1  0
                     61: #define LEFT_2  1
                     62: #define LEFT_3  2
                     63: #define LEFT_4  3
                     64: #define LEFT_5  4
                     65: #define RIGHT_1 5
                     66: #define RIGHT_2 6
                     67: #define RIGHT_3 7
                     68: #define RIGHT_4 8
                     69: #define RIGHT_5 9
                     70:
                     71: /* All the fun defines */
                     72: #define next(ptr) ((ptr)?(ptr->l_next):NULL)
                     73: #define prev(ptr) ((ptr)?(ptr->l_prev):NULL)
                     74: #define identifier(ptr) (ptr->o_ident)
                     75: #define winat(y,x) ( (char) \
                     76:  ((mvwinch(mw,y,x) == ' ') ? mvwinch(stdscr,y,x) : winch(mw))  )
                     77:
                     78: #define debug if (wizard && wiz_verbose) msg
                     79: #define verify(b) if (b) verify_function(__FILE__, __LINE__);
                     80: #define DISTANCE(c1, c2)  ( ((c2).x - (c1).x)*((c2).x - (c1).x) + \
                     81:                             ((c2).y - (c1).y)*((c2).y - (c1).y) )
                     82:
                     83: #define xyDISTANCE(y1, x1, y2, x2) ((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1))
                     84: #define OBJPTR(what)    ((*what).data.obj)
                     85: #define THINGPTR(what)  ((*what).data.th)
                     86: #define ce(a, b) ((a).x == (b).x && (a).y == (b).y)
                     87: #define hero player.t_pos
                     88: #define pstats player.t_stats
                     89: #define max_stats player.maxstats
                     90: #define pack player.t_pack
                     91: #define attach(a, b) _attach(&a, b)
                     92: #define detach(a, b) _detach(&a, b)
                     93: #define free_list(a) _free_list(&a)
                     94: #ifndef max
                     95: #define max(a, b) ((a) > (b) ? (a) : (b))
                     96: #define min(a, b) ((a) < (b) ? (a) : (b))
                     97: #endif
                     98: #define GOLDCALC (rnd(50 + 30 * level) + 2)
                     99: #define o_charges o_ac
                    100: #define mi_wght mi_worth
                    101:
                    102: /* Things that appear on the screens */
                    103: #define WALL        ' '
                    104: #define PASSAGE     '#'
                    105: #define DOOR        '+'
                    106: #define FLOOR       '.'
                    107: #define VPLAYER     '@'
                    108: #define IPLAYER     '_'
                    109: #define POST        '^'
                    110: #define LAIR        '('
                    111: #define RUSTTRAP    ';'
                    112: #define TRAPDOOR    '>'
                    113: #define ARROWTRAP   '{'
                    114: #define SLEEPTRAP   '$'
                    115: #define BEARTRAP    '}'
                    116: #define TELTRAP     '~'
                    117: #define DARTTRAP    '`'
                    118: #define POOL        '"'
                    119: #define MAZETRAP    '\\'
                    120: #define FIRETRAP    '<'
                    121: #define POISONTRAP  '['
                    122: #define ARTIFACT    ','
                    123: #define SECRETDOOR  '&'
                    124: #define STAIRS      '%'
                    125: #define GOLD        '*'
                    126: #define POTION      '!'
                    127: #define SCROLL      '?'
                    128: #define MAGIC       '$'
                    129: #define BMAGIC      '>' /* Blessed magic */
                    130: #define CMAGIC      '<' /* Cursed  magic */
                    131: #define FOOD        ':'
                    132: #define WEAPON      ')'
                    133: #define ARMOR       ']'
                    134: #define RING        '='
                    135: #define STICK       '/'
                    136:
                    137: /* Various constants */
                    138: #define HOLDTIME      2
                    139: #define BEARTIME      3
                    140: #define SLEEPTIME     4
                    141: #define FREEZETIME    6
                    142: #define STINKTIME     6
                    143: #define CHILLTIME     (roll(2, 4))
                    144: #define STONETIME     8
                    145: #define SICKTIME     10
                    146: #define CLRDURATION  15
                    147: #define HUHDURATION  20
                    148: #define SMELLTIME    20
                    149: #define HEROTIME     20
                    150: #define HEALTIME     30
                    151: #define WANDERTIME   140
                    152: #define GONETIME    200
                    153: #define PHASEDURATION   300
                    154: #define SEEDURATION 850
                    155:
                    156: #define STPOS         0
                    157: #define BEFORE        1
                    158: #define AFTER         2
                    159:
                    160: #define MORETIME     150
                    161: #define HUNGERTIME  1300
                    162: #define STOMACHSIZE 2000
                    163:
                    164: #define BOLT_LENGTH 10
                    165: #define MARKLEN     20
                    166:
                    167: #define LINEFEED    10
                    168: #define CARRIAGE_RETURN 13
                    169: #define ESCAPE      27
                    170:
                    171: /* Adjustments for save against things */
                    172: #define VS_POISON       0
                    173: #define VS_PARALYZATION     0
                    174: #define VS_DEATH        0
                    175: #define VS_PETRIFICATION    1
                    176: #define VS_WAND         2
                    177: #define VS_BREATH       3
                    178: #define VS_MAGIC        4
                    179:
                    180: /*attributes for treasures in dungeon */
                    181: #define ISNORMAL    0x00000000UL /* Neither blessed nor cursed */
                    182: #define ISCURSED    0x00000001UL /* cursed */
                    183: #define ISKNOW      0x00000002UL /* has been identified */
                    184: #define ISPOST      0x00000004UL /* object is in a trading post */
                    185: #define ISMETAL     0x00000008UL /* is metallic */
                    186: #define ISPROT      0x00000010UL /* object is protected */
                    187: #define ISBLESSED   0x00000020UL /* blessed */
                    188: #define ISZAPPED    0x00000040UL /* weapon has been charged by dragon */
                    189: #define ISVORPED    0x00000080UL /* vorpalized weapon */
                    190: #define ISSILVER    0x00000100UL /* silver weapon */
                    191: #define ISPOISON    0x00000200UL /* poisoned weapon */
                    192: #define CANRETURN   0x00000400UL /* weapon returns if misses */
                    193: #define ISOWNED     0x00000800UL /* weapon returns always */
                    194: #define ISLOST      0x00001000UL /* weapon always disappears */
                    195: #define ISMISL      0x00002000UL /* missile weapon */
                    196: #define ISMANY      0x00004000UL /* show up in a group */
                    197: #define CANBURN     0x00008000UL /* burns monsters */
                    198: #define ISSHARP     0x00010000UL /* cutting edge */
                    199: #define ISTWOH      0x00020000UL /* needs two hands to wield */
                    200: #define ISLITTLE    0x00040000UL /* small weapon */
                    201: #define ISLAUNCHER  0x00080000UL /* used to throw other weapons */
                    202: #define TYP_MAGIC_MASK  0x0f000000UL
                    203: #define POT_MAGIC   0x01000000UL
                    204: #define SCR_MAGIC   0x02000000UL
                    205: #define ZAP_MAGIC   0x04000000UL
                    206: #define SP_WIZARD   0x10000000UL /* only wizards */
                    207: #define SP_ILLUSION 0x20000000UL /* only illusionists */
                    208: #define SP_CLERIC   0x40000000UL /* only clerics/paladins */
                    209: #define SP_DRUID    0x80000000UL /* only druids/rangers */
                    210: #define SP_MAGIC    0x30000000UL /* wizard or illusionist */
                    211: #define SP_PRAYER   0xc0000000UL /* cleric or druid */
                    212: #define SP_ALL      0xf0000000UL /* all special classes */
                    213: #define _TWO_       ISBLESSED   /* more powerful spell */
                    214:
                    215: /* Various flag bits */
                    216: #define ISDARK      0x00000001UL
                    217: #define ISGONE      0x00000002UL
                    218: #define ISTREAS     0x00000004UL
                    219: #define ISFOUND     0x00000008UL
                    220: #define ISTHIEFSET  0x00000010UL
                    221: #define WASDARK     0x00000020UL
                    222:
                    223: /* struct thing t_flags (might include player) for monster attributes */
                    224: #define ISBLIND     0x00000001UL
                    225: #define ISINWALL    0x00000002UL
                    226: #define ISRUN       0x00000004UL
                    227: #define ISFLEE      0x00000008UL
                    228: #define ISINVIS     0x00000010UL
                    229: #define ISMEAN      0x00000020UL
                    230: #define ISGREED     0x00000040UL
                    231: #define CANSHOOT    0x00000080UL
                    232: #define ISHELD      0x00000100UL
                    233: #define ISHUH       0x00000200UL
                    234: #define ISREGEN     0x00000400UL
                    235: #define CANHUH      0x00000800UL
                    236: #define CANSEE      0x00001000UL
                    237: #define HASFIRE     0x00002000UL
                    238: #define ISSLOW      0x00004000UL
                    239: #define ISHASTE     0x00008000UL
                    240: #define ISCLEAR     0x00010000UL
                    241: #define CANINWALL   0x00020000UL
                    242: #define ISDISGUISE  0x00040000UL
                    243: #define CANBLINK    0x00080000UL
                    244: #define CANSNORE    0x00100000UL
                    245: #define HALFDAMAGE  0x00200000UL
                    246: #define CANSUCK     0x00400000UL
                    247: #define CANRUST     0x00800000UL
                    248: #define CANPOISON   0x01000000UL
                    249: #define CANDRAIN    0x02000000UL
                    250: #define ISUNIQUE    0x04000000UL
                    251: #define STEALGOLD   0x08000000UL
                    252: #define STEALMAGIC  0x10000001UL
                    253: #define CANDISEASE  0x10000002UL
                    254: #define HASDISEASE  0x10000004UL
                    255: #define CANSUFFOCATE    0x10000008UL
                    256: #define DIDSUFFOCATE    0x10000010UL
                    257: #define BOLTDIVIDE  0x10000020UL
                    258: #define BLOWDIVIDE  0x10000040UL
                    259: #define NOCOLD      0x10000080UL
                    260: #define TOUCHFEAR   0x10000100UL
                    261: #define BMAGICHIT   0x10000200UL
                    262: #define NOFIRE      0x10000400UL
                    263: #define NOBOLT      0x10000800UL
                    264: #define CARRYGOLD   0x10001000UL
                    265: #define CANITCH     0x10002000UL
                    266: #define HASITCH     0x10004000UL
                    267: #define DIDDRAIN    0x10008000UL
                    268: #define WASTURNED   0x10010000UL
                    269: #define CANSELL     0x10020000UL
                    270: #define CANBLIND    0x10040000UL
                    271: #define CANBBURN    0x10080000UL
                    272: #define ISCHARMED   0x10100000UL
                    273: #define CANSPEAK    0x10200000UL
                    274: #define CANFLY      0x10400000UL
                    275: #define ISFRIENDLY  0x10800000UL
                    276: #define CANHEAR     0x11000000UL
                    277: #define ISDEAF      0x12000000UL
                    278: #define CANSCENT    0x14000000UL
                    279: #define ISUNSMELL   0x18000000UL
                    280: #define WILLRUST    0x20000001UL
                    281: #define WILLROT     0x20000002UL
                    282: #define SUPEREAT    0x20000004UL
                    283: #define PERMBLIND   0x20000008UL
                    284: #define MAGICHIT    0x20000010UL
                    285: #define CANINFEST   0x20000020UL
                    286: #define HASINFEST   0x20000040UL
                    287: #define NOMOVE      0x20000080UL
                    288: #define CANSHRIEK   0x20000100UL
                    289: #define CANDRAW     0x20000200UL
                    290: #define CANSMELL    0x20000400UL
                    291: #define CANPARALYZE 0x20000800UL
                    292: #define CANROT      0x20001000UL
                    293: #define ISSCAVENGE  0x20002000UL
                    294: #define DOROT       0x20004000UL
                    295: #define CANSTINK    0x20008000UL
                    296: #define HASSTINK    0x20010000UL
                    297: #define ISSHADOW    0x20020000UL
                    298: #define CANCHILL    0x20040000UL
                    299: #define CANHUG      0x20080000UL
                    300: #define CANSURPRISE 0x20100000UL
                    301: #define CANFRIGHTEN 0x20200000UL
                    302: #define CANSUMMON   0x20400000UL
                    303: #define TOUCHSTONE  0x20800000UL
                    304: #define LOOKSTONE   0x21000000UL
                    305: #define CANHOLD     0x22000000UL
                    306: #define DIDHOLD     0x24000000UL
                    307: #define DOUBLEDRAIN 0x28000000UL
                    308: #define ISUNDEAD    0x30000001UL
                    309: #define BLESSMAP    0x30000002UL
                    310: #define BLESSGOLD   0x30000004UL
                    311: #define BLESSMONS   0x30000008UL
                    312: #define BLESSMAGIC  0x30000010UL
                    313: #define BLESSFOOD   0x30000020UL
                    314: #define CANBRANDOM  0x30000040UL /* Types of breath */
                    315: #define CANBACID    0x30000080UL
                    316: #define CANBFIRE    0x30000100UL
                    317: #define CANBBOLT    0x30000200UL
                    318: #define CANBGAS     0x30000400UL
                    319: #define CANBICE     0x30000800UL
                    320: #define CANBPGAS    0x30001000UL /* Paralyze gas */
                    321: #define CANBSGAS    0x30002000UL /* Sleeping gas */
                    322: #define CANBSLGAS   0x30004000UL /* Slow gas */
                    323: #define CANBFGAS    0x30008000UL /* Fear gas */
                    324: #define CANBREATHE  0x3000ffc0UL /* Can it breathe at all? */
                    325: #define STUMBLER    0x30010000UL
                    326: #define POWEREAT    0x30020000UL
                    327: #define ISELECTRIC  0x30040000UL
                    328: #define HASOXYGEN   0x30080000UL /* Doesn't need to breath air */
                    329: #define POWERDEXT   0x30100000UL
                    330: #define POWERSTR    0x30200000UL
                    331: #define POWERWISDOM 0x30400000UL
                    332: #define POWERINTEL  0x30800000UL
                    333: #define POWERCONST  0x31000000UL
                    334: #define SUPERHERO   0x32000000UL
                    335: #define ISUNHERO    0x34000000UL
                    336: #define CANCAST     0x38000000UL
                    337: #define CANTRAMPLE  0x40000001UL
                    338: #define CANSWIM     0x40000002UL
                    339: #define LOOKSLOW    0x40000004UL
                    340: #define CANWIELD    0x40000008UL
                    341: #define CANDARKEN   0x40000010UL
                    342: #define ISFAST      0x40000020UL
                    343: #define CANBARGAIN  0x40000040UL
                    344: #define NOMETAL     0x40000080UL
                    345: #define CANSPORE    0x40000100UL
                    346: #define NOSHARP     0x40000200UL
                    347: #define DRAINWISDOM 0x40000400UL
                    348: #define DRAINBRAIN  0x40000800UL
                    349: #define ISLARGE     0x40001000UL
                    350: #define ISSMALL     0x40002000UL
                    351: #define CANSTAB     0x40004000UL
                    352: #define ISFLOCK     0x40008000UL
                    353: #define ISSWARM     0x40010000UL
                    354: #define CANSTICK    0x40020000UL
                    355: #define CANTANGLE   0x40040000UL
                    356: #define DRAINMAGIC  0x40080000UL
                    357: #define SHOOTNEEDLE 0x40100000UL
                    358: #define CANZAP      0x40200000UL
                    359: #define HASARMOR    0x40400000UL
                    360: #define CANTELEPORT 0x40800000UL
                    361: #define ISBERSERK   0x41000000UL
                    362: #define ISFAMILIAR  0x42000000UL
                    363: #define HASFAMILIAR 0x44000000UL
                    364: #define SUMMONING   0x48000000UL
                    365: #define CANREFLECT  0x50000001UL
                    366: #define LOWFRIENDLY 0x50000002UL
                    367: #define MEDFRIENDLY 0x50000004UL
                    368: #define HIGHFRIENDLY    0x50000008UL
                    369: #define MAGICATTRACT    0x50000010UL
                    370: #define ISGOD       0x50000020UL
                    371: #define CANLIGHT    0x50000040UL
                    372: #define HASSHIELD   0x50000080UL
                    373: #define HASMSHIELD  0x50000100UL
                    374: #define LOWCAST     0x50000200UL
                    375: #define MEDCAST     0x50000400UL
                    376: #define HIGHCAST    0x50000800UL
                    377: #define WASSUMMONED 0x50001000UL
                    378: #define HASSUMMONED 0x50002000UL
                    379: #define CANTRUESEE  0x50004000UL
                    380:
                    381:
                    382: #define FLAGSHIFT       28UL
                    383: #define FLAGINDEX       0x0000000fL
                    384: #define FLAGMASK        0x0fffffffL
                    385:
                    386: /* on - check if a monster flag is on */
                    387: #define on(th, flag) \
                    388:         ((th).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] & (flag & FLAGMASK))
                    389:
                    390: /* off - check if a monster flag is off */
                    391: #define off(th, flag) \
                    392:         (!((th).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] & (flag & FLAGMASK)))
                    393:
                    394: /* turn_on - turn on a monster flag */
                    395: #define turn_on(th, flag) \
                    396:         ( (th).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] |= (flag & FLAGMASK))
                    397:
                    398: /* turn_off - turn off a monster flag */
                    399: #define turn_off(th, flag) \
                    400:         ( (th).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] &= ~(flag & FLAGMASK))
                    401:
                    402: #define SAME_POS(c1,c2) ( (c1.x == c2.x) && (c1.y == c2.y) )
                    403:
                    404: /* types of things */
                    405: /* All magic spells duplicate a potion, scroll, or stick effect */
                    406:
                    407: #define TYP_POTION  0
                    408: #define TYP_SCROLL  1
                    409: #define TYP_RING    2
                    410: #define TYP_STICK   3
                    411: #define MAXMAGICTYPES   4   /* max number of items in magic class */
                    412: #define MAXMAGICITEMS   50  /* max number of items in magic class */
                    413: #define TYP_FOOD    4
                    414: #define TYP_WEAPON  5
                    415: #define TYP_ARMOR   6
                    416: #define TYP_ARTIFACT    7
                    417: #define NUMTHINGS   (sizeof(things) / sizeof(struct magic_item))
                    418:
                    419: /* Artifact types */
                    420: #define TR_PURSE    0
                    421: #define TR_PHIAL    1
                    422: #define TR_AMULET   2
                    423: #define TR_PALANTIR 3
                    424: #define TR_CROWN    4
                    425: #define TR_SCEPTRE  5
                    426: #define TR_SILMARIL 6
                    427: #define TR_WAND     7
                    428: #define MAXARTIFACT (sizeof(arts) / sizeof(struct init_artifact))
                    429:
                    430: /* Artifact flags */
                    431: #define ISUSED      01
                    432: #define ISACTIVE    02
                    433:
                    434: /* Potion types - add also to magic_item.c and potions.c */
                    435: #define P_CLEAR     0
                    436: #define P_GAINABIL  1
                    437: #define P_SEEINVIS  2
                    438: #define P_HEALING   3
                    439: #define P_MONSTDET  4
                    440: #define P_TREASDET  5
                    441: #define P_RAISELEVEL    6
                    442: #define P_HASTE     7
                    443: #define P_RESTORE   8
                    444: #define P_PHASE     9
                    445: #define P_INVIS     10
                    446: #define P_SMELL     11
                    447: #define P_HEAR      12
                    448: #define P_SHERO     13
                    449: #define P_DISGUISE  14
                    450: #define P_FIRERESIST    15
                    451: #define P_COLDRESIST    16
                    452: #define P_HASOXYGEN 17
                    453: #define P_LEVITATION    18
                    454: #define P_REGENERATE    19
                    455: #define P_SHIELD    20
                    456: #define P_TRUESEE   21
                    457: #define MAXPOTIONS  22
                    458:
                    459: /* Scroll types - add also to magic_item.c and scrolls.c */
                    460: #define S_CONFUSE   0
                    461: #define S_MAP       1
                    462: #define S_LIGHT     2
                    463: #define S_HOLD      3
                    464: #define S_SLEEP     4
                    465: #define S_ENCHANT   5
                    466: #define S_IDENTIFY  6
                    467: #define S_SCARE     7
                    468: #define S_GFIND     8
                    469: #define S_SELFTELEP 9
                    470: #define S_CREATE    10
                    471: #define S_REMOVECURSE   11
                    472: #define S_PETRIFY   12
                    473: #define S_GENOCIDE  13
                    474: #define S_CURING    14
                    475: #define S_MAKEITEMEM    15
                    476: #define S_PROTECT   16
                    477: #define S_NOTHING   17
                    478: #define S_SILVER    18
                    479: #define S_OWNERSHIP 19
                    480: #define S_FOODDET   20
                    481: #define S_ELECTRIFY 21
                    482: #define S_CHARM     22
                    483: #define S_SUMMON    23
                    484: #define S_REFLECT   24
                    485: #define S_SUMFAMILIAR   25
                    486: #define S_FEAR      26
                    487: #define S_MSHIELD   27
                    488: #define MAXSCROLLS  28
                    489:
                    490: /* Rod/Wand/Staff types - add also to magic_item.c and sticks.c */
                    491: #define WS_LIGHT    0
                    492: #define WS_HIT      1
                    493: #define WS_ELECT    2
                    494: #define WS_FIRE     3
                    495: #define WS_COLD     4
                    496: #define WS_POLYMORPH    5
                    497: #define WS_MISSILE  6
                    498: #define WS_SLOW_M   7
                    499: #define WS_DRAIN    8
                    500: #define WS_CHARGE   9
                    501: #define WS_MONSTELEP    10
                    502: #define WS_CANCEL   11
                    503: #define WS_CONFMON  12
                    504: #define WS_DISINTEGRATE 13
                    505: #define WS_ANTIMATTER   14
                    506: #define WS_PARALYZE 15
                    507: #define WS_XENOHEALING  16
                    508: #define WS_NOTHING  17
                    509: #define WS_INVIS    18
                    510: #define WS_BLAST    19
                    511: #define WS_WEB      20
                    512: #define WS_KNOCK    21
                    513: #define WS_CLOSE    22
                    514: #define MAXSTICKS   23
                    515:
                    516: /* Ring types */
                    517: #define R_PROTECT   0
                    518: #define R_ADDSTR    1
                    519: #define R_SUSABILITY    2
                    520: #define R_SEARCH    3
                    521: #define R_SEEINVIS  4
                    522: #define R_ALERT     5
                    523: #define R_AGGR      6
                    524: #define R_ADDHIT    7
                    525: #define R_ADDDAM    8
                    526: #define R_REGEN     9
                    527: #define R_DIGEST    10
                    528: #define R_TELEPORT  11
                    529: #define R_STEALTH   12
                    530: #define R_ADDINTEL  13
                    531: #define R_ADDWISDOM 14
                    532: #define R_HEALTH    15
                    533: #define R_VREGEN    16
                    534: #define R_LIGHT     17
                    535: #define R_DELUSION  18
                    536: #define R_CARRYING  19
                    537: #define R_ADORNMENT 20
                    538: #define R_LEVITATION    21
                    539: #define R_FIRERESIST    22
                    540: #define R_COLDRESIST    23
                    541: #define R_ELECTRESIST   24
                    542: #define R_RESURRECT 25
                    543: #define R_BREATHE   26
                    544: #define R_FREEDOM   27
                    545: #define R_WIZARD    28
                    546: #define R_PIETY     29
                    547: #define R_TELCONTROL    30
                    548: #define R_TRUESEE   31
                    549: #define MAXRINGS    32
                    550:
                    551: /* Weapon types */
                    552: #define SLING       0   /* sling */
                    553: #define ROCK        1   /* rocks */
                    554: #define BULLET      2   /* sling bullet */
                    555: #define BOW     3   /* short bow */
                    556: #define ARROW       4   /* arrow */
                    557: #define SILVERARROW 5   /* silver arrows */
                    558: #define FLAMEARROW  6   /* flaming arrows */
                    559: #define FOOTBOW     7   /* footbow */
                    560: #define FBBOLT      8   /* footbow bolt */
                    561: #define CROSSBOW    9   /* crossbow */
                    562: #define BOLT        10  /* crossbow bolt */
                    563:
                    564: #define DART        11  /* darts */
                    565: #define DAGGER      12  /* dagger */
                    566: #define HAMMER      13  /* hammer */
                    567: #define LEUKU       14  /* leuku */
                    568: #define JAVELIN     15  /* javelin */
                    569: #define TOMAHAWK    16  /* tomahawk */
                    570: #define MACHETE     17  /* machete */
                    571: #define THROW_AXE   18  /* throwing axe */
                    572: #define SHORT_SPEAR 19  /* spear */
                    573: #define BOOMERANG   20  /* boomerangs */
                    574: #define LONG_SPEAR  21  /* spear */
                    575: #define SHURIKEN    22  /* shurikens */
                    576: #define MOLOTOV     23  /* molotov cocktails */
                    577: #define GRENADE     24  /* grenade for explosions */
                    578: #define CLUB        25  /* club */
                    579: #define PITCHFORK   26  /* pitchfork */
                    580: #define SHORT_SWORD 27  /* short sword */
                    581: #define HAND_AXE    28  /* hand axe */
                    582: #define PARTISAN    29  /* partisan */
                    583: #define GRAIN_FLAIL 30  /* grain flail */
                    584: #define SINGLESTICK 31  /* singlestick */
                    585: #define RAPIER      32  /* rapier */
                    586: #define SICKLE      33  /* sickle */
                    587: #define HATCHET     34  /* hatchet */
                    588: #define SCIMITAR    35  /* scimitar */
                    589: #define LIGHT_MACE  36  /* mace */
                    590: #define MORNINGSTAR 37  /* morning star */
                    591: #define BROAD_SWORD 38  /* broad sword */
                    592: #define MINER_PICK  39  /* miner's pick */
                    593: #define GUISARME    40  /* guisarme */
                    594: #define WAR_FLAIL   41  /* war flail */
                    595: #define CRYSKNIFE   42  /* crysknife */
                    596: #define BATTLE_AXE  43  /* battle axe */
                    597: #define CUTLASS     44  /* cutlass sword */
                    598: #define GLAIVE      45  /* glaive */
                    599: #define PERTUSKA    46  /* pertuska */
                    600: #define LONG_SWORD  47  /* long sword */
                    601: #define LANCE       48  /* lance */
                    602: #define RANSEUR     49  /* ranseur */
                    603: #define SABRE       50  /* sabre */
                    604: #define SPETUM      51  /* spetum */
                    605: #define HALBERD     52  /* halberd */
                    606: #define TRIDENT     53  /* trident */
                    607: #define WAR_PICK    54  /* war pick */
                    608: #define BARDICHE    55  /* bardiche */
                    609: #define HEAVY_MACE  56  /* mace */
                    610: #define SCYTHE      57  /* great scythe */
                    611: #define QUARTERSTAFF    58  /* quarter staff */
                    612: #define BAST_SWORD  59  /* bastard sword */
                    613: #define PIKE        60  /* pike */
                    614: #define TWO_FLAIL   61  /* two-handed flail */
                    615: #define TWO_MAUL    62  /* two-handed maul */
                    616: #define TWO_PICK    63  /* two-handed pick */
                    617: #define TWO_SWORD   64  /* two-handed sword */
                    618: #define CLAYMORE    65  /* claymore sword */
                    619: #define MAXWEAPONS  (sizeof(weaps) / sizeof(struct init_weps))
                    620: #define NONE        100 /* no weapon */
                    621:
                    622: /* Armor types */
                    623: #define SOFT_LEATHER    0
                    624: #define CUIRBOLILLI 1
                    625: #define HEAVY_LEATHER   2
                    626: #define RING_MAIL   3
                    627: #define STUDDED_LEATHER 4
                    628: #define SCALE_MAIL  5
                    629: #define PADDED_ARMOR    6
                    630: #define CHAIN_MAIL  7
                    631: #define BRIGANDINE  8
                    632: #define SPLINT_MAIL 9
                    633: #define BANDED_MAIL 10
                    634: #define GOOD_CHAIN  11
                    635: #define PLATE_MAIL  12
                    636: #define PLATE_ARMOR 13
                    637: #define MITHRIL     14
                    638: #define CRYSTAL_ARMOR   15
                    639: #define MAXARMORS   (sizeof(armors) / sizeof(struct init_armor))
                    640:
                    641: /* Food types */
                    642: #define FD_RATION   0
                    643: #define FD_FRUIT    1
                    644: #define FD_CRAM     2
                    645: #define FD_CAKES    3
                    646: #define FD_LEMBA    4
                    647: #define FD_MIRUVOR  5
                    648: #define MAXFOODS    (sizeof(fd_data) / sizeof(struct magic_item))
                    649:
                    650: /* stuff to do with encumberance */
                    651: #define F_OK        0   /* have plenty of food in stomach */
                    652: #define F_HUNGRY    1   /* player is hungry */
                    653: #define F_WEAK      2   /* weak from lack of food */
                    654: #define F_FAINT     3   /* fainting from lack of food */
                    655:
                    656: /* return values for get functions */
                    657: #define NORM    0       /* normal exit */
                    658: #define QUIT    1       /* quit option setting */
                    659: #define MINUS   2       /* back up one option */
                    660:
                    661: /* These are the types of inventory styles. */
                    662: #define INV_SLOW    0
                    663: #define INV_OVER    1
                    664: #define INV_CLEAR   2
                    665:
                    666: /* These will eventually become enumerations */
                    667: #define MESSAGE     TRUE
                    668: #define NOMESSAGE   FALSE
                    669: #define POINTS      TRUE
                    670: #define NOPOINTS    FALSE
                    671: #define LOWERCASE   TRUE
                    672: #define UPPERCASE   FALSE
                    673: #define WANDER      TRUE
                    674: #define NOWANDER    FALSE
                    675: #define GRAB        TRUE
                    676: #define NOGRAB      FALSE
                    677: #define FAMILIAR    TRUE
                    678: #define NOFAMILIAR  FALSE
                    679: #define MAXSTATS    TRUE
                    680: #define NOMAXSTATS  FALSE
                    681: #define FORCE       TRUE
                    682: #define NOFORCE     FALSE
                    683: #define THROWN      TRUE
                    684: #define NOTHROWN    FALSE
                    685:
                    686: /* Ways to die */
                    687: #define D_PETRIFY   -1
                    688: #define D_ARROW     -2
                    689: #define D_DART      -3
                    690: #define D_POISON    -4
                    691: #define D_BOLT      -5
                    692: #define D_SUFFOCATION   -6
                    693: #define D_POTION    -7
                    694: #define D_INFESTATION   -8
                    695: #define D_DROWN     -9
                    696: #define D_FALL      -10
                    697: #define D_FIRE      -11
                    698: #define D_SPELLFUMBLE   -12
                    699: #define D_DRAINLIFE -13
                    700: #define D_ARTIFACT  -14
                    701: #define D_GODWRATH  -15
                    702: #define D_CLUMSY    -16
                    703:
                    704: /* values for games end */
                    705: #define SCOREIT -1
                    706: #define KILLED   0
                    707: #define CHICKEN  1
                    708: #define WINNER   2
                    709: #define TOTAL    3
                    710:
                    711: /*
                    712:  * definitions for function step_ok: MONSTOK indicates it is OK to step on a
                    713:  * monster -- it is only OK when stepping diagonally AROUND a monster
                    714:  */
                    715:
                    716: #define MONSTOK 1
                    717: #define NOMONST 2
                    718:
                    719:
                    720:
                    721: #define good_monster(m) (on(m, ISCHARMED) || \
                    722:             on(m, ISFRIENDLY) || \
                    723:             on(m, ISFAMILIAR))
                    724:
                    725: /* Now we define the structures and types */
                    726:
                    727: /* level types */
                    728: typedef enum
                    729: {
                    730:     NORMLEV,        /* normal level */
                    731:     POSTLEV,        /* trading post level */
                    732:     MAZELEV,        /* maze level */
                    733:     THRONE          /* unique monster's throne room */
                    734: }   LEVTYPE;
                    735:
                    736: /* Help list */
                    737:
                    738: struct h_list
                    739: {
                    740:     char        h_ch;
                    741:     char        *h_desc;
                    742: };
                    743:
                    744: /* Coordinate data type */
                    745: typedef struct
                    746: {
                    747:     int     x;
                    748:     int     y;
                    749: } coord;
                    750:
                    751: /* Linked list data type */
                    752: typedef struct linked_list
                    753: {
                    754:     struct linked_list  *l_next;
                    755:     struct linked_list  *l_prev;
                    756:
                    757:     union
                    758:     {
                    759:         struct object *obj;
                    760:         struct thing  *th;
                    761:         void *l_data;
                    762:     } data;
                    763:
                    764: } linked_list;
                    765:
                    766: /* Stuff about magic items */
                    767:
                    768: struct magic_item
                    769: {
                    770:     char   *mi_name;
                    771:     char   *mi_abrev;
                    772:     int     mi_prob;
                    773:     long    mi_worth;
                    774:     int     mi_curse;
                    775:     int     mi_bless;
                    776: };
                    777:
                    778: /* Room structure */
                    779: struct room
                    780: {
                    781:     coord   r_pos;      /* Upper left corner */
                    782:     coord   r_max;      /* Size of room */
                    783:     coord   r_exit[MAXDOORS];   /* Where the exits are */
                    784:     int     r_flags;    /* Info about the room */
                    785:     int     r_nexits;   /* Number of exits */
                    786:     short   r_fires;    /* Number of fires in room */
                    787: };
                    788:
                    789: /* Initial artifact stats */
                    790: struct init_artifact
                    791: {
                    792:     char   *ar_name;   /* name of the artifact */
                    793:     int     ar_level;   /* first level where it appears */
                    794:     int     ar_rings;   /* number of ring effects */
                    795:     int     ar_potions; /* number of potion effects */
                    796:     int     ar_scrolls; /* number of scroll effects */
                    797:     int     ar_wands;   /* number of wand effects */
                    798:     int     ar_worth;   /* gold pieces */
                    799:     int     ar_weight;  /* weight of object */
                    800: };
                    801:
                    802: /* Array of all traps on this level */
                    803:
                    804: struct trap
                    805: {
                    806:     coord       tr_pos;     /* Where trap is */
                    807:     long        tr_flags;   /* Info about trap (i.e. ISFOUND) */
                    808:     char        tr_type;    /* What kind of trap */
                    809:     char        tr_show;    /* What disguised trap looks like */
                    810: };
                    811:
                    812: /* Structure describing a fighting being */
                    813:
                    814: struct stats
                    815: {
                    816:     char   *s_dmg;     /* String describing damage done */
                    817:     long    s_exp;      /* Experience */
                    818:     long    s_hpt;      /* Hit points */
                    819:     int     s_pack;     /* current weight of his pack */
                    820:     int     s_carry;    /* max weight he can carry */
                    821:     int     s_lvl;      /* Level of mastery */
                    822:     int     s_arm;      /* Armor class */
                    823:     int     s_acmod;    /* Armor clss modifier */
                    824:     int     s_power;    /* Spell points */
                    825:     int     s_str;      /* Strength */
                    826:     int     s_intel;    /* Intelligence */
                    827:     int     s_wisdom;   /* Wisdom */
                    828:     int     s_dext;     /* Dexterity */
                    829:     int     s_const;    /* Constitution */
                    830:     int     s_charisma; /* Charisma */
                    831: };
                    832:
                    833: /* Structure describing a fighting being (monster at initialization) */
                    834:
                    835: struct mstats
                    836: {
                    837:     short s_str;        /* Strength */
                    838:     long  s_exp;        /* Experience */
                    839:     int   s_lvl;        /* Level of mastery */
                    840:     int   s_arm;    /* Armor class */
                    841:     char *s_hpt;        /* Hit points */
                    842:     char *s_dmg;        /* String describing damage done */
                    843: };
                    844:
                    845: /* Structure for monsters and player */
                    846:
                    847: /*
                    848:     NOTE: In initial v1.04 code the t_chasee variable will be
                    849:           reset during the save/restore process. Eventually
                    850:           need to implement a "thing" manager where I can
                    851:           refer to "things" by number such that references
                    852:           to them can be saved. Problems exist with regard
                    853:           to removing references to "things" that have been
                    854:           killed.
                    855: */
                    856:
                    857: typedef struct thing
                    858: {
                    859:     long   chasee_index, horde_index; /* Used in save/rest process */
                    860:     struct linked_list  *t_pack;    /* What the thing is carrying */
                    861:     struct stats    t_stats;    /* Physical description */
                    862:     struct stats    maxstats;   /* maximum(or initial) stats */
                    863:     int           t_ischasing;  /* Are we chasing someone? */
                    864:     struct thing *t_chasee;     /* Who are we chasing */
                    865:     struct object *t_horde;     /* What are we hordeing */
                    866:     coord      t_pos;      /* Cuurent Position */
                    867:     coord      t_oldpos;   /* Last Position    */
                    868:     coord      t_nxtpos;   /* Next Position    */
                    869:     long       t_flags[16];    /* State word */
                    870:     int        t_praycnt;  /* Times prayed... */
                    871:     int        t_trans;    /* # of transactions at post */
                    872:     int        t_turn;     /* If slowed, is it a turn to move */
                    873:     int        t_wasshot;  /* Was character shot last round? */
                    874:     int        t_ctype;    /* Character type */
                    875:     int        t_index;    /* Index into monster table */
                    876:     int        t_no_move;  /* How long the thing can't move */
                    877:     int        t_rest_hpt; /* used in hit point regeneration */
                    878:     int        t_rest_pow; /* used in spell point regeneration */
                    879:     int        t_doorgoal; /* What door are we heading to? */
                    880:     char       t_type;     /* What it is */
                    881:     char       t_disguise; /* What mimic looks like */
                    882:     char       t_oldch;    /* Character that was where it was */
                    883: } thing;
                    884:
                    885: /* Array containing information on all the various types of monsters */
                    886:
                    887: struct monster
                    888: {
                    889:     char         *m_name;    /* What to call the monster */
                    890:     short         m_carry;    /* Probability of carrying something */
                    891:     int           m_normal;   /* Does monster exist? */
                    892:     int           m_wander;   /* Does monster wander? */
                    893:     char          m_appear;   /* What does monster look like? */
                    894:     char         *m_intel;   /* Intelligence range */
                    895:     unsigned long          m_flags[16];    /* Things about the monster */
                    896:     char         *m_typesum; /* type of creature can he summon */
                    897:     short         m_numsum;   /* how many creatures can he summon */
                    898:     short         m_add_exp;  /* Added experience per hit point */
                    899:     struct mstats m_stats;    /* Initial stats */
                    900: };
                    901:
                    902: /* Structure for a thing that the rogue can carry */
                    903:
                    904: typedef struct object
                    905: {
                    906:     coord       o_pos;      /* Where it lives on the screen */
                    907:     struct linked_list  *next_obj;  /* The next obj. for stacked objects */
                    908:     struct linked_list  *o_bag; /* bag linked list pointer */
                    909:     char        *o_text;    /* What it says if you read it */
                    910:     char        *o_damage;  /* Damage if used like sword */
                    911:     char        *o_hurldmg; /* Damage if thrown */
                    912:     long        o_flags;    /* Information about objects */
                    913:     long        ar_flags;   /* general flags */
                    914:     char     o_type;     /* What kind of object it is */
                    915:     int     o_ident;    /* identifier for object */
                    916:     unsigned int     o_count;    /* Count for plural objects */
                    917:     int     o_which;    /* Which object of a type it is */
                    918:     int     o_hplus;    /* Plusses to hit */
                    919:     int     o_dplus;    /* Plusses to damage */
                    920:     int     o_ac;       /* Armor class */
                    921:     int     o_group;    /* Group number for this object */
                    922:     int     o_weight;   /* weight of this object */
                    923:     char        o_launch;   /* What you need to launch it */
                    924:     char        o_mark[MARKLEN];    /* Mark the specific object */
                    925:     long o_worth;
                    926: }       object;
                    927:
                    928: /* weapon structure */
                    929:
                    930: struct init_weps
                    931: {
                    932:     char        *w_name;    /* name of weapon */
                    933:     char        *w_dam;     /* hit damage */
                    934:     char        *w_hrl;     /* hurl damage */
                    935:     char        w_launch;   /* need to launch it */
                    936:     int         w_wght;     /* weight of weapon */
                    937:     long        w_worth;    /* worth of this weapon */
                    938:     long        w_flags;    /* flags */
                    939: };
                    940:
                    941: /* armor structure */
                    942:
                    943: struct init_armor
                    944: {
                    945:     char        *a_name;    /* name of armor */
                    946:     long        a_worth;    /* worth of armor */
                    947:     int     a_prob;     /* chance of getting armor */
                    948:     int     a_class;    /* normal armor class */
                    949:     int     a_wght;     /* weight of armor */
                    950: };
                    951:
                    952: struct matrix
                    953: {
                    954:     int     base;   /* Base to-hit value (AC 10) */
                    955:     int     max_lvl;/* Maximum level for changing value */
                    956:     int     factor; /* Amount base changes each time */
                    957:     int     offset; /* What to offset level */
                    958:     int     range;  /* Range of levels for each offset */
                    959: };
                    960:
                    961: /*
                    962:     ANSI C Prototype Additions
                    963: */
                    964:
                    965: /* armor.c */
                    966: extern void wear(void);
                    967: extern void take_off(void);
                    968: extern void waste_time(void);
                    969: extern int  wear_ok(struct thing *th, struct object *obj, int print_message);
                    970:
                    971: /* artifact.c */
                    972: extern void apply(void);
                    973: extern int possessed(int artifact);
                    974: extern int is_carrying(int artifact);
                    975: extern int make_artifact(void);
                    976: extern struct object *new_artifact(int which, struct object *cur);
                    977: extern void do_minor(struct object *obj);
                    978: extern void do_major(void);
                    979: extern void do_phial(void);
                    980: extern void do_palantir(void);
                    981: extern void do_sceptre(void);
                    982: extern void do_silmaril(void);
                    983: extern void do_amulet(void);
                    984: extern void do_bag(struct object *obj);
                    985: extern void do_wand(void);
                    986: extern void do_crown(void);
                    987: extern void level_eval(void);
                    988:
                    989: /* bag.c */
                    990:
                    991: typedef union
                    992: {
                    993:     void *varg;
                    994:     int  *iarg;
                    995:     struct object *obj;
                    996: } bag_arg;
                    997:
                    998:
                    999: extern struct object *apply_to_bag(struct linked_list *bag_p, int type,
                   1000:                     int (*bff_p)(struct object *obj, bag_arg *arg),
                   1001:                     int (*baf_p)(struct object *obj, bag_arg *arg, int id),
                   1002:                     void *user_arg);
                   1003: extern int count_bag(linked_list *bag_p, int type,
                   1004:                     int (*bff_p)(struct object *obj, bag_arg *arg));
                   1005: extern void del_bag(linked_list *bag_p, object *obj_p);
                   1006: extern struct object *pop_bag(linked_list **bag_pp, object *obj_p);
                   1007: extern void push_bag(linked_list **bag_pp, object *obj_p);
                   1008: extern struct object *scan_bag(linked_list *bag_p, int type, int id);
                   1009: extern struct object *select_bag(linked_list *bag_p, int type,
                   1010:                     int (*bff_p)(struct object *obj, bag_arg *arg), int index);
                   1011:
                   1012: /* chase.c */
                   1013:
                   1014: extern void do_chase(struct thing *th, int flee);
                   1015: extern void chase_it(coord *runner, struct thing *th);
                   1016: extern void runto(void);/* coord *runner, coord *spot); */
                   1017: extern int chase(struct thing *tp, coord *ee, int flee);
                   1018: extern struct room *roomin(coord cp);
                   1019: extern struct linked_list *find_mons(int y, int x);
                   1020: extern struct linked_list *f_mons_a(int y, int x, int hit_bad);
                   1021: extern int diag_ok(coord *sp, coord *ep, struct thing *flgptr);
                   1022: extern int cansee(int y, int x);
                   1023: extern coord *find_shoot(struct thing *tp, coord *dir);
                   1024: extern coord *can_shoot(coord *er, coord *ee, coord *dir);
                   1025: extern int straight_shot(int ery, int erx, int eey, int eex, coord *dir);
                   1026: extern struct linked_list *get_hurl(struct thing *tp);
                   1027: extern struct object *pick_weap(struct thing *tp);
                   1028: extern int can_blink(struct thing *tp);
                   1029:
                   1030: /* command.c */
                   1031:
                   1032: extern char  fight_ch;
                   1033: extern char  countch;
                   1034: extern void command(void);
                   1035: extern void do_after_effects(void);
                   1036: extern void make_omnipotent(void);
                   1037: extern void quit_handler(int sig);
                   1038: extern void quit(void);
                   1039: extern void search(int is_thief);
                   1040: extern void help(void);
                   1041: extern void identify(void);
                   1042: extern void d_level(void);
                   1043: extern void u_level(void);
                   1044: extern void call(int mark);
                   1045: extern int  att_bonus(void);
                   1046:
                   1047: /* daemon.c */
                   1048:
                   1049: extern int demoncnt;
                   1050:
                   1051: struct delayed_action
                   1052: {
                   1053:     int d_type;
                   1054:     int d_when;
                   1055:     int d_id;
                   1056:     void *d_arg;
                   1057:     int d_time;
                   1058: };
                   1059:
                   1060: #define EMPTY  0
                   1061: #define DAEMON 1
                   1062: #define FUSE   2
                   1063:
                   1064: typedef void fuse;
                   1065:
                   1066: typedef union
                   1067: {
                   1068:     void *varg;
                   1069:     int  *iarg;
                   1070:     struct linked_list *ll;
                   1071: } fuse_arg;
                   1072:
                   1073: typedef union
                   1074: {
                   1075:     void *varg;
                   1076:     int  *iarg;
                   1077:     struct thing *thingptr;
                   1078: } daemon_arg;
                   1079:
                   1080: struct fuse
                   1081: {
                   1082:     int index;
                   1083:     fuse (*func)(fuse_arg *arg);
                   1084: };
                   1085:
                   1086: struct daemon
                   1087: {
                   1088:     int index;
                   1089:     void (*func)(daemon_arg *arg);
                   1090: };
                   1091:
                   1092: #define MAXDAEMONS 60
                   1093:
                   1094: #define FUSE_NULL          0
                   1095: #define FUSE_SWANDER       1
                   1096: #define FUSE_UNCONFUSE     2
                   1097: #define FUSE_UNSCENT       3
                   1098: #define FUSE_SCENT         4
                   1099: #define FUSE_UNHEAR        5
                   1100: #define FUSE_HEAR          6
                   1101: #define FUSE_UNSEE         7
                   1102: #define FUSE_UNSTINK       8
                   1103: #define FUSE_UNCLRHEAD     9
                   1104: #define FUSE_UNPHASE      10
                   1105: #define FUSE_SIGHT        11
                   1106: #define FUSE_RES_STRENGTH 12
                   1107: #define FUSE_NOHASTE      13
                   1108: #define FUSE_NOSLOW       14
                   1109: #define FUSE_SUFFOCATE    15
                   1110: #define FUSE_CURE_DISEASE 16
                   1111: #define FUSE_UNITCH       17
                   1112: #define FUSE_APPEAR       18
                   1113: #define FUSE_UNELECTRIFY  19
                   1114: #define FUSE_UNBHERO      20
                   1115: #define FUSE_UNSHERO      21
                   1116: #define FUSE_UNXRAY       22
                   1117: #define FUSE_UNDISGUISE   23
                   1118: #define FUSE_SHERO        24
                   1119: #define FUSE_WGHTCHK      25
                   1120: #define FUSE_UNSUMMON     26
                   1121: #define FUSE_UNGAZE       27
                   1122: #define FUSE_UNCOLD       28
                   1123: #define FUSE_UNHOT        29
                   1124: #define FUSE_UNFLY        30
                   1125: #define FUSE_UNBREATHE    31
                   1126: #define FUSE_UNREGEN      32
                   1127: #define FUSE_UNSUPEREAT   33
                   1128: #define FUSE_UNSHIELD     34
                   1129: #define FUSE_UNMSHIELD    35
                   1130: #define FUSE_UNTRUESEE    36
                   1131: #define FUSE_MAX          37
                   1132:
                   1133: #define DAEMON_NULL       0
                   1134: #define DAEMON_DOCTOR     1
                   1135: #define DAEMON_ROLLWAND   2
                   1136: #define DAEMON_STOMACH    3
                   1137: #define DAEMON_RUNNERS    4
                   1138: #define DAEMON_MAX        5
                   1139:
                   1140: extern struct delayed_action d_list[MAXDAEMONS];
                   1141: extern struct daemon daemons[DAEMON_MAX];
                   1142: extern struct fuse fuses[FUSE_MAX];
                   1143:
                   1144: extern struct delayed_action *d_slot(void);
                   1145: extern struct delayed_action *find_slot(int id, int type);
                   1146: extern void start_daemon(int id, void *arg, int whendo);
                   1147: extern void kill_daemon(int id);
                   1148: extern void do_daemons(int now);
                   1149: extern void light_fuse(int id, void *arg, int time, int whendo);
                   1150: extern void lengthen_fuse(int id, int xtime);
                   1151: extern void extinguish_fuse(int id);
                   1152: extern void do_fuses(int flag);
                   1153: extern void activity(void);
                   1154:
                   1155: /* daemons.c */
                   1156:
                   1157: extern void doctor_spell_points(struct thing *tp);
                   1158: extern void runners(daemon_arg *arg);
                   1159: extern void doctor(daemon_arg *tp);
                   1160: extern void rollwand(daemon_arg *arg);
                   1161: extern void stomach(daemon_arg *arg);
                   1162: extern fuse swander(fuse_arg *arg);
                   1163: extern fuse unconfuse(fuse_arg *arg);
                   1164: extern fuse unscent(fuse_arg *arg);
                   1165: extern fuse scent(fuse_arg *arg);
                   1166: extern fuse unhear(fuse_arg *arg);
                   1167: extern fuse hear(fuse_arg *arg);
                   1168: extern fuse unsee(fuse_arg *arg);
                   1169: extern fuse unstink(fuse_arg *arg);
                   1170: extern fuse unclrhead(fuse_arg *arg);
                   1171: extern fuse unphase(fuse_arg *arg);
                   1172: extern fuse sight(fuse_arg *arg);
                   1173: extern fuse res_strength(fuse_arg *arg);
                   1174: extern fuse nohaste(fuse_arg *arg);
                   1175: extern fuse noslow(fuse_arg *arg);
                   1176: extern fuse suffocate(fuse_arg *arg);
                   1177: extern fuse cure_disease(fuse_arg *arg);
                   1178: extern fuse un_itch(fuse_arg *arg);
                   1179: extern fuse appear(fuse_arg *arg);
                   1180: extern fuse unelectrify(fuse_arg *arg);
                   1181: extern fuse unshero(fuse_arg *arg);
                   1182: extern fuse unbhero(fuse_arg *arg);
                   1183: extern fuse undisguise(fuse_arg *arg);
                   1184: extern fuse unsummon(fuse_arg *monst);
                   1185: extern fuse ungaze(fuse_arg *arg);
                   1186: extern fuse shero(fuse_arg *arg);
                   1187: extern fuse uncold(fuse_arg *arg);
                   1188: extern fuse unhot(fuse_arg *arg);
                   1189: extern fuse unfly(fuse_arg *arg);
                   1190: extern fuse unbreathe(fuse_arg *arg);
                   1191: extern fuse unregen(fuse_arg *arg);
                   1192: extern fuse unsupereat(fuse_arg *arg);
                   1193: extern fuse unshield(fuse_arg *arg);
                   1194: extern fuse unmshield(fuse_arg *arg);
                   1195: extern fuse untruesee(fuse_arg *arg);
                   1196: extern fuse wghtchk(fuse_arg *arg);
                   1197:
                   1198: /* encumb.h */
                   1199:
                   1200: extern void updpack(void);
                   1201: extern int  packweight(void);
                   1202: extern int  itemweight(struct object *wh);
                   1203: extern int  playenc(void);
                   1204: extern int  totalenc(void);
                   1205: extern int  hitweight(void);
                   1206:
                   1207: /* fight.c */
                   1208:
                   1209: extern void do_fight(coord dir, int tothedeath);
                   1210: extern int  fight(coord *mp, struct object *weap, int thrown);
                   1211: extern int  attack(struct thing *mp, struct object *weapon, int thrown);
                   1212: extern int  mon_mon_attack(struct thing *attacker, struct linked_list *mon,
                   1213:                            struct object *weapon, int thrown);
                   1214: extern int  swing(int class, int at_lvl, int op_arm, int wplus);
                   1215: extern void init_exp(void);
                   1216: extern int  next_exp_level(int print_message);
                   1217: extern void check_level(void);
                   1218: extern int  roll_em(struct thing *att_er, struct thing *def_er,
                   1219:                     struct object *weap, int thrown, struct object *cur_weapon);
                   1220: extern const char *prname(char *who);
                   1221: extern void  hit(char *ee);
                   1222: extern void  miss(char *ee);
                   1223: extern int   save_throw(int which, struct thing *tp);
                   1224: extern int   save(int which);
                   1225: extern int   dext_plus(int dexterity);
                   1226: extern int   dext_prot(int dexterity);
                   1227: extern int   str_plus(int str);
                   1228: extern int   add_dam(int str);
                   1229: extern int   hung_dam(void);
                   1230: extern void  raise_level(void);
                   1231: extern void  thunk(struct object *weap, char *mname);
                   1232: extern void  m_thunk(struct object *weap, char *mname);
                   1233: extern void  bounce(struct object *weap, char *mname);
                   1234: extern void  m_bounce(struct object *weap, char *mname);
                   1235: extern void  remove_monster(coord *mp, struct linked_list *item);
                   1236: extern int   is_magic(struct object *obj);
                   1237: extern void  killed(struct thing *killer,struct linked_list *item,
                   1238:                     int print_message, int give_points);
                   1239: extern struct object *wield_weap(struct object *weapon, struct thing *mp);
                   1240: extern void  summon_help(struct thing *mons, int force);
                   1241: extern int   maxdamage(char *cp);
                   1242:
                   1243: /* getplay.c */
                   1244:
                   1245: extern int   geta_player(void);
                   1246: extern void  puta_player(void);
                   1247: extern void  do_getplayer(void);
                   1248: extern void  print_stored(void);
                   1249: extern char *which_class(int c_class);
                   1250:
                   1251: /* ident.c */
                   1252:
                   1253: extern char    print_letters[];
                   1254: extern int     get_ident(struct object *obj_p);
                   1255: extern void    free_ident(struct object *obj_p);
                   1256: extern int     unprint_id(char *print_id);
                   1257: extern int     max_print(void);
                   1258:
                   1259: /* init.c */
                   1260:
                   1261: extern void init_materials(void);
                   1262: extern void init_player(void);
                   1263: extern void init_flags(void);
                   1264: extern void init_things(void);
                   1265: extern void init_fd(void);
                   1266: extern void init_colors(void);
                   1267: extern void init_names(void);
                   1268: extern void init_stones(void);
                   1269: extern void badcheck(char *name, struct magic_item *magic, int bound);
                   1270:
                   1271: /* io.c */
                   1272:
                   1273: extern int get_string(char *buffer, WINDOW *win);
                   1274: extern void msg(const char *fmt, ...);
                   1275: extern void addmsg(const char *fmt, ...);
                   1276: extern void endmsg(void);
                   1277: extern void doadd(const char *fmt, va_list ap);
                   1278: extern char readchar(void);
                   1279: extern char readcharw(WINDOW *scr);
                   1280: extern void status(int display);
                   1281: extern void wait_for(int ch);
                   1282: extern void show_win(WINDOW *scr, char *message);
                   1283: extern void restscr(WINDOW *scr);
                   1284: extern void add_line(const char *fmt, ...);
                   1285: extern void end_line(void);
                   1286: extern void hearmsg(const char *fmt, ...);
                   1287: extern void seemsg(const char *fmt, ...);
                   1288:
                   1289: /* list.c */
                   1290:
                   1291: extern void *ur_alloc(size_t size);
                   1292: extern void  ur_free(void *buf_p);
                   1293: extern void  _detach(struct linked_list **list, struct linked_list *item);
                   1294: extern void  _attach(struct linked_list **list, struct linked_list *item);
                   1295: extern void  _attach_after(linked_list **list_pp, linked_list *list_p, linked_list *new_p);
                   1296: extern void  _free_list(struct linked_list **ptr);
                   1297: extern void  discard(struct linked_list *item);
                   1298: extern void  throw_away(struct object *ptr);
                   1299: extern struct linked_list *new_item(int size);
                   1300: extern void *new_alloc(size_t size);
                   1301: extern struct linked_list *new_list(void);
                   1302:
                   1303: /* magic.c */
                   1304:
                   1305: /* for printing out messages */
                   1306:
                   1307: #define CAST_NORMAL       0x000   /* cast normal version  */
                   1308: #define CAST_CURSED       0x001   /* cast cursed version  */
                   1309: #define CAST_BLESSED      0x002   /* cast blessed version */
                   1310: #define CAST_CROWN        0x010   /* crown helped out     */
                   1311: #define CAST_SEPTRE       0x020   /* septre helped out    */
                   1312:
                   1313: #define MAX_SPELLS          100   /* Max # sorted_spells  */
                   1314: #define MIN_FUMBLE_CHANCE     5
                   1315: #define MAX_FUMBLE_CHANCE    95
                   1316:
                   1317: /* Spells that a monster can cast */
                   1318:
                   1319: #define M_SELFTELEP    0
                   1320: #define M_HLNG2        1
                   1321: #define M_REGENERATE   2
                   1322: #define M_HLNG         3
                   1323: #define NUM_RUN        4
                   1324: #define M_HASTE        4
                   1325: #define M_SEEINVIS     5
                   1326: #define M_SHERO        6
                   1327: #define M_PHASE        7
                   1328: #define M_INVIS        8
                   1329: #define M_CANCEL       9
                   1330: #define M_OFFENSE     10
                   1331:
                   1332:
                   1333: struct spells
                   1334: {
                   1335:     int sp_level;   /* level of casting spell */
                   1336:     int sp_which;   /* which scroll or potion */
                   1337:     unsigned long sp_flags;   /* scroll, blessed, known */
                   1338:     int sp_cost;    /* generated in incant()  */
                   1339: };
                   1340:
                   1341:
                   1342: extern void incant(struct thing *caster, coord shoot_dir);
                   1343: extern char *spell_name(struct spells *sp, char *buf);
                   1344: extern char *spell_abrev(struct spells *sp, char *buf);
                   1345: extern void fumble_spell(struct thing *caster, int num_fumbles);
                   1346: extern void learn_new_spells(void);
                   1347: extern struct spells *pick_monster_spell(struct thing *caster);
                   1348: extern int sort_spells(const void *a, const void *b);
                   1349:
                   1350: /* magicitm.c */
                   1351:
                   1352: extern struct magic_item    things[];   /* Chances for each type of item*/
                   1353: extern struct magic_item    s_magic[];  /* Names and chances for scrolls*/
                   1354: extern struct magic_item    p_magic[];  /* Names and chances for potions*/
                   1355: extern struct magic_item    r_magic[];  /* Names and chances for rings  */
                   1356: extern struct magic_item    ws_magic[]; /* Names and chances for sticks */
                   1357: extern struct magic_item    fd_data[];  /* Names and chances for food   */
                   1358: extern struct init_weps     weaps[];    /* weapons and attributes   */
                   1359: extern struct init_armor    armors[];   /* armors and attributes    */
                   1360: extern struct init_artifact arts[];     /* artifacts and attributes     */
                   1361: extern int  maxarmors;
                   1362: extern int  maxartifact;
                   1363: extern int  maxfoods;
                   1364: extern int  maxpotions;
                   1365: extern int  maxrings;
                   1366: extern int  maxscrolls;
                   1367: extern int  maxsticks;
                   1368: extern int  maxweapons;
                   1369: extern int  numthings;
                   1370: extern char *s_names[];         /* Names of the scrolls */
                   1371: extern char *p_colors[];        /* Colors of the potions */
                   1372: extern char *r_stones[];        /* Stone settings of the rings */
                   1373: extern char *guess_items[MAXMAGICTYPES][MAXMAGICITEMS];
                   1374:                 /* Players guess at what magic is */
                   1375: extern int know_items[MAXMAGICTYPES][MAXMAGICITEMS];
                   1376:                 /* Does he know what a magic item does */
                   1377: extern char *ws_type[];     /* Is it a wand or a staff */
                   1378: extern char *ws_made[];     /* What sticks are made of */
                   1379:
                   1380: /* main.c */
                   1381:
                   1382: extern FILE *fd_score;
                   1383: extern FILE *file_log;
                   1384: extern int   summoned;
                   1385: extern coord dta;
                   1386: extern int   main(int argc, char *argv[]);
                   1387: extern void  fatal(char *s);
                   1388: extern int rnd(int range);
                   1389: extern unsigned char ucrnd(unsigned char range);
                   1390: extern short srnd(short range);
                   1391: extern unsigned long ulrnd(unsigned long range);
                   1392: extern int   roll(int number, int sides);
                   1393:
                   1394: /* maze.c */
                   1395:
                   1396: extern void do_maze(void);
                   1397: extern void draw_maze(void);
                   1398: extern char *moffset(int y, int x);
                   1399: extern char *foffset(int y, int x);
                   1400: extern int findcells(int y, int x);
                   1401: extern void rmwall(int newy, int newx, int oldy, int oldx);
                   1402: extern void crankout(void);
                   1403:
                   1404: /* memory.c */
                   1405:
                   1406: extern void  mem_debug(const int level);
                   1407: extern void  mem_tracking(int flag);
                   1408: extern int   mem_check(char *fname, int line);
                   1409: extern void *mem_malloc(const size_t bytes);
                   1410: extern void  mem_free(const void *ptr);
                   1411: extern void *mem_realloc(const void *ptr, const size_t new_size);
                   1412: extern int   mem_validate(const void *ptr);
                   1413:
                   1414: /* misc.c */
                   1415:
                   1416: extern char *tr_name(char ch, char *buf);
                   1417: extern void  look(int wakeup);
                   1418: extern char  secretdoor(int y, int x);
                   1419: extern struct linked_list *find_obj(int y, int x);
                   1420: extern void  eat(void);
                   1421: extern void  chg_str(int amt, int both, int lost);
                   1422: extern void  chg_dext(int amt, int both, int lost);
                   1423: extern void  add_haste(int blessed);
                   1424: extern void  aggravate(void);
                   1425: extern char  *vowelstr(char *str);
                   1426: extern int is_current(struct object *obj);
                   1427: extern int get_dir(void);
                   1428: extern int is_wearing(int type);
                   1429: extern int maze_view(int y, int x);
                   1430: extern void listen(void);
                   1431: extern void nothing_message(int flags);
                   1432: extern void feel_message(void);
                   1433: extern int const_bonus(void);
                   1434: extern int int_wis_bonus(void);
                   1435: extern void electrificate(void);
                   1436: extern void feed_me(int hungry_state);
                   1437: extern int get_monster_number(char *message);
                   1438:
                   1439: /* monsdata.c */
                   1440:
                   1441: extern struct monster monsters[];
                   1442: extern int nummonst;
                   1443:
                   1444: /* monsters.c */
                   1445:
                   1446: extern struct linked_list *summon_monster(int type, int familiar, int print_message);
                   1447: extern int randmonster(int wander, int grab);
                   1448: extern void new_monster(struct linked_list *item, int type, coord *cp, int max_monster);
                   1449: extern void wanderer(void);
                   1450: extern struct linked_list *wake_monster(int y, int x);
                   1451: extern void genocide(int flags);
                   1452: extern void id_monst(int monster);
                   1453: extern void check_residue(struct thing *tp);
                   1454: extern void sell(struct thing *tp);
                   1455: extern void carried_weapon(struct thing *owner, struct object *weapon);
                   1456:
                   1457: /* move.c */
                   1458:
                   1459: extern coord nh;
                   1460: extern void do_run(char ch);
                   1461: extern int  step_ok(int y, int x, int can_on_monst, struct thing *flgptr);
                   1462: extern void corr_move(int dy, int dx);
                   1463: extern void do_move(int dy, int dx);
                   1464: extern void light(coord *cp);
                   1465: extern int  blue_light(int flags);
                   1466: extern char  show(int y, int x);
                   1467: extern char be_trapped(struct thing *th, coord tc);
                   1468: extern void dip_it(void);
                   1469: extern struct trap *trap_at(int y, int x);
                   1470: extern void set_trap(struct thing *tp, int y, int x);
                   1471: extern coord rndmove(struct thing *who);
                   1472: extern int isatrap(int ch);
                   1473:
                   1474: /* newlvl.c */
                   1475:
                   1476: extern void new_level(LEVTYPE ltype, int special);
                   1477: extern void put_things(LEVTYPE ltype);
                   1478: extern int throne_monster;
                   1479: extern void do_throne(int special);
                   1480: extern void create_lucifer(coord *stairs);
                   1481:
                   1482: /* options.c */
                   1483:
                   1484: typedef union
                   1485: {
                   1486:     void *varg;
                   1487:     char *str;
                   1488:     int  *iarg;
                   1489: } opt_arg;
                   1490:
                   1491: struct optstruct
                   1492: {
                   1493:     char    *o_name;    /* option name */
                   1494:     char    *o_prompt;  /* prompt for interactive entry */
                   1495:     opt_arg o_opt;     /* pointer to thing to set */
                   1496:     void    (*o_putfunc)(opt_arg *arg,WINDOW *win);/* func to print value */
                   1497:     int     (*o_getfunc)(opt_arg *arg,WINDOW *win);/* func to get value  */
                   1498: };
                   1499:
                   1500: typedef struct optstruct    OPTION;
                   1501:
                   1502: extern void parse_opts(char *str);
                   1503: extern void option(void);
                   1504: extern void put_bool(opt_arg *iarg, WINDOW *win);
                   1505: extern void put_str(opt_arg *str, WINDOW *win);
                   1506: extern void put_abil(opt_arg *ability, WINDOW *win);
                   1507: extern void put_inv(opt_arg *inv, WINDOW *win);
                   1508: extern int  get_bool(opt_arg *bp, WINDOW *win);
                   1509: extern int  get_str(opt_arg *opt, WINDOW *win);
                   1510: extern int  get_abil(opt_arg *abil, WINDOW *win);
                   1511: extern int  get_inv(opt_arg *inv, WINDOW *win);
                   1512:
                   1513: /* pack.c */
                   1514:
                   1515: extern void swap_top(struct linked_list *top, struct linked_list *node);
                   1516: extern void get_all(struct linked_list *top);
                   1517: extern struct linked_list *get_stack(struct linked_list *item);
                   1518: extern int add_pack(struct linked_list  *item, int print_message);
                   1519: extern void pack_report(object *obj, int print_message, char *message);
                   1520: extern void inventory(struct linked_list *container, int type);
                   1521: extern void pick_up(char ch);
                   1522: extern struct object *get_object(struct linked_list *container, char *purpose, int type, int (*bff_p)(struct object *obj, bag_arg *junk) );
                   1523: extern struct linked_list *get_item(char *purpose, int type);
                   1524: extern void del_pack(struct linked_list *what);
                   1525: extern void discard_pack(struct object *obj_p);
                   1526: extern void rem_pack(struct object *obj_p);
                   1527: extern void cur_null(struct object *op);
                   1528: extern void idenpack(void);
                   1529: extern void show_floor(void);
                   1530:
                   1531: /* passages.c */
                   1532:
                   1533: struct rdes
                   1534: {
                   1535:     int conn[MAXROOMS];     /* possible to connect to room i? */
                   1536:     int isconn[MAXROOMS];   /* connection been made to room i? */
                   1537:     int ingraph;            /* this room in graph already? */
                   1538: };
                   1539:
                   1540: extern void do_passages(void);
                   1541: extern void conn(int r1, int r2);
                   1542: extern void door(struct room *rm, coord *cp);
                   1543:
                   1544: /* player.c */
                   1545:
                   1546: extern void prayer(void);
                   1547: extern int  gsense(void);
                   1548: extern int  is_stealth(struct thing *tp);
                   1549: extern void steal(void);
                   1550: extern void affect(void);
                   1551: extern void undead_sense(void);
                   1552:
                   1553: /* potions.c */
                   1554:
                   1555: extern void quaff(struct thing *quaffer, int which, int flag);
                   1556: extern void lower_level(int who);
                   1557: extern void res_dexterity(void);
                   1558: extern void res_wisdom(void);
                   1559: extern void res_intelligence(void);
                   1560: extern void add_strength(int cursed);
                   1561: extern void add_intelligence(int cursed);
                   1562: extern void add_wisdom(int cursed);
                   1563: extern void add_dexterity(int cursed);
                   1564: extern void add_const(int cursed);
                   1565: extern void monquaff(struct thing *quaffer, int which, int flag);
                   1566:
                   1567: /* properti.c */
                   1568:
                   1569: extern int baf_print_item(struct object *obj_p, bag_arg *type, int id);
                   1570: extern int baf_identify(struct object *obj_p, bag_arg *junk, int id);
                   1571: extern int baf_curse(struct object *obj_p, bag_arg *junk, int id);
                   1572: extern int baf_decrement_test(struct object *obj_p, bag_arg *count_p, int id);
                   1573: extern int baf_increment(struct object *obj_p, bag_arg *count_p, int id);
                   1574: extern int bafcweapon(struct object *obj_p, bag_arg *junk, int id);
                   1575: extern int bafcarmor(struct object *obj_p, bag_arg *junk, int id);
                   1576: extern int bff_group(struct object *obj_p, bag_arg *new_obj_p);
                   1577: extern int bff_callable(struct object *obj_p, bag_arg *junk);
                   1578: extern int bff_markable(struct object *obj_p, bag_arg *junk);
                   1579: extern int bffron(object *obj_p, bag_arg *junk);
                   1580: extern int bff_zappable(struct object *obj_p, bag_arg *junk);
                   1581:
                   1582: /* random.c */
                   1583:
                   1584: extern void ur_srandom(unsigned x);
                   1585: extern long ur_random(void);
                   1586:
                   1587: /* rings.c */
                   1588:
                   1589: extern void ring_on(void);
                   1590: extern void ring_off(void);
                   1591: extern int ring_eat(int hand);
                   1592: extern char *ring_num(struct object *obj, char *buf);
                   1593: extern int   ring_value(int type);
                   1594:
                   1595: /* rip.c */
                   1596:
                   1597: extern void death(int monst);
                   1598: extern void score(long amount, int lvl, int flags, int monst);
                   1599: extern void total_winner(void);
                   1600: extern char *killname(int monst, char *buf);
                   1601: extern void showpack(char *howso);
                   1602: extern void byebye(void);
                   1603: extern int  save_resurrect(int bonus);
                   1604:
                   1605: /* rogue.c */
                   1606:
                   1607: extern const char *monstern;
                   1608: extern const struct h_list helpstr[];
                   1609: extern const char *cnames[][15];      /* Character level names */
                   1610: extern char *spacemsg;
                   1611: extern char *morestr;
                   1612: extern char *retstr;
                   1613:
                   1614: /* state.c */
                   1615:
                   1616: extern int mpos;           /* Where cursor is on top line */
                   1617: extern struct trap    traps[];
                   1618: extern struct room    rooms[];      /* One for each room -- A level */
                   1619: extern struct thing   player;       /* The rogue */
                   1620: extern struct thing  *beast;        /* The last monster attacking */
                   1621: extern struct object *cur_armor;    /* What a well dresssed rogue wears */
                   1622: extern struct object *cur_weapon;   /* Which weapon he is wielding */
                   1623: extern struct object *cur_ring[];   /* What rings are being worn */
                   1624: extern struct linked_list *fam_ptr;     /* A ptr to the familiar */
                   1625: extern struct linked_list *lvl_obj;     /* List of objects on this level */
                   1626: extern struct linked_list *mlist;       /* List of monsters on the level */
                   1627: extern struct linked_list *curr_mons;   /* The mons. currently moving */
                   1628: extern struct linked_list *next_mons;   /* The mons. after curr_mons */
                   1629:
                   1630: extern int  prscore;    /* Print scores */
                   1631: extern int  prversion;  /* Print version info */
                   1632:
                   1633: extern WINDOW   *cw;            /* Window that the player sees */
                   1634: extern WINDOW   *hw;            /* Used for the help command */
                   1635: extern WINDOW   *mw;            /* Used to store mosnters */
                   1636: extern LEVTYPE  levtype;
                   1637: extern coord    delta;          /* Change indicated to get_dir() */
                   1638:
                   1639: extern char *release;       /* Release number of rogue */
                   1640: extern char *lastfmt;
                   1641: extern char *lastarg;
                   1642: extern unsigned long    total;      /* Total dynamic memory bytes */
                   1643: extern long purse;         /* How much gold the rogue has */
                   1644: extern int line_cnt;       /* Counter for inventory style */
                   1645: extern int newpage;
                   1646: extern int resurrect;      /* resurrection counter */
                   1647: extern int foodlev;        /* how fast he eats food */
                   1648: extern int see_dist;       /* (how far he can see)^2 */
                   1649: extern int level;          /* What level rogue is on */
                   1650: extern int ntraps;         /* Number of traps on this level */
                   1651: extern int no_command;     /* Number of turns asleep */
                   1652: extern int no_food;        /* Number of levels without food */
                   1653: extern int count;          /* Number of times to repeat command */
                   1654: extern int dnum;           /* Dungeon number */
                   1655: extern int max_level;      /* Deepest player has gone */
                   1656: extern int food_left;      /* Amount of food in hero's stomach */
                   1657: extern int group;          /* Current group number */
                   1658: extern int hungry_state;       /* How hungry is he */
                   1659: extern int infest_dam;     /* Damage from parasites */
                   1660: extern int lost_str;       /* Amount of strength lost */
                   1661: extern int lost_dext;      /* amount of dexterity lost */
                   1662: extern int hold_count;     /* Number of monsters holding player */
                   1663: extern int trap_tries;     /* Number of attempts to set traps */
                   1664: extern int has_artifact;       /* set for possesion of artifacts */
                   1665: extern int picked_artifact;    /* set for any artifacts picked up */
                   1666: extern int msg_index;      /* pointer to current message buffer */
                   1667: extern int luck;           /* how expensive things to buy thing */
                   1668: extern int fam_type;       /* Type of familiar */
                   1669: extern int times_prayed;       /* The number of time prayed */
                   1670: extern int mons_summoned;      /* Number of summoned monsters */
                   1671: extern int char_type;      /* what type of character is player */
                   1672: extern int pool_teleport;      /* just teleported from a pool */
                   1673: extern int inwhgt;         /* true if from wghtchk() */
                   1674: extern int running;        /* True if player is running */
                   1675: extern int fighting;       /* True if player is fighting */
                   1676: extern int playing;        /* True until he quits */
                   1677: extern int wizard;         /* True if allows wizard commands */
                   1678: extern int wiz_verbose;        /* True if show debug messages */
                   1679: extern int after;          /* True if we want after daemons */
                   1680: extern int fight_flush;        /* True if toilet input */
                   1681: extern int terse;          /* True if we should be short */
                   1682: extern int doorstop;       /* Stop running when we pass a door */
                   1683: extern int jump;           /* Show running as series of jumps */
                   1684: extern int door_stop;      /* Current status of doorstop */
                   1685: extern int firstmove;      /* First move after setting door_stop */
                   1686: extern int waswizard;      /* Was a wizard sometime */
                   1687: extern int canwizard;      /* Will be permitted to do this */
                   1688: extern int askme;          /* Ask about unidentified things */
                   1689: extern int moving;         /* move using 'm' command */
                   1690: extern int use_savedir;    /* Savefile is in system savedir */
                   1691:
                   1692: extern int inv_type;       /* Inven style. Bool so options works */
                   1693: extern char take;           /* Thing the rogue is taking */
                   1694: extern char PLAYER;         /* what the player looks like */
                   1695: extern char prbuf[];        /* Buffer for sprintfs */
                   1696: extern char runch;          /* Direction player is running */
                   1697: extern char whoami[];       /* Name of player */
                   1698: extern char fruit[];        /* Favorite fruit */
                   1699: extern char msgbuf[10][2 * LINELEN];    /* message buffer */
                   1700: extern char file_name[];        /* Save file name */
                   1701: extern char score_file[];       /* Score file name */
                   1702:
                   1703: extern struct linked_list   *arrow, *bolt, *rock, *silverarrow, *fbbolt;
                   1704: extern struct linked_list   *bullet, *firearrow, *dart, *dagger, *shuriken;
                   1705: extern struct linked_list   *oil, *grenade;
                   1706: extern struct room  *oldrp;     /* Roomin(&oldpos) */
                   1707:
                   1708: extern void ur_write_thing(FILE *savef, struct thing *t);
                   1709: extern struct thing *ur_read_thing(FILE *savef);
                   1710: extern void ur_write_object_stack(FILE *savef, struct linked_list *l);
                   1711: extern void ur_write_bag(FILE *savef, struct linked_list *l);
                   1712: extern struct linked_list *ur_read_bag(FILE *savef);
                   1713: extern struct linked_list *ur_read_object_stack(FILE *savef);
                   1714: extern int restore_file(FILE *savef);
                   1715:
                   1716: /* rooms.c */
                   1717:
                   1718: extern void do_rooms(void);
                   1719: extern void draw_room(struct room *rp);
                   1720: extern void horiz(int cnt);
                   1721: extern void vert(int cnt);
                   1722: extern void rnd_pos(struct room *rp, coord *cp);
                   1723: extern int  rnd_room(void);
                   1724:
                   1725: /* save.c */
                   1726:
                   1727: extern int restore(char *file);
                   1728: extern int save_game(void);
                   1729: extern void save_file(FILE *savefd);
                   1730:
                   1731: /* scrolls.c */
                   1732:
                   1733: extern void read_scroll(struct thing *reader, int which, int flags);
                   1734: extern struct linked_list *creat_mons(struct thing *person,int monster,int message);
                   1735: extern int place_mons(int y, int x, coord *pos);
                   1736: extern int is_r_on(struct object *obj);
                   1737: extern void monread(struct thing *reader, int which, int flags);
                   1738:
                   1739: /* status.c */
                   1740:
                   1741: extern int has_defensive_spell(struct thing th);
                   1742:
                   1743: /* sticks.c */
                   1744:
                   1745: extern void fix_stick(struct object *cur);
                   1746: extern void do_zap(struct thing *zapper, int which, unsigned long flags);
                   1747: extern void drain(int ymin, int ymax, int xmin, int xmax);
                   1748: extern char *charge_str(struct object *obj, char *buf);
                   1749: extern void shoot_bolt(struct thing *shooter, coord start, coord dir, int get_points, int reason, char *name, int damage);
                   1750: extern void monster_do_zap(struct thing *zapper, int which, int flags);
                   1751: extern void cancel_player(int not_unique);
                   1752:
                   1753: /* things.c */
                   1754:
                   1755: extern char *inv_name(struct object *obj, int lowercase);
                   1756: extern void rem_obj(struct linked_list *item, int dis);
                   1757: extern void add_obj(struct linked_list *item, int y, int x);
                   1758: extern int  drop(struct linked_list *item);
                   1759: extern int dropcheck(struct object *op);
                   1760: extern struct linked_list *new_thing(void);
                   1761: extern struct linked_list *spec_item(char type, int which, int hit, int damage);
                   1762: extern int pick_one(struct magic_item *magic, int nitems);
                   1763: extern char *blesscurse(long flags);
                   1764: extern int extras(void);
                   1765: extern char *name_type(int type);
                   1766: extern linked_list *make_item(object *obj_p);
                   1767: extern int is_member(char *list_p, int member);
                   1768:
                   1769: /* trader.c */
                   1770:
                   1771: extern void do_post(void);
                   1772: extern void buy_it(char itemtype, int flags);
                   1773: extern void sell_it(void);
                   1774: extern void describe_it(struct object *obj);
                   1775: extern int  open_market(void);
                   1776: extern int  get_worth(struct object *obj);
                   1777: extern void trans_line(void);
                   1778:
                   1779: /* verify.c */
                   1780:
                   1781: extern void  verify_function(const char *file, const int line);
                   1782:
                   1783: /* vers.c */
                   1784:
                   1785: extern char *save_format;
                   1786: extern char *version;
                   1787: extern char *release;
                   1788:
                   1789: /* weapons.c */
                   1790:
                   1791: extern coord do_motion(int ob, int ydelta, int xdelta, struct thing *tp);
                   1792: extern void fall(struct thing *tp, struct linked_list *item, int pr, int
                   1793: player_owned);
                   1794: extern int hit_monster(int y, int x, struct object *weapon, struct thing *thrower);
                   1795: extern int wield_ok(struct thing *wieldee, struct object *obj, int print_message);
                   1796: extern int shoot_ok(int ch);
                   1797: extern int fallpos(coord pos, coord *newpos);
                   1798: extern void wield(void);
                   1799: extern char *num(int n1, int n2, char *buf);
                   1800: extern void init_weapon(struct object *weap, int type);
                   1801: extern void missile(int ydelta, int xdelta, struct linked_list *item, struct thing *tp);
                   1802:
                   1803: /* wizard.c */
                   1804:
                   1805: extern void whatis(struct linked_list *what);
                   1806: extern void teleport(void);
                   1807: extern int passwd(void);
                   1808:
                   1809: /* mdport.c */
                   1810: char *md_strdup(const char *s);
                   1811: long md_random(void);
                   1812: void md_srandom(long seed);
                   1813: int md_readchar(WINDOW *win);
                   1814: int md_getuid(void);
                   1815: void md_normaluser(void);
                   1816: void md_onsignal_autosave(void);
                   1817: void md_ignore_signals(void);
                   1818:
                   1819: #define NOOP(x) (x += 0)
                   1820: #define CCHAR(x) ( (char) (x & A_CHARTEXT) )

CVSweb