Source:NetHack 3.0.0/objects.c

From NetHackWiki
(Redirected from NetHack 3.0.0/objects.c)
Jump to navigation Jump to search

Below is the full text to objects.c from the source code of NetHack 3.0.0. To link to a particular line, write [[NetHack 3.0.0/objects.c#line123]], for example.

Warning! This is the source code from an old release. For the latest release, see Source code

The NetHack General Public License applies to screenshots, source code and other content from NetHack.

This content was modified from the original NetHack source code distribution (by splitting up NetHack content between wiki pages, and possibly further editing). See the page history for a list of who changed it, and on what dates.

1.    /*	SCCS Id: @(#)objects.c	3.0	89/04/14
2.    /* NetHack may be freely redistributed.  See license for details. */
3.    /* Copyright (c) Mike Threepoint, 1989 (890110) */
4.    
5.    /* since this file is also used in auxiliary programs, don't include all the 
6.     * function declarations for all of nethack
7.     */
8.    #define EXTERN_H
9.    #include "config.h"
10.   #include "obj.h"
11.   #include "objclass.h"
12.   #include "prop.h"
13.   
14.   /* objects have letter " % ) ( 0 _ ` [ ! ? / = * + . */
15.   
16.   struct objclass objects[] = {
17.   
18.   	{ "strange object", NULL, NULL, 1,0,0,0, 0,
19.   		ILLOBJ_SYM, 0, 0, 0, 0, 0, 0, 0 },
20.   /* amulets ... - THE Amulet comes last because it is special */
21.   #define AMULET(name,desc,power,prob,weight)	{ name, desc, NULL,\
22.   		0,0,0,METAL, power, AMULET_SYM, prob, 0, weight, 100, 0, 0, 0 }
23.   
24.   	AMULET("amulet of esp", 	  "circular",	TELEPAT,    190, 2),
25.   	AMULET("amulet of life saving",   "spherical",	LIFESAVED,   90, 2),
26.   	AMULET("amulet of strangulation", "oval",	STRANGLED,  150, 2),
27.   	AMULET("amulet of restful sleep", "triangular",	SLEEPING,   150, 2),
28.   	AMULET("amulet versus poison",	  "pyramidal",	POISON_RES, 180, 2),
29.   	AMULET("amulet of change",	  "square",	0,	    150, 2),
30.   								/* POLYMORPH */
31.   	AMULET("amulet of reflection",	  "hexagonal",	REFLECTING,  90, 2),
32.   	{ "Amulet of Yendor", NULL, NULL, 1,0,0,METAL, 0,
33.   		AMULET_SYM, 0, 0, 2, 3500, 0, 0, 0 },
34.   #undef AMULET
35.   
36.   #define FOOD(name,prob,delay,wt,tin,nutrition)	{ name, NULL, NULL, 1,1,0,tin,\
37.   	    0, FOOD_SYM, prob, delay, wt, nutrition/20 + 5, 0, 0, nutrition }
38.   
39.   /* dog eats foods 0-4 but prefers tripe rations above all others */
40.   /* fortune cookies can be read */
41.   /* carrots improve your vision */
42.   /* +0 tins contain monster meat */
43.   /* +1 tins (of spinach) make you stronger (like Popeye) */
44.   /* food CORPSE is a cadaver of some type */
45.   
46.   	/* meat */
47.   #ifdef TOLKIEN
48.   	FOOD("tripe ration",	   145, 1, 2, 0, 200),
49.   #else
50.   	FOOD("tripe ration",	   150, 1, 2, 0, 200),
51.   #endif
52.   	FOOD("dead lizard",	    35, 0, 1, 0,  40),
53.   	FOOD("corpse",		     0, 0, 0, 0,   0),
54.   	FOOD("egg",		    75, 0, 1, 0,  80),
55.   	/* fruits & veggies */
56.   	FOOD("apple",		    10, 0, 1, 0,  50),
57.   	FOOD("orange",		     7, 0, 1, 0,  80),
58.   	FOOD("pear",		     7, 0, 1, 0,  50),
59.   	FOOD("melon",		     7, 0, 1, 0, 100),
60.   	FOOD("banana",		     7, 0, 1, 0,  80),
61.   	FOOD("slime mold",	    75, 0, 1, 0, 250),
62.   	FOOD("carrot",		    15, 0, 1, 0,  50),
63.   	FOOD("clove of garlic",      5, 0, 1, 0,  40),
64.   	/* human food */
65.   	FOOD("lump of royal jelly",  0, 0, 1, 0, 200),
66.   	FOOD("cream pie",	    25, 0, 1, 0, 100),
67.   	FOOD("candy bar",	     7, 0, 1, 0, 100),
68.   	FOOD("fortune cookie",	    55, 0, 1, 0,  40),
69.   #ifdef TOLKIEN
70.   	FOOD("pancake", 	    25, 1, 1, 0, 200),
71.   	FOOD("lembas wafer",	    20, 1, 1, 0, 800),
72.   	FOOD("cram ration",	    20, 1, 3, 0, 600),
73.   	FOOD("food ration",	   385, 5, 4, 0, 800),
74.   #else
75.   	FOOD("pancake", 	    40, 1, 1, 0, 200),
76.   	FOOD("food ration",	   405, 5, 4, 0, 800),
77.   #endif
78.   #ifdef ARMY
79.   	FOOD("K-ration",	     0, 1, 1, 0, 400),
80.   	FOOD("C-ration",	     0, 1, 1, 0, 300),
81.   #endif
82.   	FOOD("tin",		    75, 0, 1, METAL, 0),
83.   #undef FOOD
84.   
85.   /* weapons ... - ROCK come several at a time */
86.   /* weapons ... - (DART-1) are shot using idem+(BOW-ARROW) */
87.   /* weapons AXE, SWORD, KATANA, THSWORD are good for worm-cutting */
88.   /* weapons (PICK-)AXE, DAGGER, CRYSKNIFE are good for tin-opening */
89.   #define WEAPON(name,app,kn,mg,bi,prob,wt,cost,sdam,ldam,metal) { name, app, \
90.   	NULL, kn,mg,bi,metal, 0, WEAPON_SYM, prob, 0, wt, cost, sdam, ldam, 0 }
91.   #define PROJECTILE(name,app,kn,bi,prob,wt,cost,sdam,ldam,metal,prop) { name, \
92.   	app, NULL, kn,1,bi,metal, 0, WEAPON_SYM, prob, 0, wt, cost, sdam, \
93.   	ldam, prop }
94.   #define BOW(name,app,kn,bi,prob,wt,cost,sdam,ldam,metal,prop) { name, app, \
95.   	NULL, kn,0,bi,metal, 0, WEAPON_SYM, prob, 0, wt, cost, sdam, ldam, \
96.   	-(prop) }
97.   
98.   /* Note: for weapons that don't do an even die of damage (i.e. 2-7 or 3-18)
99.    * the extra damage is added on in weapon.c, not here! */
100.  
101.  /* missiles */
102.  #ifdef TOLKIEN
103.  PROJECTILE("arrow",		NULL,		1, 0, 45, 0,  2, 6, 6,
104.  		   METAL, WP_BOW),
105.  PROJECTILE("elven arrow",	"runed arrow",	0, 0, 10, 0,  2, 7, 6,
106.  		   METAL, WP_BOW),
107.  PROJECTILE("orcish arrow",	"black arrow",	0, 0, 11, 0,  2, 5, 6,
108.  		   METAL, WP_BOW),
109.  #else
110.  PROJECTILE("arrow",		NULL,		1, 0, 66, 0,  2, 6, 6,
111.  		   METAL, WP_BOW),
112.  #endif
113.  PROJECTILE("crossbow bolt",	NULL,		1, 0, 60, 0,  2, 4, 6,
114.  		   METAL, WP_CROSSBOW),
115.  
116.  WEAPON("dart",		NULL,		1, 1, 0, 60, 0,  2, 3, 2, METAL),
117.  WEAPON("shuriken",	"throwing star",0, 1, 0, 30, 0,  2, 8, 6, METAL),
118.  WEAPON("boomerang",	NULL,		1, 1, 0, 15, 3, 50, 9, 9, WOOD),
119.  
120.  /* spears */
121.  #ifdef TOLKIEN
122.  WEAPON("spear", 	NULL,		1, 1, 0, 55, 3,  8, 6, 8, METAL),
123.  WEAPON("elven spear",	"runed spear",	0, 1, 0, 10, 3,  8, 7, 8, METAL),
124.  WEAPON("orcish spear",	"black spear",	0, 1, 0, 13, 3,  8, 5, 8, METAL),
125.  WEAPON("dwarvish spear","shiny spear",	0, 1, 0, 12, 3,  8, 8, 8, METAL),
126.  #else
127.  WEAPON("spear", 	NULL,		1, 1, 0, 90, 3,  8, 6, 8, METAL),
128.  #endif
129.  WEAPON("javelin",	"throwing spear",0,1, 0, 10, 3,  8, 6, 6, METAL),
130.  WEAPON("trident",	NULL,		1, 0, 0,  8, 4,  6, 6, 4, METAL),
131.  						/* +1 small, +2d4 large */
132.  WEAPON("lance", 	NULL,		1, 0, 0,  8, 4, 20, 6, 8, METAL),
133.  
134.  /* blades */
135.  #ifdef TOLKIEN
136.  WEAPON("dagger",	NULL,		1, 1, 0, 25, 2, 20, 4, 3, METAL),
137.  WEAPON("elven dagger",	"large runed knife", 0, 1, 0,  8, 2, 20, 5, 3, METAL),
138.  WEAPON("orcish dagger", "large black knife", 0, 1, 0, 10, 2, 20, 3, 3, METAL),
139.  #else
140.  WEAPON("dagger",	NULL,		1, 1, 0, 43, 2, 20, 4, 3, METAL),
141.  #endif
142.  WEAPON("scalpel",	NULL,		1, 1, 0,  0, 1, 20, 4, 3, METAL),
143.  WEAPON("knife", 	NULL,		1, 1, 0, 25, 2, 15, 3, 3, METAL),
144.  WEAPON("axe",		NULL,		1, 0, 0, 50, 3, 50, 6, 4, METAL),
145.  #ifdef WORM
146.  WEAPON("worm tooth",	NULL,		1, 0, 0,  0, 3,  2, 2, 2, METAL),
147.  WEAPON("crysknife",	NULL,		1, 0, 0,  0, 3,100,10,10, METAL),
148.  #endif
149.  
150.  /* swords */
151.  #ifdef TOLKIEN
152.  WEAPON("short sword",		NULL,	1, 0, 0,  6, 3, 80, 6, 8, METAL),
153.  WEAPON("elven short sword",	"short runed sword",
154.  					0, 0, 0,  2, 3, 80, 8, 8, METAL),
155.  WEAPON("orcish short sword",	"short black sword",
156.  					0, 0, 0,  3, 3, 80, 5, 8, METAL),
157.  WEAPON("dwarvish short sword",	"short shiny sword",
158.  					0, 0, 0,  2, 3, 80, 7, 8, METAL),
159.  #else
160.  WEAPON("short sword",		NULL,	1, 0, 0, 13, 3, 80, 6, 8, METAL),
161.  #endif
162.  WEAPON("scimitar", "curved sword",	0, 0, 0,  6, 4, 80, 8, 8, METAL),
163.  #ifdef TOLKIEN
164.  WEAPON("broadsword", "wide sword",	0, 0, 0,  8, 4, 80, 4, 6, METAL),
165.  						/* +d4 small, +1 large */
166.  WEAPON("elven broadsword",	"wide runed sword",
167.  					0, 0, 0,  4, 4, 80, 6, 6, METAL),
168.  						/* +d4 small, +1 large */
169.  #else
170.  WEAPON("broadsword", "wide sword",	0, 0, 0, 12, 4, 80, 4, 6, METAL),
171.  						/* +d4 small, +1 large */
172.  #endif
173.  WEAPON("long sword",		NULL,	1, 0, 0, 60, 4, 80, 8, 12, METAL),
174.  #ifdef TOLKIEN
175.  WEAPON("two-handed sword",	NULL,	1, 0, 1, 25, 5, 80,12,	6, METAL),
176.  						/* +2d6 large */
177.  WEAPON("dwarvish mattock",	"huge shiny sword",
178.  					0, 0, 1, 15, 6, 80,12,	8, METAL),
179.  						/* +2d6 large */
180.  #else
181.  WEAPON("two-handed sword",	NULL,	1, 0, 1, 40, 5, 80,12,	6, METAL),
182.  						/* +2d6 large */
183.  #endif
184.  WEAPON("katana", "samurai sword",	0, 0, 0,  6, 4,100,10, 12, METAL),
185.  
186.  /* blunt */
187.  WEAPON("mace",		NULL,		1, 0, 0, 55, 4, 150, 6, 6, METAL),
188.  						/* +1 small */
189.  WEAPON("morning star",	NULL,		1, 0, 0, 12, 4, 120, 4, 6, METAL),
190.  						/* +d4 small, +1 large */
191.  WEAPON("club",		NULL,		1, 0, 0, 10, 3, 100, 6, 3, WOOD),
192.  #ifdef KOPS
193.  WEAPON("rubber hose",	NULL,		1, 0, 0,  0, 2, 100, 6, 3, 0),
194.  #endif
195.  WEAPON("quarterstaff",	"staff",	0, 0, 1, 10, 3, 150, 6, 6, WOOD),
196.  
197.  /* two-piece */
198.  WEAPON("aklys", "thonged club", 	0, 0, 0,  8, 3, 30, 6, 3, METAL),
199.  WEAPON("flail", 	NULL,		1, 0, 0, 40, 3, 30, 6, 4, METAL),
200.  						/* +1 small, +1d4 large */
201.  /* whip */
202.  WEAPON("bullwhip",	NULL,		1, 0, 0,  5, 2, 20, 2, 1, 0),
203.  
204.  /* polearms */
205.  WEAPON("bardiche", "large poleaxe",	0, 0, 1,  8, 3, 70, 4, 4, METAL),
206.  						/* +1d4 small, +2d4 large */
207.  WEAPON("bec de corbin","beaked poleaxe",0, 0, 1,  8, 3, 16, 8, 6, METAL),
208.  WEAPON("bill-guisarme","hooked polearm",0, 0, 1,  8, 3, 60, 4,10, METAL),
209.  						/* +1d4 small */
210.  WEAPON("fauchard",	"sickle",	0, 0, 1, 11, 3, 30, 6, 8, METAL),
211.  WEAPON("glaive",	"pike", 	0, 0, 1, 15, 3, 60, 6,10, METAL),
212.  WEAPON("guisarme",	"pruning hook", 0, 0, 1, 11, 3, 50, 4, 8, METAL),
213.  						/* +1d4 small */
214.  WEAPON("halberd",	"long poleaxe", 0, 0, 1, 16, 3, 90,10, 6, METAL),
215.  						/* +1d6 large */
216.  WEAPON("lucern hammer", "hammerhead polearm", 0, 0, 1, 10, 3, 70, 4, 6, METAL),
217.  						/* +1d4 small */
218.  WEAPON("partisan", "vulgar polearm",	0, 0, 1, 10, 3,100, 6, 6, METAL),
219.  						/* +1 large */
220.  WEAPON("ranseur", "hilted polearm",	0, 0, 1, 10, 3, 40, 4, 4, METAL),
221.  						/* +d4 both */
222.  WEAPON("spetum", "forked polearm",	0, 0, 1, 10, 3, 30, 6, 6, METAL),
223.  						/* +1 small, +d6 large */
224.  WEAPON("voulge", "poleaxe",		0, 0, 1,  8, 3, 20, 4, 4, METAL),
225.  						/* +d4 both */
226.  /* bows */
227.  #ifdef TOLKIEN
228.  BOW("bow",	  NULL, 	1, 0, 24, 3, 120, 4, 6, 0, WP_BOW),
229.  BOW("elven bow",  "runed bow",	0, 0, 12, 3, 120, 5, 6, 0, WP_BOW),
230.  BOW("orcish bow", "black bow",	0, 0, 12, 3, 120, 3, 6, 0, WP_BOW),
231.  #else
232.  BOW("bow",	  NULL, 	1, 0, 48, 3, 120, 4, 6, 0, WP_BOW),
233.  #endif
234.  BOW("sling", 	  NULL,	    	1, 0, 40, 2,  20, 6, 6, 0, WP_SLING),
235.  BOW("crossbow",	  NULL,		1, 0, 45, 3,  40, 4, 6, 0, WP_CROSSBOW),
236.  #undef WEAPON
237.  #undef PROJECTILE
238.  #undef BOW
239.  
240.  /* tools ... - PICK AXE comes last because it has special characteristics */
241.  #define TOOL(name,desc,kn,charge,prob,weight,cost,material) { name, desc, NULL,\
242.  	kn,0,charge,material, 0, TOOL_SYM, prob, 0, weight, cost, 0, 0, 0 }
243.  
244.  #ifdef WALKIES
245.  	TOOL("leash",		NULL,		1, 0,  70,  3,	20, 0),
246.  #endif
247.  #ifdef MEDUSA
248.  	TOOL("blindfold",	NULL,		1, 0,  55,  2,	20, 0),
249.  	TOOL("mirror",		NULL,		1, 0,  50,  3,	40, GLASS),
250.  #else
251.  	TOOL("blindfold",	NULL,		1, 0, 105,  2,	20, 0),
252.  #endif
253.  	TOOL("tinning kit",	NULL,		1, 0,  15, 10,	30, METAL),
254.  	TOOL("lock pick",	NULL,		1, 0,  55,  2,	20, METAL),
255.  	TOOL("credit card",	NULL,		1, 0,	5,  1,	10, 0),
256.  #ifdef WALKIES
257.  	TOOL("key",		NULL,		1, 0, 100,  1,	10, METAL),
258.  #else
259.  	TOOL("key",		NULL,		1, 0, 155,  1,	10, METAL),
260.  #endif
261.  	TOOL("skeleton key",	"key",		0, 0,  60,  1,	10, METAL),
262.  	TOOL("expensive camera", NULL,		1, 0,	5,  3, 200, 0),
263.  	TOOL("magic marker",	NULL,		1, 1,  15,  1,	50, 0),
264.  	TOOL("stethoscope",	NULL,		1, 0,  15,  2,	80, 0),
265.  	TOOL("tin opener",	NULL,		1, 0,  25,  1,	30, METAL),
266.  #ifdef WALKIES
267.  	TOOL("lamp",		NULL,		1, 1,  90, 10,	50, 0),
268.  #else
269.  	TOOL("lamp",		NULL,		1, 1, 105, 10,	50, 0),
270.  #endif
271.  	TOOL("magic lamp",	"lamp", 	0, 1,  20, 10,	50, 0),
272.  	TOOL("crystal ball",	NULL,		1, 1,  35, 15,	60, GLASS),
273.  	TOOL("figurine",	NULL,		1, 0,  35,  5,	80, MINERAL),
274.  	TOOL("ice box", 	NULL,		1, 0,	5, 40, 400, 0),
275.  	TOOL("large box",	NULL,		1, 0,  40, 40, 400, WOOD),
276.  	TOOL("chest",		NULL,		1, 0,  35, 40, 500, WOOD),
277.  	TOOL("sack",		"bag",		0, 0,  40,  3, 200, 0),
278.  	TOOL("bag of holding",	"bag",		0, 0,  20,  3, 250, 0),
279.  	TOOL("bag of tricks",	"bag",		0, 1,  20,  3, 250, 0),
280.  #ifndef MUSIC
281.  	TOOL("whistle", 	NULL,		1, 0, 120,  2,	10, METAL),
282.  	TOOL("magic whistle",	"whistle",	0, 0,  50,  2,	10, METAL),
283.  #else
284.  	TOOL("whistle", 	NULL,		1, 0, 105,  2,	10, METAL),
285.  	TOOL("magic whistle",	"whistle",	0, 0,  30,  2,	10, METAL),
286.  	TOOL("flute",		NULL,		1, 0,	6,  3,	12, WOOD),
287.  	TOOL("magic flute",	"flute",	0, 1,	2,  3,	12, WOOD),
288.  	TOOL("horn",		NULL,	 	1, 0,	5,  4,	15, METAL),
289.  	TOOL("frost horn",	"horn", 	0, 1,	2,  4,	15, METAL),
290.  	TOOL("fire horn",	"horn", 	0, 1,	2,  4,	15, METAL),
291.  	TOOL("harp",		NULL,	 	1, 0,	4, 10,	50, METAL),
292.  	TOOL("magic harp",	"harp", 	0, 1,	2, 10,	50, METAL),
293.  	TOOL("bugle",		NULL,		1, 0,	6,  3,	15, METAL),
294.  	TOOL("drum",		NULL,	 	1, 0,	4,  4,	25, 0),
295.  	TOOL("drum of earthquake", "drum",	0, 1,	2,  4,	25, 0),
296.  #endif
297.  #undef TOOL
298.  	{ "pick-axe", NULL, NULL, 1,0,1,METAL, 0, TOOL_SYM, 20,
299.  						0, 10, 50, 6, 3, 0 },
300.  	{ "blinding venom", "splash of venom", NULL, 0,1,0,0, 0, VENOM_SYM, 500,
301.  						0, 0, 0, 0, 0, 0 },
302.  	{ "acid venom", "splash of venom", NULL, 0,1,0,0, 0, VENOM_SYM, 500,
303.  				0, 0, 0, 6, 6, 0 }, /* +d6 small or large */
304.  
305.  	{ "heavy iron ball", NULL, NULL, 1,0,0,METAL, 0,
306.  		BALL_SYM, 1000, 0, 20, 10, 0, 0, 0 },
307.  	{ "iron chain", NULL, NULL, 1,0,0,METAL, 0,
308.  		CHAIN_SYM, 1000, 0, 20, 0, 0, 0, 0 },
309.  
310.  	/* Note: boulders and rocks normally do not appear at random; the
311.  	 * probabilities only come into effect when you try to polymorph them.
312.  	 */
313.  	{ "boulder", NULL, NULL, 1,0,0,MINERAL, 0,
314.  		ROCK_SYM, 100, 0, 200 /* > MAX_CARR_CAP */, 0, 20, 20, 0 },
315.  	{ "statue", NULL, NULL, 1,0,0,MINERAL, 0,
316.  		ROCK_SYM, 900, 0, 250, 0, 20, 20, 0 },
317.  
318.  #define ARMOR(name,desc,kn,blk,power,prob,delay,weight,cost,ac,can,metal)  {\
319.  	name, desc, NULL, kn,0,blk,metal, power, ARMOR_SYM, prob,\
320.  	delay, weight, cost, ac, can, 0 }
321.  #ifdef TOLKIEN
322.  ARMOR("elven leather helm", "leather hat", 0, 0, 0,  6, 1, 2,  10, 9, 0, 0),
323.  ARMOR("orcish helm", "black cap",	   0, 0, 0,  6, 1, 3,  10, 9, 0, METAL),
324.  ARMOR("dwarvish iron helm", "hard hat",    0, 0, 0,  6, 1, 3,  10, 8, 0, METAL),
325.  #else
326.  ARMOR("orcish helm", "black cap",	   0, 0, 0, 18, 1, 3,  10, 9, 0, METAL),
327.  #endif
328.  ARMOR("fedora", NULL,			   1, 0, 0,  0, 1, 1,  10, 9, 0, 0),
329.  ARMOR("helmet", "rusty pot",		   0, 0, 0, 12, 1, 2,  10, 9, 0, METAL),
330.  ARMOR("helm of brilliance", "plumed hat",	   0, 0, 0,  6, 1, 2,  15, 9, 0, METAL),
331.  ARMOR("helm of opposite alignment", "crested helmet",
332.  					   0, 0, 0,  6, 1, 2,  15, 9, 0, METAL),
333.  ARMOR("helm of telepathy", "visored helmet",
334.  				0, 0, TELEPAT, 2, 1, 2, 15, 9, 0, METAL),
335.  
336.  /* non-metal and (METAL | 1) armors do not rust */
337.  ARMOR("dragon scale mail", NULL,  1, 1, 0,  0, 5, 5,1000, 1, 0, 0),
338.  ARMOR("plate mail", NULL,	  1, 1, 0, 44, 5, 9, 400, 3, 2, METAL),
339.  ARMOR("crystal plate mail", NULL, 1, 1, 0, 10, 5, 9, 820, 3, 2, 0),
340.  #ifdef SHIRT
341.  ARMOR("bronze plate mail", NULL,  1, 1, 0, 25, 5, 9, 600, 4, 0, (METAL | 1)),
342.  #else
343.  ARMOR("bronze plate mail", NULL,  1, 1, 0, 35, 5, 9, 600, 4, 0, (METAL | 1)),
344.  #endif
345.  ARMOR("splint mail", NULL,	1, 1, 0, 66, 5, 8,  80, 4, 1, METAL),
346.  ARMOR("banded mail", NULL,	1, 1, 0, 76, 5, 8,  90, 4, 0, METAL),
347.  #ifdef TOLKIEN
348.  ARMOR("dwarvish mithril-coat", NULL, 1, 0, 0, 10, 1, 2, 160, 4, 3, (METAL | 1)),
349.  ARMOR("elven mithril-coat", NULL, 1, 0, 0, 15, 1, 2, 160, 5, 3, (METAL | 1)),
350.  ARMOR("chain mail", NULL,	1, 0, 0, 76, 5, 6,  75, 5, 1, METAL),
351.  ARMOR("orcish chain mail", "black chain mail",
352.  					0, 0, 0, 20, 5, 6,  75, 5, 1, METAL),
353.  #else
354.  ARMOR("dwarvish mithril-coat", NULL, 1, 0, 0, 25, 1, 2, 160, 4, 3, (METAL | 1)),
355.  ARMOR("chain mail", NULL,	1, 0, 0, 96, 5, 6,  75, 5, 1, METAL),
356.  #endif
357.  ARMOR("scale mail", NULL,	1, 0, 0, 76, 5, 5,  45, 6, 0, METAL),
358.  ARMOR("studded leather armor", NULL,
359.  					1, 0, 0, 76, 3, 3,  15, 7, 1, 0),
360.  #ifdef TOLKIEN
361.  ARMOR("ring mail", NULL,	1, 0, 0, 76, 5, 4,  30, 7, 0, METAL),
362.  ARMOR("orcish ring mail", "black ring mail",
363.  					0, 0, 0, 20, 5, 5,  75, 8, 1, METAL),
364.  #else
365.  ARMOR("ring mail", NULL,	1, 0, 0, 96, 5, 4,  30, 7, 0, METAL),
366.  #endif
367.  ARMOR("leather armor", NULL,	1, 0, 0, 97, 3, 2,   5, 8, 0, 0),
368.  
369.  /*  'cope' is not a spelling mistake... leave it be */
370.  ARMOR("mummy wrapping", NULL,
371.  				1, 0, 0,	     0, 0, 2,  5, 10, 2, 0),
372.  #ifdef TOLKIEN
373.  ARMOR("elven cloak", "ornamental cope",
374.  				0, 0, STEALTH,	    12, 0, 2, 35,  9, 3, 0),
375.  ARMOR("orcish cloak", "black mantelet",
376.  				0, 0, 0,	    12, 0, 2, 35, 10, 3, 0),
377.  ARMOR("dwarvish cloak", "colorful hooded cloak",
378.  				0, 0, 0,	    12, 0, 2, 35, 10, 3, 0),
379.  #else
380.  ARMOR("elven cloak", "ornamental cope",
381.  				0, 0, STEALTH,	    36, 0, 2, 35,  9, 3, 0),
382.  #endif
383.  ARMOR("cloak of protection", "tattered cape",
384.  				0, 0, PROTECTION,   12, 0, 2, 15,  7, 3, 0),
385.  ARMOR("cloak of invisibility", "opera hood",
386.  				0, 0, INVIS,	    12, 0, 2, 35,  9, 3, 0),
387.  ARMOR("cloak of magic resistance", "faded pall",
388.  				0, 0, ANTIMAGIC,     2, 0, 2, 25,  9, 3, 0),
389.  ARMOR("cloak of displacement", "piece of cloth",
390.  				0, 0, DISPLACED,    12, 0, 2, 15,  9, 3, 0),
391.  
392.  #ifdef TOLKIEN
393.  ARMOR("small shield", NULL,
394.  				1, 0, 0,	   6, 0, 2, 10,  9, 0, METAL),
395.  ARMOR("elven shield", "blue and green shield",
396.  				0, 0, 0,	   2, 0, 2, 15,  8, 0, METAL),
397.  ARMOR("Uruk-hai shield", "white-handed shield",
398.  				0, 0, 0,	   2, 0, 4, 10,  9, 0, METAL),
399.  ARMOR("orcish shield", "red-eyed shield",
400.  				0, 0, 0,	   2, 0, 3, 10,  9, 0, METAL),
401.  ARMOR("large shield", NULL,
402.  				1, 1, 0,	   7, 0, 4, 15,  8, 0, METAL),
403.  ARMOR("dwarvish roundshield", "large round shield",
404.  				0, 0, 0,	   4, 0, 4, 15,  8, 0, METAL),
405.  #else
406.  ARMOR("small shield", NULL,
407.  				1, 0, 0,	  12, 0, 2, 10,  9, 0, METAL),
408.  ARMOR("large shield", NULL,
409.  				1, 1, 0,	  11, 0, 4, 15,  8, 0, METAL),
410.  #endif
411.  ARMOR("shield of reflection", "polished silver shield",
412.  				0, 0, REFLECTING,  3, 0, 3, 50, 8, 0, (METAL | 1)),
413.  
414.  #ifdef SHIRT
415.  ARMOR("Hawaiian shirt", NULL,	1, 0, 0, 10, 0, 2, 5, 10, 0, 0),
416.  #endif
417.  
418.  ARMOR("leather gloves", "old gloves",
419.  				0, 0, 0,	   16, 1, 2, 10, 9, 0, 0),
420.  ARMOR("gauntlets of fumbling", "padded gloves",
421.  				0, 0, FUMBLING,    8, 1, 2, 10, 9, 0, 0),
422.  ARMOR("gauntlets of power", "riding gloves",
423.  				0, 0, 0,	   8, 1, 2, 10, 9, 0, METAL),
424.  ARMOR("gauntlets of dexterity", "fencing gloves",
425.  				0, 0, 0,	   8, 1, 2, 10, 9, 0, 0),
426.  
427.  ARMOR("low boots", "walking shoes",
428.  				0, 0, 0,	   25, 2, 3, 20, 9, 0, 0),
429.  ARMOR("iron shoes", "hard shoes",
430.  				0, 0, 0,	    7, 2, 5, 20, 8, 0, METAL),
431.  ARMOR("high boots", "jackboots",
432.  				0, 0, 0,	   15, 2, 4, 50, 8, 0, 0),
433.  ARMOR("speed boots", "combat boots",
434.  				0, 0, FAST,	   12, 2, 4, 30, 9, 0, 0),
435.  ARMOR("water walking boots", "jungle boots",
436.  				0, 0, WWALKING,    12, 2, 4, 30, 9, 0, 0),
437.  ARMOR("jumping boots", "hiking boots",
438.  				0, 0, JUMPING,	   12, 2, 4, 30, 9, 0, 0),
439.  ARMOR("elven boots", "mud boots",
440.  				0, 0, STEALTH,	   12, 2, 3,  8, 9, 0, 0),
441.  ARMOR("fumble boots", "riding boots",
442.  				0, 0, FUMBLING,    12, 2, 4, 15, 9, 0, 0),
443.  ARMOR("levitation boots", "snow boots",
444.  				0, 0, LEVITATION,  12, 2, 4, 15, 9, 0, 0),
445.  #undef ARMOR
446.  
447.  #define POTION(name,color,power,prob)	{ name, color, NULL, 0,1,0,0, power,\
448.  		POTION_SYM, prob, 0, 2, 100, 0, 0, 0 }
449.  
450.  #ifdef SPELLS
451.  	POTION("fruit juice",		"smoky",	0,	45),
452.  	POTION("booze", 		"bubbly",	0,	45),
453.  	POTION("gain energy",		"ebony", 	0,	45),
454.  #else
455.  	POTION("fruit juice",		"smoky",	0,	70),
456.  	POTION("booze", 		"bubbly",	0,	65),
457.  #endif
458.  	POTION("gain ability",		"swirly",	0,	45),
459.  	POTION("restore ability",	"pink",		0,	45),
460.  	POTION("sickness",		"ruby",		SICK,	45),
461.  	POTION("confusion",		"orange",	CONFUSION, 45),
462.  	POTION("blindness",		"yellow",	BLINDED, 45),
463.  	POTION("paralysis",		"emerald", 	0,	45),
464.  	POTION("speed", 		"dark green", 	FAST,	45),
465.  	POTION("levitation",		"cyan",		LEVITATION, 45),
466.  	POTION("hallucination", 	"brilliant blue", HALLUC, 45),
467.  	POTION("invisibility",		"sky blue",	INVIS,	45),
468.  	POTION("see invisible", 	"magenta",	SEE_INVIS, 45),
469.  	POTION("healing",		"purple", 	0,	65),
470.  	POTION("extra healing", 	"purple-red",	0,	50),
471.  	POTION("gain level",		"puce",	0,	20),
472.  	POTION("enlightenment",		"brown",	0,	20),
473.  	POTION("monster detection",	"white",	0,	45),
474.  	POTION("object detection",	"glowing",	0,	45),
475.  	POTION("water", 		"clear",	0,	125),
476.  #undef POTION
477.  
478.  #define SCROLL(name,text,prob,cost) { name, text, NULL, 0,1,0,0, 0,\
479.  		SCROLL_SYM, prob, 0, 3, cost, 0, 0, 0 }
480.  #ifdef MAIL
481.  	SCROLL("mail",			"KIRJE",	     0,   0),
482.  #endif
483.  	SCROLL("enchant armor", 	"ZELGO MER",	    63,  80),
484.  	SCROLL("destroy armor", 	"JUYED AWK YACC",   45, 100),
485.  	SCROLL("confuse monster",	"NR 9", 	    53, 100),
486.  	SCROLL("scare monster", 	"XIXAXA XOXAXA XUXAXA", 35, 100),
487.  	SCROLL("blank paper",		"READ ME",	    28,  80),
488.  	SCROLL("remove curse",		"PRATYAVAYAH",	    65,  80),
489.  	SCROLL("enchant weapon",	"DAIYEN FOOELS",    85,  60),
490.  	SCROLL("create monster",	"LEP GEX VEN ZEA",  45, 100),
491.  	SCROLL("taming",		"PRIRUTSENIE",	    15, 200),
492.  	SCROLL("genocide",		"ELBIB YLOH",	    15, 200),
493.  	SCROLL("light", 		"VERR YED HORRE",   95,  50),
494.  	SCROLL("teleportation", 	"VENZAR BORGAVVE",  55, 100),
495.  	SCROLL("gold detection",	"THARR",	    33, 100),
496.  	SCROLL("food detection",	"YUM YUM",	    25, 100),
497.  	SCROLL("identify",		"KERNOD WEL",	    185, 20),
498.  	SCROLL("magic mapping", 	"ELAM EBOW",	    45, 100),
499.  	SCROLL("amnesia",		"DUAM XNAHT",	    35, 100),
500.  	SCROLL("fire",			"ANDOVA BEGARIN",   48, 100),
501.  	SCROLL("punishment",		"VE FORBRYDERNE",   15, 200),
502.  	SCROLL("charging",		"HACKEM MUCHE",     15, 200),
503.  	SCROLL(NULL,			"VELOX NEB",	     0, 100),
504.  	SCROLL(NULL,			"FOOBIE BLETCH",     0, 100),
505.  	SCROLL(NULL,			"TEMOV",	     0, 100),
506.  	SCROLL(NULL,			"GARVEN DEH",	     0, 100),
507.  #undef SCROLL
508.  
509.  #define WAND(name,typ,prob,cost,flags,metal)	{ name, typ, NULL,\
510.  		0,0,0,metal, 0, WAND_SYM, prob, 0, 3, cost, flags, 0, 0 }
511.  
512.  	WAND("light",		"glass",	95, 100, NODIR,     GLASS),
513.  	WAND("secret door detection", "balsa",	50, 150, NODIR,     WOOD),
514.  	WAND("create monster",	"maple",	45, 200, NODIR,     WOOD),
515.  	WAND("wishing", 	"pine",		 5, 500, NODIR,     WOOD),
516.  	WAND("striking",	"oak",	 	75, 150, IMMEDIATE, WOOD),
517.  	WAND("nothing", 	"ebony",	25, 100, IMMEDIATE, WOOD),
518.  	WAND("make invisible",	"marble",	45, 150, IMMEDIATE, MINERAL),
519.  	WAND("slow monster",	"tin",		55, 150, IMMEDIATE, METAL),
520.  	WAND("speed monster",	"brass",	55, 150, IMMEDIATE, METAL),
521.  	WAND("undead turning",	"copper",	55, 150, IMMEDIATE, METAL),
522.  	WAND("polymorph",	"silver",	45, 200, IMMEDIATE, METAL),
523.  	WAND("cancellation",	"platinum",	45, 200, IMMEDIATE, METAL),
524.  	WAND("teleportation",	"iridium", 	45, 200, IMMEDIATE, METAL),
525.  #ifdef PROBING
526.  	WAND("probing", 	"uranium",	30, 150, IMMEDIATE, METAL),
527.  	WAND("opening", 	"zinc",		25, 150, IMMEDIATE, METAL),
528.  	WAND("locking", 	"aluminum",	25, 150, IMMEDIATE, METAL),
529.  #else
530.  	WAND("opening", 	"zinc",		40, 150, IMMEDIATE, METAL),
531.  	WAND("locking", 	"aluminum",	40, 150, IMMEDIATE, METAL),
532.  #endif
533.  	WAND("digging", 	"iron", 	55, 150, RAY,	    METAL),
534.  	WAND("magic missile",	"steel",	50, 150, RAY,	    METAL),
535.  	WAND("fire",		"hexagonal",	40, 175, RAY,	    METAL),
536.  	WAND("sleep",		"runed",	50, 175, RAY,	    METAL),
537.  	WAND("cold",		"short",	40, 175, RAY,	    METAL),
538.  	WAND("death",		"long", 	 5, 500, RAY,	    METAL),
539.  	WAND("lightning",	"curved",	40, 175, RAY,	    METAL),
540.  	WAND(NULL,		"forked",	 0, 150, 0,	    METAL),
541.  	WAND(NULL,		"spiked",	 0, 150, 0,	    METAL),
542.  	WAND(NULL,		"jeweled",	 0, 150, 0,	    METAL),
543.  #undef WAND
544.  
545.  #ifdef SPELLS
546.  /* books */
547.  #define SPELL(name,desc,prob,delay,level,flags) { name, desc, NULL,\
548.  	0,1,0,0, 0, SPBOOK_SYM, prob, delay, 5, level*100, flags, 0, level }
549.  
550.  	SPELL("magic missile",	 "parchment",	45,  3, 2, RAY),
551.  	SPELL("fireball",	 "vellum",	20,  6, 4, RAY),
552.  	SPELL("sleep",		 "dog eared",	50,  1, 1, RAY),
553.  	SPELL("cone of cold",	 "ragged",	10,  8, 5, RAY),
554.  	SPELL("finger of death", "stained",	 5, 10, 7, RAY),
555.  	SPELL("light",		 "cloth",	45,  1, 1, NODIR),
556.  	SPELL("detect monsters", "leather", 	45,  1, 1, NODIR),
557.  	SPELL("healing",	 "white",	40,  2, 1, NODIR),
558.  	SPELL("knock",		 "pink",	40,  1, 1, IMMEDIATE),
559.  	SPELL("force bolt",	 "red",		40,  2, 1, IMMEDIATE),
560.  	SPELL("confuse monster", "orange",	37,  2, 2, IMMEDIATE),
561.  	SPELL("cure blindness",  "yellow", 	27,  2, 2, IMMEDIATE),
562.  	SPELL("slow monster",	 "light green",	37,  2, 2, IMMEDIATE),
563.  	SPELL("wizard lock",	 "dark green",	35,  3, 2, IMMEDIATE),
564.  	SPELL("create monster",  "turquoise",	37,  3, 2, NODIR),
565.  	SPELL("detect food",	 "cyan",	37,  3, 2, NODIR),
566.  	SPELL("cause fear",	 "light blue",	25,  3, 3, NODIR),
567.  	SPELL("clairvoyance",	 "dark blue",	15,  3, 3, NODIR),
568.  	SPELL("cure sickness",	 "indigo",	32,  3, 3, NODIR),
569.  	SPELL("charm monster",	 "magenta",	20,  3, 3, IMMEDIATE),
570.  	SPELL("haste self",	 "purple",	33,  4, 3, NODIR),
571.  	SPELL("detect unseen",	 "violet",	25,  4, 3, NODIR),
572.  	SPELL("levitation",	 "tan",		25,  4, 4, NODIR),
573.  	SPELL("extra healing",	 "plaid",	32,  5, 3, NODIR),
574.  	SPELL("restore ability", "light brown",	25,  5, 4, NODIR),
575.  	SPELL("invisibility",	 "dark brown",	32,  5, 4, NODIR),
576.  	SPELL("detect treasure", "grey",	25,  5, 4, NODIR),
577.  	SPELL("remove curse",	 "black",	25,  5, 5, NODIR),
578.  	SPELL("dig",		 "mottled",	22,  6, 5, RAY),
579.  	SPELL("magic mapping",	 "rusty",	18,  7, 5, NODIR),
580.  	SPELL("identify",	 "bronze",	25,  8, 5, NODIR),
581.  	SPELL("turn undead",	 "copper",	17,  8, 6, IMMEDIATE),
582.  	SPELL("polymorph",	 "silver",	12,  8, 6, IMMEDIATE),
583.  	SPELL("teleport away",	 "gold",	15,  6, 6, IMMEDIATE),
584.  	SPELL("create familiar", "glittering", 	10,  7, 6, NODIR),
585.  	SPELL("cancellation",	 "shining",	12,  8, 7, IMMEDIATE),
586.  	SPELL("genocide",	 "glowing",	 5, 10, 7, NODIR),
587.  	SPELL(NULL,		 "dull",	 0,  0, 0, 0),
588.  	SPELL(NULL,		 "thin",	 0,  0, 0, 0),
589.  	SPELL(NULL,		 "thick",	 0,  0, 0, 0),
590.  #undef SPELL
591.  #endif /* SPELLS /**/
592.  
593.  #define RING(name,stone,power,spec,metal) { name, stone, NULL, 0,0,spec,metal,\
594.  		power, RING_SYM, 0, 0, 1, 100, spec, 0, 0 }
595.  
596.  	RING("adornment",	"wooden",	ADORNED,	1, WOOD),
597.  	RING("gain strength",	"granite",	0,		1, MINERAL),
598.  	RING("increase damage", "hematite",	0,		1, MINERAL),
599.  	RING("protection",	"black onyx",	PROTECTION,	1, MINERAL),
600.  	RING("regeneration",	"moonstone",	REGENERATION,	0, MINERAL),
601.  	RING("searching",	"tiger eye",	SEARCHING,	0, MINERAL),
602.  	RING("stealth", 	"jade",		STEALTH,	0, MINERAL),
603.  	RING("levitation",	"agate",	LEVITATION,	0, MINERAL),
604.  	RING("hunger",		"topaz",	HUNGER, 	0, MINERAL),
605.  	RING("aggravate monster", "sapphire",	AGGRAVATE_MONSTER, 0, METAL),
606.  	RING("conflict",	"ruby", 	CONFLICT,	0, METAL),
607.  	RING("warning", 	"diamond", 	WARNING,	0, METAL),
608.  	RING("poison resistance", "pearl",	POISON_RES,	0, METAL),
609.  	RING("fire resistance", "iron",		FIRE_RES,	0, METAL),
610.  	RING("cold resistance", "brass",	COLD_RES,	0, METAL),
611.  	RING("shock resistance", "copper",	SHOCK_RES,	0, METAL),
612.  	RING("teleportation",	"silver",	TELEPORT,	0, METAL),
613.  	RING("teleport control", "gold",	TELEPORT_CONTROL, 0, METAL),
614.  #ifdef POLYSELF
615.  	RING("polymorph",	"ivory",	POLYMORPH,	0, 0),
616.  	RING("polymorph control","blackened",	POLYMORPH_CONTROL, 0, METAL),
617.  #endif
618.  	RING("invisibility",	"wire",	INVIS,		0, METAL),
619.  	RING("see invisible",	"engagement",	SEE_INVIS,	0, METAL),
620.  	RING("protection from shape changers", "shining",
621.  					PROT_FROM_SHAPE_CHANGERS, 0, METAL),
622.  #undef RING
623.  
624.  /* gems ************************************************************/
625.  #define GEM(name,color,prob,wt,gval,glass) { name, color, NULL, 0,1,0,glass, 0,\
626.  		GEM_SYM, prob, 0, wt, gval, 3, 3, WP_SLING }
627.  	GEM("dilithium crystal", "white",	 3, 1, 4500, MINERAL),
628.  	GEM("diamond", "white", 		 4, 1, 4000, MINERAL),
629.  	GEM("ruby", "red",			 5, 1, 3500, MINERAL),
630.  	GEM("sapphire", "blue", 		 6, 1, 3000, MINERAL),
631.  	GEM("emerald", "green", 		 7, 1, 2500, MINERAL),
632.  	GEM("turquoise", "green",		 8, 1, 2000, MINERAL),
633.  	GEM("aquamarine", "green",		10, 1, 1500, MINERAL),
634.  	GEM("amber", "yellowish brown", 	11, 1, 1000, MINERAL),
635.  	GEM("topaz", "yellowish brown", 	13, 1,	900, MINERAL),
636.  	GEM("opal", "white",			15, 1,	800, MINERAL),
637.  	GEM("garnet", "red",			17, 1,	700, MINERAL),
638.  	GEM("amethyst", "violet",		18, 1,	600, MINERAL),
639.  	GEM("jasper", "red",			20, 1,	500, MINERAL),
640.  	GEM("fluorite", "violet",		21, 1,	400, MINERAL),
641.  	GEM("jade", "green",			22, 1,	300, MINERAL),
642.  	GEM("worthless piece of white glass", "white",	158, 1, 0, GLASS),
643.  	GEM("worthless piece of blue glass", "blue",	158, 1, 0, GLASS),
644.  	GEM("worthless piece of red glass", "red",	158, 1, 0, GLASS),
645.  	GEM("worthless piece of yellowish brown glass", "yellowish brown",
646.  						158, 1, 0, GLASS),
647.  	GEM("worthless piece of green glass", "green",	158, 1, 0, GLASS),
648.  	GEM("luckstone", "grey",		 10, 1,  60, MINERAL),
649.  	GEM("loadstone", "grey",		 10, 50,  1, MINERAL),
650.  	{ "rock", NULL, NULL, 1,1,0,MINERAL, 0,
651.  		GEM_SYM, 10, 0, 1, 0, 3, 3, WP_SLING },
652.  #undef GEM
653.  
654.  	{ NULL, NULL, NULL, 0,0,0,0, 0, ILLOBJ_SYM, 0, 0, 0, 0, 0, 0, 0 }
655.  };