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