Mercurial > hg > early-roguelike
comparison rogue3/init.c @ 0:527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
author | edwarj4 |
---|---|
date | Tue, 13 Oct 2009 13:33:34 +0000 |
parents | |
children | b4856d4d4c4e |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:527e2150eaf0 |
---|---|
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 = FALSE; | |
23 int amulet = FALSE; | |
24 int in_shell = FALSE; | |
25 struct linked_list *lvl_obj = NULL, *mlist = NULL; | |
26 struct object *cur_weapon = NULL; | |
27 int mpos = 0, no_move = 0, no_command = 0, level = 1, purse = 0, inpack = 0; | |
28 int total = 0, no_food = 0, count = 0, fung_hit = 0, quiet = 0; | |
29 int food_left = HUNGERTIME, group = 1, hungry_state = 0; | |
30 int lastscore = -1; | |
31 | |
32 struct thing player; | |
33 struct room rooms[MAXROOMS]; | |
34 struct room *oldrp; | |
35 struct stats max_stats; | |
36 struct object *cur_armor; | |
37 struct object *cur_ring[2]; | |
38 int after; | |
39 int waswizard; | |
40 coord oldpos; /* Position before last look() call */ | |
41 coord delta; /* Change indicated to get_dir() */ | |
42 | |
43 int s_know[MAXSCROLLS]; /* Does he know what a scroll does */ | |
44 int p_know[MAXPOTIONS]; /* Does he know what a potion does */ | |
45 int r_know[MAXRINGS]; /* Does he know what a ring does | |
46 */ | |
47 int ws_know[MAXSTICKS]; /* Does he know what a stick does */ | |
48 | |
49 int take; /* Thing the rogue is taking */ | |
50 int runch; /* Direction player is running */ | |
51 char whoami[80]; /* Name of player */ | |
52 char fruit[80]; /* Favorite fruit */ | |
53 char huh[80]; /* The last message printed */ | |
54 int dnum; /* Dungeon number */ | |
55 char *s_names[MAXSCROLLS]; /* Names of the scrolls */ | |
56 char *p_colors[MAXPOTIONS]; /* Colors of the potions */ | |
57 char *r_stones[MAXRINGS]; /* Stone settings of the rings */ | |
58 char *a_names[MAXARMORS]; /* Names of armor types */ | |
59 char *ws_made[MAXSTICKS]; /* What sticks are made of */ | |
60 char *s_guess[MAXSCROLLS]; /* Players guess at what scroll is */ | |
61 char *p_guess[MAXPOTIONS]; /* Players guess at what potion is */ | |
62 char *r_guess[MAXRINGS]; /* Players guess at what ring is */ | |
63 char *ws_guess[MAXSTICKS]; /* Players guess at what wand is */ | |
64 char *ws_type[MAXSTICKS]; /* Is it a wand or a staff */ | |
65 char file_name[80]; /* Save file name */ | |
66 char home[PATH_MAX]; /* User's home directory */ | |
67 unsigned char prbuf[80]; /* Buffer for sprintfs */ | |
68 int max_hp; /* Player's max hit points */ | |
69 int ntraps; /* Number of traps on this level */ | |
70 int max_level; /* Deepest player has gone */ | |
71 int seed; /* Random number seed */ | |
72 | |
73 struct trap traps[MAXTRAPS]; | |
74 | |
75 | |
76 #define ___ 1 | |
77 #define _x {1,1} | |
78 struct monster monsters[26] = { | |
79 /* Name CARRY FLAG str, exp, lvl, amr, hpt, dmg */ | |
80 { "giant ant", 0, ISMEAN, { _x, 10, 2, 3, ___, "1d6" } }, | |
81 { "bat", 0, 0, { _x, 1, 1, 3, ___, "1d2" } }, | |
82 { "centaur", 15, 0, { _x, 15, 4, 4, ___, "1d6/1d6" } }, | |
83 { "dragon", 100, ISGREED,{ _x,9000, 10, -1, ___, "1d8/1d8/3d10" } }, | |
84 { "floating eye",0, 0, { _x, 5, 1, 9, ___, "0d0" } }, | |
85 { "violet fungi",0, ISMEAN, { _x, 85, 8, 3, ___, "000d0" } }, | |
86 { "gnome", 10, 0, { _x, 8, 1, 5, ___, "1d6" } }, | |
87 { "hobgoblin", 0, ISMEAN, { _x, 3, 1, 5, ___, "1d8" } }, | |
88 { "invisible stalker",0,ISINVIS,{ _x,120, 8, 3, ___, "4d4" } }, | |
89 { "jackal", 0, ISMEAN, { _x, 2, 1, 7, ___, "1d2" } }, | |
90 { "kobold", 0, ISMEAN, { _x, 1, 1, 7, ___, "1d4" } }, | |
91 { "leprechaun", 0, 0, { _x, 10, 3, 8, ___, "1d1" } }, | |
92 { "mimic", 30, 0, { _x,140, 7, 7, ___, "3d4" } }, | |
93 { "nymph", 100, 0, { _x, 40, 3, 9, ___, "0d0" } }, | |
94 { "orc", 15, ISBLOCK,{ _x, 5, 1, 6, ___, "1d8" } }, | |
95 { "purple worm", 70, 0, { _x,7000, 15, 6, ___, "2d12/2d4" } }, | |
96 { "quasit", 30, ISMEAN, { _x, 35, 3, 2, ___, "1d2/1d2/1d4" } }, | |
97 { "rust monster",0, ISMEAN, { _x, 25, 5, 2, ___, "0d0/0d0" } }, | |
98 { "snake", 0, ISMEAN, { _x, 3, 1, 5, ___, "1d3" } }, | |
99 { "troll", 50, ISREGEN|ISMEAN,{ _x, 55, 6, 4, ___, "1d8/1d8/2d6" } }, | |
100 { "umber hulk", 40, ISMEAN, { _x,130, 8, 2, ___, "3d4/3d4/2d5" } }, | |
101 { "vampire", 20, ISREGEN|ISMEAN,{ _x,380, 8, 1, ___, "1d10" } }, | |
102 { "wraith", 0, 0, { _x, 55, 5, 4, ___, "1d6" } }, | |
103 { "xorn", 0, ISMEAN, { _x,120, 7, -2, ___, "1d3/1d3/1d3/4d6" } }, | |
104 { "yeti", 30, 0, { _x, 50, 4, 6, ___, "1d6/1d6" } }, | |
105 { "zombie", 0, ISMEAN, { _x, 7, 2, 8, ___, "1d8" } } | |
106 }; | |
107 #undef ___ | |
108 | |
109 /* | |
110 * init_player: | |
111 * roll up the rogue | |
112 */ | |
113 | |
114 void | |
115 init_player() | |
116 { | |
117 pstats.s_lvl = 1; | |
118 pstats.s_exp = 0L; | |
119 max_hp = pstats.s_hpt = 12; | |
120 if (rnd(100) == 7) | |
121 { | |
122 pstats.s_str.st_str = 18; | |
123 pstats.s_str.st_add = rnd(100) + 1; | |
124 } | |
125 else | |
126 { | |
127 pstats.s_str.st_str = 16; | |
128 pstats.s_str.st_add = 0; | |
129 } | |
130 strcpy(pstats.s_dmg,"1d4"); | |
131 pstats.s_arm = 10; | |
132 max_stats = pstats; | |
133 pack = NULL; | |
134 } | |
135 | |
136 /* | |
137 * Contains defintions and functions for dealing with things like | |
138 * potions and scrolls | |
139 */ | |
140 | |
141 char *rainbow[] = { | |
142 "red", | |
143 "blue", | |
144 "green", | |
145 "yellow", | |
146 "black", | |
147 "brown", | |
148 "orange", | |
149 "pink", | |
150 "purple", | |
151 "grey", | |
152 "white", | |
153 "silver", | |
154 "gold", | |
155 "violet", | |
156 "clear", | |
157 "vermilion", | |
158 "ecru", | |
159 "turquoise", | |
160 "magenta", | |
161 "amber", | |
162 "topaz", | |
163 "plaid", | |
164 "tan", | |
165 "tangerine" | |
166 }; | |
167 | |
168 #define NCOLORS (sizeof rainbow / sizeof (char *)) | |
169 int cNCOLORS = NCOLORS; | |
170 | |
171 char *sylls[] = { | |
172 "a", "ab", "ag", "aks", "ala", "an", "ankh", "app", "arg", "arze", | |
173 "ash", "ban", "bar", "bat", "bek", "bie", "bin", "bit", "bjor", | |
174 "blu", "bot", "bu", "byt", "comp", "con", "cos", "cre", "dalf", | |
175 "dan", "den", "do", "e", "eep", "el", "eng", "er", "ere", "erk", | |
176 "esh", "evs", "fa", "fid", "for", "fri", "fu", "gan", "gar", | |
177 "glen", "gop", "gre", "ha", "he", "hyd", "i", "ing", "ion", "ip", | |
178 "ish", "it", "ite", "iv", "jo", "kho", "kli", "klis", "la", "lech", | |
179 "man", "mar", "me", "mi", "mic", "mik", "mon", "mung", "mur", | |
180 "nej", "nelg", "nep", "ner", "nes", "nes", "nih", "nin", "o", "od", | |
181 "ood", "org", "orn", "ox", "oxy", "pay", "pet", "ple", "plu", "po", | |
182 "pot", "prok", "re", "rea", "rhov", "ri", "ro", "rog", "rok", "rol", | |
183 "sa", "san", "sat", "see", "sef", "seh", "shu", "ski", "sna", | |
184 "sne", "snik", "sno", "so", "sol", "sri", "sta", "sun", "ta", | |
185 "tab", "tem", "ther", "ti", "tox", "trol", "tue", "turs", "u", | |
186 "ulk", "um", "un", "uni", "ur", "val", "viv", "vly", "vom", "wah", | |
187 "wed", "werg", "wex", "whon", "wun", "xo", "y", "yot", "yu", | |
188 "zant", "zap", "zeb", "zim", "zok", "zon", "zum", | |
189 }; | |
190 | |
191 char *stones[] = { | |
192 "agate", | |
193 "alexandrite", | |
194 "amethyst", | |
195 "carnelian", | |
196 "diamond", | |
197 "emerald", | |
198 "granite", | |
199 "jade", | |
200 "kryptonite", | |
201 "lapus lazuli", | |
202 "moonstone", | |
203 "obsidian", | |
204 "onyx", | |
205 "opal", | |
206 "pearl", | |
207 "ruby", | |
208 "saphire", | |
209 "tiger eye", | |
210 "topaz", | |
211 "turquoise", | |
212 }; | |
213 | |
214 #define NSTONES (sizeof stones / sizeof (char *)) | |
215 int cNSTONES = NSTONES; | |
216 | |
217 char *wood[] = { | |
218 "avocado wood", | |
219 "balsa", | |
220 "banyan", | |
221 "birch", | |
222 "cedar", | |
223 "cherry", | |
224 "cinnibar", | |
225 "driftwood", | |
226 "ebony", | |
227 "eucalyptus", | |
228 "hemlock", | |
229 "ironwood", | |
230 "mahogany", | |
231 "manzanita", | |
232 "maple", | |
233 "oak", | |
234 "persimmon wood", | |
235 "redwood", | |
236 "rosewood", | |
237 "teak", | |
238 "walnut", | |
239 "zebra wood", | |
240 }; | |
241 | |
242 #define NWOOD (sizeof wood / sizeof (char *)) | |
243 int cNWOOD = NWOOD; | |
244 | |
245 char *metal[] = { | |
246 "aluminium", | |
247 "bone", | |
248 "brass", | |
249 "bronze", | |
250 "copper", | |
251 "iron", | |
252 "lead", | |
253 "pewter", | |
254 "steel", | |
255 "tin", | |
256 "zinc", | |
257 }; | |
258 | |
259 #define NMETAL (sizeof metal / sizeof (char *)) | |
260 int cNMETAL = NMETAL; | |
261 | |
262 struct magic_item things[NUMTHINGS] = { | |
263 { "", 27 }, /* potion */ | |
264 { "", 27 }, /* scroll */ | |
265 { "", 18 }, /* food */ | |
266 { "", 9 }, /* weapon */ | |
267 { "", 9 }, /* armor */ | |
268 { "", 5 }, /* ring */ | |
269 { "", 5 }, /* stick */ | |
270 }; | |
271 | |
272 struct magic_item s_magic[MAXSCROLLS] = { | |
273 { "monster confusion", 8, 170 }, | |
274 { "magic mapping", 5, 180 }, | |
275 { "light", 10, 100 }, | |
276 { "hold monster", 2, 200 }, | |
277 { "sleep", 5, 50 }, | |
278 { "enchant armor", 8, 130 }, | |
279 { "identify", 21, 100 }, | |
280 { "scare monster", 4, 180 }, | |
281 { "gold detection", 4, 110 }, | |
282 { "teleportation", 7, 175 }, | |
283 { "enchant weapon", 10, 150 }, | |
284 { "create monster", 5, 75 }, | |
285 { "remove curse", 8, 105 }, | |
286 { "aggravate monsters", 1, 60 }, | |
287 { "blank paper", 1, 50 }, | |
288 { "genocide", 1, 200 }, | |
289 }; | |
290 | |
291 struct magic_item p_magic[MAXPOTIONS] = { | |
292 { "confusion", 8, 50 }, | |
293 { "paralysis", 10, 50 }, | |
294 { "poison", 8, 50 }, | |
295 { "gain strength", 15, 150 }, | |
296 { "see invisible", 2, 170 }, | |
297 { "healing", 15, 130 }, | |
298 { "monster detection", 6, 120 }, | |
299 { "magic detection", 6, 105 }, | |
300 { "raise level", 2, 220 }, | |
301 { "extra healing", 5, 180 }, | |
302 { "haste self", 4, 200 }, | |
303 { "restore strength", 14, 120 }, | |
304 { "blindness", 4, 50 }, | |
305 { "thirst quenching", 1, 50 }, | |
306 }; | |
307 | |
308 struct magic_item r_magic[MAXRINGS] = { | |
309 { "protection", 9, 200 }, | |
310 { "add strength", 9, 200 }, | |
311 { "sustain strength", 5, 180 }, | |
312 { "searching", 10, 200 }, | |
313 { "see invisible", 10, 175 }, | |
314 { "adornment", 1, 100 }, | |
315 { "aggravate monster", 11, 100 }, | |
316 { "dexterity", 8, 220 }, | |
317 { "increase damage", 8, 220 }, | |
318 { "regeneration", 4, 260 }, | |
319 { "slow digestion", 9, 240 }, | |
320 { "teleportation", 9, 100 }, | |
321 { "stealth", 7, 100 }, | |
322 }; | |
323 | |
324 struct magic_item ws_magic[MAXSTICKS] = { | |
325 { "light", 12, 120 }, | |
326 { "striking", 9, 115 }, | |
327 { "lightning", 3, 200 }, | |
328 { "fire", 3, 200 }, | |
329 { "cold", 3, 200 }, | |
330 { "polymorph", 15, 210 }, | |
331 { "magic missile", 10, 170 }, | |
332 { "haste monster", 9, 50 }, | |
333 { "slow monster", 11, 220 }, | |
334 { "drain life", 9, 210 }, | |
335 { "nothing", 1, 70 }, | |
336 { "teleport away", 5, 140 }, | |
337 { "teleport to", 5, 60 }, | |
338 { "cancellation", 5, 130 }, | |
339 }; | |
340 | |
341 int a_class[MAXARMORS] = { | |
342 8, | |
343 7, | |
344 7, | |