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

Annotation of early-roguelike/rogue3/init.c, Revision 1.1

1.1     ! rubenllo    1: /*
        !             2:  * global variable initializaton
        !             3:  *
        !             4:  * @(#)init.c  3.33 (Berkeley) 6/15/81
        !             5:  *
        !             6:  * Rogue: Exploring the Dungeons of Doom
        !             7:  * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
        !             8:  * All rights reserved.
        !             9:  *
        !            10:  * See the file LICENSE.TXT for full copyright and licensing information.
        !            11:  */
        !            12:
        !            13: #include "curses.h"
        !            14: #include <ctype.h>
        !            15: #include <string.h>
        !            16: #include <stdlib.h>
        !            17: #include "machdep.h"
        !            18: #include "rogue.h"
        !            19:
        !            20: int playing = TRUE, running = FALSE, wizard = FALSE;
        !            21: int notify = TRUE, fight_flush = FALSE, terse = FALSE, door_stop = FALSE;
        !            22: int jump = FALSE, slow_invent = FALSE, firstmove = FALSE, askme = TRUE;
        !            23: int use_savedir = FALSE;
        !            24: int amulet = FALSE;
        !            25: int in_shell = FALSE;
        !            26: struct linked_list *lvl_obj = NULL, *mlist = NULL;
        !            27: struct object *cur_weapon = NULL;
        !            28: int mpos = 0, no_move = 0, no_command = 0, level = 1, purse = 0, inpack = 0;
        !            29: int total = 0, no_food = 0, count = 0, fung_hit = 0, quiet = 0;
        !            30: int food_left = HUNGERTIME, group = 1, hungry_state = 0;
        !            31: int lastscore = -1;
        !            32:
        !            33: struct thing player;
        !            34: struct room rooms[MAXROOMS];
        !            35: struct room *oldrp;
        !            36: struct stats max_stats;
        !            37: struct object *cur_armor;
        !            38: struct object *cur_ring[2];
        !            39: int after;
        !            40: int waswizard;
        !            41: coord oldpos;                            /* Position before last look() call */
        !            42: coord delta;                             /* Change indicated to get_dir()    */
        !            43:
        !            44: int s_know[MAXSCROLLS];         /* Does he know what a scroll does */
        !            45: int p_know[MAXPOTIONS];         /* Does he know what a potion does */
        !            46: int r_know[MAXRINGS];                   /* Does he know what a ring does
        !            47:  */
        !            48: int ws_know[MAXSTICKS];         /* Does he know what a stick does */
        !            49:
        !            50: int  take;                               /* Thing the rogue is taking */
        !            51: int  runch;                              /* Direction player is running */
        !            52: char whoami[80];                 /* Name of player */
        !            53: char fruit[80];                          /* Favorite fruit */
        !            54: char huh[80];                            /* The last message printed */
        !            55: int dnum;                                /* Dungeon number */
        !            56: char *s_names[MAXSCROLLS];               /* Names of the scrolls */
        !            57: char *p_colors[MAXPOTIONS];              /* Colors of the potions */
        !            58: char *r_stones[MAXRINGS];                /* Stone settings of the rings */
        !            59: char *a_names[MAXARMORS];                /* Names of armor types */
        !            60: char *ws_made[MAXSTICKS];                /* What sticks are made of */
        !            61: char *s_guess[MAXSCROLLS];               /* Players guess at what scroll is */
        !            62: char *p_guess[MAXPOTIONS];               /* Players guess at what potion is */
        !            63: char *r_guess[MAXRINGS];         /* Players guess at what ring is */
        !            64: char *ws_guess[MAXSTICKS];               /* Players guess at what wand is */
        !            65: char *ws_type[MAXSTICKS];                /* Is it a wand or a staff */
        !            66: char file_name[256];                      /* Save file name */
        !            67: char home[PATH_MAX];                     /* User's home directory */
        !            68: char prbuf[80];                          /* Buffer for sprintfs */
        !            69: int max_hp;                              /* Player's max hit points */
        !            70: int ntraps;                              /* Number of traps on this level */
        !            71: int max_level;                           /* Deepest player has gone */
        !            72: int seed;                                /* Random number seed */
        !            73:
        !            74: struct trap  traps[MAXTRAPS];
        !            75:
        !            76:
        !            77: #define ___ 1
        !            78: #define _x {1,1}
        !            79: struct monster monsters[26] = {
        !            80:        /* Name          CARRY  FLAG    str, exp, lvl, amr, hpt, dmg */
        !            81:        { "giant ant",   0,     ISMEAN, { _x, 10,   2,   3, ___, "1d6" } },
        !            82:        { "bat",         0,     0,      { _x,  1,   1,   3, ___, "1d2" } },
        !            83:        { "centaur",     15,    0,      { _x, 15,   4,   4, ___, "1d6/1d6" } },
        !            84:        { "dragon",      100,   ISGREED,{ _x,9000, 10,  -1, ___, "1d8/1d8/3d10" } },
        !            85:        { "floating eye",0,     0,      { _x,  5,   1,   9, ___, "0d0" } },
        !            86:        { "violet fungi",0,     ISMEAN, { _x, 85,   8,   3, ___, "000d0" } },
        !            87:        { "gnome",       10,    0,      { _x,  8,   1,   5, ___, "1d6" } },
        !            88:        { "hobgoblin",   0,     ISMEAN, { _x,  3,   1,   5, ___, "1d8" } },
        !            89:        { "invisible stalker",0,ISINVIS,{ _x,120,   8,   3, ___, "4d4" } },
        !            90:        { "jackal",      0,     ISMEAN, { _x,  2,   1,   7, ___, "1d2" } },
        !            91:        { "kobold",      0,     ISMEAN, { _x,  1,   1,   7, ___, "1d4" } },
        !            92:        { "leprechaun",  0,     0,      { _x, 10,   3,   8, ___, "1d1" } },
        !            93:        { "mimic",       30,    0,      { _x,140,   7,   7, ___, "3d4" } },
        !            94:        { "nymph",       100,   0,      { _x, 40,   3,   9, ___, "0d0" } },
        !            95:        { "orc",         15,    ISBLOCK,{ _x,  5,   1,   6, ___, "1d8" } },
        !            96:        { "purple worm", 70,    0,      { _x,7000, 15,   6, ___, "2d12/2d4" } },
        !            97:        { "quasit",      30,    ISMEAN, { _x, 35,   3,   2, ___, "1d2/1d2/1d4" } },
        !            98:        { "rust monster",0,     ISMEAN, { _x, 25,   5,   2, ___, "0d0/0d0" } },
        !            99:        { "snake",       0,     ISMEAN, { _x,  3,   1,   5, ___, "1d3" } },
        !           100:        { "troll",       50,    ISREGEN|ISMEAN,{ _x, 55,   6,   4, ___, "1d8/1d8/2d6" } },
        !           101:        { "umber hulk",  40,    ISMEAN, { _x,130,   8,   2, ___, "3d4/3d4/2d5" } },
        !           102:        { "vampire",     20,    ISREGEN|ISMEAN,{ _x,380,   8,   1, ___, "1d10" } },
        !           103:        { "wraith",      0,     0,      { _x, 55,   5,   4, ___, "1d6" } },
        !           104:        { "xorn",        0,     ISMEAN, { _x,120,   7,  -2, ___, "1d3/1d3/1d3/4d6" } },
        !           105:        { "yeti",        30,    0,      { _x, 50,   4,   6, ___, "1d6/1d6" } },
        !           106:        { "zombie",      0,     ISMEAN, { _x,  7,   2,   8, ___, "1d8" } }
        !           107: };
        !           108: #undef ___
        !           109:
        !           110: /*
        !           111:  * init_player:
        !           112:  *     roll up the rogue
        !           113:  */
        !           114:
        !           115: void
        !           116: init_player()
        !           117: {
        !           118:     pstats.s_lvl = 1;
        !           119:     pstats.s_exp = 0L;
        !           120:     max_hp = pstats.s_hpt = 12;
        !           121:     if (rnd(100) == 7)
        !           122:     {
        !           123:        pstats.s_str.st_str = 18;
        !           124:        pstats.s_str.st_add = rnd(100) + 1;
        !           125:     }
        !           126:     else
        !           127:     {
        !           128:        pstats.s_str.st_str = 16;
        !           129:        pstats.s_str.st_add = 0;
        !           130:     }
        !           131:     strcpy(pstats.s_dmg,"1d4");
        !           132:     pstats.s_arm = 10;
        !           133:     max_stats = pstats;
        !           134:     pack = NULL;
        !           135: }
        !           136:
        !           137: /*
        !           138:  * Contains defintions and functions for dealing with things like
        !           139:  * potions and scrolls
        !           140:  */
        !           141:
        !           142: char *rainbow[] = {
        !           143:     "red",
        !           144:     "blue",
        !           145:     "green",
        !           146:     "yellow",
        !           147:     "black",
        !           148:     "brown",
        !           149:     "orange",
        !           150:     "pink",
        !           151:     "purple",
        !           152:     "grey",
        !           153:     "white",
        !           154:     "silver",
        !           155:     "gold",
        !           156:     "violet",
        !           157:     "clear",
        !           158:     "vermilion",
        !           159:     "ecru",
        !           160:     "turquoise",
        !           161:     "magenta",
        !           162:     "amber",
        !           163:     "topaz",
        !           164:     "plaid",
        !           165:     "tan",
        !           166:     "tangerine"
        !           167: };
        !           168:
        !           169: #define NCOLORS (sizeof rainbow / sizeof (char *))
        !           170: int cNCOLORS = NCOLORS;
        !           171:
        !           172: char *sylls[] = {
        !           173:     "a", "ab", "ag", "aks", "ala", "an", "ankh", "app", "arg", "arze",
        !           174:     "ash", "ban", "bar", "bat", "bek", "bie", "bin", "bit", "bjor",
        !           175:     "blu", "bot", "bu", "byt", "comp", "con", "cos", "cre", "dalf",
        !           176:     "dan", "den", "do", "e", "eep", "el", "eng", "er", "ere", "erk",
        !           177:     "esh", "evs", "fa", "fid", "for", "fri", "fu", "gan", "gar",
        !           178:     "glen", "gop", "gre", "ha", "he", "hyd", "i", "ing", "ion", "ip",
        !           179:     "ish", "it", "ite", "iv", "jo", "kho", "kli", "klis", "la", "lech",
        !           180:     "man", "mar", "me", "mi", "mic", "mik", "mon", "mung", "mur",
        !           181:     "nej", "nelg", "nep", "ner", "nes", "nes", "nih", "nin", "o", "od",
        !           182:     "ood", "org", "orn", "ox", "oxy", "pay", "pet", "ple", "plu", "po",
        !           183:     "pot", "prok", "re", "rea", "rhov", "ri", "ro", "rog", "rok", "rol",
        !           184:     "sa", "san", "sat", "see", "sef", "seh", "shu", "ski", "sna",
        !           185:     "sne", "snik", "sno", "so", "sol", "sri", "sta", "sun", "ta",
        !           186:     "tab", "tem", "ther", "ti", "tox", "trol", "tue", "turs", "u",
        !           187:     "ulk", "um", "un", "uni", "ur", "val", "viv", "vly", "vom", "wah",
        !           188:     "wed", "werg", "wex", "whon", "wun", "xo", "y", "yot", "yu",
        !           189:     "zant", "zap", "zeb", "zim", "zok", "zon", "zum",
        !           190: };
        !           191:
        !           192: char *stones[] = {
        !           193:     "agate",
        !           194:     "alexandrite",
        !           195:     "amethyst",
        !           196:     "carnelian",
        !           197:     "diamond",
        !           198:     "emerald",
        !           199:     "granite",
        !           200:     "jade",
        !           201:     "kryptonite",
        !           202:     "lapus lazuli",
        !           203:     "moonstone",
        !           204:     "obsidian",
        !           205:     "onyx",
        !           206:     "opal",
        !           207:     "pearl",
        !           208:     "ruby",
        !           209:     "saphire",
        !           210:     "tiger eye",
        !           211:     "topaz",
        !           212:     "turquoise",
        !           213: };
        !           214:
        !           215: #define NSTONES (sizeof stones / sizeof (char *))
        !           216: int cNSTONES = NSTONES;
        !           217:
        !           218: char *wood[] = {
        !           219:     "avocado wood",
        !           220:     "balsa",
        !           221:     "banyan",
        !           222:     "birch",
        !           223:     "cedar",
        !           224:     "cherry",
        !           225:     "cinnibar",
        !           226:     "driftwood",
        !           227:     "ebony",
        !           228:     "eucalyptus",
        !           229:     "hemlock",
        !           230:     "ironwood",
        !           231:     "mahogany",
        !           232:     "manzanita",
        !           233:     "maple",
        !           234:     "oak",
        !           235:     "persimmon wood",
        !           236:     "redwood",
        !           237:     "rosewood",
        !           238:     "teak",
        !           239:     "walnut",
        !           240:     "zebra wood",
        !           241: };
        !           242:
        !           243: #define NWOOD (sizeof wood / sizeof (char *))
        !           244: int cNWOOD = NWOOD;
        !           245:
        !           246: char *metal[] = {
        !           247:     "aluminium",
        !           248:     "bone",
        !           249:     "brass",
        !           250:     "bronze",
        !           251:     "copper",
        !           252:     "iron",
        !           253:     "lead",
        !           254:     "pewter",
        !           255:     "steel",
        !           256:     "tin",
        !           257:     "zinc",
        !           258: };
        !           259:
        !           260: #define NMETAL (sizeof metal / sizeof (char *))
        !           261: int cNMETAL = NMETAL;
        !           262:
        !           263: struct magic_item things[NUMTHINGS] = {
        !           264:     { "",                      27 },   /* potion */
        !           265:     { "",                      27 },   /* scroll */
        !           266:     { "",                      18 },   /* food */
        !           267:     { "",                       9 },   /* weapon */
        !           268:     { "",                       9 },   /* armor */
        !           269:     { "",                       5 },   /* ring */
        !           270:     { "",                       5 },   /* stick */
        !           271: };
        !           272:
        !           273: struct magic_item s_magic[MAXSCROLLS] = {
        !           274:     { "monster confusion",      8, 170 },
        !           275:     { "magic mapping",          5, 180 },
        !           276:     { "light",                 10, 100 },
        !           277:     { "hold monster",           2, 200 },
        !           278:     { "sleep",                  5,  50 },
        !           279:     { "enchant armor",          8, 130 },
        !           280:     { "identify",              21, 100 },
        !           281:     { "scare monster",          4, 180 },
        !           282:     { "gold detection",                 4, 110 },
        !           283:     { "teleportation",          7, 175 },
        !           284:     { "enchant weapon",                10, 150 },
        !           285:     { "create monster",                 5,  75 },
        !           286:     { "remove curse",           8, 105 },
        !           287:     { "aggravate monsters",     1,  60 },
        !           288:     { "blank paper",            1,  50 },
        !           289:     { "genocide",               1, 200 },
        !           290: };
        !           291:
        !           292: struct magic_item p_magic[MAXPOTIONS] = {
        !           293:     { "confusion",              8,  50 },
        !           294:     { "paralysis",             10,  50 },
        !           295:     { "poison",                         8,  50 },
        !           296:     { "gain strength",         15, 150 },
        !           297:     { "see invisible",          2, 170 },
        !           298:     { "healing",               15, 130 },
        !           299:     { "monster detection",      6, 120 },
        !           300:     { "magic detection",        6, 105 },
        !           301:     { "raise level",            2, 220 },
        !           302:     { "extra healing",          5, 180 },
        !           303:     { "haste self",             4, 200 },
        !           304:     { "restore strength",      14, 120 },
        !           305:     { "blindness",              4,  50 },
        !           306:     { "thirst quenching",       1,  50 },
        !           307: };
        !           308:
        !           309: struct magic_item r_magic[MAXRINGS] = {
        !           310:     { "protection",             9, 200 },
        !           311:     { "add strength",           9, 200 },
        !           312:     { "sustain strength",       5, 180 },
        !           313:     { "searching",             10, 200 },
        !           314:     { "see invisible",         10, 175 },
        !           315:     { "adornment",              1, 100 },
        !           316:     { "aggravate monster",     11, 100 },
        !           317:     { "dexterity",              8, 220 },
        !           318:     { "increase damage",        8, 220 },
        !           319:     { "regeneration",           4, 260 },
        !           320:     { "slow digestion",                 9, 240 },
        !           321:     { "teleportation",          9, 100 },
        !           322:     { "stealth",                7, 100 },
        !           323: };
        !           324:
        !           325: struct magic_item ws_magic[MAXSTICKS] = {
        !           326:     { "light",                 12, 120 },
        !           327:     { "striking",               9, 115 },
        !           328:     { "lightning",              3, 200 },
        !           329:     { "fire",                   3, 200 },
        !           330:     { "cold",                   3, 200 },
        !           331:     { "polymorph",             15, 210 },
        !           332:     { "magic missile",         10, 170 },
        !           333:     { "haste monster",          9,  50 },
        !           334:     { "slow monster",          11, 220 },
        !           335:     { "drain life",             9, 210 },
        !           336:     { "nothing",                1,  70 },
        !           337:     { "teleport away",          5, 140 },
        !           338:     { "teleport to",            5,  60 },
        !           339:     { "cancellation",           5, 130 },
        !           340: };
        !           341:
        !           342: int a_class[MAXARMORS] = {
        !           343:     8,
        !           344:     7,
        !           345:     7,
        !           346:     6,
        !           347:     5,
        !           348:     4,
        !           349:     4,
        !           350:     3,
        !           351: };
        !           352:
        !           353: char *a_names[MAXARMORS] = {
        !           354:     "leather armor",
        !           355:     "ring mail",
        !           356:     "studded leather armor",
        !           357:     "scale mail",
        !           358:     "chain mail",
        !           359:     "splint mail",
        !           360:     "banded mail",
        !           361:     "plate mail",
        !           362: };
        !           363:
        !           364: int a_chances[MAXARMORS] = {
        !           365:     20,
        !           366:     35,
        !           367:     50,
        !           368:     63,
        !           369:     75,
        !           370:     85,
        !           371:     95,
        !           372:     100
        !           373: };
        !           374:
        !           375: #define MAX3(a,b,c)     (a > b ? (a > c ? a : c) : (b > c ? b : c))
        !           376: static int used[MAX3(NCOLORS, NSTONES, NWOOD)];
        !           377:
        !           378: /*
        !           379:  * init_things
        !           380:  *     Initialize the probabilities for types of things
        !           381:  */
        !           382: void
        !           383: init_things()
        !           384: {
        !           385:     struct magic_item *mp;
        !           386:
        !           387:     for (mp = &things[1]; mp <= &things[NUMTHINGS-1]; mp++)
        !           388:        mp->mi_prob += (mp-1)->mi_prob;
        !           389:     badcheck("things", things, NUMTHINGS);
        !           390: }
        !           391:
        !           392: /*
        !           393:  * init_colors:
        !           394:  *     Initialize the potion color scheme for this time
        !           395:  */
        !           396:
        !           397: void
        !           398: init_colors()
        !           399: {
        !           400:     int i, j;
        !           401:
        !           402:     for (i = 0; i < NCOLORS; i++)
        !           403:        used[i] = 0;
        !           404:     for (i = 0; i < MAXPOTIONS; i++)
        !           405:     {
        !           406:        do
        !           407:            j = rnd(NCOLORS);
        !           408:        until (!used[j]);
        !           409:        used[j] = TRUE;
        !           410:        p_colors[i] = rainbow[j];
        !           411:        p_know[i] = FALSE;
        !           412:        p_guess[i] = NULL;
        !           413:        if (i > 0)
        !           414:                p_magic[i].mi_prob += p_magic[i-1].mi_prob;
        !           415:     }
        !           416:     badcheck("potions", p_magic, MAXPOTIONS);
        !           417: }
        !           418:
        !           419: /*
        !           420:  * init_names:
        !           421:  *     Generate the names of the various scrolls
        !           422:  */
        !           423:
        !           424: void
        !           425: init_names()
        !           426: {
        !           427:     int nsyl;
        !           428:     char *cp, *sp;
        !           429:     int i, nwords;
        !           430:
        !           431:     for (i = 0; i < MAXSCROLLS; i++)
        !           432:     {
        !           433:        cp = prbuf;
        !           434:        nwords = rnd(4)+2;
        !           435:        while(nwords--)
        !           436:        {
        !           437:            nsyl = rnd(3)+1;
        !           438:            while(nsyl--)
        !           439:            {
        !           440:                sp = sylls[rnd((sizeof sylls) / (sizeof (char *)))];
        !           441:                while(*sp)
        !           442:                    *cp++ = *sp++;
        !           443:            }
        !           444:            *cp++ = ' ';
        !           445:        }
        !           446:        *--cp = '\0';
        !           447:        s_names[i] = (char *) _new(strlen(prbuf)+1);
        !           448:        s_know[i] = FALSE;
        !           449:        s_guess[i] = NULL;
        !           450:        strcpy(s_names[i], prbuf);
        !           451:        if (i > 0)
        !           452:                s_magic[i].mi_prob += s_magic[i-1].mi_prob;
        !           453:     }
        !           454:     badcheck("scrolls", s_magic, MAXSCROLLS);
        !           455: }
        !           456:
        !           457: /*
        !           458:  * init_stones:
        !           459:  *     Initialize the ring stone setting scheme for this time
        !           460:  */
        !           461:
        !           462: void
        !           463: init_stones()
        !           464: {
        !           465:     int i, j;
        !           466:
        !           467:     for (i = 0; i < NSTONES; i++)
        !           468:        used[i] = FALSE;
        !           469:     for (i = 0; i < MAXRINGS; i++)
        !           470:     {
        !           471:        do
        !           472:            j = rnd(NSTONES);
        !           473:        until (!used[j]);
        !           474:        used[j] = TRUE;
        !           475:        r_stones[i] = stones[j];
        !           476:        r_know[i] = FALSE;
        !           477:        r_guess[i] = NULL;
        !           478:        if (i > 0)
        !           479:                r_magic[i].mi_prob += r_magic[i-1].mi_prob;
        !           480:     }
        !           481:     badcheck("rings", r_magic, MAXRINGS);
        !           482: }
        !           483:
        !           484: /*
        !           485:  * init_materials:
        !           486:  *     Initialize the construction materials for wands and staffs
        !           487:  */
        !           488:
        !           489: void
        !           490: init_materials()
        !           491: {
        !           492:     int i, j;
        !           493:     static int metused[NMETAL];
        !           494:
        !           495:     for (i = 0; i < NWOOD; i++)
        !           496:        used[i] = FALSE;
        !           497:     for (i = 0; i < NMETAL; i++)
        !           498:        metused[i] = FALSE;
        !           499:
        !           500:     for (i = 0; i < MAXSTICKS; i++)
        !           501:     {
        !           502:        for (;;)
        !           503:            if (rnd(100) > 50)
        !           504:            {
        !           505:                j = rnd(NMETAL);
        !           506:                if (!metused[j])
        !           507:                {
        !           508:                    metused[j] = TRUE;
        !           509:                    ws_made[i] = metal[j];
        !           510:                    ws_type[i] = "wand";
        !           511:                    break;
        !           512:                }
        !           513:            }
        !           514:            else
        !           515:            {
        !           516:                j = rnd(NWOOD);
        !           517:                if (!used[j])
        !           518:                {
        !           519:                    used[j] = TRUE;
        !           520:                    ws_made[i] = wood[j];
        !           521:                    ws_type[i] = "staff";
        !           522:                    break;
        !           523:                }
        !           524:            }
        !           525:
        !           526:        ws_know[i] = FALSE;
        !           527:        ws_guess[i] = NULL;
        !           528:        if (i > 0)
        !           529:                ws_magic[i].mi_prob += ws_magic[i-1].mi_prob;
        !           530:     }
        !           531:     badcheck("sticks", ws_magic, MAXSTICKS);
        !           532: }
        !           533:
        !           534: void
        !           535: badcheck(char *name, struct magic_item *magic, int bound)
        !           536: {
        !           537:     struct magic_item *end;
        !           538:
        !           539:     if (magic[bound - 1].mi_prob == 100)
        !           540:        return;
        !           541:     printf("\nBad percentages for %s:\n", name);
        !           542:     for (end = &magic[bound]; magic < end; magic++)
        !           543:        printf("%3d%% %s\n", magic->mi_prob, magic->mi_name);
        !           544:     printf("[hit RETURN to continue]");
        !           545:     fflush(stdout);
        !           546:     while (getchar() != '\n')
        !           547:        continue;
        !           548: }
        !           549:
        !           550: struct h_list helpstr[] = {
        !           551:     { '?',     "       prints help" },
        !           552:     { '/',     "       identify object" },
        !           553:     { 'h',     "       left" },
        !           554:     { 'j',     "       down" },
        !           555:     { 'k',     "       up" },
        !           556:     { 'l',     "       right" },
        !           557:     { 'y',     "       up & left" },
        !           558:     { 'u',     "       up & right" },
        !           559:     { 'b',     "       down & left" },
        !           560:     { 'n',     "       down & right" },
        !           561:     { 'H',     "       run left" },
        !           562:     { 'J',     "       run down" },
        !           563:     { 'K',     "       run up" },
        !           564:     { 'L',     "       run right" },
        !           565:     { 'Y',     "       run up & left" },
        !           566:     { 'U',     "       run up & right" },
        !           567:     { 'B',     "       run down & left" },
        !           568:     { 'N',     "       run down & right" },
        !           569:     { 't',     "<dir>  throw something" },
        !           570:     { 'f',     "<dir>  forward until find something" },
        !           571:     { 'p',     "<dir>  zap a wand in a direction" },
        !           572:     { 'z',     "       zap a wand or staff" },
        !           573:     { '>',     "       go down a staircase" },
        !           574:     { 's',     "       search for trap/secret door" },
        !           575:     { '.',     "       rest for a turn" },
        !           576:     { 'i',     "       inventory" },
        !           577:     { 'I',     "       inventory single item" },
        !           578:     { 'q',     "       quaff potion" },
        !           579:     { 'r',     "       read paper" },
        !           580:     { 'e',     "       eat food" },
        !           581:     { 'w',     "       wield a weapon" },
        !           582:     { 'W',     "       wear armor" },
        !           583:     { 'T',     "       take armor off" },
        !           584:     { 'P',     "       put on ring" },
        !           585:     { 'R',     "       remove ring" },
        !           586:     { 'd',     "       drop object" },
        !           587:     { 'c',     "       call object" },
        !           588:     { 'o',     "       examine/set options" },
        !           589:     { CTRL('L'),       "       redraw screen" },
        !           590:     { CTRL('R'),       "       repeat last message" },
        !           591:     { ESCAPE,  "       cancel command" },
        !           592:     { 'v',     "       print program version number" },
        !           593:     { '!',     "       shell escape" },
        !           594:     { 'S',     "       save game" },
        !           595:     { 'Q',     "       quit" },
        !           596:     { 0, 0 }
        !           597: };

CVSweb