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