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