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

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

1.1       rubenllo    1: /*
                      2:  * initializate various things
                      3:  *
                      4:  * @(#)init.c  9.0     (rdk)    7/17/84
                      5:  *
                      6:  * Super-Rogue
                      7:  * Copyright (C) 1984 Robert D. Kindelberger
                      8:  * All rights reserved.
                      9:  *
                     10:  * Based on "Rogue: Exploring the Dungeons of Doom"
                     11:  * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
                     12:  * All rights reserved.
                     13:  *
                     14:  * See the file LICENSE.TXT for full copyright and licensing information.
                     15:  */
                     16:
                     17: #include <ctype.h>
                     18: #include <string.h>
                     19: #include "rogue.h"
                     20: #include "rogue.ext"
                     21:
                     22: int pinit(void);
                     23: void badcheck(char *name, struct magic_item *magic);
                     24:
                     25: char *rainbow[NCOLORS] = {
                     26:        "Red",          "Blue",         "Green",        "Yellow",
                     27:        "Black",        "Brown",        "Orange",       "Pink",
                     28:        "Purple",       "Grey",         "White",        "Silver",
                     29:        "Gold",         "Violet",       "Clear",        "Vermilion",
                     30:        "Ecru",         "Turquoise","Magenta",  "Amber",
                     31:        "Topaz",        "Plaid",        "Tan",          "Tangerine",
                     32:        "Aquamarine", "Scarlet","Khaki",        "Crimson",
                     33:        "Indigo",       "Beige",        "Lavender",     "Saffron",
                     34: };
                     35:
                     36: char *sylls[NSYLS] = {
                     37:        "a", "ab", "ag", "aks", "ala", "an", "ankh", "app", "arg", "arze",
                     38:        "ash", "ban", "bar", "bat", "bek", "bie", "bin", "bit", "bjor",
                     39:        "blu", "bot", "bu", "byt", "comp", "con", "cos", "cre", "dalf",
                     40:        "dan", "den", "do", "e", "eep", "el", "eng", "er", "ere", "erk",
                     41:        "esh", "evs", "fa", "fid", "for", "fri", "fu", "gan", "gar",
                     42:        "glen", "gop", "gre", "ha", "he", "hyd", "i", "ing", "ion", "ip",
                     43:        "ish", "it", "ite", "iv", "jo", "kho", "kli", "klis", "la", "lech",
                     44:        "man", "mar", "me", "mi", "mic", "mik", "mon", "mung", "mur",
                     45:        "nej", "nelg", "nep", "ner", "nes", "nes", "nih", "nin", "o", "od",
                     46:        "ood", "org", "orn", "ox", "oxy", "pay", "pet", "ple", "plu", "po",
                     47:        "pot","prok","re", "rea", "rhov", "ri", "ro", "rog", "rok", "rol",
                     48:        "sa", "san", "sat", "see", "sef", "seh", "shu", "ski", "sna",
                     49:        "sne", "snik", "sno", "so", "sol", "sri", "sta", "sun", "ta",
                     50:        "tab", "tem", "ther", "ti", "tox", "trol", "tue", "turs", "u",
                     51:        "ulk", "um", "un", "uni", "ur", "val", "viv", "vly", "vom", "wah",
                     52:        "wed", "werg", "wex", "whon", "wun", "xo", "y", "yot", "yu",
                     53:        "zant", "zap", "zeb", "zim", "zok", "zon", "zum",
                     54: };
                     55:
                     56: char *stones[] = {
                     57:        "Agate",                "Alexandrite",  "Amethyst",
                     58:        "Azurite",              "Carnelian",    "Chrysoberyl",
                     59:        "Chrysoprase",  "Citrine",              "Diamond",
                     60:        "Emerald",              "Garnet",               "Hematite",
                     61:        "Jacinth",              "Jade",                 "Kryptonite",
                     62:        "Lapus lazuli", "Malachite",    "Moonstone",
                     63:        "Obsidian",             "Olivine",              "Onyx",
                     64:        "Opal",                 "Pearl",                "Peridot",
                     65:        "Quartz",               "Rhodochrosite","Ruby",
                     66:        "Sapphire",             "Sardonyx",             "Serpintine",
                     67:        "Spinel",               "Tiger eye",    "Topaz",
                     68:        "Tourmaline",   "Turquoise",
                     69: };
                     70:
                     71: char *wood[NWOOD] = {
                     72:        "Avocado wood", "Balsa",        "Banyan",               "Birch",
                     73:        "Cedar",                "Cherry",       "Cinnibar",             "Dogwood",
                     74:        "Driftwood",    "Ebony",        "Eucalyptus",   "Hemlock",
                     75:        "Ironwood",             "Mahogany",     "Manzanita",    "Maple",
                     76:        "Oak",                  "Pine",         "Redwood",              "Rosewood",
                     77:        "Teak",                 "Walnut",       "Zebra wood",   "Persimmon wood",
                     78: };
                     79:
                     80: char *metal[NMETAL] = {
                     81:        "Aluminium",    "Bone",         "Brass",        "Bronze",
                     82:        "Copper",               "Chromium",     "Iron",         "Lead",
                     83:        "Magnesium",    "Pewter",       "Platinum",     "Steel",
                     84:        "Tin",                  "Titanium",     "Zinc",
                     85: };
                     86:
                     87: /*
                     88:  * init_things:
                     89:  *     Initialize the probabilities for types of things
                     90:  */
                     91: void
                     92: init_things(void)
                     93: {
                     94:        struct magic_item *mi;
                     95:
                     96:        /*
                     97:         * init general things
                     98:         */
                     99:        for (mi = &things[1]; mi < &things[NUMTHINGS]; mi++)
                    100:                mi->mi_prob += (mi-1)->mi_prob;
                    101:        badcheck("things", things);
                    102:        /*
                    103:         * init armor things
                    104:         */
                    105:        for (mi = &a_magic[1]; mi < &a_magic[MAXARMORS]; mi++)
                    106:                mi->mi_prob += (mi-1)->mi_prob;
                    107:        badcheck("armor", a_magic);
                    108:        /*
                    109:         * init weapon stuff
                    110:         */
                    111:        for (mi = &w_magic[1]; mi < &w_magic[MAXWEAPONS]; mi++)
                    112:                mi->mi_prob += (mi-1)->mi_prob;
                    113:        badcheck("weapon", w_magic);
                    114: }
                    115:
                    116:
                    117: /*
                    118:  * init_colors:
                    119:  *     Initialize the potion color scheme for this time
                    120:  */
                    121: void
                    122: init_colors(void)
                    123: {
                    124:        reg int i, j;
                    125:        reg char *str;
                    126:        bool used[NCOLORS];
                    127:
                    128:        for (i = 0; i < NCOLORS; i++)
                    129:                used[i] = FALSE;
                    130:        for (i = 0; i < MAXPOTIONS; i++) {
                    131:                do {
                    132:                        j = rnd(NCOLORS);
                    133:                } until (!used[j]);
                    134:                used[j] = TRUE;
                    135:                p_colors[i] = rainbow[j];
                    136:                p_know[i] = FALSE;
                    137:                p_guess[i] = NULL;
                    138:                if (i > 0)
                    139:                        p_magic[i].mi_prob += p_magic[i-1].mi_prob;
                    140:        }
                    141:        badcheck("potions", p_magic);
                    142: }
                    143:
                    144:
                    145: /*
                    146:  * init_names:
                    147:  *     Generate the names of the various scrolls
                    148:  */
                    149: void
                    150: init_names(void)
                    151: {
                    152:        reg int nsyl;
                    153:        reg char *cp, *sp;
                    154:        reg int i, nwords;
                    155:
                    156:        for (i = 0; i < MAXSCROLLS; i++) {
                    157:                cp = prbuf;
                    158:                nwords = rnd(3)+1;
                    159:                while(nwords--) {
                    160:                        nsyl = rnd(3)+2;
                    161:                        while(nsyl--) {
                    162:                                sp = sylls[rnd(NSYLS)];
                    163:                                while(*sp)
                    164:                                        *cp++ = *sp++;
                    165:                        }
                    166:                        *cp++ = ' ';
                    167:                }
                    168:                *--cp = '\0';
                    169:                s_names[i] = new(strlen(prbuf)+1);
                    170:                s_know[i] = FALSE;
                    171:                s_guess[i] = NULL;
                    172:                strcpy(s_names[i], prbuf);
                    173:                if (i > 0)
                    174:                        s_magic[i].mi_prob += s_magic[i-1].mi_prob;
                    175:        }
                    176:        badcheck("scrolls", s_magic);
                    177: }
                    178:
                    179: /*
                    180:  * init_stones:
                    181:  *     Initialize the ring stone setting scheme for this time
                    182:  */
                    183:
                    184: void
                    185: init_stones(void)
                    186: {
                    187:        reg int i, j;
                    188:        reg char *str;
                    189:        bool used[NSTONES];
                    190:
                    191:        for (i = 0; i < NSTONES; i++)
                    192:                used[i] = FALSE;
                    193:
                    194:        for (i = 0; i < MAXRINGS; i++) {
                    195:                do {
                    196:                        j = rnd(NSTONES);
                    197:                } until (!used[j]);
                    198:                used[j] = TRUE;
                    199:                r_stones[i] = stones[j];
                    200:                r_know[i] = FALSE;
                    201:                r_guess[i] = NULL;
                    202:                if (i > 0)
                    203:                        r_magic[i].mi_prob += r_magic[i-1].mi_prob;
                    204:        }
                    205:        badcheck("rings", r_magic);
                    206: }
                    207:
                    208: /*
                    209:  * init_materials:
                    210:  *     Initialize the construction materials for wands and staffs
                    211:  */
                    212:
                    213: void
                    214: init_materials(void)
                    215: {
                    216:        int i, j;
                    217:        char *str;
                    218:        struct rod *rd;
                    219:        bool metused[NMETAL], woodused[NWOOD];
                    220:
                    221:        for (i = 0; i < NWOOD; i++)
                    222:                woodused[i] = FALSE;
                    223:        for (i = 0; i < NMETAL; i++)
                    224:                metused[i] = FALSE;
                    225:
                    226:        for (i = 0; i < MAXSTICKS; i++) {
                    227:                rd = &ws_stuff[i];
                    228:                for (;;)  {
                    229:                        if (rnd(100) > 50) {
                    230:                                j = rnd(NMETAL);
                    231:                                if (!metused[j]) {
                    232:                                        str = metal[j];
                    233:                                        rd->ws_type = "wand";
                    234:                                        rd->ws_vol = V_WS_WAND;
                    235:                                        rd->ws_wght = W_WS_WAND;
                    236:                                        metused[j] = TRUE;
                    237:                                        break;
                    238:                                }
                    239:                        }
                    240:                        else {
                    241:                                j = rnd(NWOOD);
                    242:                                if (!woodused[j]) {
                    243:                                        str = wood[j];
                    244:                                        rd->ws_type = "staff";
                    245:                                        rd->ws_vol = V_WS_STAFF;
                    246:                                        rd->ws_wght = W_WS_WAND;
                    247:                                        woodused[j] = TRUE;
                    248:                                        break;
                    249:                                }
                    250:                        }
                    251:                }
                    252:                ws_stuff[i].ws_made = str;
                    253:                ws_know[i] = FALSE;
                    254:                ws_guess[i] = NULL;
                    255:                if (i > 0)
                    256:                        ws_magic[i].mi_prob += ws_magic[i-1].mi_prob;
                    257:        }
                    258:        badcheck("sticks", ws_magic);
                    259: }
                    260:
                    261: void
                    262: badcheck(char *name, struct magic_item *magic)
                    263: {
                    264:        struct magic_item *mg;
                    265:
                    266:        for (mg = magic; mg->mi_name != NULL; mg++)
                    267:                ;
                    268:        if ((mg - 1)->mi_prob == 1000)
                    269:                return;
                    270:        printf("\nBad percentages for %s:\n", name);
                    271:        for (mg = magic; mg->mi_name != NULL; mg++)
                    272:                printf("%4d%% %s\n", mg->mi_prob, mg->mi_name);
                    273:        printf("%s", retstr);
                    274:        fflush(stdout);
                    275:        while (getchar() != '\n')
                    276:                continue;
                    277: }
                    278:
                    279:
                    280: /*
                    281:  * init_player:
                    282:  *     roll up the rogue
                    283:  */
                    284:
                    285: void
                    286: init_player(void)
                    287: {
                    288:        player.t_nomove = 0;
                    289:        player.t_nocmd = 0;
                    290:        him = &player.t_stats;
                    291:        him->s_lvl = 1;
                    292:        him->s_exp = 0L;
                    293:        him->s_maxhp = him->s_hpt = pinit();            /* hit points */
                    294:        him->s_re.a_str = pinit();              /* strength */
                    295:        him->s_re.a_dex = pinit();              /* dexterity */
                    296:        him->s_re.a_wis = pinit();              /* wisdom */
                    297:        him->s_re.a_con = pinit();              /* constitution */
                    298:        him->s_ef = him->s_re;                  /* effective = real */
                    299:        strcpy(him->s_dmg, "1d4");
                    300:        him->s_arm = NORMAC;
                    301:        him->s_carry = totalenc();
                    302:        him->s_pack = 0;
                    303:        pack = NULL;                            /* empty pack so far */
                    304:        max_stats = *him;
                    305: }
                    306:
                    307:
                    308: /*
                    309:  * pinit:
                    310:  *     Returns the best 3 of 4 on a 6-sided die
                    311:  */
                    312: int
                    313: pinit(void)
                    314: {
                    315:        int best[4];
                    316:        reg int i, min, minind, dicetot;
                    317:
                    318:        for (i = 0 ; i < 4 ; i++)
                    319:                best[i] = roll(1,6);    /* populate array */
                    320:        min = best[0];                          /* assume that 1st entry */
                    321:        minind = 0;                                     /* is the lowest */
                    322:        for (i = 1 ; i < 4 ; i++) {     /* find the lowest */
                    323:                if (best[i] < min) {    /* if < minimum then update */
                    324:                        min = best[i];
                    325:                        minind = i;                     /* point to lowest value */
                    326:                }
                    327:        }
                    328:        dicetot = 0;                            /* start with nothing */
                    329:        for (i = 0 ; i < 4 ; i++) {
                    330:                if (i != minind)                /* if not minimum, then add it */
                    331:                        dicetot += best[i];
                    332:        }
                    333:        return(dicetot);
                    334: }
                    335:
                    336: /*
                    337:  * init_everything:
                    338:  *     Set up all important stuff.
                    339:  */
                    340: void
                    341: init_everything(void)
                    342: {
                    343:        init_player();                  /* Roll up the rogue */
                    344:        init_things();                  /* Set up probabilities */
                    345:        init_names();                   /* Set up names of scrolls */
                    346:        init_colors();                  /* Set up colors of potions */
                    347:        init_stones();                  /* Set up stones in rings */
                    348:        init_materials();               /* Set up materials of wands */
                    349: }

CVSweb