comparison urogue/init.c @ 256:c495a4f288c6

Import UltraRogue from the Roguelike Restoration Project (r1490)
author John "Elwin" Edwards
date Tue, 31 Jan 2017 19:56:04 -0500
parents
children
comparison
equal deleted inserted replaced
253:d9badb9c0179 256:c495a4f288c6
1 /*
2 init.c - global variable initializaton
3
4 UltraRogue: The Ultimate Adventure in the Dungeons of Doom
5 Copyright (C) 1985, 1986, 1992, 1993, 1995 Herb Chong
6 All rights reserved.
7
8 Based on "Advanced Rogue"
9 Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka
10 All rights reserved.
11
12 Based on "Rogue: Exploring the Dungeons of Doom"
13 Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
14 All rights reserved.
15
16 See the file LICENSE.TXT for full copyright and licensing information.
17 */
18
19 /*
20 Notes
21
22 Need to add ring of maintain armor (same as ring of prot, armor only)
23 Resplit file into one just for data, one just for functions
24 */
25
26 #define _ALL_SOURCE /* Need to remove need for this AIXism */
27
28 #include <string.h>
29 #include <stdlib.h>
30 #include <ctype.h>
31 #include "rogue.h"
32
33 static char *rainbow[] =
34 {
35 "Red", "Blue", "Green", "Yellow",
36 "Black", "Brown", "Orange", "Pink",
37 "Purple", "Grey", "White", "Silver",
38 "Gold", "Violet", "Clear", "Vermilion",
39 "Ecru", "Turquoise", "Magenta", "Amber",
40 "Topaz", "Plaid", "Tan", "Tangerine",
41 "Aquamarine", "Scarlet", "Khaki", "Crimson",
42 "Indigo", "Beige", "Lavender", "Saffron"
43 };
44
45 #define NCOLORS (sizeof rainbow / sizeof (char *))
46
47 static char *sylls[] =
48 {
49 "a", "ab", "ag", "aks", "ala", "an", "ankh", "app", "arg", "arze",
50 "ash", "ban", "bar", "bat", "bek", "bie", "bin", "bit", "bjor",
51 "blu", "bot", "bu", "byt", "comp", "con", "cos", "cre", "dalf",
52 "dan", "den", "do", "e", "eep", "el", "eng", "er", "ere", "erk",
53 "esh", "evs", "fa", "fid", "for", "fri", "fu", "gan", "gar",
54 "glen", "gop", "gre", "ha", "he", "hyd", "i", "ing", "ion", "ip",
55 "ish", "it", "ite", "iv", "jo", "kho", "kli", "klis", "la", "lech",
56 "man", "mar", "me", "mi", "mic", "mik", "mon", "mung", "mur",
57 "nej", "nelg", "nep", "ner", "nes", "nes", "nih", "nin", "o", "od",
58 "ood", "org", "orn", "ox", "oxy", "pay", "pet", "ple", "plu", "po",
59 "pot", "prok", "re", "rea", "rhov", "ri", "ro", "rog", "rok", "rol",
60 "sa", "san", "sat", "see", "sef", "seh", "shu", "ski", "sna",
61 "sne", "snik", "sno", "so", "sol", "sri", "sta", "sun", "ta",
62 "tab", "tem", "ther", "ti", "tox", "trol", "tue", "turs", "u",
63 "ulk", "um", "un", "uni", "ur", "val", "viv", "vly", "vom", "wah",
64 "wed", "werg", "wex", "whon", "wun", "xo", "y", "yot", "yu",
65 "zant", "zap", "zeb", "zim", "zok", "zon", "zum"
66 };
67
68 static char *stones[] =
69 {
70 "Agate", "Alexandrite", "Amethyst",
71 "Azurite", "Carnelian", "Chrysoberyl",
72 "Chrysoprase", "Citrine", "Diamond",
73 "Emerald", "Garnet", "Hematite",
74 "Jacinth", "Jade", "Kryptonite",
75 "Lapus lazuli", "Malachite", "Moonstone",
76 "Obsidian", "Olivine", "Onyx",
77 "Opal", "Pearl", "Peridot",
78 "Quartz", "Rhodochrosite", "Ruby",
79 "Sapphire", "Sardonyx", "Serpentine",
80 "Spinel", "Tiger eye", "Topaz",
81 "Tourmaline", "Turquoise"
82 };
83
84 #define NSTONES (sizeof stones / sizeof (char *))
85
86 static char *wood[] =
87 {
88 "Avocado wood", "Balsa", "Banyan", "Birch",
89 "Cedar", "Cherry", "Cinnibar", "Dogwood",
90 "Driftwood", "Ebony", "Eucalyptus", "Hemlock",
91 "Ironwood", "Mahogany", "Manzanita", "Maple",
92 "Oak", "Pine", "Redwood", "Rosewood",
93 "Teak", "Walnut", "Zebra wood", "Persimmon wood"
94 };
95
96 #define NWOOD (sizeof wood / sizeof (char *))
97
98 static char *metal[] =
99 {
100 "Aluminium", "Bone", "Brass", "Bronze",
101 "Copper", "Chromium", "Iron", "Lead",
102 "Magnesium", "Pewter", "Platinum", "Steel",
103 "Tin", "Titanium", "Zinc", "Carbon",
104 "Plastic", "Glass", "Ice", "Chocolate",
105 "Gold", "Silver", "Invisible"
106 };
107
108 #define NMETAL (sizeof metal / sizeof (char *))
109
110 const char *monstern = "monster";
111 char *spacemsg = "--Press SPACE to continue--";
112 char *morestr = "--More--";
113 char *retstr = "[Press RETURN to continue]";
114
115 /* 15 named levels */
116
117 const char *cnames[C_NOTSET][15] =
118 {
119 { "Veteran", "Warrior",
120 "Swordsman", "Hero", /* Fighter */
121 "Swashbuckler", "Myrmidon",
122 "Champion", "Superhero",
123 "Lord", "Lord",
124 "Lord", "Lord",
125 "Lord", "Lord",
126 "Lord"
127 },
128
129 { "Gallant", "Keeper",
130 "Protector", "Defender", /* Paladin */
131 "Warder", "Guardian",
132 "Chevalier", "Justiciar",
133 "Paladin", "Paladin",
134 "Paladin", "Paladin",
135 "Paladin", "Paladin",
136 "Paladin"
137 },
138
139 { "Runner", "Strider",
140 "Scout", "Courser", /* Ranger */
141 "Tracker", "Guide",
142 "Pathfinder", "Ranger",
143 "Ranger Knight", "Ranger Lord",
144 "Ranger Lord", "Ranger Lord",
145 "Ranger Lord", "Ranger Lord",
146 "Ranger Lord"
147 },
148
149 { "Acolyte", "Adept",
150 "Priest", "Curate", /* Cleric */
151 "Prefect", "Canon",
152 "Lama", "Patriarch",
153 "High Priest", "High Priest",
154 "High Priest", "High Priest",
155 "High Priest", "High Priest",
156 "High Priest"
157 },
158
159 { "Aspirant", "Ovate", /* Druid */
160 "Initiate of the 1st Circle", "Initiate of the 2nd Circle",
161 "Initiate of the 3rd Circle", "Initiate of the 4th Circle",
162 "Initiate of the 5th Circle", "Initiate of the 6th Circle",
163 "Initiate of the 7th Circle", "Initiate of the 8th Circle",
164 "Initiate of the 9th Circle", "Druid",
165 "Archdruid", "The Great Druid",
166 "The Grand Druid"
167 },
168
169 { "Prestidigitator", "Evoker",
170 "Conjurer", "Theurgist", /* Magic User */
171 "Thaumaturgist", "Magician",
172 "Enchanter", "Warlock",
173 "Sorcerer", "Necromancer",
174 "Wizard", "Wizard",
175 "Wizard", "Wizard",
176 "Wizard"
177 },
178
179 { "Prestidigitator", "Minor Trickster",
180 "Trickster", "Master Trickster", /* Illusionist */
181 "Cabalist", "Visionist",
182 "Phantasmist", "Apparitionist",
183 "Spellbinder", "Illusionist",
184 "Illusionist", "Illusionist",
185 "Illusionist", "Illusionist",
186 "Illusionist"
187 },
188
189 { "Rogue", "Footpad",
190 "Cutpurse", "Robber", /* Thief */
191 "Burglar", "Filcher",
192 "Sharper", "Magsman",
193 "Thief", "Master Thief",
194 "Master Thief", "Master Thief",
195 "Master Thief", "Master Thief",
196 "Master Thief"
197 },
198
199 { "Bravo", "Rutterkin",
200 "Waghalter", "Murderer", /* Assasin */
201 "Thug", "Killer",
202 "Cutthroat", "Executioner",
203 "Assassin", "Expert Assassin",
204 "Senior Assassin", "Chief Assassin",
205 "Prime Assassin", "Guildmaster Assassin",
206 "Grandfather of Assassins"
207 },
208
209 { "Ninja", "Ninja",
210 "Ninja", "Ninja", /* Ninja */
211 "Ninja", "Ninja",
212 "Ninja", "Ninja",
213 "Ninja", "Ninja",
214 "Ninja", "Ninja",
215 "Ninja", "Ninja",
216 "Ninja"
217 }
218 };
219
220 const struct h_list helpstr[] =
221 {
222 { '?', " prints help" },
223 { '/', " identify object" },
224 { 'h', " left" },
225 { 'j', " down" },
226 { 'k', " up" },
227 { 'l', " right" },
228 { 'y', " up & left" },
229 { 'u', " up & right" },
230 { 'b', " down & left" },
231 { 'n', " down & right" },
232 { '<', "SHIFT><dir> run that way" },
233 { 'm', "<dir> move onto without picking up" },
234 { 't', "<dir> throw something" },
235 { 'z', "<dir> zap a wand or staff" },
236 { '>', " go down a staircase" },
237 { 's', " search for trap/secret door" },
238 { '.', " rest for a while" },
239 { ',', " pick up an object" },
240 { 'i', " inventory all items" },
241 { 'I', " inventory type of item" },
242 { 'q', " quaff potion" },
243 { 'r', " read paper" },
244 { 'e', " eat food" },
245 { 'w', " wield a weapon" },
246 { 'W', " wear armor" },
247 { 'T', " take armor off" },
248 { 'P', " put on ring" },
249 { 'R', " remove ring" },
250 { 'A', " activate/apply an artifact" },
251 { 'd', " drop object" },
252 { 'C', " call object (generic)" },
253 { 'M', " mark object (specific)" },
254 { 'o', " examine/set options" },
255 { 'c', " cast a spell/say a prayer" },
256 { 'p', " pray for help (risky)" },
257 { 'a', " affect the undead" },
258 { '^', " set a trap" },
259 { 'D', " dip something (into a pool)" },
260 { 20, "<dir> take (steal) from (direction)" }, /* ctrl-t */
261 { 18, " redraw screen" }, /* ctrl-r */
262 { 16, " back up to 10 previous messages" }, /* ctrl-p */
263 { ESCAPE, " cancel command" },
264 { 'v', " print program version number" },
265 { 'S', " save game" },
266 { 'Q', " quit" },
267 { '=', " listen for monsters" },
268 { 'f', "<dir> fight monster" },
269 { 'F', "<dir> fight monster to the death" },
270
271 /* Wizard commands. Identified by (h_ch != 0 && h_desc == 0). */
272
273 {'-', 0 },
274 { 23, " enter wizard mode" }, /* ctrl-w */
275 { 23, "v toggle wizard verbose mode" },
276 { 23, "e exit wizard mode" },
277 { 23, "r random number check" },
278 { 23, "s system statistics" },
279 { 23, "F food statistics" },
280 { 23, "f floor map" },
281 { 23, "m see monster" },
282 { 23, "M create monster" },
283 { 23, "c create item" },
284 { 23, "i inventory level" },
285 { 23, "I identify item" },
286 { 23, "t random teleport" },
287 { 23, "g goto level" },
288 { 23, "C charge item" },
289 { 23, "w print worth of object" },
290 { 23, "o improve stats and pack" },
291 { 0, 0 }
292 };
293
294 struct magic_item things[] =
295 {
296 {"potion", "POTION", 250, 5}, /* potion */
297 {"scroll", "SCROLL", 260, 30},/* scroll */
298 {"ring", "RING", 70, 5}, /* ring */
299 {"stick", "STICK", 60, 0}, /* stick */
300 {"food", "FOOD", 210, 7}, /* food */
301 {"weapon", "WEAPON", 60, 0}, /* weapon */
302 {"armor", "ARMOR", 90, 0}, /* armor */
303 {"artifact","ARTIFACT", 0, 0} /* special artifacts*/
304 };
305
306 int numthings = NUMTHINGS;
307
308 struct magic_item s_magic[] =
309 {
310 {"monster confusion", "CON", 50, 125, 0, 0 },
311 {"magic mapping", "MAP", 45, 150, 20, 10 },
312 {"light", "WATT", 0, 0, 0, 0 },
313 {"hold monster", "HOLD", 25, 200, 33, 10 },
314 {"sleep", "SNOOZE", 23, 50, 20, 10 },
315 {"enchantment", "ENCHANT", 110,400, 15, 10 },
316 {"identify", "ID", 150,50, 0, 15 },
317 {"scare monster", "SCARE", 35, 250, 27, 21 },
318 {"detect gold", "GOLD", 0, 0, 0, 0 },
319 {"teleportation", "TELEP", 50, 165, 10, 20 },
320 {"create monster", "CREATE", 25, 75, 30, 0 },