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

Annotation of early-roguelike/xrogue/rogue.c, Revision 1.1

1.1     ! rubenllo    1: /*
        !             2:     rogue.c  -  Global game variables
        !             3:
        !             4:     XRogue: Expeditions into the Dungeons of Doom
        !             5:     Copyright (C) 1991 Robert Pietkivitch
        !             6:     All rights reserved.
        !             7:
        !             8:     Based on "Advanced Rogue"
        !             9:     Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka and AT&T
        !            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 <ctype.h>
        !            20: #include <curses.h>
        !            21: #include "rogue.h"
        !            22:
        !            23: /*
        !            24:  * Now all the global variables
        !            25:  */
        !            26:
        !            27: struct trap traps[MAXTRAPS];
        !            28: struct room rooms[MAXROOMS];            /* One for each room -- A level */
        !            29: struct room *oldrp;                     /* Roomin(&player.t_oldpos) */
        !            30: struct thing player;                    /* The rogue */
        !            31: struct object *cur_armor;               /* What a well dresssed rogue wears */
        !            32: struct object *cur_ring[NUM_FINGERS];   /* Which rings are being worn */
        !            33: struct object  *cur_misc[NUM_MM];       /* which MM's are in use */
        !            34: int cur_relic[MAXRELIC];                /* Currently used relics */
        !            35: struct linked_list *lvl_obj = NULL;
        !            36: struct linked_list *mlist = NULL;
        !            37: struct linked_list *rlist = NULL;       /* list of dead monsters to be reaped */
        !            38: struct linked_list *tlist = NULL;       /* list of monsters fallen down traps */
        !            39: struct linked_list *monst_dead = NULL;  /* monster killed by monster    */
        !            40: struct object *cur_weapon = NULL;
        !            41: int char_type = -1;                     /* what type of character is player */
        !            42: int foodlev = 1;                        /* how fast he eats food */
        !            43: int ntraps;                             /* Number of traps on this level */
        !            44: int trader = 0;                         /* no. of purchases */
        !            45: int curprice = -1;                      /* current price of item */
        !            46: int seed;                               /* Random number seed */
        !            47: int max_level;                          /* Deepest player has gone ever */
        !            48: int cur_max;                            /* Deepest player has gone currently */
        !            49: int prev_max;                           /* A flag indicating worm hole */
        !            50: int move_free = 0;                      /* Movement check (io.c & actions.c) */
        !            51: int mpos = 0;
        !            52: int level = 0;
        !            53: long purse = 0;
        !            54: int inpack = 0;
        !            55: int total = 0;
        !            56: int no_food = 0;                        /* how long has he gone with no food */
        !            57: int foods_this_level = 0;               /* foods made per level */
        !            58: int count = 0;
        !            59: int food_left = STOMACHSIZE-MORETIME-1;
        !            60: int group = 1;
        !            61: int hungry_state = F_OKAY;
        !            62: int infest_dam=0;
        !            63: int lost_str=0;
        !            64: int lastscore = -1;
        !            65: int hold_count = 0;
        !            66: int trap_tries = 0;
        !            67: int chant_time = 0;
        !            68: int pray_time = 0;
        !            69: int spell_power = 0;
        !            70: long turns = 0;                         /* Number of turns player has taken */
        !            71: int quest_item = 0;                     /* Item player is looking for */
        !            72: int cols = 0;                           /* number of columns in terminal */
        !            73: int lines = 0;                          /* number of lines on the terminal */
        !            74: int nfloors = -1;                       /* Number of floors in this dungeon */
        !            75: char curpurch[LINELEN];                 /* name of item ready to buy */
        !            76: char PLAYER = VPLAYER;                  /* what the player looks like */
        !            77: char take;                              /* Thing the rogue is taking */
        !            78: char prbuf[LINELEN*2];                  /* Buffer for sprintfs */
        !            79: char runch;                             /* Direction player is running */
        !            80: char *s_names[MAXSCROLLS];              /* Names of the scrolls */
        !            81: char *p_colors[MAXPOTIONS];             /* Colors of the potions */
        !            82: char *r_stones[MAXRINGS];               /* Stone settings of the rings */
        !            83: char *ws_made[MAXSTICKS];               /* What sticks are made of */
        !            84: char whoami[LINELEN];                   /* Name of player */
        !            85: char huh[LINELEN];                       /* The last message printed */
        !            86: char *s_guess[MAXSCROLLS];              /* Players guess at what scroll is */
        !            87: char *p_guess[MAXPOTIONS];              /* Players guess at what potion is */
        !            88: char *r_guess[MAXRINGS];                /* Players guess at what ring is */
        !            89: char *ws_guess[MAXSTICKS];              /* Players guess at what wand is */
        !            90: char *m_guess[MAXMM];                   /* Players guess at what MM is */
        !            91: char *ws_type[MAXSTICKS];               /* Is it a wand or a staff */
        !            92: char file_name[LINELEN];                /* Save file name */
        !            93: char score_file[LINELEN];               /* Score file name */
        !            94: char home[LINELEN];                     /* User's home directory */
        !            95: WINDOW *cw;                             /* Window that the player sees */
        !            96: WINDOW *hw;                             /* Used for the help command */
        !            97: WINDOW *mw;                             /* Used to store monsters */
        !            98: WINDOW *msgw;                           /* Used to display messages */
        !            99: bool pool_teleport = FALSE;             /* just teleported from a pool */
        !           100: bool inwhgt = FALSE;                    /* true if from wghtchk() */
        !           101: bool after;                             /* True if we want after daemons */
        !           102: bool use_savedir = FALSE;               /* Use common save location? */
        !           103: bool waswizard;                         /* Was a wizard sometime */
        !           104: bool s_know[MAXSCROLLS];                /* Does he know what a scroll does */
        !           105: bool p_know[MAXPOTIONS];                /* Does he know what a potion does */
        !           106: bool r_know[MAXRINGS];                  /* Does he know what a ring does */
        !           107: bool ws_know[MAXSTICKS];                /* Does he know what a stick does */
        !           108: bool m_know[MAXMM];                     /* Does he know what a MM does */
        !           109:
        !           110: /* options */
        !           111: bool playing = TRUE;        /* Defaults */
        !           112: bool running = FALSE;
        !           113: bool wizard = FALSE;
        !           114: bool notify = TRUE;
        !           115: bool fight_flush = FALSE;
        !           116: bool terse = FALSE;
        !           117: bool auto_pickup = FALSE;
        !           118: bool def_attr = FALSE;      /* default attributes */
        !           119: bool menu_overlay = TRUE;
        !           120: bool door_stop = TRUE;
        !           121: bool jump = TRUE;
        !           122: bool slow_invent = FALSE;
        !           123: bool firstmove = FALSE;
        !           124: bool askme = TRUE;
        !           125: bool in_shell = FALSE;
        !           126: bool daytime = TRUE;
        !           127: bool funfont = FALSE;
        !           128:
        !           129: FILE *scorefi = NULL;
        !           130: FILE *logfile = NULL;
        !           131:
        !           132: LEVTYPE levtype;           /* what type of level am i'm on? */
        !           133:
        !           134: char *nothing  =  "Nothing seems to happen. ";
        !           135: char *spacemsg =  "--Press space to continue--";
        !           136: char *morestr  =  " --More--";
        !           137: char *retstr   =  "[Press return to continue]";
        !           138:
        !           139: /*
        !           140:  * This lays out all the class specific details
        !           141:  *
        !           142:  * Here are the beginning experience levels for all players.
        !           143:  * All further experience levels are computed by muliplying by 2
        !           144:  * up through MAXDOUBLE. Then exp pts are calculated by adding
        !           145:  * in the cap figure. You must change MAXDOUBLE if you change the
        !           146:  * cap figure.
        !           147:  */
        !           148:
        !           149: struct character_types char_class[NUM_CHARTYPES] = {
        !           150: /* name         exppts  cap     hitpts  Base   Maxlvl, Factor, Offset, Range */
        !           151: { "fighter",    90,    1310720,  13,    10,     30,     2,      1,      3 },
        !           152: { "ranger",     110,   2293760,  10,    10,     22,     2,      1,      2 },
        !           153: { "paladin",    110,   1966080,  10,    10,     23,     2,      1,      2 },
        !           154: { "magician",   105,   2129920,   9,    10,     24,     2,      1,      2 },
        !           155: { "cleric",     105,   1802240,   9,    10,     24,     2,      1,      2 },
        !           156: { "thief",      95,    1228800,  11,    10,     28,     2,      1,      3 },
        !           157: { "assassin",   95,    1392640,  11,    10,     26,     2,      1,      3 },
        !           158: { "druid",      105,   1638400,   9,    10,     24,     2,      1,      2 },
        !           159: { "monk",       100,   1556480,  10,    10,     25,     2,      1,      2 },
        !           160: { "monster",    0,     0,         8,    10,     20,     1,      0,      2 },
        !           161: };
        !           162:
        !           163: /*
        !           164:  * This array lists the names of the character's abilities.  It must be ordered
        !           165:  * according to the ability definitions in rogue.h.
        !           166:  */
        !           167:
        !           168: struct words abilities[NUMABILITIES] = {
        !           169:   { "Intelligence" }, { "Strength" }, { "Wisdom" },
        !           170:   { "Dexterity" }, { "Constitution" }, { "Charisma" }
        !           171: };
        !           172:
        !           173: /*
        !           174:  * NOTE: the ordering of the points in this array is critical. They MUST
        !           175:  *       be listed in the following sequence:
        !           176:  *
        !           177:  *              7   4   6
        !           178:  *              1   0   2
        !           179:  *              5   3   8
        !           180:  */
        !           181:
        !           182: coord grid[9] = {{0,0},
        !           183:                  { 0,-1}, { 0, 1}, {-1, 0}, { 1, 0},
        !           184:                  {-1,-1}, { 1, 1}, { 1,-1}, {-1, 1}
        !           185:                 };
        !           186:
        !           187: struct death_type deaths[DEATHNUM] = {
        !           188:     { D_ARROW,          "an arrow"},
        !           189:     { D_DART,           "a dart"},
        !           190:     { D_BOLT,           "a bolt"},
        !           191:     { D_POISON,         "poison"},
        !           192:     { D_POTION,         "a cursed potion"},
        !           193:     { D_PETRIFY,        "petrification"},
        !           194:     { D_SUFFOCATION,    "suffocation"},
        !           195:     { D_INFESTATION,    "a parasite"},
        !           196:     { D_DROWN,          "drowning"},
        !           197:     { D_ROT,            "body rot"},
        !           198:     { D_CONSTITUTION,   "poor health"},
        !           199:     { D_STRENGTH,       "being too weak"},
        !           200:     { D_SIGNAL,         "a bug"},
        !           201:     { D_CHOKE,          "dust of choking"},
        !           202:     { D_STRANGLE,       "strangulation"},
        !           203:     { D_FALL,           "a fall"},
        !           204:     { D_RELIC,          "an artifact's wrath"},
        !           205:     { D_STARVATION,     "starvation"},
        !           206:     { D_FOOD_CHOKE,     "choking on food"},
        !           207:     { D_SCROLL,         "reading a scroll"},
        !           208:     { D_FRIGHT,         "being too frightened"},
        !           209:     { D_CRYSTAL,        "being absorbed"},
        !           210:     { D_CARD,           "the face of death"},
        !           211: };
        !           212:
        !           213: /*
        !           214:  * weapons and their attributes
        !           215:  */
        !           216:
        !           217: struct init_weps weaps[MAXWEAPONS] = {
        !           218:     { "mace",           "2d10","2d10", NONE,     ISMETAL, 6, 150, 15 },
        !           219:     { "long sword",     "3d4",  "2d8", NONE,     ISMETAL, 5, 200, 25 },
        !           220:     { "short bow",      "1d1",  "1d1", NONE,     0, 8, 50, 4 },
        !           221:     { "arrow",          "2d4",  "1d6", BOW,      ISMANY|ISMISL, 1, 5, 4 },
        !           222:     { "dagger",         "2d8",  "1d6", NONE,     ISMETAL|ISMISL|ISMANY, 2,10,7},
        !           223:     { "rock",           "2d4",  "1d6", SLING,    ISMANY|ISMISL, 1, 20, 3 },
        !           224:     { "two-handed sword","3d10","3d8", NONE,     ISMETAL, 4, 250, 40 },
        !           225:     { "sling",          "1d1",  "1d1", NONE,     0, 8, 25, 3 },
        !           226:     { "dart",           "2d4",  "2d6", NONE,     ISMANY|ISMISL, 2, 15, 7 },
        !           227:     { "crossbow",       "1d1",  "1d1", NONE,     0, 8, 75, 5 },
        !           228:     { "crossbow bolt",  "2d4",  "2d4", CROSSBOW, ISMANY|ISMISL, 1, 10, 5 },
        !           229:     { "spear",          "2d6", "3d10", NONE,     ISMISL,  7, 100, 15 },
        !           230:     { "trident",        "3d6",  "3d4", NONE,     ISMETAL, 4, 200, 30 },
        !           231:     { "spetum",         "2d6",  "2d8", NONE,     ISMETAL, 6, 150, 20 },
        !           232:     { "bardiche",       "3d4", "2d10", NONE,     ISMETAL, 5, 150, 25 },
        !           233:     { "pike",           "2d8",  "2d8", NONE,     ISMETAL, 7, 100, 15 },
        !           234:     { "bastard sword",  "3d8",  "3d6", NONE,     ISMETAL, 4, 175, 30 },
        !           235:     { "halberd",        "2d8",  "2d4", NONE,     ISMETAL, 6, 100, 10 },
        !           236:     { "battle axe",     "2d8",  "3d8", NONE,     ISMETAL, 5, 150, 15 },
        !           237: } ;
        !           238:
        !           239: struct init_armor armors[MAXARMORS] = {
        !           240:         { "leather armor",          10, 8, 200, 100 },
        !           241:         { "ring mail",              20, 7, 250, 200 },
        !           242:         { "studded leather armor",  30, 5, 320, 250 },
        !           243:         { "scale mail",             40, 7, 280, 250 },
        !           244:         { "padded armor",           50, 6, 350, 300 },
        !           245:         { "chain mail",             60, 6, 350, 600 },
        !           246:         { "splint mail",            70, 5, 370, 400 },
        !           247:         { "banded mail",            80, 5, 370, 350 },
        !           248:         { "plate mail",             90, 4, 400, 400 },
        !           249:         { "plate armor",           100, 3, 500, 450 },
        !           250: };
        !           251:
        !           252: struct magic_item things[NUMTHINGS] = {
        !           253:     { "potion",                 220,   10 },    /* potion               */
        !           254:     { "scroll",                 220,   30 },    /* scroll               */
        !           255:     { "food",                   190,   20 },    /* food                 */
        !           256:     { "weapon",                  90,    0 },    /* weapon               */
        !           257:     { "armor",                   90,    0 },    /* armor                */
        !           258:     { "ring",                    70,    5 },    /* ring                 */
        !           259:     { "stick",                   70,    0 },    /* stick                */
        !           260:     { "miscellaneous magic",     50,   50 },    /* miscellaneous magic  */
        !           261:     { "artifact",                 0,   10 },    /* artifact             */
        !           262: };
        !           263:
        !           264: struct magic_item s_magic[MAXSCROLLS] = {
        !           265:     { "monster confusion",       40, 125,  0,  0 },
        !           266:     { "magic mapping",           60, 150,  0,  5 },
        !           267:     { "light",                   60, 100, 15, 15 },
        !           268:     { "hold monster",            30, 200, 20, 20 },
        !           269:     { "sleep",                   20, 150, 25,  0 },
        !           270:     { "enchantment",            130, 200, 15, 15 },
        !           271:     { "identify",               170, 100,  0, 20 },
        !           272:     { "scare monster",           40, 250, 20, 30 },
        !           273:     { "gold detection",          30, 110,  0,  0 },
        !           274:     { "teleportation",           60, 165, 20, 20 },
        !           275:     { "create monster",          20,  75,  0,  0 },
        !           276:     { "remove curse",            80, 120, 15, 15 },
        !           277:     { "petrification",           30, 185,  0,  0 },
        !           278:     { "genocide",                10, 300,  0,  0 },
        !           279:     { "cure disease",            80, 160,  0,  0 },
        !           280:     { "acquirement",             10, 700,  0,  5 },
        !           281:     { "protection",              30, 190, 10,  0 },
        !           282:     { "trap finding",            50, 180,  0,  0 },
        !           283:     { "runes",                   20,  50,  0,  0 },
        !           284:     { "charm monster",           30, 275,  0, 20 },
        !           285: };
        !           286:
        !           287: struct magic_item p_magic[MAXPOTIONS] = {
        !           288:     { "clear thought",           50, 180, 10,  5 },
        !           289:     { "gain ability",           160, 210, 10, 10 },
        !           290:     { "see invisible",           40, 150, 20, 20 },
        !           291:     { "healing",                140, 130, 15, 15 },
        !           292:     { "monster detection",       40, 120,  0,  0 },
        !           293:     { "magic detection",         70, 105,  0,  0 },
        !           294:     { "raise level",             10, 450, 10,  5 },
        !           295:     { "haste self",              50, 180, 20,  5 },
        !           296:     { "restore abilities",      130, 140,  0, 15 },
        !           297:     { "phasing",                 60, 210, 10, 10 },
        !           298:     { "invisibility",            20, 230,  0, 10 },
        !           299:     { "flying",                  50, 130,  0, 15 },
        !           300:     { "food detection",          20, 150,  0,  0 },
        !           301:     { "skill",                   10, 200, 20,  5 },
        !           302:     { "fire resistance",         40, 250, 10,  5 },
        !           303:     { "cold resistance",         40, 250, 10,  5 },
        !           304:     { "lightning protection",    40, 250, 20,  5 },
        !           305:     { "poison",                  30, 205, 25,  0 },
        !           306: };
        !           307:
        !           308: struct magic_item r_magic[MAXRINGS] = {
        !           309:     { "protection",              60, 200,  25, 25 },
        !           310:     { "add strength",            50, 200,  25, 25 },
        !           311:     { "sustain ability",         50, 500,   0,  0 },
        !           312:     { "searching",               40, 400,   0,  0 },
        !           313:     { "extra sight",             60, 350,   0,  0 },
        !           314:     { "alertness",               40, 380,   0,  0 },
        !           315:     { "aggravate monster",       30, 100, 100,  0 },
        !           316:     { "dexterity",               50, 220,  25, 25 },
        !           317:     { "increase damage",         60, 220,  25, 25 },
        !           318:     { "regeneration",            40, 600,   0,  0 },
        !           319:     { "slow digestion",          50, 240,  20, 20 },
        !           320:     { "teleportation",           20, 100,  90,  0 },
        !           321:     { "stealth",                 20, 300,   0,  0 },
        !           322:     { "add intelligence",        50, 240,  25, 25 },
        !           323:     { "increase wisdom",         40, 220,  25, 25 },
        !           324:     { "sustain health",          80, 500,   0,  0 },
        !           325:     { "carrying",                10, 100,  90,  0 },
        !           326:     { "illumination",            30, 520,   0,  0 },
        !           327:     { "delusion",                10, 100, 100,  0 },
        !           328:     { "fear",                    20, 100,  75,  0 },
        !           329:     { "heroism",                 50, 390,   0,  0 },
        !           330:     { "fire resistance",         40, 400,   0,  0 },
        !           331:     { "warmth",                  40, 400,   0,  0 },
        !           332:     { "vampiric regeneration",   10,1000,   0,  0 },
        !           333:     { "free action",             40, 370,   0,  0 },
        !           334:     { "teleport control",        10, 700,   0,  0 },
        !           335: };
        !           336:
        !           337: struct magic_item ws_magic[MAXSTICKS] = {
        !           338:     { "light",                   80, 120, 15, 15 },
        !           339:     { "striking",                50, 115,  0,  0 },
        !           340:     { "lightning",               40, 200,  0,  0 },
        !           341:     { "fire",                    30, 200,  0,  0 },
        !           342:     { "cold",                    30, 200,  0,  0 },
        !           343:     { "polymorph",               80, 150,  0,  0 },
        !           344:     { "magic missile",           90, 170,  0,  0 },
        !           345:     { "slow",                    70, 220, 20, 10 },
        !           346:     { "drain life",              50, 210, 20,  0 },
        !           347:     { "charging",                70, 400,  0,  0 },
        !           348:     { "teleport",                90, 140, 20, 10 },
        !           349:     { "cancellation",            50, 130,  0,  0 },
        !           350:     { "confusion",               30, 100, 20,  0 },
        !           351:     { "disintegration",          20, 300, 25,  0 },
        !           352:     { "petrification",           30, 240,  0,  0 },
        !           353:     { "paralyzation",            30, 180, 10,  0 },
        !           354:     { "degeneration",            30, 250, 20,  0 },
        !           355:     { "curing",                  50, 250, 20,  5 },
        !           356:     { "wonder",                  40, 110, 20, 20 },
        !           357:     { "fear",                    40, 180,  0,  0 },
        !           358: };
        !           359:
        !           360: /*
        !           361:  * WARNING: unique miscellaneous magic items must be put at the end
        !           362:  *          of this list. They MUST be the last items. The function
        !           363:  *          create_obj() in wizard.c depends on it.
        !           364:  */
        !           365:
        !           366: struct magic_item m_magic[MAXMM] = {
        !           367:     { "alchemy jug",               40,  240,   0,  0 },
        !           368:     { "beaker of potions",         60,  300,   0,  0 },
        !           369:     { "book of spells",            60,  300,   0,  0 },
        !           370:     { "boots of elvenkind",        50,  500,   0,  0 },
        !           371:     { "bracers of defense",        80,  400,  20, 10 },
        !           372:     { "chime of opening",          30,  250,   0,  0 },
        !           373:     { "chime of hunger",           20,  100, 100,  0 },
        !           374:     { "cloak of displacement",     60,  500,   0,  0 },
        !           375:     { "cloak of protection",       80,  400,  20, 10 },
        !           376:     { "drums of panic",            60,  350,   0,  0 },
        !           377:     { "dust of disappearance",     30,  300,   0,  0 },
        !           378:     { "dust of choking",           30,  100, 100,  0 },
        !           379:     { "gauntlets of dexterity",    40,  600,  25,  0 },
        !           380:     { "gauntlets of ogre power",   40,  600,  25,  0 },
        !           381:     { "jewel of attacks",          50,  150, 100,  0 },
        !           382:     { "keoghtoms ointment",        60,  350,   0,  0 },
        !           383:     { "robe of powerlessness",     20,  100, 100,  0 },
        !           384:     { "gauntlets of fumbling",     30,  100, 100,  0 },
        !           385:     { "necklace of adaptation",    50,  500,   0,  0 },
        !           386:     { "necklace of strangulation", 30,  110, 100,  0 },
        !           387:     { "boots of dancing",          40,  120, 100,  0 },
        !           388:     { "book of skills",            30,  650,   0,  0 },
        !           389:     { "medicine crystal",          10,  800,  25,  5 },
        !           390: };
        !           391:
        !           392: struct magic_item rel_magic[MAXRELIC] = {
        !           393:     { "Daggers of Musty Doit",     0, 50000,  0, 0},
        !           394:     { "Cloak of Emori",            0, 50000,  0, 0},
        !           395:     { "Ankh of Heil",              0, 50000,  0, 0},
        !           396:     { "Staff of Ming",             0, 50000,  0, 0},
        !           397:     { "Wand of Orcus",             0, 50000,  0, 0},
        !           398:     { "Rod of Asmodeus",           0, 50000,  0, 0},
        !           399:     { "Amulet of Yendor",          0, 50000,  0, 0},
        !           400:     { "Mandolin of Brian",         0, 50000,  0, 0},
        !           401:     { "Horn of Geryon",            0, 50000,  0, 0},
        !           402:     { "Morning Star of Hruggek",   0, 50000,  0, 0},
        !           403:     { "Flail of Yeenoghu",         0, 50000,  0, 0},
        !           404:     { "Eye of Vecna",              0, 50000,  0, 0},
        !           405:     { "Axe of Aklad",              0, 50000,  0, 0},
        !           406:     { "Quill of Nagrom",           0, 50000,  0, 0},
        !           407:     { "Amulet of Stonebones",      0, 50000,  0, 0},
        !           408:     { "Ring of Surtur",            0, 50000,  0, 0},
        !           409:     { "Card of Alteran",           0, 50000,  0, 0},
        !           410: };
        !           411:
        !           412: /*
        !           413:  * food and fruits that you get
        !           414:  */
        !           415: struct magic_item foods[MAXFOODS] = {
        !           416:
        !           417:     { "food ration",    690, 50, 750,  0},
        !           418:     { "apple",           10, 20, 300,  0},
        !           419:     { "banana",          30, 20, 300,  0},
        !           420:     { "blueberry",       30, 20, 300,  0},
        !           421:     { "candleberry",     10, 20, 300,  0},
        !           422:     { "caprifig",        20, 20, 300,  0},
        !           423:     { "dewberry",        10, 20, 300,  0},
        !           424:     { "elderberry",      30, 20, 300,  0},
        !           425:     { "gooseberry",      20, 20, 300,  0},
        !           426:     { "guanabana",       30, 20, 300,  0},
        !           427:     { "hagberry",        10, 20, 300,  0},
        !           428:     { "jaboticaba",      10, 20, 300,  0},
        !           429:     { "peach",           10, 20, 300,  0},
        !           430:     { "pitanga",         10, 20, 300,  0},
        !           431:     { "prickly pear",    10, 20, 300,  0},
        !           432:     { "rambutan",        10, 20, 300,  0},
        !           433:     { "sapodilla",       10, 20, 300,  0},
        !           434:     { "soursop",         10, 20, 300,  0},
        !           435:     { "strawberry",      10, 20, 300,  0},
        !           436:     { "sweetsop",        10, 20, 300,  0},
        !           437:     { "whortleberry",    10, 20, 300,  0},
        !           438:     { "slime-mold",      10, 10, 100,  0},
        !           439: };
        !           440:
        !           441: /*
        !           442:  * these are the spells that a magician can cast
        !           443:  */
        !           444:
        !           445: struct spells magic_spells[MAXSPELLS] = {
        !           446:         { P_TFIND,         3,     TYP_POTION,   0         },
        !           447:         { S_IDENT,         5,     TYP_SCROLL,   0         },
        !           448:         { S_LIGHT,         7,     TYP_SCROLL,   ISBLESSED },
        !           449:         { S_REMOVE,       10,     TYP_SCROLL,   0         },
        !           450:         { S_FINDTRAPS,    15,     TYP_SCROLL,   0         },
        !           451:         { P_FLY,          20,     TYP_POTION,   0         },
        !           452:         { S_TELEP,        25,     TYP_SCROLL,   0         },
        !           453:         { S_SLEEP,        30,     TYP_SCROLL,   0         },
        !           454:         { P_SEEINVIS,     35,     TYP_POTION,   ISBLESSED },
        !           455:         { P_CLEAR,        40,     TYP_POTION,   0         },
        !           456:         { WS_COLD,        45,     TYP_STICK,    0         },
        !           457:         { P_PHASE,        50,     TYP_POTION,   0         },
        !           458:         { WS_FIRE,        55,     TYP_STICK,    0         },
        !           459:         { P_HASTE,        60,     TYP_POTION,   ISBLESSED },
        !           460:         { WS_ELECT,       65,     TYP_STICK,    0         },
        !           461:         { S_HOLD,         70,     TYP_SCROLL,   ISBLESSED },
        !           462: };
        !           463:
        !           464: /*
        !           465:  * these are the spells that a cleric can cast
        !           466:  */
        !           467:
        !           468: struct spells cleric_spells[MAXPRAYERS] = {
        !           469:         { P_MFIND,         3,     TYP_POTION,   0         },
        !           470:         { P_TFIND,         5,     TYP_POTION,   0         },
        !           471:         { S_LIGHT,         7,     TYP_SCROLL,   ISBLESSED },
        !           472:         { S_REMOVE,       10,     TYP_SCROLL,   0         },
        !           473:         { P_FFIND,        15,     TYP_POTION,   0         },
        !           474:         { P_FLY,          20,     TYP_POTION,   0         },
        !           475:         { P_HEALING,      25,     TYP_POTION,   0         },
        !           476:         { S_CURING,       30,     TYP_SCROLL,   0         },
        !           477:         { P_RESTORE,      35,     TYP_POTION,   0         },
        !           478:         { S_MAP,          40,     TYP_SCROLL,   0         },
        !           479:         { P_SEEINVIS,     45,     TYP_POTION,   ISBLESSED },
        !           480:         { P_CLEAR,        50,     TYP_POTION,   0         },
        !           481:         { P_PHASE,        55,     TYP_POTION,   0         },
        !           482:         { WS_CURING,      60,     TYP_STICK,    ISBLESSED },
        !           483:         { WS_PARALYZE,    65,     TYP_STICK,    0         },
        !           484:         { S_ALLENCH,      70,     TYP_SCROLL,   0         },
        !           485: };
        !           486:
        !           487: /*
        !           488:  * these are the spells that a druid can chant
        !           489:  */
        !           490:
        !           491: struct spells druid_spells[MAXCHANTS] = {
        !           492:         { P_MFIND,         3,     TYP_POTION,   0         },
        !           493:         { P_TFIND,         5,     TYP_POTION,   0         },
        !           494:         { S_LIGHT,         7,     TYP_SCROLL,   ISBLESSED },
        !           495:         { S_REMOVE,       10,     TYP_SCROLL,   0         },
        !           496:         { S_FINDTRAPS,    15,     TYP_SCROLL,   0         },
        !           497:         { S_CONFUSE,      20,     TYP_SCROLL,   0         },
        !           498:         { P_FFIND,        25,     TYP_POTION,   0         },
        !           499:         { P_HEALING,      30,     TYP_POTION,   0         },
        !           500:         { S_MAP,          35,     TYP_SCROLL,   0         },
        !           501:         { P_CLEAR,        40,     TYP_POTION,   0         },
        !           502:         { P_COLD,         45,     TYP_POTION,   0         },
        !           503:         { P_FIRE,         50,     TYP_POTION,   0         },
        !           504:         { P_PHASE,        55,     TYP_POTION,   0         },
        !           505:         { P_LIGHTNING,    60,     TYP_POTION,   0         },
        !           506:         { S_CHARM,        65,     TYP_SCROLL,   ISBLESSED },
        !           507:         { S_HOLD,         70,     TYP_SCROLL,   ISBLESSED },
        !           508: };
        !           509:
        !           510: /*
        !           511:  * these are the scrolls that a quill can write
        !           512:  */
        !           513:
        !           514: struct spells quill_scrolls[MAXQUILL] = {
        !           515:         { S_GFIND,       5,   },
        !           516:         { S_IDENT,       10,  },
        !           517:         { S_LIGHT,       10,  },
        !           518:         { S_REMOVE,      15,  },
        !           519:         { S_MAP,         20,  },
        !           520:         { S_CONFUSE,     25,  },
        !           521:         { S_SLEEP,       30,  },
        !           522:         { S_CURING,      40,  },
        !           523:         { S_TELEP,       50,  },
        !           524:         { S_SCARE,       60,  },
        !           525:         { S_HOLD,        70,  },
        !           526:         { S_PETRIFY,     80,  },
        !           527:         { S_PROTECT,     90,  },
        !           528:         { S_ALLENCH,     100, },
        !           529: };
        !           530:
        !           531: /*
        !           532:  * Experience-level names of each character  (see NUM_CNAMES in rogue.h)
        !           533:  */
        !           534:
        !           535: const char *cnames[NUM_CHARTYPES-1][NUM_CNAMES] = {
        !           536: {       "Veteran",                      "Fighter",              /* Fighter */
        !           537:         "Ruffian",                      "Tussler",
        !           538:         "Swordsman",                    "Hero",
        !           539:         "Bravo",                        "Picador",
        !           540:         "Stalwart",                     "Bashar",
        !           541:         "Swashbuckler",                 "Myrmidon",
        !           542:         "Fusileer",                     "Pugilist",
        !           543:         "Champion",                     "Superhero",
        !           544:         "Warrior",                      "Lord",
        !           545:         "Lord I",                       "Lord II",
        !           546:         "Lord III",                     "Lord IV",
        !           547:         "Lord V",                       "Lord VI",
        !           548:         "Lord VII",                     "Warrior Lord"
        !           549: },
        !           550: {       "Runner",                       "Strider",              /* Ranger */
        !           551:         "Warden",                       "Steward",
        !           552:         "Scout",                        "Courser",
        !           553:         "Tracker",                      "Guide",
        !           554:         "Protector",                    "Bartizan",
        !           555:         "Gendarme",                     "Sentinel",
        !           556:         "Vigilant",                     "Pathfinder",
        !           557:         "Guardian",                     "Overseer",
        !           558:         "Castellan",                    "Ranger",
        !           559:         "Lord Ranger I",                "Lord Ranger II",
        !           560:         "Lord Ranger III",              "Lord Ranger IV",
        !           561:         "Lord Ranger V",                "Lord Ranger VI",
        !           562:         "Lord Ranger VII",              "Master Ranger"
        !           563: },
        !           564: {       "Gallant",                      "Keeper",               /* Paladin */
        !           565:         "Bravado",                      "Brazen",
        !           566:         "Protector",                    "Defender",
        !           567:         "Warder",                       "Guardian",
        !           568:         "Champion",                     "Bulwark",
        !           569:         "Venturist",                    "Inspirator",
        !           570:         "Chevalier",                    "Justiciar",
        !           571:         "Undaunteer",                   "Plautus",
        !           572:         "Knight",                       "Paladin",
        !           573:         "Paladin I",                    "Paladin II",
        !           574:         "Paladin III",                  "Paladin IV",
        !           575:         "Paladin V",                    "Paladin VI",
        !           576:         "Paladin VII",                  "Lord Paladin"
        !           577: },
        !           578: {       "Prestidigitator",              "Evoker",               /* Magic User */
        !           579:         "Summoner",                     "Invoker",
        !           580:         "Conjurer",                     "Theurgist",
        !           581:         "Illusionist",                  "Diviner",
        !           582:         "Thaumaturgist",                "Magician",
        !           583:         "Thelemist",                    "Magus",
        !           584:         "Enchanter",                    "Warlock",
        !           585:         "Witch",                        "Shaman",
        !           586:         "Sorcerer",                     "Wizard",
        !           587:         "Wizard I",                     "Wizard II",
        !           588:         "Wizard III",                   "Wizard IV",
        !           589:         "Wizard V",                     "Wizard VI",
        !           590:         "Wizard VII",                   "Lord Magus"
        !           591: },
        !           592: {       "Acolyte",                      "Adept",                /* Cleric */
        !           593:         "Charmer",                      "Friar",
        !           594:         "Priest",                       "Curate",
        !           595:         "Vicar",                        "Deacon",
        !           596:         "Sabiast",                      "Cabalist",
        !           597:         "Prefect",                      "Canon",
        !           598:         "Minister",                     "Cardinal",
        !           599:         "Bishop",                       "Patriarch",
        !           600:         "Exorcist",                     "Archdeacon",
        !           601:         "High Priest I",                "High Priest II",
        !           602:         "High Priest III",              "High Priest IV",
        !           603:         "High Priest V",                "High Priest VI",
        !           604:         "High Priest VII",              "Reverend Lord"
        !           605: },
        !           606: {       "Rogue",                        "Footpad",              /* Thief */
        !           607:         "Cutpurse",                     "Robber",
        !           608:         "Vagrant",                      "Truant",
        !           609:         "Burglar",                      "Filcher",
        !           610:         "Sharper",                      "Magsman",
        !           611:         "Racketeer",                    "Prowler",
        !           612:         "Crook",                        "Bounder",
        !           613:         "Quisling",                     "Malfeasor",
        !           614:         "Swindler",                     "Thief",
        !           615:         "Master Thief I",               "Master Thief II",
        !           616:         "Master Thief III",             "Master Thief IV",
        !           617:         "Master Thief V",               "Master Thief VI",
        !           618:         "Master Thief VII",             "Master Rogue"
        !           619: },
        !           620: {       "Bravo",                        "Rutterkin",            /* Assassin */
        !           621:         "Waghalter",                    "Murderer",
        !           622:         "Butcher",                      "Desperado",
        !           623:         "Thug",                         "Killer",
        !           624:         "Cutthroat",                    "Executioner",
        !           625:         "Eradicator",                   "Obliterator",
        !           626:         "Mechanic",                     "Wiseguy",
        !           627:         "Nihilist",                     "Berserker",
        !           628:         "Assassin",                     "Expert Assassin",
        !           629:         "Prime Assassin I",             "Prime Assassin II",
        !           630:         "Prime Assassin III",           "Prime Assassin IV",
        !           631:         "Prime Assassin V",             "Prime Assassin VI",
        !           632:         "Prime Assassin VII",           "Master Assassin"
        !           633: },
        !           634: {       "Aspirant",                     "Ovate",                /* Druid */
        !           635:         "Practitioner",                 "Devoutist",
        !           636:         "Initiate 1st Circle",          "Initiate 2nd Circle",
        !           637:         "Initiate 3rd Circle",          "Initiate 4th Circle",
        !           638:         "Initiate 5th Circle",          "Initiate 6th Circle",
        !           639:         "Initiate 7th Circle",          "Initiate 8th Circle",
        !           640:         "Initiate 9th Circle",          "Illuminati",
        !           641:         "Lesser Druid",                 "Arch Druid",
        !           642:         "Druid",                        "Master Druid",
        !           643:         "Master Druid I",               "Master Druid II",
        !           644:         "Master Druid III",             "Master Druid IV",
        !           645:         "Master Druid V",               "Master Druid VI",
        !           646:         "Master Druid VII",             "Lord Druid"
        !           647: },
        !           648: {       "Novice",                       "Initiate",             /* Monk */
        !           649:         "Brother",                      "Disciple",
        !           650:         "Canon",                        "Elder",
        !           651:         "Precept",                      "Lama",
        !           652:         "Immaculate",                   "Wizard",
        !           653:         "Shaman",                       "Master",
        !           654:         "Superior Master",              "Master of Dragons",
        !           655:         "Master of North Wind",         "Master of West Wind",
        !           656:         "Master of South Wind",         "Master of East Wind",
        !           657:         "Grand Master I",               "Grand Master II",
        !           658:         "Grand Master III",             "Grand Master IV",
        !           659:         "Grand Master V",               "Grand Master VI",
        !           660:         "Grand Master VII",             "Lord Monk"
        !           661: }
        !           662: };
        !           663:

CVSweb