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