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