xref: /dragonfly/games/hack/def.objects.h (revision 2cd2d2b5)
1 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
2 /* def.objects.h - version 1.0.3 */
3 
4 /* objects have letter " % ) ( 0 _ ` [ ! ? / = * */
5 #include "config.h"
6 #include "def.objclass.h"
7 
8 struct objclass objects[] = {
9 
10 	{ "strange object", NULL, NULL, 1, 0,
11 		ILLOBJ_SYM, 0, 0, 0, 0, 0, 0 },
12 	{ "amulet of Yendor", NULL, NULL, 1, 0,
13 		AMULET_SYM, 100, 0, 2, 0, 0, 0 },
14 
15 #define	FOOD(name,prob,delay,weight,nutrition)	{ name, NULL, NULL, 1, 1,\
16 		FOOD_SYM, prob, delay, weight, 0, 0, nutrition }
17 
18 /* dog eats foods 0-4 but prefers 1 above 0,2,3,4 */
19 /* food 4 can be read */
20 /* food 5 improves your vision */
21 /* food 6 makes you stronger (like Popeye) */
22 /* foods CORPSE up to CORPSE+52 are cadavers */
23 
24 	FOOD("food ration", 	50, 5, 4, 800),
25 	FOOD("tripe ration",	20, 1, 2, 200),
26 	FOOD("pancake",		3, 1, 1, 200),
27 	FOOD("dead lizard",	3, 0, 1, 40),
28 	FOOD("fortune cookie",	7, 0, 1, 40),
29 	FOOD("carrot",		2, 0, 1, 50),
30 	FOOD("tin",		7, 0, 1, 0),
31 	FOOD("orange",		1, 0, 1, 80),
32 	FOOD("apple",		1, 0, 1, 50),
33 	FOOD("pear",		1, 0, 1, 50),
34 	FOOD("melon",		1, 0, 1, 100),
35 	FOOD("banana",		1, 0, 1, 80),
36 	FOOD("candy bar",	1, 0, 1, 100),
37 	FOOD("egg",		1, 0, 1, 80),
38 	FOOD("clove of garlic",	1, 0, 1, 40),
39 	FOOD("lump of royal jelly", 0, 0, 1, 200),
40 
41 	FOOD("dead human",	0, 4, 40, 400),
42 	FOOD("dead giant ant",	0, 1, 3, 30),
43 	FOOD("dead giant bat",	0, 1, 3, 30),
44 	FOOD("dead centaur",	0, 5, 50, 500),
45 	FOOD("dead dragon",	0, 15, 150, 1500),
46 	FOOD("dead floating eye",	0, 1, 1, 10),
47 	FOOD("dead freezing sphere",	0, 1, 1, 10),
48 	FOOD("dead gnome",	0, 1, 10, 100),
49 	FOOD("dead hobgoblin",	0, 2, 20, 200),
50 	FOOD("dead stalker",	0, 4, 40, 400),
51 	FOOD("dead jackal",	0, 1, 10, 100),
52 	FOOD("dead kobold",	0, 1, 10, 100),
53 	FOOD("dead leprechaun",	0, 4, 40, 400),
54 	FOOD("dead mimic",	0, 4, 40, 400),
55 	FOOD("dead nymph",	0, 4, 40, 400),
56 	FOOD("dead orc",	0, 2, 20, 200),
57 	FOOD("dead purple worm",	0, 7, 70, 700),
58 	FOOD("dead quasit",	0, 2, 20, 200),
59 	FOOD("dead rust monster",	0, 5, 50, 500),
60 	FOOD("dead snake",	0, 1, 10, 100),
61 	FOOD("dead troll",	0, 4, 40, 400),
62 	FOOD("dead umber hulk",	0, 5, 50, 500),
63 	FOOD("dead vampire",	0, 4, 40, 400),
64 	FOOD("dead wraith",	0, 1, 1, 10),
65 	FOOD("dead xorn",	0, 7, 70, 700),
66 	FOOD("dead yeti",	0, 7, 70, 700),
67 	FOOD("dead zombie",	0, 1, 3, 30),
68 	FOOD("dead acid blob",	0, 1, 3, 30),
69 	FOOD("dead giant beetle",	0, 1, 1, 10),
70 	FOOD("dead cockatrice",	0, 1, 3, 30),
71 	FOOD("dead dog",	0, 2, 20, 200),
72 	FOOD("dead ettin",	0, 1, 3, 30),
73 	FOOD("dead fog cloud",	0, 1, 1, 10),
74 	FOOD("dead gelatinous cube",	0, 1, 10, 100),
75 	FOOD("dead homunculus",	0, 2, 20, 200),
76 	FOOD("dead imp",	0, 1, 1, 10),
77 	FOOD("dead jaguar",	0, 3, 30, 300),
78 	FOOD("dead killer bee",	0, 1, 1, 10),
79 	FOOD("dead leocrotta",	0, 5, 50, 500),
80 	FOOD("dead minotaur",	0, 7, 70, 700),
81 	FOOD("dead nurse",	0, 4, 40, 400),
82 	FOOD("dead owlbear",	0, 7, 70, 700),
83 	FOOD("dead piercer",	0, 2, 20, 200),
84 	FOOD("dead quivering blob",	0, 1, 10, 100),
85 	FOOD("dead giant rat",	0, 1, 3, 30),
86 	FOOD("dead giant scorpion",	0, 1, 10, 100),
87 	FOOD("dead tengu",	0, 3, 30, 300),
88 	FOOD("dead unicorn",	0, 3, 30, 300),
89 	FOOD("dead violet fungi",	0, 1, 10, 100),
90 	FOOD("dead long worm",	0, 5, 50, 500),
91 /* %% wt of long worm should be proportional to its length */
92 	FOOD("dead xan",	0, 3, 30, 300),
93 	FOOD("dead yellow light",	0, 1, 1, 10),
94 	FOOD("dead zruty",	0, 6, 60, 600),
95 
96 /* weapons ... - ROCK come several at a time */
97 /* weapons ... - (ROCK-1) are shot using idem+(BOW-ARROW) */
98 /* weapons AXE, SWORD, THSWORD are good for worm-cutting */
99 /* weapons (PICK-)AXE, DAGGER, CRYSKNIFE are good for tin-opening */
100 #define WEAPON(name,prob,wt,ldam,sdam)	{ name, NULL, NULL, 1, 0 /*%%*/,\
101 		WEAPON_SYM, prob, 0, wt, ldam, sdam, 0 }
102 
103 	WEAPON("arrow",		7, 0, 6, 6),
104 	WEAPON("sling bullet",	7, 0, 4, 6),
105 	WEAPON("crossbow bolt",	7, 0, 4, 6),
106 	WEAPON("dart",		7, 0, 3, 2),
107 	WEAPON("rock",		6, 1, 3, 3),
108 	WEAPON("boomerang",	2, 3, 9, 9),
109 	WEAPON("mace",		9, 3, 6, 7),
110 	WEAPON("axe",		6, 3, 6, 4),
111 	WEAPON("flail",		6, 3, 6, 5),
112 	WEAPON("long sword",	8, 3, 8, 12),
113 	WEAPON("two handed sword",	6, 4, 12, 6),
114 	WEAPON("dagger",	6, 3, 4, 3),
115 	WEAPON("worm tooth",	0, 4, 2, 2),
116 	WEAPON("crysknife",	0, 3, 10, 10),
117 	WEAPON("spear",		6, 3, 6, 8),
118 	WEAPON("bow",		6, 3, 4, 6),
119 	WEAPON("sling",		5, 3, 6, 6),
120 	WEAPON("crossbow",	6, 3, 4, 6),
121 
122 	{ "whistle", "whistle", NULL, 0, 0,
123 		TOOL_SYM, 90, 0, 2, 0, 0, 0 },
124 	{ "magic whistle", "whistle", NULL, 0, 0,
125 		TOOL_SYM, 10, 0, 2, 0, 0, 0 },
126 	{ "expensive camera", NULL, NULL, 1, 1,
127 		TOOL_SYM, 0, 0, 3, 0, 0, 0 },
128 	{ "ice box", "large box", NULL, 0, 0,
129 		TOOL_SYM, 0, 0, 40, 0, 0, 0 },
130 	{ "pick-axe", NULL, NULL, 1, 1,
131 		TOOL_SYM, 0, 0, 5, 6, 3, 0 },
132 	{ "can opener", NULL, NULL, 1, 1,
133 		TOOL_SYM, 0, 0, 1, 0, 0, 0 },
134 	{ "heavy iron ball", NULL, NULL, 1, 0,
135 		BALL_SYM, 100, 0, 20, 0, 0, 0 },
136 	{ "iron chain", NULL, NULL, 1, 0,
137 		CHAIN_SYM, 100, 0, 20, 0, 0, 0 },
138 	{ "enormous rock", NULL, NULL, 1, 0,
139 		ROCK_SYM, 100, 0, 200 /* > MAX_CARR_CAP */, 0, 0, 0 },
140 
141 #define ARMOR(name,prob,delay,ac,can)	{ name, NULL, NULL, 1, 0,\
142 		ARMOR_SYM, prob, delay, 8, ac, can, 0 }
143 	ARMOR("helmet",		 3, 1, 9, 0),
144 	ARMOR("plate mail",		 5, 5, 3, 2),
145 	ARMOR("splint mail",	 8, 5, 4, 1),
146 	ARMOR("banded mail",	10, 5, 4, 0),
147 	ARMOR("chain mail",		10, 5, 5, 1),
148 	ARMOR("scale mail",		10, 5, 6, 0),
149 	ARMOR("ring mail",		15, 5, 7, 0),
150 	/* the armors below do not rust */
151 	ARMOR("studded leather armor", 13, 3, 7, 1),
152 	ARMOR("leather armor",	17, 3, 8, 0),
153 	ARMOR("elven cloak",	 5, 0, 9, 3),
154 	ARMOR("shield",		 3, 0, 9, 0),
155 	ARMOR("pair of gloves",	 1, 1, 9, 0),
156 
157 #define POTION(name,color)	{ name, color, NULL, 0, 1,\
158 		POTION_SYM, 0, 0, 2, 0, 0, 0 }
159 
160 	POTION("restore strength",	"orange"),
161 	POTION("booze",		"bubbly"),
162 	POTION("invisibility",	"glowing"),
163 	POTION("fruit juice",	"smoky"),
164 	POTION("healing",	"pink"),
165 	POTION("paralysis",	"puce"),
166 	POTION("monster detection",	"purple"),
167 	POTION("object detection",	"yellow"),
168 	POTION("sickness",	"white"),
169 	POTION("confusion",	"swirly"),
170 	POTION("gain strength",	"purple-red"),
171 	POTION("speed",		"ruby"),
172 	POTION("blindness",	"dark green"),
173 	POTION("gain level",	"emerald"),
174 	POTION("extra healing",	"sky blue"),
175 	POTION("levitation",	"brown"),
176 	POTION(NULL,	"brilliant blue"),
177 	POTION(NULL,	"clear"),
178 	POTION(NULL,	"magenta"),
179 	POTION(NULL,	"ebony"),
180 
181 #define SCROLL(name,text,prob) { name, text, NULL, 0, 1,\
182 		SCROLL_SYM, prob, 0, 3, 0, 0, 0 }
183 	SCROLL("mail",	"KIRJE", 0),
184 	SCROLL("enchant armor", "ZELGO MER", 6),
185 	SCROLL("destroy armor", "JUYED AWK YACC", 5),
186 	SCROLL("confuse monster", "NR 9", 5),
187 	SCROLL("scare monster", "XIXAXA XOXAXA XUXAXA", 4),
188 	SCROLL("blank paper", "READ ME", 3),
189 	SCROLL("remove curse", "PRATYAVAYAH", 6),
190 	SCROLL("enchant weapon", "DAIYEN FOOELS", 6),
191 	SCROLL("damage weapon", "HACKEM MUCHE", 5),
192 	SCROLL("create monster", "LEP GEX VEN ZEA", 5),
193 	SCROLL("taming", "PRIRUTSENIE", 1),
194 	SCROLL("genocide", "ELBIB YLOH",2),
195 	SCROLL("light", "VERR YED HORRE", 10),
196 	SCROLL("teleportation", "VENZAR BORGAVVE", 5),
197 	SCROLL("gold detection", "THARR", 4),
198 	SCROLL("food detection", "YUM YUM", 1),
199 	SCROLL("identify", "KERNOD WEL", 18),
200 	SCROLL("magic mapping", "ELAM EBOW", 5),
201 	SCROLL("amnesia", "DUAM XNAHT", 3),
202 	SCROLL("fire", "ANDOVA BEGARIN", 5),
203 	SCROLL("punishment", "VE FORBRYDERNE", 1),
204 	SCROLL(NULL, "VELOX NEB", 0),
205 	SCROLL(NULL, "FOOBIE BLETCH", 0),
206 	SCROLL(NULL, "TEMOV", 0),
207 	SCROLL(NULL, "GARVEN DEH", 0),
208 
209 #define	WAND(name,metal,prob,flags)	{ name, metal, NULL, 0, 0,\
210 		WAND_SYM, prob, 0, 3, flags, 0, 0 }
211 
212 	WAND("light",	"iridium",		10,	NODIR),
213 	WAND("secret door detection",	"tin",	5,	NODIR),
214 	WAND("create monster",	"platinum",	5,	NODIR),
215 	WAND("wishing",		"glass",	1,	NODIR),
216 	WAND("striking",	"zinc",		9,	IMMEDIATE),
217 	WAND("slow monster",	"balsa",	5,	IMMEDIATE),
218 	WAND("speed monster",	"copper",	5,	IMMEDIATE),
219 	WAND("undead turning",	"silver",	5,	IMMEDIATE),
220 	WAND("polymorph",	"brass",	5,	IMMEDIATE),
221 	WAND("cancellation",	"maple",	5,	IMMEDIATE),
222 	WAND("teleportation",	"pine",		5,	IMMEDIATE),
223 	WAND("make invisible",	"marble",	9,	IMMEDIATE),
224 	WAND("digging",		"iron",		5,	RAY),
225 	WAND("magic missile",	"aluminium",	10,	RAY),
226 	WAND("fire",	"steel",	5,	RAY),
227 	WAND("sleep",	"curved",	5,	RAY),
228 	WAND("cold",	"short",	5,	RAY),
229 	WAND("death",	"long",		1,	RAY),
230 	WAND(NULL,	"oak",		0,	0),
231 	WAND(NULL,	"ebony",	0,	0),
232 	WAND(NULL,	"runed",	0,	0),
233 
234 #define	RING(name,stone,spec)	{ name, stone, NULL, 0, 0,\
235 		RING_SYM, 0, 0, 1, spec, 0, 0 }
236 
237 	RING("adornment",	"engagement",	0),
238 	RING("teleportation",	"wooden",	0),
239 	RING("regeneration",	"black onyx",	0),
240 	RING("searching",	"topaz",	0),
241 	RING("see invisible",	"pearl",	0),
242 	RING("stealth",		"sapphire",	0),
243 	RING("levitation",	"moonstone",	0),
244 	RING("poison resistance", "agate",	0),
245 	RING("aggravate monster", "tiger eye",	0),
246 	RING("hunger",		"shining",	0),
247 	RING("fire resistance",	"gold",		0),
248 	RING("cold resistance",	"copper",	0),
249 	RING("protection from shape changers", "diamond", 0),
250 	RING("conflict",	"jade",		0),
251 	RING("gain strength",	"ruby",		SPEC),
252 	RING("increase damage",	"silver",	SPEC),
253 	RING("protection",	"granite",	SPEC),
254 	RING("warning",		"wire",		0),
255 	RING("teleport control", "iron",	0),
256 	RING(NULL,		"ivory",	0),
257 	RING(NULL,		"blackened",	0),
258 
259 /* gems ************************************************************/
260 #define	GEM(name,color,prob,gval)	{ name, color, NULL, 0, 1,\
261 		GEM_SYM, prob, 0, 1, 0, 0, gval }
262 	GEM("diamond", "blue", 1, 4000),
263 	GEM("ruby", "red", 1, 3500),
264 	GEM("sapphire", "blue", 1, 3000),
265 	GEM("emerald", "green", 1, 2500),
266 	GEM("turquoise", "green", 1, 2000),
267 	GEM("aquamarine", "blue", 1, 1500),
268 	GEM("tourmaline", "green", 1, 1000),
269 	GEM("topaz", "yellow", 1, 900),
270 	GEM("opal", "yellow", 1, 800),
271 	GEM("garnet", "dark", 1, 700),
272 	GEM("amethyst", "violet", 2, 650),
273 	GEM("agate", "green", 2, 600),
274 	GEM("onyx", "white", 2, 550),
275 	GEM("jasper", "yellowish brown", 2, 500),
276 	GEM("jade", "green", 2, 450),
277 	GEM("worthless piece of blue glass", "blue", 20, 0),
278 	GEM("worthless piece of red glass", "red", 20, 0),
279 	GEM("worthless piece of yellow glass", "yellow", 20, 0),
280 	GEM("worthless piece of green glass", "green", 20, 0),
281 	{ NULL, NULL, NULL, 0, 0, ILLOBJ_SYM, 0, 0, 0, 0, 0, 0 }
282 };
283 
284 char obj_symbols[] = {
285 	ILLOBJ_SYM, AMULET_SYM, FOOD_SYM, WEAPON_SYM, TOOL_SYM,
286 	BALL_SYM, CHAIN_SYM, ROCK_SYM, ARMOR_SYM, POTION_SYM, SCROLL_SYM,
287 	WAND_SYM, RING_SYM, GEM_SYM, 0 };
288 int bases[sizeof(obj_symbols)];
289