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

Annotation of early-roguelike/rogue4/init.c, Revision 1.1.1.1

1.1       rubenllo    1: /*
                      2:  * global variable initializaton
                      3:  *
                      4:  * @(#)init.c  4.16 (Berkeley) 3/30/82
                      5:  *
                      6:  * Rogue: Exploring the Dungeons of Doom
                      7:  * Copyright (C) 1980, 1981, 1982 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 <stdlib.h>
                     16: #include <string.h>
                     17: #include "rogue.h"
                     18:
                     19: #ifdef WIZARD
                     20: void badcheck(char *name, struct magic_item *magic, int bound);
                     21: #endif
                     22:
                     23: /*
                     24:  * init_player:
                     25:  *     Roll up the rogue
                     26:  */
                     27: void
                     28: init_player(void)
                     29: {
                     30:     register THING *obj;
                     31:
                     32:     pstats = max_stats;
                     33:     food_left = HUNGERTIME;
                     34:     /*
                     35:      * Give the rogue his weaponry.  First a mace.
                     36:      */
                     37:     obj = new_item();
                     38:     obj->o_type = WEAPON;
                     39:     obj->o_which = MACE;
                     40:     init_weapon(obj, MACE);
                     41:     obj->o_hplus = 1;
                     42:     obj->o_dplus = 1;
                     43:     obj->o_flags |= ISKNOW;
                     44:     obj->o_count = 1;
                     45:     obj->o_group = 0;
                     46:     add_pack(obj, TRUE);
                     47:     cur_weapon = obj;
                     48:     /*
                     49:      * Now a +1 bow
                     50:      */
                     51:     obj = new_item();
                     52:     obj->o_type = WEAPON;
                     53:     obj->o_which = BOW;
                     54:     init_weapon(obj, BOW);
                     55:     obj->o_hplus = 1;
                     56:     obj->o_dplus = 0;
                     57:     obj->o_count = 1;
                     58:     obj->o_group = 0;
                     59:     obj->o_flags |= ISKNOW;
                     60:     add_pack(obj, TRUE);
                     61:     /*
                     62:      * Now some arrows
                     63:      */
                     64:     obj = new_item();
                     65:     obj->o_type = WEAPON;
                     66:     obj->o_which = ARROW;
                     67:     init_weapon(obj, ARROW);
                     68:     obj->o_count = rnd(15) + 25;
                     69:     obj->o_hplus = obj->o_dplus = 0;
                     70:     obj->o_flags |= ISKNOW;
                     71:     add_pack(obj, TRUE);
                     72:     /*
                     73:      * And his suit of armor
                     74:      */
                     75:     obj = new_item();
                     76:     obj->o_type = ARMOR;
                     77:     obj->o_which = RING_MAIL;
                     78:     obj->o_ac = a_class[RING_MAIL] - 1;
                     79:     obj->o_flags |= ISKNOW;
                     80:     obj->o_count = 1;
                     81:     obj->o_group = 0;
                     82:     cur_armor = obj;
                     83:     add_pack(obj, TRUE);
                     84:     /*
                     85:      * Give him some food too
                     86:      */
                     87:     obj = new_item();
                     88:     obj->o_type = FOOD;
                     89:     obj->o_count = 1;
                     90:     obj->o_which = 0;
                     91:     obj->o_group = 0;
                     92:     add_pack(obj, TRUE);
                     93: }
                     94:
                     95: /*
                     96:  * Contains defintions and functions for dealing with things like
                     97:  * potions and scrolls
                     98:  */
                     99:
                    100: const char *rainbow[NCOLORS] = {
                    101:     "amber",
                    102:     "aquamarine",
                    103:     "black",
                    104:     "blue",
                    105:     "brown",
                    106:     "clear",
                    107:     "crimson",
                    108:     "cyan",
                    109:     "ecru",
                    110:     "gold",
                    111:     "green",
                    112:     "grey",
                    113:     "magenta",
                    114:     "orange",
                    115:     "pink",
                    116:     "plaid",
                    117:     "purple",
                    118:     "red",
                    119:     "silver",
                    120:     "tan",
                    121:     "tangerine",
                    122:     "topaz",
                    123:     "turquoise",
                    124:     "vermilion",
                    125:     "violet",
                    126:     "white",
                    127:     "yellow",
                    128: };
                    129:
                    130: const char *sylls[NSYLLS] = {
                    131:     "a",   "ab",  "ag",  "aks", "ala", "an",  "ankh","app", "arg", "arze",
                    132:     "ash", "ban", "bar", "bat", "bek", "bie", "bin", "bit", "bjor",
                    133:     "blu", "bot", "bu",  "byt", "comp","con", "cos", "cre", "dalf",
                    134:     "dan", "den", "do",  "e",   "eep", "el",  "eng", "er",  "ere", "erk",
                    135:     "esh", "evs", "fa",  "fid", "for", "fri", "fu",  "gan", "gar",
                    136:     "glen","gop", "gre", "ha",  "he",  "hyd", "i",   "ing", "ion", "ip",
                    137:     "ish", "it",  "ite", "iv",  "jo",  "kho", "kli", "klis","la",  "lech",
                    138:     "man", "mar", "me",  "mi",  "mic", "mik", "mon", "mung","mur",
                    139:     "nej", "nelg","nep", "ner", "nes", "nes", "nih", "nin", "o",   "od",
                    140:     "ood", "org", "orn", "ox",  "oxy", "pay", "pet", "ple", "plu", "po",
                    141:     "pot", "prok","re",  "rea", "rhov","ri",  "ro",  "rog", "rok", "rol",
                    142:     "sa",  "san", "sat", "see", "sef", "seh", "shu", "ski", "sna",
                    143:     "sne", "snik","sno", "so",  "sol", "sri", "sta", "sun", "ta",
                    144:     "tab", "tem", "ther","ti",  "tox", "trol","tue", "turs","u",
                    145:     "ulk", "um",  "un",  "uni", "ur",  "val", "viv", "vly", "vom", "wah",
                    146:     "wed", "werg","wex", "whon","wun", "xo",  "y",   "yot", "yu",
                    147:     "zant","zap", "zeb", "zim", "zok", "zon", "zum",
                    148: };
                    149:
                    150: const STONE stones[NSTONES] = {
                    151:     { "agate",          25},
                    152:     { "alexandrite",    40},
                    153:     { "amethyst",       50},
                    154:     { "carnelian",      40},
                    155:     { "diamond",       300},
                    156:     { "emerald",       300},
                    157:     { "germanium",     225},
                    158:     { "granite",         5},
                    159:     { "garnet",                 50},
                    160:     { "jade",          150},
                    161:     { "kryptonite",    300},
                    162:     { "lapis lazuli",   50},
                    163:     { "moonstone",      50},
                    164:     { "obsidian",       15},
                    165:     { "onyx",           60},
                    166:     { "opal",          200},
                    167:     { "pearl",         220},
                    168:     { "peridot",        63},
                    169:     { "ruby",          350},
                    170:     { "saphire",       285},
                    171:     { "stibotantalite",        200},
                    172:     { "tiger eye",      50},
                    173:     { "topaz",          60},
                    174:     { "turquoise",      70},
                    175:     { "taaffeite",     300},
                    176:     { "zircon",                 80},
                    177: };
                    178:
                    179: const char *wood[NWOOD] = {
                    180:     "avocado wood",
                    181:     "balsa",
                    182:     "bamboo",
                    183:     "banyan",
                    184:     "birch",
                    185:     "cedar",
                    186:     "cherry",
                    187:     "cinnibar",
                    188:     "cypress",
                    189:     "dogwood",
                    190:     "driftwood",
                    191:     "ebony",
                    192:     "elm",
                    193:     "eucalyptus",
                    194:     "fall",
                    195:     "hemlock",
                    196:     "holly",
                    197:     "ironwood",
                    198:     "kukui wood",
                    199:     "mahogany",
                    200:     "manzanita",
                    201:     "maple",
                    202:     "oaken",
                    203:     "persimmon wood",
                    204:     "pecan",
                    205:     "pine",
                    206:     "poplar",
                    207:     "redwood",
                    208:     "rosewood",
                    209:     "spruce",
                    210:     "teak",
                    211:     "walnut",
                    212:     "zebrawood",
                    213: };
                    214:
                    215: const char *metal[NMETAL] = {
                    216:     "aluminum",
                    217:     "beryllium",
                    218:     "bone",
                    219:     "brass",
                    220:     "bronze",
                    221:     "copper",
                    222:     "electrum",
                    223:     "gold",
                    224:     "iron",
                    225:     "lead",
                    226:     "magnesium",
                    227:     "mercury",
                    228:     "nickel",
                    229:     "pewter",
                    230:     "platinum",
                    231:     "steel",
                    232:     "silver",
                    233:     "silicon",
                    234:     "tin",
                    235:     "titanium",
                    236:     "tungsten",
                    237:     "zinc",
                    238: };
                    239:
                    240: /*
                    241:  * init_things
                    242:  *     Initialize the probabilities for types of things
                    243:  */
                    244: void
                    245: init_things(void)
                    246: {
                    247:     register struct magic_item *mp;
                    248:
                    249:     for (mp = &things[1]; mp <= &things[NUMTHINGS-1]; mp++)
                    250:        mp->mi_prob += (mp-1)->mi_prob;
                    251: #ifdef WIZARD
                    252:     badcheck("things", things, NUMTHINGS);
                    253: #endif
                    254: }
                    255:
                    256: /*
                    257:  * init_colors:
                    258:  *     Initialize the potion color scheme for this time
                    259:  */
                    260: void
                    261: init_colors(void)
                    262: {
                    263:     register int i, j;
                    264:     bool used[NCOLORS];
                    265:
                    266:     for (i = 0; i < NCOLORS; i++)
                    267:        used[i] = FALSE;
                    268:     for (i = 0; i < MAXPOTIONS; i++)
                    269:     {
                    270:        do
                    271:            j = rnd(NCOLORS);
                    272:        until (!used[j]);
                    273:        used[j] = TRUE;
                    274:        p_colors[i] = rainbow[j];
                    275:        p_know[i] = FALSE;
                    276:        p_guess[i] = NULL;
                    277:        if (i > 0)
                    278:            p_magic[i].mi_prob += p_magic[i-1].mi_prob;
                    279:     }
                    280: #ifdef WIZARD
                    281:     badcheck("potions", p_magic, MAXPOTIONS);
                    282: #endif
                    283: }
                    284:
                    285: /*
                    286:  * init_names:
                    287:  *     Generate the names of the various scrolls
                    288:  */
                    289: #define MAXNAME        40      /* Max number of characters in a name */
                    290:
                    291: void
                    292: init_names(void)
                    293: {
                    294:     register int nsyl;
                    295:     register char *cp;
                    296:     const char *sp;
                    297:     register int i, nwords;
                    298:
                    299:     for (i = 0; i < MAXSCROLLS; i++)
                    300:     {
                    301:        cp = prbuf;
                    302:        nwords = rnd(4) + 2;
                    303:        while (nwords--)
                    304:        {
                    305:            nsyl = rnd(3) + 1;
                    306:            while (nsyl--)
                    307:            {
                    308:                sp = sylls[rnd((sizeof sylls) / (sizeof (char *)))];
                    309:                if (&cp[strlen(sp)] > &prbuf[MAXNAME])
                    310:                        break;
                    311:                while (*sp)
                    312:                    *cp++ = *sp++;
                    313:            }
                    314:            *cp++ = ' ';
                    315:        }
                    316:        *--cp = '\0';
                    317:        s_names[i] = (char *) malloc((unsigned) strlen(prbuf)+1);
                    318:        s_know[i] = FALSE;
                    319:        s_guess[i] = NULL;
                    320:        strcpy(s_names[i], prbuf);
                    321:        if (i > 0)
                    322:            s_magic[i].mi_prob += s_magic[i-1].mi_prob;
                    323:     }
                    324: #ifdef WIZARD
                    325:     badcheck("scrolls", s_magic, MAXSCROLLS);
                    326: #endif
                    327: }
                    328:
                    329: /*
                    330:  * init_stones:
                    331:  *     Initialize the ring stone setting scheme for this time
                    332:  */
                    333: void
                    334: init_stones(void)
                    335: {
                    336:     register int i, j;
                    337:     bool used[NSTONES];
                    338:
                    339:     for (i = 0; i < NSTONES; i++)
                    340:        used[i] = FALSE;
                    341:     for (i = 0; i < MAXRINGS; i++)
                    342:     {
                    343:        do
                    344:            j = rnd(NSTONES);
                    345:        until (!used[j]);
                    346:        used[j] = TRUE;
                    347:        r_stones[i] = stones[j].st_name;
                    348:        r_know[i] = FALSE;
                    349:        r_guess[i] = NULL;
                    350:        if (i > 0)
                    351:            r_magic[i].mi_prob += r_magic[i-1].mi_prob;
                    352:        r_magic[i].mi_worth += stones[j].st_value;
                    353:     }
                    354: #ifdef WIZARD
                    355:     badcheck("rings", r_magic, MAXRINGS);
                    356: #endif
                    357: }
                    358:
                    359: /*
                    360:  * init_materials:
                    361:  *     Initialize the construction materials for wands and staffs
                    362:  */
                    363: void
                    364: init_materials(void)
                    365: {
                    366:     register int i, j;
                    367:     register const char *str;
                    368:     bool metused[NMETAL], woodused[NWOOD];
                    369:
                    370:     for (i = 0; i < NWOOD; i++)
                    371:        woodused[i] = FALSE;
                    372:     for (i = 0; i < NMETAL; i++)
                    373:        metused[i] = FALSE;
                    374:     for (i = 0; i < MAXSTICKS; i++)
                    375:     {
                    376:        for (;;)
                    377:            if (rnd(2) == 0)
                    378:            {
                    379:                j = rnd(NMETAL);
                    380:                if (!metused[j])
                    381:                {
                    382:                    ws_type[i] = "wand";
                    383:                    str = metal[j];
                    384:                    metused[j] = TRUE;
                    385:                    break;
                    386:                }
                    387:            }
                    388:            else
                    389:            {
                    390:                j = rnd(NWOOD);
                    391:                if (!woodused[j])
                    392:                {
                    393:                    ws_type[i] = "staff";
                    394:                    str = wood[j];
                    395:                    woodused[j] = TRUE;
                    396:                    break;
                    397:                }
                    398:            }
                    399:        ws_made[i] = str;
                    400:        ws_know[i] = FALSE;
                    401:        ws_guess[i] = NULL;
                    402:        if (i > 0)
                    403:            ws_magic[i].mi_prob += ws_magic[i-1].mi_prob;
                    404:     }
                    405: #ifdef WIZARD
                    406:     badcheck("sticks", ws_magic, MAXSTICKS);
                    407: #endif
                    408: }
                    409:
                    410: #ifdef WIZARD
                    411: /*
                    412:  * badcheck:
                    413:  *     Check to see if a series of probabilities sums to 100
                    414:  */
                    415: void
                    416: badcheck(char *name, struct magic_item *magic, int bound)
                    417: {
                    418:     register struct magic_item *end;
                    419:
                    420:     if (magic[bound - 1].mi_prob == 100)
                    421:        return;
                    422:     printf("\nBad percentages for %s:\n", name);
                    423:     for (end = &magic[bound]; magic < end; magic++)
                    424:        printf("%3d%% %s\n", magic->mi_prob, magic->mi_name);
                    425:     printf("[hit RETURN to continue]");
                    426:     fflush(stdout);
                    427:     while (getchar() != '\n')
                    428:        continue;
                    429: }
                    430: #endif

CVSweb