[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

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