[BACK]Return to global.c CVS log [TXT][DIR] Up to [contributed] / early-roguelike / srogue

Annotation of early-roguelike/srogue/global.c, Revision 1.1

1.1     ! rubenllo    1: /*
        !             2:  * global variable declaration
        !             3:  *
        !             4:  * @(#)global.c        9.0     (rdk)    7/17/84
        !             5:  *
        !             6:  * Super-Rogue
        !             7:  * Copyright (C) 1984 Robert D. Kindelberger
        !             8:  * All rights reserved.
        !             9:  *
        !            10:  * Based on "Rogue: Exploring the Dungeons of Doom"
        !            11:  * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
        !            12:  * All rights reserved.
        !            13:  *
        !            14:  * See the file LICENSE.TXT for full copyright and licensing information.
        !            15:  */
        !            16:
        !            17: #include "rogue.h"
        !            18:
        !            19: struct room rooms[MAXROOMS];           /* One for each room -- A level */
        !            20: struct room *oldrp;                                    /* Roomin(&oldpos) */
        !            21: struct linked_list *mlist = NULL;      /* monsters on this level */
        !            22: struct thing player;                           /* The rogue */
        !            23: struct stats max_stats;                                /* The maximum for the player */
        !            24: struct linked_list *lvl_obj = NULL;    /* objects on this level */
        !            25: struct object *cur_weapon = NULL;      /* Which weapon he is weilding */
        !            26: struct object *cur_armor = NULL;       /* the rogue's armor */
        !            27: struct object *cur_ring[2];                    /* Which rings are being worn */
        !            28: struct stats *him;                                     /* pointer to hero stats */
        !            29: struct trap traps[MAXTRAPS];           /* traps on this level */
        !            30:
        !            31: int playuid;                           /* uid of current player */
        !            32: int playgid;                           /* gid of current player */
        !            33: int level = 1;                         /* What level rogue is on */
        !            34: int levcount = 0;                      /* # of active mons this level */
        !            35: int levtype = NORMLEV;         /* type of level this is, maze, etc. */
        !            36: int trader = 0;                                /* no. of purchases */
        !            37: int curprice = -1;                     /* current price of item */
        !            38: int purse = 0;                         /* How much gold the rogue has */
        !            39: int mpos = 0;                          /* Where cursor is on top line */
        !            40: int ntraps;                                    /* # of traps on this level */
        !            41: int packvol = 0;                       /* volume of things in pack */
        !            42: int total = 0;                         /* Total dynamic memory bytes */
        !            43: int demoncnt = 0;                      /* number of active daemons */
        !            44: int lastscore = -1;                    /* Score before this turn */
        !            45: int no_food = 0;                       /* # of levels without food */
        !            46: int seed;                                      /* Random number seed */
        !            47: int dnum;                                      /* Dungeon number */
        !            48: int count = 0;                         /* # of times to repeat cmd */
        !            49: int fung_hit = 0;                      /* # of time fungi has hit */
        !            50: int quiet = 0;                         /* # of quiet turns */
        !            51: int max_level = 1;                     /* Deepest player has gone */
        !            52: int food_left = HUNGERTIME;    /* Amount of food stomach */
        !            53: int group = NEWGROUP;          /* Current group number */
        !            54: int hungry_state = F_OKAY;     /* How hungry is he */
        !            55: int foodlev = 1;                       /* how fast he eats food */
        !            56: int ringfood = 0;                      /* rings affect on food consumption */
        !            57: char take;                                     /* Thing the rogue is taking */
        !            58: char runch;                                    /* Direction player is running */
        !            59: char curpurch[15];                     /* name of item ready to buy */
        !            60:
        !            61: char prbuf[LINLEN];                    /* Buffer for sprintfs */
        !            62: char whoami[LINLEN];           /* Name of player */
        !            63: char fruit[LINLEN];                    /* Favorite fruit */
        !            64: char huh[LINLEN];                      /* The last message printed */
        !            65: char file_name[256];           /* Save file name */
        !            66: char scorefile[LINLEN];                /* place for scorefile */
        !            67: char home[LINLEN];                     /* User's home directory */
        !            68: char outbuf[BUFSIZ];           /* Output buffer for stdout */
        !            69:
        !            70: char *s_guess[MAXSCROLLS];             /* his guess at what scroll is */
        !            71: char *p_guess[MAXPOTIONS];             /* his guess at what potion is */
        !            72: char *r_guess[MAXRINGS];               /* his guess at what ring is */
        !            73: char *ws_guess[MAXSTICKS];             /* his guess at what wand is */
        !            74:
        !            75: bool isfight = FALSE;          /* true if player is fighting */
        !            76: bool nlmove = FALSE;           /* true when transported to new level */
        !            77: bool inpool = FALSE;           /* true if hero standing in pool */
        !            78: bool inwhgt = FALSE;           /* true if from wghtchk() */
        !            79: bool running = FALSE;          /* True if player is running */
        !            80: bool playing = TRUE;           /* True until he quits */
        !            81: bool wizard = FALSE;           /* True if he is a wizard */
        !            82: bool after = TRUE;                     /* True if we want after daemons */
        !            83: bool door_stop = FALSE;                /* Stop run when we pass a door */
        !            84: bool firstmove = FALSE;                /* First move after door_stop */
        !            85: bool waswizard = FALSE;                /* Was a wizard sometime */
        !            86: bool amulet = FALSE;           /* He found the amulet */
        !            87: bool in_shell = FALSE;         /* True if executing a shell */
        !            88: bool nochange = FALSE;         /* true if last stat same as now */
        !            89: bool use_savedir = FALSE;      /* true if using system savefiles */
        !            90:
        !            91: bool s_know[MAXSCROLLS];               /* Does he know about a scroll */
        !            92: bool p_know[MAXPOTIONS];               /* Does he know about a potion */
        !            93: bool r_know[MAXRINGS];                 /* Does he know about a ring */
        !            94: bool ws_know[MAXSTICKS];               /* Does he know about a stick */
        !            95:
        !            96: char spacemsg[] =      { "-- Press space to continue --" };
        !            97: char morestr[] =       { "-- More --" };
        !            98: char retstr[] =                { "[Press return to continue]" };
        !            99: char wizstr[] =                { "Wizards Password: " };
        !           100: char illegal[] =       { "Illegal command '%s'." };
        !           101: char callit[] =                { "Call it: " };
        !           102: char starlist[] =      { " (* for a list)" };
        !           103:
        !           104: FILE *scoreboard = NULL;       /* Scoreboard file */
        !           105: FILE *logfile = NULL;
        !           106:
        !           107: struct coord oldpos;           /* Pos before last look() call */
        !           108: struct coord delta;                    /* Change indicated to get_dir() */
        !           109: struct coord stairs;           /* where the stairs are put */
        !           110: struct coord rndspot = { -1, -1 };     /* for random teleporting */
        !           111:
        !           112: struct monster *mtlev[MONRANGE];
        !           113:
        !           114: #define _r {10,10,10,10}       /* real ability (unused) */
        !           115: #define _p 0,0,0,0                     /* hit points, pack, carry (unused) */
        !           116: #define _c 10                          /* constitution (unused) */
        !           117:
        !           118: /*
        !           119:  * NAME SHOW CARRY {LEVEL} FLAGS _r {STR DEX WIS _c} EXP LVL ARM _p DMG
        !           120:  */
        !           121: struct monster monsters[MAXMONS + 1] = {
        !           122: {"giant ant",'A',0,{3,12,1},ISMEAN,{_r,{10,16,5,_c},10,2,3,_p,"1d6"}},
        !           123: {"bat",'B',0,{1,6,1},ISHUH,{_r,{10,10,10,_c},1,1,3,_p,"1d2"}},
        !           124: {"centaur",'C',15,{8,17,1},0,{_r,{16,10,15,_c},15,4,4,_p,"1d6/1d6"}},
        !           125: {"red dragon",'D',100,{21,500,0},ISGREED,{_r,{17,10,17,_c},9000,11,-1,_p,"1d8/1d8/3d10"}},
        !           126: {"floating eye",'E',0,{2,11,0},0,{_r,{10,10,10,_c},5,1,9,_p,"0d0"}},
        !           127: {"violet fungi",'F',0,{15,24,0},ISMEAN|ISSTUCK,{_r,{10,5,3,_c},85,8,2,_p,"000d0"}},
        !           128: {"gnome",'G',10,{6,15,1},0,{_r,{10,10,11,_c},8,1,5,_p,"1d6"}},
        !           129: {"hobgoblin",'H',0,{1,8,1},ISMEAN,{_r,{10,10,10,_c},3,1,5,_p,"1d8"}},
        !           130: {"invisible stalker",'I',0,{16,25,1},ISINVIS|ISHUH,{_r,{10,15,15,_c},120,8,2,_p,"4d4"}},
        !           131: {"jackal",'J',0,{1,6,1},ISMEAN,{_r,{10,10,10,_c},2,1,7,_p,"1d2"}},
        !           132: {"kobold",'K',0,{1,6,1},ISMEAN,{_r,{10,10,10,_c},1,1,8,_p,"1d4"}},
        !           133: {"leprechaun",'L',0,{7,16,0},0,{_r,{10,15,16,_c},10,3,8,_p,"1d1"}},
        !           134: {"mimic",'M',30,{19,500,0},0,{_r,{10,10,10,_c},140,8,7,_p,"3d4"}},
        !           135: {"nymph",'N',100,{11,20,0},0,{_r,{10,18,18,_c},40,3,9,_p,"0d0"}},
        !           136: {"orc",'O',15,{4,13,1},0,{_r,{10,10,10,10},5,1,6,_p,"1d8"}},
        !           137: {"purple worm",'P',70,{22,500,0},0,{_r,{18,5,10,_c},7000,15,6,_p,"2d12/2d4"}},
        !           138: {"quasit",'Q',30,{10,19,1},ISMEAN,{_r,{10,15,16,_c},35,3,2,_p,"1d2/1d2/1d4"}},
        !           139: {"rust monster",'R',0,{9,18,1},ISMEAN,{_r,{10,10,10,_c},25,5,2,_p,"0d0/0d0"}},
        !           140: {"snake",'S',0,{1,7,1},ISMEAN,{_r,{10,10,10,_c},3,1,5,_p,"1d3"}},
        !           141: {"troll",'T',50,{13,22,0},ISMEAN|ISREGEN,{_r,{10,10,11,_c},55,6,4,_p,"1d8/1d8/2d6"}},
        !           142: {"umber hulk",'U',40,{18,500,1},ISMEAN,{_r,{17,10,10,_c},130,8,2,_p,"3d4/3d4/2d5"}},
        !           143: {"vampire",'V',20,{20,500,1},ISMEAN|ISREGEN,{_r,{21,16,16,_c},380,8,1,_p,"1d10"}},
        !           144: {"wraith",'W',0,{14,23,1},ISMEAN,{_r,{10,10,10,_c},55,5,4,_p,"1d6"}},
        !           145: {"xorn",'X',0,{17,26,1},ISMEAN,{_r,{17,6,11,_c},120,7,-2,_p,"1d3/1d3/1d3/4d6"}},
        !           146: {"yeti",'Y',30,{12,21,1},ISMEAN,{_r,{10,10,10,_c},50,4,6,_p,"1d6/1d6"}},
        !           147: {"zombie",'Z',0,{5,14,1},ISMEAN,{_r,{10,10,10,_c},7,2,8,_p,"1d8"}},
        !           148: {"anhkheg",'a',10,{7,16,1},ISMEAN,{_r,{10,15,3,_c},20,3,2,_p,"3d6"}},
        !           149: {"giant beetle",'b',0,{9,18,1},ISMEAN,{_r,{10,15,10,_c},30,5,3,_p,"4d4"}},
        !           150: {"cockatrice",'c',100,{8,17,0},0,{_r,{10,10,11,_c},200,5,6,_p,"1d3"}},
        !           151: {"bone devil",'d',0,{27,500,1},ISMEAN,{_r,{18,10,16,_c},8000,12,-1,_p,"5d4"}},
        !           152: {"elasmosaurus",'e',0,{28,500,1},ISMEAN,{_r,{17,5,3,_c},4500,12,7,_p,"4d6"}},
        !           153: {"killer frog",'f',0,{3,8,1},ISMEAN,{_r,{10,10,10,_c},4,3,8,_p,"2d3/1d4"}},
        !           154: {"green dragon",'g',50,{25,500,1},0,{_r,{18,10,18,_c},7500,10,2,_p,"1d6/1d6/2d10"}},
        !           155: {"hell hound",'h',20,{10,19,1},ISMEAN,{_r,{10,15,10,_c},30,5,4,_p,"1d10"}},
        !           156: {"imp",'i',20,{2,9,1},ISMEAN|ISREGEN,{_r,{10,14,11,_c},6,2,1,_p,"1d4"}},
        !           157: {"jaguar",'j',0,{10,19,0},0,{_r,{10,10,11,_c},25,8,6,_p,"2d3/2d5"}},
        !           158: {"koppleganger",'k',20,{8,17,1},ISMEAN,{_r,{10,10,16,_c},35,4,5,_p,"1d12"}},
        !           159: {"lonchu",'l',15,{2,9,1},ISMEAN,{_r,{10,4,18,_c},5,2,1,_p,"1d4/1d4"}},
        !           160: {"minotaur",'m',0,{12,21,1},ISMEAN,{_r,{10,10,11,_c},40,8,6,_p,"1d3/2d4"}},
        !           161: {"neotyugh",'n',10,{14,23,1},ISMEAN,{_r,{10,6,4,_c},50,6,3,_p,"1d8/1d8/2d3"}},
        !           162: {"ogre",'o',50,{7,16,1},0,{_r,{20,10,10,_c},15,4,5,_p,"2d6"}},
        !           163: {"pseudo dragon",'p',50,{9,18,1},0,{_r,{10,10,16,_c},20,4,2,_p,"2d3/1d6"}},
        !           164: {"quellit",'q',85,{30,500,1},0,{_r,{17,10,10,_c},12500,17,0,_p,"2d10/2d6"}},
        !           165: {"rhynosphinx",'r',40,{26,500,0},0,{_r,{19,6,18,_c},5000,13,-1,_p,"2d10/2d8"}},
        !           166: {"shadow",'s',15,{5,14,1},ISMEAN|ISREGEN|ISINVIS,{_r,{10,17,18,_c},6,3,5,_p,"1d6"}},
        !           167: {"titanothere",'t',0,{19,500,0},0,{_r,{17,6,3,_c},750,14,6,_p,"2d8/1d6"}},
        !           168: {"ulodyte",'u',10,{2,8,1},ISMEAN,{_r,{10,10,10,_c},3,2,5,_p,"1d3/1d3"}},
        !           169: {"vrock",'v',0,{4,13,1},ISMEAN,{_r,{10,10,11,_c},8,3,2,_p,"1d4/1d6"}},
        !           170: {"wuccubi",'w',0,{14,23,1},ISMEAN,{_r,{10,10,10,_c},90,6,0,_p,"1d4/1d10"}},
        !           171: {"xonoclon",'x',0,{20,500,0},0,{_r,{19,10,4,_c},1750,14,0,_p,"3d8"}},
        !           172: {"yeenoghu",'y',10,{15,24,1},ISMEAN,{_r,{17,15,10,_c},250,8,1,_p,"3d6"}},
        !           173: {"zemure",'z',0,{1,6,1},ISMEAN|ISREGEN,{_r,{10,10,10,_c},4,2,7,_p,"1d4"}},
        !           174: {"devil Asmodeus",'A',-1,{1,500,1},ISMEAN|ISREGEN,{_r,{24,18,18,_c},500000,40,-10,_p,"4d10/4d10"}},
        !           175: };
        !           176:
        !           177: #undef _p              /* erase these definitions */
        !           178: #undef _c
        !           179: #undef _r
        !           180:
        !           181: struct h_list helpstr[] = {
        !           182:        { '?',  "       prints help" },
        !           183:        { '/',  "       identify object" },
        !           184:        { 'h',  "       left" },
        !           185:        { 'j',  "       down" },
        !           186:        { 'k',  "       up" },
        !           187:        { 'l',  "       right" },
        !           188:        { 'y',  "       up & left" },
        !           189:        { 'u',  "       up & right" },
        !           190:        { 'b',  "       down & left" },
        !           191:        { 'n',  "       down & right" },
        !           192:        { 'H',  "       run left" },
        !           193:        { 'J',  "       run down" },
        !           194:        { 'K',  "       run up" },
        !           195:        { 'L',  "       run right" },
        !           196:        { 'Y',  "       run up & left" },
        !           197:        { 'U',  "       run up & right" },
        !           198:        { 'B',  "       run down & left" },
        !           199:        { 'N',  "       run down & right" },
        !           200:        { 't',  "<dir>  throw something" },
        !           201:        { 'f',  "<dir>  forward until find something" },
        !           202:        { 'p',  "<dir>  zap a wand in a direction" },
        !           203:        { 'z',  "       zap a wand or staff" },
        !           204:        { '>',  "       go down a staircase" },
        !           205:        { 's',  "       search for trap/secret door" },
        !           206:        { '.',  "       (dot) rest for a while" },
        !           207:        { 'i',  "       inventory pack" },
        !           208:        { 'I',  "       inventory single item" },
        !           209:        { 'q',  "       quaff potion" },
        !           210:        { 'r',  "       read a scroll" },
        !           211:        { 'e',  "       eat food" },
        !           212:        { 'w',  "       wield a weapon" },
        !           213:        { 'W',  "       wear armor" },
        !           214:        { 'T',  "       take armor off" },
        !           215:        { 'P',  "       put on ring" },
        !           216:        { 'R',  "       remove ring" },
        !           217:        { 'd',  "       drop object" },
        !           218:        { 'c',  "       call object" },
        !           219:        { 'O',  "       examine/set options" },
        !           220:        { 'a',  "       display maximum stats" },
        !           221:        { 'D',  "       dip object in pool" },
        !           222:        { CTRL('L'),"   redraw screen" },
        !           223:        { ESCAPE,       "       cancel command" },
        !           224:        { '!',  "       shell escape" },
        !           225:        { 'S',  "       save game" },
        !           226:        { 'Q',  "       quit" },
        !           227:        { 0, 0 }
        !           228: };
        !           229:
        !           230: char *s_names[MAXSCROLLS];             /* Names of the scrolls */
        !           231: char *p_colors[MAXPOTIONS];            /* Colors of the potions */
        !           232: char *r_stones[MAXRINGS];              /* Stone settings of the rings */
        !           233: struct rod ws_stuff[MAXSTICKS];        /* Stuff for sticks */
        !           234:
        !           235: struct magic_item things[NUMTHINGS + 1] = {
        !           236:        { "potion",     257,     5, },
        !           237:        { "scroll",     250,    30, },
        !           238:        { "food",       185,     7, },
        !           239:        { "weapon",      92,     0, },
        !           240:        { "armor",       92,     0, },
        !           241:        { "ring",        62,     5, },
        !           242:        { "stick",       62,     0, },
        !           243:        { "amulet",      0,   -250, },
        !           244:        { NULL,          0,              0,     },
        !           245: };
        !           246:
        !           247: struct magic_item a_magic[MAXARMORS + 1] = {
        !           248:        { "leather armor",                      170,   5 },
        !           249:        { "ring mail",                          130,  30 },
        !           250:        { "studded leather armor",      130,  20 },
        !           251:        { "scale mail",                         120,   3 },
        !           252:        { "padded armor",                       100, 250 },
        !           253:        { "chain mail",                          90,  75 },
        !           254:        { "splint mail",                         90,  80 },
        !           255:        { "banded mail",                         90,  90 },
        !           256:        { "plate mail",                          50, 400 },
        !           257:        { "plate armor",                         30, 650 },
        !           258:        { NULL,                                           0,   0 },
        !           259: };
        !           260: struct init_armor armors[MAXARMORS] = {
        !           261:        { 8,    150,    500,    },
        !           262:        { 7,    250,    650,    },
        !           263:        { 7,    200,    550,    },
        !           264:        { 6,    400,    900,    },
        !           265:        { 6,    100,    450,    },
        !           266:        { 5,    300,    650,    },
        !           267:        { 4,    400,    700,    },
        !           268:        { 4,    350,    600,    },
        !           269:        { 3,    450,    950,    },
        !           270:        { 2,    350,    750,    },
        !           271: };
        !           272: struct magic_item w_magic[MAXWEAPONS + 1] = {
        !           273:        { "mace",                                70,  25 },
        !           274:        { "long sword",                  70,  60 },
        !           275:        { "short bow",                   60, 150 },
        !           276:        { "arrow",                               60,   2 },
        !           277:        { "dagger",                              20,   5 },
        !           278:        { "rock",                                20,   1 },
        !           279:        { "two-handed sword",    50, 120 },
        !           280:        { "sling",                               20,   5 },
        !           281:        { "dart",                                30,   3 },
        !           282:        { "crossbow",                    60,  70 },
        !           283:        { "crossbow bolt",               60,   3 },
        !           284:        { "spear",                               70,   8 },
        !           285:        { "trident",                     70,  90 },
        !           286:        { "spetum",                              70,  50 },
        !           287:        { "bardiche",                    70,  30 },
        !           288:        { "pike",                                70,  75 },
        !           289:        { "bastard sword",               60, 100 },
        !           290:        { "halberd",                     70,  40 },
        !           291:        { NULL,                                   0,   0 },
        !           292: };
        !           293:
        !           294: struct init_weps weaps[MAXWEAPONS] = {
        !           295:        { "2d4",  "1d3", 0, 100, 300, NONE },
        !           296:        { "1d10", "1d2", 0,  60, 180, NONE },
        !           297:        { "1d1",  "1d1", 0,  40, 190, NONE },
        !           298:        { "1d1",  "1d6", ISMANY|ISMISL, 5, 8, BOW },
        !           299:        { "1d6",  "1d4", ISMISL, 10, 30, NONE },
        !           300:        { "1d2",  "1d4", ISMANY|ISMISL, 5, 10, SLING },
        !           301:        { "3d6",  "1d2", 0, 250, 550, NONE },
        !           302:        { "0d0",  "0d0", 0,   5, 7, NONE },
        !           303:        { "1d1",  "1d3", ISMANY|ISMISL, 5, 5, NONE },
        !           304:        { "1d1",  "1d1", 0, 100, 250, NONE },
        !           305:        { "1d2", "1d10", ISMANY|ISMISL, 7, 11, CROSSBOW },
        !           306:        { "1d8",  "1d6", ISMISL, 50, 200, NONE },
        !           307:        { "3d4",  "1d4", 0,  50, 220, NONE },
        !           308:        { "2d5",  "1d3", 0,  50, 200, NONE },
        !           309:        { "3d3",  "1d2", 0, 125, 270, NONE },
        !           310:        { "1d12", "1d8", 0,  80, 260, NONE },
        !           311:        { "2d7",  "1d2", 0, 100, 400, NONE },
        !           312:        { "2d6",  "1d3", 0, 175, 370, NONE },
        !           313: };
        !           314:
        !           315: struct magic_item s_magic[MAXSCROLLS + 1] = {
        !           316:        { "monster confusion",   50, 200 },
        !           317:        { "magic mapping",               52, 200 },
        !           318:        { "light",                               80, 100 },
        !           319:        { "hold monster",                25, 200 },
        !           320:        { "sleep",                               41,  50 },
        !           321:        { "enchant armor",               75, 175 },
        !           322:        { "identify",                   211, 150 },
        !           323:        { "scare monster",               42, 300 },
        !           324:        { "gold detection",              32, 100 },
        !           325:        { "teleportation",               73, 200 },
        !           326:        { "enchant weapon",              91, 175 },
        !           327:        { "create monster",              34,  75 },
        !           328:        { "remove curse",                82, 100 },
        !           329:        { "aggravate monsters",  10,  50 },
        !           330:        { "blank paper",                 11,  50 },
        !           331:        { "genocide",                     5, 350 },
        !           332:        { "item knowledge",              14, 250 },
        !           333:        { "item protection",      9, 250 },
        !           334:        { "demons curse",                 5,  25 },
        !           335:        { "transport",                   11, 100 },
        !           336:        { "enchantment",                  3, 300 },
        !           337:        { "gods blessing",                4, 450 },
        !           338:        { "aquirement",                   3, 450 },
        !           339:        { "banishment",                   5,  25 },
        !           340:        { "recharge wand",               14, 250 },
        !           341:        { "locate traps",                18, 185 },
        !           342:        { NULL,                                   0,   0 },
        !           343: };
        !           344:
        !           345: struct magic_item p_magic[MAXPOTIONS + 1] = {
        !           346:        { "confusion",                   69,  50 },
        !           347:        { "paralysis",                   69,  50 },
        !           348:        { "poison",                              55,  50 },
        !           349:        { "gain strength",              130, 150 },
        !           350:        { "see invisible",               25, 175 },
        !           351:        { "healing",                    120, 130 },
        !           352:        { "monster detection",   59, 120 },
        !           353:        { "magic detection",     54, 105 },
        !           354:        { "raise level",                 25, 300 },
        !           355:        { "extra healing",               52, 175 },
        !           356:        { "haste self",                  41, 200 },
        !           357:        { "restore strength",   140, 200 },
        !           358:        { "blindness",                   25,  50 },
        !           359:        { "thirst quenching",    10,  50 },
        !           360:        { "increase dexterity",  50, 175 },
        !           361:        { "etherealness",                20, 150 },
        !           362:        { "increase wisdom",     35, 175 },
        !           363:        { "regeneration",                10, 175 },
        !           364:        { "super ability",                3, 500 },
        !           365:        { "decrepedness",                 4,  25 },
        !           366:        { "invincibility",                4, 500 },
        !           367:        { NULL,                                   0,   0 },
        !           368: };
        !           369:
        !           370: struct magic_item r_magic[MAXRINGS + 1] = {
        !           371:        { "protection",                  71, 200 },
        !           372:        { "strength",                    70, 200 },
        !           373:        { "sustain strength",    45, 250 },
        !           374:        { "searching",                   70, 150 },
        !           375:        { "see invisible",               77, 175 },
        !           376:        { "constitution",                13, 350 },
        !           377:        { "aggravate monster",   60, 100 },
        !           378:        { "agility",                     75, 250 },
        !           379:        { "increase damage",     61, 250 },
        !           380:        { "regeneration",                41, 250 },
        !           381:        { "digestion",                   60, 225 },
        !           382:        { "teleportation",               60, 100 },
        !           383:        { "stealth",                     75, 200 },
        !           384:        { "speed",                               40, 225 },
        !           385:        { "find traps",                  27, 200 },
        !           386:        { "delusion",                    18, 100 },
        !           387:        { "sustain ability",      9, 450 },
        !           388:        { "blindness",                   10,  50 },
        !           389:        { "lethargy",                    14,  75 },
        !           390:        { "ogre strength",                8, 350 },
        !           391:        { "enfeeblement",                 5,  25 },
        !           392:        { "burden",                              10,  50 },
        !           393:        { "illumination",                16, 100 },
        !           394:        { "fire protection",      5, 225 },
        !           395:        { "wisdom",                              25, 200 },
        !           396:        { "dexterity",                   35, 200 },
        !           397:        { NULL,                                   0,   0 },
        !           398: };
        !           399:
        !           400: struct magic_item ws_magic[MAXSTICKS + 1] = {
        !           401:        { "light",                               95, 120 },
        !           402:        { "striking",                    75, 115 },
        !           403:        { "lightning",                   30, 200 },
        !           404:        { "fire",                                30, 200 },
        !           405:        { "cold",                                30, 200 },
        !           406:        { "polymorph",                   95, 210 },
        !           407:        { "magic missile",               70, 170 },
        !           408:        { "haste monster",               80,  50 },
        !           409:        { "slow monster",                90, 220 },
        !           410:        { "drain life",                  80, 210 },
        !           411:        { "nothing",                     10,  70 },
        !           412:        { "teleport away",               55, 140 },
        !           413:        { "teleport to",                 50,  60 },
        !           414:        { "cancellation",                55, 130 },
        !           415:        { "sap life",                    20,  50 },
        !           416:        { "curing",                              25, 250 },
        !           417:        { "pyromania",                   15,  25 },
        !           418:        { "annihilate monster",   5, 750 },
        !           419:        { "paralyze monster",    10, 650 },
        !           420:        { "food absorption",     10,  75 },
        !           421:        { "regenerate monster",  15,  25 },
        !           422:        { "hide monster",                10,  50 },
        !           423:        { "anti-matter",                  5,  25 },
        !           424:        { "clone monster",               10,  10 },
        !           425:        { "confuse monster",     15, 150 },
        !           426:        { "degenerate monster",  15, 150 },
        !           427:        { NULL,                                   0,   0 },
        !           428: };
        !           429:
        !           430: struct magic_info thnginfo[NUMTHINGS] = {
        !           431:        { MAXPOTIONS,   V_POTION,       POTION, p_magic,        },
        !           432:        { MAXSCROLLS,   V_SCROLL,       SCROLL, s_magic,        },
        !           433:        { MAXFOODS,             V_FOOD,         FOOD,   NULL,           },
        !           434:        { MAXWEAPONS,   V_WEAPON,       WEAPON, w_magic,        },
        !           435:        { MAXARMORS,    V_ARMOR,        ARMOR,  a_magic,        },
        !           436:        { MAXRINGS,             V_RING,         RING,   r_magic,        },
        !           437:        { MAXSTICKS,    V_STICK,        STICK,  ws_magic,       },
        !           438:        { MAXAMULETS,   V_AMULET,       AMULET, NULL,           },
        !           439: };
        !           440:
        !           441: long e_levels[] = {
        !           442:     10L,20L,40L,80L,160L,320L,640L,1280L,2560L,5120L,10240L,20480L,
        !           443:     40920L, 81920L, 163840L, 327680L, 655360L, 1310720L, 2621440L,
        !           444:        3932160L, 5242880L, 7864320L, 10485760L, 15728640L, 20971520L,
        !           445:        41943040L, 83886080L, 167772160L, 335544320L, 0L,
        !           446: };
        !           447:
        !           448: WINDOW *cw;            /* what the hero sees */
        !           449: WINDOW *hw;            /* utility window */
        !           450: WINDOW *mw;            /* monster window */

CVSweb