[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     ! 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