Source:SLASH'EM 0.0.7E7F2/objects.c

From NetHackWiki
Jump to navigation Jump to search

Below is the full text to objects.c from the source code of SLASH'EM 0.0.7E7F2. To link to a particular line, write [[Source:SLASH'EM 0.0.7E7F2/objects.c#line123]], for example.

Source code for vanilla NetHack is at 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.4	2002/07/31	*/
2.    /* Copyright (c) Mike Threepoint, 1989.				  */
3.    /* NetHack may be freely redistributed.  See license for details. */
4.    
5.    #ifndef OBJECTS_PASS_2_
6.    /* first pass */
7.    struct monst { struct monst *dummy; };	/* lint: struct obj's union */
8.    #include "config.h"
9.    #include "obj.h"
10.   #include "objclass.h"
11.   #include "prop.h"
12.   #include "skills.h"
13.   #include "skills.h"
14.   
15.   #else	/* !OBJECTS_PASS_2_ */
16.   /* second pass */
17.   #include "color.h"
18.   #  define COLOR_FIELD(X) X,
19.   #endif	/* !OBJECTS_PASS_2_ */
20.   
21.   
22.   
23.   /* objects have symbols: ) [ = " ( % ! ? + / $ * ` 0 _ . */
24.   
25.   /*
26.    *	Note:  OBJ() and BITS() macros are used to avoid exceeding argument
27.    *	limits imposed by some compilers.  The ctnr field of BITS currently
28.    *	does not map into struct objclass, and is ignored in the expansion.
29.    *	The 0 in the expansion corresponds to oc_pre_discovered, which is
30.    *	set at run-time during role-specific character initialization.
31.    */
32.   
33.   #ifndef OBJECTS_PASS_2_
34.   /* first pass -- object descriptive text */
35.   # define OBJ(name,desc) name,desc
36.   # define OBJECT(obj,bits,prp,sym,prob,dly,wt,cost,sdam,ldam,oc1,oc2,nut,color) \
37.   	{obj}
38.   
39.   NEARDATA struct objdescr obj_descr[] = {
40.   #else
41.   /* second pass -- object definitions */
42.   
43.   # define BITS(nmkn,mrg,uskn,ctnr,mgc,chrg,uniq,nwsh,big,tuf,dir,sub,mtrl) \
44.   	nmkn,mrg,uskn,0,mgc,chrg,uniq,nwsh,big,tuf,dir,mtrl,sub /* SCO ODT 1.1 cpp fodder */
45.   # define OBJECT(obj,bits,prp,sym,prob,dly,wt,cost,sdam,ldam,oc1,oc2,nut,color) \
46.   	{0, 0, (char *)0, bits, prp, sym, dly, COLOR_FIELD(color) \
47.   	 prob, wt, cost, sdam, ldam, oc1, oc2, nut}
48.   # ifndef lint
49.   #  define HARDGEM(n) (n >= 8)
50.   # else
51.   #  define HARDGEM(n) (0)
52.   # endif
53.   
54.   NEARDATA struct objclass objects[] = {
55.   #endif
56.   /* dummy object[0] -- description [2nd arg] *must* be NULL */
57.   	OBJECT(OBJ("strange object",(char *)0), BITS(1,0,0,0,0,0,0,0,0,0,0,0,0),
58.   			0, ILLOBJ_CLASS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
59.   
60.   /* weapons ... */
61.   #define WEAPON(name,app,kn,mg,bi,prob,wt,cost,sdam,ldam,hitbon,typ,sub,metal,color) \
62.   	OBJECT( \
63.   		OBJ(name,app), BITS(kn,mg,1,0,0,1,0,0,bi,0,typ,sub,metal), 0, \
64.   		WEAPON_CLASS, prob, 0, \
65.   		wt, cost, sdam, ldam, hitbon, 0, wt, color )
66.   #define PROJECTILE(name,app,kn,prob,wt,cost,sdam,ldam,hitbon,metal,sub,color) \
67.   	OBJECT( \
68.   		OBJ(name,app), BITS(kn,1,1,0,0,1,0,0,0,0,PIERCE,sub,metal), 0, \
69.   		WEAPON_CLASS, prob, 0, \
70.   		wt, cost, sdam, ldam, hitbon, WP_GENERIC, wt, color )
71.   #define BOW(name,app,kn,bi,prob,wt,cost,hitbon,metal,sub,color) \
72.   	OBJECT( \
73.   		OBJ(name,app), BITS(kn,0,1,0,0,1,0,0,bi,0,0,sub,metal), 0, \
74.   		WEAPON_CLASS, prob, 0, \
75.   		wt, cost, 0, 0, hitbon, WP_GENERIC, wt, color )
76.   #define BULLET(name,app,kn,prob,wt,cost,sdam,ldam,hitbon,ammotyp,typ,metal,sub,color) \
77.   	OBJECT( \
78.   		OBJ(name,app), BITS(kn,1,1,0,0,1,0,0,0,0,typ,sub,metal), 0, \
79.   		WEAPON_CLASS, prob, 0, \
80.   		wt, cost, sdam, ldam, hitbon, ammotyp, wt, color )
81.   #define GUN(name,app,kn,bi,prob,wt,cost,range,rof,hitbon,ammotyp,metal,sub,color) \
82.   	OBJECT( \
83.   		OBJ(name,app), BITS(kn,0,1,0,0,1,0,0,bi,0,0,sub,metal), 0, \
84.   		WEAPON_CLASS, prob, 0, \
85.   		wt, cost, range, rof, hitbon, ammotyp, wt, color )
86.   
87.   /* Note: for weapons that don't do an even die of damage (ex. 2-7 or 3-18)
88.    * the extra damage is added on in weapon.c, not here! */
89.   
90.   #define P PIERCE
91.   #define S SLASH
92.   #define B WHACK
93.   #define E EXPLOSION
94.   
95.   /* Daggers */
96.   WEAPON("orcish dagger", "crude dagger",
97.   	0, 1, 0, 10, 10,  4,  3,  3, 2, P,   P_DAGGER, IRON, CLR_BLACK),
98.   WEAPON("dagger", (char *)0,
99.   	1, 1, 0, 25, 10,  4,  4,  3, 2, P,   P_DAGGER, IRON, HI_METAL),
100.  WEAPON("athame", (char *)0,
101.  	1, 1, 0,  0, 10,  4,  4,  3, 2, S,   P_DAGGER, IRON, HI_METAL),
102.  WEAPON("silver dagger", (char *)0,
103.  	1, 1, 0,  2, 12, 40,  4,  3, 2, P,   P_DAGGER, SILVER, HI_SILVER),
104.  	/* STEPHEN WHITE'S NEW CODE */
105.  	/* WAC silver dagger now pierces, to be same as other daggers
106.          allows it to be thrown without penalty as well*/
107.  WEAPON("elven dagger", "runed dagger",
108.  	0, 1, 0,  8, 10,  4,  5,  3, 2, P,   P_DAGGER, WOOD, HI_METAL),
109.  WEAPON("dark elven dagger", "black runed dagger",
110.  	0, 1, 0,  0, 10,  4,  5,  3, 2, P,   P_DAGGER, WOOD, CLR_BLACK),
111.  WEAPON("wooden stake", (char *)0,
112.  	1, 0, 0,  0, 20, 50,  6,  6, 0, P,   P_DAGGER, WOOD, HI_WOOD),
113.  	/* STEPHEN WHITE'S NEW CODE */
114.      /* Base for artifact (Stake of Van Helsing) */
115.  WEAPON("great dagger", (char *)0,
116.  	1, 0, 0,  0, 20,500,  6,  7, 2, P,   P_DAGGER, METAL, CLR_BLACK),
117.  	/* STEPHEN WHITE'S NEW CODE */
118.  	/* for necromancer artifact... */
119.  
120.  /* Knives */
121.  WEAPON("worm tooth", (char *)0,
122.  	1, 0, 0,  0, 20,  2,  2,  2, 0, 0,   P_KNIFE, 0, CLR_WHITE),
123.  WEAPON("knife", (char *)0,
124.  	1, 1, 0, 15,  5,  4,  3,  2, 0, P|S, P_KNIFE, IRON, HI_METAL),
125.  WEAPON("stiletto", (char *)0,
126.  	1, 1, 0,  5,  5,  4,  3,  2, 0, P|S, P_KNIFE, IRON, HI_METAL),
127.  WEAPON("scalpel", (char *)0,
128.  	1, 1, 0,  0,  5,  4,  3,  3, 2, S,   P_KNIFE, METAL, HI_METAL),
129.  WEAPON("crysknife", (char *)0,
130.  	1, 0, 0,  0, 20,100, 20, 30, 3, P,   P_KNIFE, MINERAL, CLR_WHITE),
131.  	/* [Tom] increased crysknife damage from d10/d10 */
132.  	/* to d20/d30 (otherwise, it's useless to make them...) */
133.  
134.  /* Axes */
135.  WEAPON("axe", (char *)0,
136.  	1, 0, 0, 35, 60,  8,  6,  4, 0, S,   P_AXE, IRON, HI_METAL),
137.  WEAPON("battle-axe", "double-headed axe", /* "double-bitted" ? */
138.  	0, 0, 1, 10,120, 40,  8,  6, 0, S,   P_AXE, IRON, HI_METAL),
139.  
140.  /* Pick-axes */
141.  /* (also weptool pick-axe) */
142.  WEAPON("dwarvish mattock", "broad pick",
143.  	0, 0, 1, 13,120, 50, 12,  8,-1, B,   P_PICK_AXE, IRON, HI_METAL),
144.  
145.  /* Short swords */
146.  WEAPON("orcish short sword", "crude short sword",
147.  	0, 0, 0,  3, 30, 10,  5,  8, 0, P,   P_SHORT_SWORD, IRON, CLR_BLACK),
148.  WEAPON("short sword", (char *)0,
149.  	1, 0, 0,  8, 30, 10,  6,  8, 0, P,   P_SHORT_SWORD, IRON, HI_METAL),
150.  WEAPON("silver short sword", (char *)0,
151.  	1, 0, 0,  2, 36, 50,  6,  8, 0, P,   P_SHORT_SWORD, SILVER, HI_SILVER),
152.  	/* STEPHEN WHITE'S NEW CODE */
153.  WEAPON("dwarvish short sword", "broad short sword",
154.  	0, 0, 0,  2, 30, 10,  7,  8, 0, P,   P_SHORT_SWORD, IRON, HI_METAL),
155.  WEAPON("elven short sword", "runed short sword",
156.  	0, 0, 0,  2, 30, 10,  8,  8, 0, P,   P_SHORT_SWORD, WOOD, HI_METAL),
157.  WEAPON("dark elven short sword", "black runed short sword",
158.  	0, 0, 0,  2, 30, 10,  8,  8, 0, P,   P_SHORT_SWORD, WOOD, CLR_BLACK),
159.  
160.  /* Broadswords */
161.  WEAPON("broadsword", (char *)0,
162.  	1, 0, 0, 20, 70, 10,  4,  6, 0, S,   P_BROAD_SWORD, IRON, HI_METAL),
163.  						/* +d4 small, +1 large */
164.  WEAPON("runesword", "runed broadsword",
165.  	0, 0, 0,  0, 40,300,  4,  6, 0, S,   P_BROAD_SWORD, IRON, CLR_BLACK),
166.  	/* +d4 small, +1 large; base for artifact (Stormbringer) */
167.  	/* +5d2 +d8 from level drain */
168.  WEAPON("elven broadsword", "runed broadsword",
169.  	0, 0, 0,  4, 70, 10,  6,  6, 0, S,   P_BROAD_SWORD, WOOD, HI_METAL),
170.  						/* +d4 small, +1 large */
171.  
172.  /* Long swords */
173.  WEAPON("long sword", (char *)0,
174.  	1, 0, 0, 50, 40, 15,  8, 12, 0, S,   P_LONG_SWORD, IRON, HI_METAL),
175.  WEAPON("silver long sword", (char *)0,
176.  	1, 0, 0,  2, 48, 75,  8, 12, 0, S,   P_LONG_SWORD,SILVER, HI_SILVER),
177.  	/* STEPHEN WHITE'S NEW CODE */
178.  WEAPON("katana", "samurai sword",
179.  	0, 0, 0,  4, 40, 80, 10, 12, 1, S,   P_LONG_SWORD, IRON, HI_METAL),
180.  
181.  /* Two-handed swords */
182.  WEAPON("two-handed sword", (char *)0,
183.  	1, 0, 1, 25,150, 50, 12,  6, 0, S,   P_TWO_HANDED_SWORD, IRON, HI_METAL),
184.  	/* +2d6 large */
185.  WEAPON("tsurugi", "long samurai sword",
186.  	0, 0, 1,  0, 60,500, 16,  8, 2, S,   P_TWO_HANDED_SWORD, METAL, HI_METAL),
187.  	/* +2d6 large; base for artifact (T of Muramasa) */
188.  
189.  /* Scimitars */
190.  WEAPON("scimitar", "curved sword",
191.  	0, 0, 0, 15, 40, 15,  8,  8, 0, S,   P_SCIMITAR, IRON, HI_METAL),
192.  
193.  /* Sabers */
194.  WEAPON("rapier", (char *)0,
195.  	1, 0, 0,  0, 30, 40,  6,  8,  0, P,  P_SABER, METAL, CLR_BLACK),
196.  	/* STEPHEN WHITE'S NEW CODE */
197.  	/* Base for artifact (Scalpel) */
198.  WEAPON("silver saber", (char *)0,
199.  	1, 0, 0, 27, 40, 75,  8,  8, 0, S,   P_SABER, SILVER, HI_SILVER),
200.  
201.  /* Clubs */
202.  WEAPON("club", (char *)0,
203.  	1, 0, 0, 22, 30,  3,  6,  3, 0, B,   P_CLUB, WOOD, HI_WOOD),
204.  WEAPON("aklys", "thonged club",
205.  	0, 0, 0, 16, 15,  4,  6,  3, 0, B,   P_CLUB, IRON, HI_METAL),
206.  WEAPON("baseball bat", (char *)0,
207.  	1, 0, 0,  0, 40, 50,  8,  6, 0, B,   P_CLUB, WOOD, HI_WOOD),
208.  	/* STEPHEN WHITE'S NEW CODE */
209.  	/* Base for artifact */
210.  
211.  /* Paddles */
212.  /* Good to-hit and small damage, but low large damage */
213.  WEAPON("fly swatter", (char *)0,
214.  	1, 0, 0,  2, 10,  3, 10,  2, 2, B,   P_PADDLE, PLASTIC, CLR_GREEN),
215.  
216.  /* Maces */
217.  WEAPON("silver mace", (char *)0,
218.  	1, 0, 0, 12, 36, 65,  6,  6, 0, B,   P_MACE, SILVER, HI_SILVER),
219.  	/* STEPHEN WHITE'S NEW CODE */
220.  WEAPON("mace", (char *)0,
221.  	1, 0, 0, 40, 30,  5,  6,  6, 0, B,   P_MACE, IRON, HI_METAL),
222.  	/* +1 small */
223.  
224.  /* Morning stars */
225.  WEAPON("morning star", (char *)0,
226.  	1, 0, 0, 12,120, 10,  4,  6, 0, B,   P_MORNING_STAR, IRON, HI_METAL),
227.  						/* +d4 small, +1 large */
228.  
229.  /* Flails */
230.  WEAPON("flail", (char *)0,
231.  	1, 0, 0, 30, 15,  4,  6,  4, 0, B,   P_FLAIL, IRON, HI_METAL),
232.  	/* +1 small, +1d4 large */
233.  
234.  /* Hammers */
235.  WEAPON("war hammer", (char *)0,
236.  	1, 0, 0, 25, 50,  5,  4,  4, 0, B,   P_HAMMER, IRON, HI_METAL),
237.  	/* +1 small */
238.  WEAPON("heavy hammer", (char *)0,
239.  	1, 0, 0,  0, 60,500,  6,  6, 0, B,   P_HAMMER, METAL, HI_METAL),
240.  	/* STEPHEN WHITE'S NEW CODE */
241.  	/* Base for artifact */
242.  
243.  /* Quarterstaves */
244.  WEAPON("quarterstaff", "staff",
245.  	0, 0, 1, 11, 40,  5,  6,  6, 0, B,   P_QUARTERSTAFF, WOOD, HI_WOOD),
246.  
247.  /* Polearms */
248.  /* (also weptool fishing pole) */
249.  /* spear-type */
250.  WEAPON("partisan", "vulgar polearm",
251.  	0, 0, 1,  3, 80, 10,  6,  6, 0, P,   P_POLEARMS, IRON, HI_METAL),
252.  						/* +1 large */
253.  WEAPON("glaive", "single-edged polearm",
254.  	0, 0, 1,  4, 75,  6,  6, 10, 0, S,   P_POLEARMS, IRON, HI_METAL),
255.  WEAPON("spetum", "forked polearm",
256.  	0, 0, 1,  3, 50,  5,  6,  6, 0, P,   P_POLEARMS, IRON, HI_METAL),
257.  						/* +1 small, +d6 large */
258.  WEAPON("ranseur", "hilted polearm",
259.  	0, 0, 1,  3, 50,  6,  4,  4, 0, P,   P_POLEARMS, IRON, HI_METAL),
260.  	/* +d4 both */
261.  /* axe-type */
262.  WEAPON("bardiche", "long poleaxe",
263.  	0, 0, 1,  2,120,  7,  4,  4, 0, S,   P_POLEARMS, IRON, HI_METAL),
264.  						/* +1d4 small, +2d4 large */
265.  WEAPON("voulge", "pole cleaver",
266.  	0, 0, 1,  2,125,  5,  4,  4, 0, S,   P_POLEARMS, IRON, HI_METAL),
267.  						/* +d4 both */
268.  WEAPON("halberd", "angled poleaxe",
269.  	0, 0, 1,  4,150, 10, 10,  6, 0, P|S, P_POLEARMS, IRON, HI_METAL),
270.  	/* +1d6 large */
271.  /* curved/hooked */
272.  WEAPON("fauchard", "pole sickle",
273.  	0, 0, 1,  3, 60,  5,  6,  8, 0, P|S, P_POLEARMS, IRON, HI_METAL),
274.  WEAPON("guisarme", "pruning hook",
275.  	0, 0, 1,  3, 80,  5,  4,  8, 0, S,   P_POLEARMS, IRON, HI_METAL),
276.  						/* +1d4 small */
277.  WEAPON("bill-guisarme", "hooked polearm",
278.  	0, 0, 1,  2,120,  7,  4, 10, 0, P|S, P_POLEARMS, IRON, HI_METAL),
279.  						/* +1d4 small */
280.  /* other */
281.  WEAPON("lucern hammer", "pronged polearm",
282.  	0, 0, 1,  3,150,  7,  4,  6, 0, B|P, P_POLEARMS, IRON, HI_METAL),
283.  						/* +1d4 small */
284.  WEAPON("bec de corbin", "beaked polearm",
285.  	0, 0, 1,  2,100,  8,  8,  6, 0, B|P, P_POLEARMS, IRON, HI_METAL),
286.  
287.  /* Spears */
288.  WEAPON("orcish spear", "crude spear",
289.  	0, 1, 0, 13, 30,  3,  5,  8, 0, P,   P_SPEAR, IRON, CLR_BLACK),
290.  WEAPON("spear", (char *)0,
291.  	1, 1, 0, 50, 30,  3,  6,  8, 0, P,   P_SPEAR, IRON, HI_METAL),
292.  WEAPON("silver spear", (char *)0,
293.  	1, 1, 0,  3, 36, 40,  6,  8, 0, P,   P_SPEAR, SILVER, HI_SILVER),
294.  	/* STEPHEN WHITE'S NEW CODE */
295.  WEAPON("elven spear", "runed spear",
296.  	0, 1, 0, 10, 30,  3,  7,  8, 0, P,   P_SPEAR, WOOD, HI_METAL),
297.  WEAPON("dwarvish spear", "stout spear",
298.  	0, 1, 0, 12, 35,  3,  8,  8, 0, P,   P_SPEAR, IRON, HI_METAL),
299.  
300.  /* Javelins */
301.  WEAPON("javelin", "throwing spear",
302.  	0, 1, 0, 10, 20,  3,  6,  6, 0, P,   P_JAVELIN, IRON, HI_METAL),
303.  
304.  /* Tridents */
305.  WEAPON("trident", (char *)0,
306.  	1, 0, 0,  8, 25,  5,  6,  4, 0, P,   P_TRIDENT, IRON, HI_METAL),
307.  	/* +1 small, +2d4 large */
308.  
309.  /* Lances */
310.  WEAPON("lance", (char *)0,
311.  	1, 0, 0,  1,180, 10,  6,  8, 0, P,   P_LANCE, IRON, HI_METAL),
312.  
313.  /* Bows (and arrows) */
314.  /* KMH, balance patch -- damage of launchers restored to d2 big and small */
315.  BOW("orcish bow", "crude bow",	0, 1, 12, 30, 60, 0, WOOD, P_BOW, CLR_BLACK),
316.  BOW("bow", (char *)0,			1, 1, 24, 30, 60, 0, WOOD, P_BOW, HI_WOOD),
317.  BOW("elven bow", "runed bow",	0, 1, 12, 30, 60, 0, WOOD, P_BOW, HI_WOOD),
318.  BOW("dark elven bow",  "black runed bow", 0, 1, 0, 30, 60, 0, WOOD, P_BOW, CLR_BLACK),
319.  BOW("yumi", "long bow",			0, 1, 0, 30, 60, 0, WOOD, P_BOW, HI_WOOD),
320.  PROJECTILE("orcish arrow", "crude arrow",
321.  	0, 15, 1, 2, 5, 6, 0, IRON, -P_BOW, CLR_BLACK),
322.  PROJECTILE("arrow", (char *)0,
323.  	1, 50, 1, 2, 6, 6, 0, IRON, -P_BOW, HI_METAL),
324.  PROJECTILE("silver arrow", (char *)0,
325.  	1, 15, 1, 5, 6, 6, 0, SILVER, -P_BOW, HI_SILVER),
326.  PROJECTILE("elven arrow", "runed arrow",
327.  	0, 25, 1, 2, 7, 6, 0, WOOD, -P_BOW, HI_METAL),
328.  PROJECTILE("dark elven arrow", "black runed arrow",
329.  	0,  0, 1, 2, 7, 6, 0, WOOD, -P_BOW, CLR_BLACK),
330.  PROJECTILE("ya", "bamboo arrow",
331.  	0, 10, 1, 4, 7, 7, 1, METAL, -P_BOW, HI_METAL),
332.  
333.  /* Slings */
334.  BOW("sling", (char *)0,		1, 0, 40,  3, 20, 0, WOOD, P_SLING, HI_LEATHER),
335.  
336.  /* Firearms */
337.  #ifdef FIREARMS
338.  GUN("pistol", (char *)0,	   1,  0, 0,  20,  100, 15,  0,  0, WP_BULLET, IRON, P_FIREARM, HI_METAL),
339.  GUN("submachine gun", (char *)0,   1,  0, 0,  25,  250, 10,  3, -1, WP_BULLET, IRON, P_FIREARM, HI_METAL),
340.  GUN("heavy machine gun", (char *)0,1,  1, 0, 500, 2000, 20,  8, -4, WP_BULLET, IRON, P_FIREARM, HI_METAL),
341.  GUN("rifle", (char *)0,		   1,  1, 0,  30,  150, 22, -1,  1, WP_BULLET, IRON, P_FIREARM, HI_METAL),
342.  GUN("assault rifle", (char *)0,	   1,  0, 0,  40, 1000, 20,  5, -2, WP_BULLET, IRON, P_FIREARM, HI_METAL),
343.  GUN("sniper rifle", (char *)0,	   1,  1, 0,  50, 4000, 25, -3,  4, WP_BULLET, IRON, P_FIREARM, HI_METAL),
344.  GUN("shotgun", (char *)0,	   1,  0, 0,  35,  200,  3, -1,  3,  WP_SHELL, IRON, P_FIREARM, HI_METAL),
345.  GUN("auto shotgun", (char *)0,	   1,  1, 0,  60, 1500,  3,  2,  0,  WP_SHELL, IRON, P_FIREARM, HI_METAL),
346.  GUN("rocket launcher", (char *)0,  1,  1, 0, 750, 3500, 20, -5, -4, WP_ROCKET, IRON, P_FIREARM, HI_METAL),
347.  GUN("grenade launcher", (char *)0, 1,  1, 0,  55, 1500,  6, -3, -3,WP_GRENADE, IRON, P_FIREARM, HI_METAL),
348.  BULLET("bullet", (char *)0,
349.  	1,  0,   1,   5, 20, 30, 0, WP_BULLET,   P,   IRON, -P_FIREARM, HI_METAL),
350.  BULLET("silver bullet", (char *)0,
351.  	1,  0,   1,  15, 20, 30, 0, WP_BULLET,   P, SILVER, -P_FIREARM, HI_SILVER),
352.  BULLET("shotgun shell", (char *)0,
353.  	1,  0,   1,  10, 30, 45, 0,  WP_SHELL,   P,   IRON, -P_FIREARM, CLR_RED),
354.  BULLET("rocket", (char *)0,
355.  	1,  0, 200, 450, 45, 60, 0, WP_ROCKET, P|E,   IRON, -P_FIREARM, CLR_BLUE),
356.  BULLET("frag grenade", (char *)0,
357.  	1,  0,  25, 350, 0, 0, 0,  WP_GRENADE, B|E,   IRON, -P_FIREARM, CLR_GREEN),
358.  BULLET("gas grenade", (char *)0,
359.  	1,  0,  25, 350, 0, 0, 0,  WP_GRENADE, B|E,   IRON, -P_FIREARM, CLR_ORANGE),
360.  BULLET("stick of dynamite", "red stick",
361.  	0,  0,  30, 150, 0, 0, 0,  WP_GENERIC,   B,   PLASTIC, P_NONE, CLR_RED),
362.  #endif
363.  
364.  /* Crossbows (and bolts) */
365.  /* Crossbow range is now independant of strength */
366.  GUN("crossbow", (char *)0,	0, 1, 45, 50, 40, 12, -1, 0, WP_GENERIC, WOOD, P_CROSSBOW, HI_WOOD),
367.  PROJECTILE("crossbow bolt", (char *)0,
368.  	1, 45, 1, 2, 4, 6, 0, IRON, -P_CROSSBOW, HI_METAL),
369.  
370.  /* Darts */
371.  /* (also weptoool spoon) */
372.  WEAPON("dart", (char *)0,
373.  	1, 1, 0, 55,  1,  2,  3,  2, 0, P,   -P_DART, IRON, HI_METAL),
374.  
375.  /* Shurikens */
376.  WEAPON("shuriken", "throwing star",
377.  	0, 1, 0, 35,  1,  5,  8,  6, 2, P,   -P_SHURIKEN, IRON, HI_METAL),
378.  
379.  /* Boomerangs */
380.  WEAPON("boomerang", (char *)0,
381.  	1, 1, 0, 15,  5, 20,  9,  9, 0, 0,   -P_BOOMERANG, WOOD, HI_WOOD),
382.  
383.  /* Whips */
384.  WEAPON("bullwhip", (char *)0,
385.  	1, 0, 0,  2, 20,  4,  2,  1, 0, 0,   P_WHIP, LEATHER, CLR_BROWN),
386.  #ifdef KOPS
387.  WEAPON("rubber hose", (char *)0,
388.  	1, 0, 0,  0, 20,  3,  4,  3, 0, B,   P_WHIP, PLASTIC, CLR_BROWN),
389.  #endif
390.  
391.  /* With shuffled appearances... */
392.  #undef P
393.  #undef S
394.  #undef B
395.  #undef E
396.  
397.  #undef WEAPON
398.  #undef PROJECTILE
399.  #undef BOW
400.  #undef BULLET
401.  #undef GUN
402.  
403.  /* armor ... */
404.  /* IRON denotes ferrous metals, including steel.
405.   * Only IRON weapons and armor can rust.
406.   * Only COPPER (including brass) corrodes.
407.   * Some creatures are vulnerable to SILVER.
408.   */
409.  #define ARMOR(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,sub,metal,c) \
410.  	OBJECT( \
411.  		OBJ(name,desc), BITS(kn,0,1,0,mgc,1,0,0,blk,0,0,sub,metal), power, \
412.  		ARMOR_CLASS, prob, delay, wt, cost, \
413.  		0, 0, 10 - ac, can, wt, c )
414.  #define CLOAK(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \
415.  	ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_CLOAK,metal,c)
416.  #define HELM(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \
417.  	ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_HELM,metal,c)
418.  #define GLOVES(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \
419.  	ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_GLOVES,metal,c)
420.  #define SHIELD(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,metal,c) \
421.  	ARMOR(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,ARM_SHIELD,metal,c)
422.  #define BOOTS(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \
423.  	ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_BOOTS,metal,c)
424.  
425.  #ifdef TOURIST
426.  /* Shirts */
427.  ARMOR("Hawaiian shirt", (char *)0,
428.  	1, 0, 0, 0,	 8, 0,	 5,   3, 10, 0, ARM_SHIRT, CLOTH, CLR_MAGENTA),
429.  ARMOR("T-shirt", (char *)0,
430.  	1, 0, 0, 0,	 2, 0,	 5,   2, 10, 0, ARM_SHIRT, CLOTH, CLR_WHITE),
431.  #endif
432.  
433.  /* Suits of armor */
434.  ARMOR("plate mail", (char *)0,
435.  	1, 0, 1, 0,	40, 5, 450, 600,  3, 2, ARM_SUIT, IRON, HI_METAL),
436.  ARMOR("crystal plate mail", (char *)0,
437.  	1, 0, 1, 0,	10, 5, 450, 820,  3, 2, ARM_SUIT, GLASS, CLR_WHITE),
438.  #ifdef TOURIST
439.  ARMOR("bronze plate mail", (char *)0,
440.  	1, 0, 1, 0,	25, 5, 450, 400,  4, 0, ARM_SUIT, COPPER, HI_COPPER),
441.  #else
442.  ARMOR("bronze plate mail", (char *)0,
443.  	1, 0, 1, 0,	35, 5, 450, 400,  4, 0, ARM_SUIT, COPPER, HI_COPPER),
444.  #endif
445.  ARMOR("splint mail", (char *)0,
446.  	1, 0, 1, 0,	65, 5, 400,  80,  4, 1, ARM_SUIT, IRON, HI_METAL),
447.  ARMOR("banded mail", (char *)0,
448.  	1, 0, 1, 0,	75, 5, 350,  90,  4, 0, ARM_SUIT, IRON, HI_METAL),
449.  ARMOR("dwarvish mithril-coat", (char *)0,
450.  	1, 0, 0, 0,	10, 1, 150, 240,  4, 3, ARM_SUIT, MITHRIL, HI_METAL),
451.  ARMOR("dark elven mithril-coat", (char *)0,
452.  	1, 0, 0, 0,  0, 1, 150, 240,  4, 3, ARM_SUIT, MITHRIL, CLR_BLACK),
453.  ARMOR("elven mithril-coat", (char *)0,
454.  	1, 0, 0, 0,	15, 1, 150, 240,  5, 3, ARM_SUIT, MITHRIL, HI_METAL),
455.  ARMOR("chain mail", (char *)0,
456.  	1, 0, 0, 0,	70, 5, 300,  75,  5, 1, ARM_SUIT, IRON, HI_METAL),
457.  ARMOR("orcish chain mail", "crude chain mail",
458.  	0, 0, 0, 0,	20, 5, 300,  75,  6, 1, ARM_SUIT, IRON, CLR_BLACK),
459.  ARMOR("scale mail", (char *)0,
460.  	1, 0, 0, 0,	70, 5, 250,  45,  6, 0, ARM_SUIT, IRON, HI_METAL),
461.  ARMOR("studded leather armor", (char *)0,
462.  	1, 0, 0, 0,	70, 3, 200,  15,  7, 1, ARM_SUIT, LEATHER, HI_LEATHER),
463.  ARMOR("ring mail", (char *)0,
464.  	1, 0, 0, 0,	70, 5, 250, 100,  7, 0, ARM_SUIT, IRON, HI_METAL),
465.  ARMOR("orcish ring mail", "crude ring mail",
466.  	0, 0, 0, 0,	20, 5, 250,  80,  8, 1, ARM_SUIT, IRON, CLR_BLACK),
467.  ARMOR("leather armor", (char *)0,
468.  	1, 0, 0, 0,	75, 3, 150,   5,  8, 0, ARM_SUIT, LEATHER, HI_LEATHER),
469.  ARMOR("leather jacket", (char *)0,
470.  	1, 0, 0, 0,	11, 0,	30,  10,  9, 0, ARM_SUIT, LEATHER, CLR_BLACK),
471.  
472.  /* Robes */
473.  /* STEPHEN WHITE'S NEW CODE */
474.  ARMOR("robe", "red robe",
475.  	0, 0, 0, 0,		1, 1,  40,  25,  9, 0, ARM_SUIT, LEATHER, CLR_RED),
476.  ARMOR("robe of protection", "blue robe",
477.  	0, 1, 0, PROTECTION,	1, 1,  40,  50,  5, 0, ARM_SUIT, LEATHER, CLR_BLUE),
478.  ARMOR("robe of power", "orange robe",
479.  	0, 1, 0, 0,		0, 1,  40,  50,  9, 0, ARM_SUIT, LEATHER, CLR_ORANGE),
480.  ARMOR("robe of weakness", "green robe",
481.  	0, 1, 0, 0,		1, 1,  40,  50,  9, 0, ARM_SUIT, LEATHER, CLR_GREEN),
482.  
483.  /*
484.   * Dragon suits
485.   * There is code in polyself.c that assumes (1) and (2).
486.   * There is code in obj.h, objnam.c, mon.c, read.c that assumes (2).
487.   *
488.   *	(1) The dragon scale mails and the dragon scales are together.
489.   *	(2) That the order of the dragon scale mail and dragon scales is the
490.   *	    the same defined in monst.c.
491.   */
492.  #define DRGN_ARMR(name,mgc,power,cost,ac,color) \
493.  	ARMOR(name,(char *)0,1,mgc,1,power,0,5,50,cost,ac,0,ARM_SUIT,DRAGON_HIDE,color)
494.  /* 3.4.1: dragon scale mail reclassified as "magic" since magic is
495.     needed to create them */
496.  DRGN_ARMR("gray dragon scale mail",   1, ANTIMAGIC,  1200, 1, CLR_GRAY),
497.  DRGN_ARMR("silver dragon scale mail", 1, REFLECTING, 1200, 1, SILVER),
498.  DRGN_ARMR("shimmering dragon scale mail", 1, DISPLACED, 1200, 1, CLR_CYAN),
499.  DRGN_ARMR("deep dragon scale mail",   1, DRAIN_RES,  1200, 1, CLR_MAGENTA),
500.  DRGN_ARMR("red dragon scale mail",    1, FIRE_RES,    900, 1, CLR_RED),
501.  DRGN_ARMR("white dragon scale mail",  1, COLD_RES,    900, 1, CLR_WHITE),
502.  DRGN_ARMR("orange dragon scale mail", 1, SLEEP_RES,   900, 1, CLR_ORANGE),
503.  DRGN_ARMR("black dragon scale mail",  1, DISINT_RES, 1200, 1, CLR_BLACK),
504.  DRGN_ARMR("blue dragon scale mail",   1, SHOCK_RES,   900, 1, CLR_BLUE),
505.  DRGN_ARMR("green dragon scale mail",  1, POISON_RES,  900, 1, CLR_GREEN),
506.  DRGN_ARMR("yellow dragon scale mail", 1, ACID_RES,    900, 1, CLR_YELLOW),
507.  
508.  /* For now, only dragons leave these. */
509.  /* 3.4.1: dragon scales left classified as "non-magic"; they confer
510.     magical properties but are produced "naturally" */
511.  DRGN_ARMR("gray dragon scales",   0, ANTIMAGIC,  700, 7, CLR_GRAY),
512.  DRGN_ARMR("silver dragon scales", 0, REFLECTING, 700, 7, SILVER),
513.  DRGN_ARMR("shimmering dragon scales", 0, DISPLACED,  700, 7, CLR_CYAN),
514.  DRGN_ARMR("deep dragon scales",   0, DRAIN_RES,  500, 7, CLR_MAGENTA),
515.  DRGN_ARMR("red dragon scales",    0, FIRE_RES,   500, 7, CLR_RED),
516.  DRGN_ARMR("white dragon scales",  0, COLD_RES,   500, 7, CLR_WHITE),
517.  DRGN_ARMR("orange dragon scales", 0, SLEEP_RES,  500, 7, CLR_ORANGE),
518.  DRGN_ARMR("black dragon scales",  0, DISINT_RES, 700, 7, CLR_BLACK),
519.  DRGN_ARMR("blue dragon scales",   0, SHOCK_RES,  500, 7, CLR_BLUE),
520.  DRGN_ARMR("green dragon scales",  0, POISON_RES, 500, 7, CLR_GREEN),
521.  DRGN_ARMR("yellow dragon scales", 0, ACID_RES,   500, 7, CLR_YELLOW),
522.  #undef DRGN_ARMR
523.  
524.  /* Cloaks */
525.  /*  'cope' is not a spelling mistake... leave it be */
526.  CLOAK("mummy wrapping", (char *)0,
527.  		1, 0,	0,	    0, 0,  3,  2, 10, 1, CLOTH, CLR_GRAY),
528.  CLOAK("orcish cloak", "coarse mantelet",
529.  		0, 0,	0,	    8, 0, 10, 40, 10, 2, CLOTH, CLR_BLACK),
530.  CLOAK("dwarvish cloak", "hooded cloak",
531.  		0, 0,	0,	    8, 0, 10, 50, 10, 2, CLOTH, HI_CLOTH),
532.  CLOAK("oilskin cloak", "slippery cloak",
533.  		0, 0,	0,	    8, 0, 10, 50,  9, 3, CLOTH, HI_CLOTH),
534.  CLOAK("elven cloak", "faded pall",
535.  		0, 1,	STEALTH,    8, 0, 10, 60,  9, 3, CLOTH, CLR_BLACK),
536.  CLOAK("lab coat", "white coat",
537.  		0, 1,   POISON_RES,10, 0, 10, 60,  9, 3, CLOTH, CLR_WHITE),
538.  CLOAK("leather cloak", (char *)0,
539.  		1, 0,	0,	    8, 0, 15, 40,  9, 1, LEATHER, CLR_BROWN),
540.  #if 0
541.  CLOAK("robe", (char *)0,
542.  		1, 1,	0,	    3, 0, 15, 50,  8, 3, CLOTH, CLR_RED),
543.  CLOAK("alchemy smock", "apron",
544.  		0, 1,	POISON_RES, 9, 0, 10, 50,  9, 1, CLOTH, CLR_WHITE),
545.  #endif
546.  /* With shuffled appearances... */
547.  CLOAK("cloak of protection", "tattered cape",
548.  		0, 1,	PROTECTION, 9, 0, 10, 50,  7, 3, CLOTH, HI_CLOTH),
549.  CLOAK("poisonous cloak", "dirty rag",
550.  		0, 1,   0,          5, 0, 10, 40, 10, 3, CLOTH, CLR_GREEN),
551.  CLOAK("cloak of invisibility", "opera cloak",
552.  		0, 1,	INVIS,	   10, 0, 10, 60,  9, 2, CLOTH, CLR_BRIGHT_MAGENTA),
553.  CLOAK("cloak of magic resistance", "ornamental cope",
554.  		0, 1,	ANTIMAGIC,  2, 0, 10, 60,  9, 3, CLOTH, CLR_WHITE),
555.  CLOAK("cloak of displacement", "piece of cloth",
556.  		0, 1,	DISPLACED, 10, 0, 10, 50,  9, 2, CLOTH, HI_CLOTH),
557.  /* Helmets */
558.  HELM("elven leather helm", "leather hat",
559.  		0, 0, 0,			6, 1,  3,   8, 9, 0, LEATHER, HI_LEATHER),
560.  HELM("orcish helm", "iron skull cap",
561.  		0, 0, 0,			6, 1, 30,  10, 9, 0, IRON, CLR_BLACK),
562.  HELM("dwarvish iron helm", "hard hat",
563.  		0, 0, 0,			6, 1, 40,  20, 8, 0, IRON, HI_METAL),
564.  HELM("fedora", (char *)0,
565.  		1, 0, 0,			0, 0,  3,   1,10, 0, CLOTH, CLR_BROWN),
566.  HELM("cornuthaum", "conical hat",
567.  		0, 1, CLAIRVOYANT,	3, 1,  4,  80,10, 2, CLOTH, CLR_BLUE),
568.  HELM("dunce cap", "conical hat",
569.  		0, 1, 0,			3, 1,  4,   1,10, 0, CLOTH, CLR_BLUE),
570.  HELM("dented pot", (char *)0,
571.  		1, 0, 0,			2, 0, 10,   8, 9, 0, IRON, CLR_BLACK),
572.  /* ...with shuffled appearances */
573.  HELM("helmet", "plumed helmet",
574.  		0, 0, 0,		   10, 1, 30,  10, 9, 0, IRON, HI_METAL),
575.  HELM("helm of brilliance", "etched helmet",
576.  		0, 1, 0,			6, 1, 50,  50, 9, 0, IRON, CLR_GREEN),
577.  HELM("helm of opposite alignment", "crested helmet",
578.  		0, 1, 0,			6, 1, 50,  50, 9, 0, IRON, HI_METAL),
579.  HELM("helm of telepathy", "visored helmet",
580.  		0, 1, TELEPAT,		2, 1, 50,  50, 9, 0, IRON, HI_METAL),
581.  
582.  /* Gloves */
583.  /* these have their color but not material shuffled, so the IRON must stay
584.   * CLR_BROWN (== HI_LEATHER)
585.   */
586.  GLOVES("leather gloves", "old gloves",
587.  		0, 0,  0,			16, 1, 10,  8,  9, 0, LEATHER, HI_LEATHER),
588.  GLOVES("gauntlets of fumbling", "padded gloves",
589.  		0, 1,  FUMBLING,	8, 1, 10, 50,  9, 0, LEATHER, HI_LEATHER),
590.  GLOVES("gauntlets of power", "riding gloves",
591.  		0, 1,  0,			8, 1, 30, 50,  9, 0, IRON, CLR_BROWN),
592.  GLOVES("gauntlets of swimming", "black gloves",
593.  		0, 1,  SWIMMING,	8, 1, 10, 50,  9, 0, LEATHER, HI_LEATHER),
594.  GLOVES("gauntlets of dexterity", "fencing gloves",
595.  		0, 1,  0,			8, 1, 10, 50,  9, 0, LEATHER, HI_LEATHER),
596.  
597.  /* Shields */
598.  SHIELD("small shield", (char *)0,
599.  		1, 0, 0, 0,	     6, 0, 30,	3,  9, 0, WOOD, HI_WOOD),
600.  /* Elven ... orcish shields can't be differentiated by feel */
601.  SHIELD("elven shield", "blue and green shield",
602.  		0, 0, 0, 0,	     2, 0, 50,	7,  8, 0, WOOD, CLR_GREEN),
603.  SHIELD("Uruk-hai shield", "white-handed shield",
604.  		0, 0, 0, 0,	     2, 0, 50,	7,  9, 0, IRON, HI_METAL),
605.  SHIELD("orcish shield", "red-eyed shield",
606.  		0, 0, 0, 0,	     2, 0, 50,	7,  9, 0, IRON, CLR_RED),
607.  SHIELD("large shield", (char *)0,
608.  		1, 0, 1, 0,	     7, 0,100, 10,  8, 0, IRON, HI_METAL),
609.  SHIELD("dwarvish roundshield", "large round shield",
610.  		0, 0, 0, 0,	     4, 0,100, 10,  8, 0, IRON, HI_METAL),
611.  SHIELD("shield of reflection", "polished silver shield",
612.  		0, 1, 0, REFLECTING, 3, 0, 50, 50,  8, 0, SILVER, HI_SILVER),
613.  
614.  /* Boots */
615.  BOOTS("low boots", "walking shoes",
616.  		0, 0,  0,	  25, 2, 10,  8,  9, 0, LEATHER, HI_LEATHER),
617.  BOOTS("iron shoes", "hard shoes",
618.  		0, 0,  0,	   7, 2, 50, 16,  8, 0, IRON, HI_METAL),
619.  BOOTS("high boots", "jackboots",
620.  		0, 0,  0,	  15, 2, 20, 12,  8, 0, LEATHER, HI_LEATHER),
621.  /* ...with shuffled appearances */
622.  BOOTS("speed boots", "combat boots",
623.  		0, 1,  FAST,	  12, 2, 20, 50,  9, 0, LEATHER, HI_LEATHER),
624.  /* With shuffled appearances... */
625.  BOOTS("water walking boots", "jungle boots",
626.  		0, 1,  WWALKING,  12, 2, 20, 50,  9, 0, LEATHER, HI_LEATHER),
627.  BOOTS("jumping boots", "hiking boots",
628.  		0, 1,  JUMPING,   12, 2, 20, 50,  9, 0, LEATHER, HI_LEATHER),
629.  BOOTS("elven boots", "mud boots",
630.  		0, 1,  STEALTH,   12, 2, 15,  8,  9, 0, LEATHER, HI_LEATHER),
631.  BOOTS("kicking boots", "steel boots",
632.  		0, 1,  0,         12, 2, 15,  8,  9, 0, IRON, CLR_BROWN),
633.  BOOTS("fumble boots", "riding boots",
634.  		0, 1,  FUMBLING,  12, 2, 20, 30,  9, 0, LEATHER, HI_LEATHER),
635.  BOOTS("levitation boots", "snow boots",
636.  		0, 1,  LEVITATION,12, 2, 15, 30,  9, 0, LEATHER, HI_LEATHER),
637.  
638.  #undef HELM
639.  #undef CLOAK
640.  #undef SHIELD
641.  #undef GLOVES
642.  #undef BOOTS
643.  #undef ARMOR
644.  
645.  /* rings ... */
646.  /* [Tom] looks like there are no probs to change... */
647.  #define RING(name,power,stone,cost,mgc,spec,mohs,metal,color) OBJECT( \
648.  		OBJ(name,stone), \
649.  		BITS(0,0,spec,0,mgc,spec,0,0,0,HARDGEM(mohs),0,0,metal), \
650.  		power, RING_CLASS, 0, 0, 3, cost, 0, 0, 0, 0, 15, color )
651.  RING("adornment", ADORNED, "wooden",        100, 1, 1, 2, WOOD, HI_WOOD),
652.  RING("hunger",     HUNGER,     "topaz",     100, 1, 0, 8, GEMSTONE, CLR_CYAN),
653.  RING("mood",       0,          "ridged",    100, 1, 0, 8, IRON, HI_METAL),
654.  RING("protection", PROTECTION, "black onyx",100, 1, 1, 7, MINERAL, CLR_BLACK),
655.  RING("protection from shape changers", PROT_FROM_SHAPE_CHANGERS, "shiny",
656.  					    					100, 1, 0, 5, IRON, CLR_BRIGHT_CYAN),
657.  RING("sleeping",   SLEEPING,   "wedding",   100, 1, 0, 7, GEMSTONE, CLR_WHITE),
658.  RING("stealth", STEALTH, "jade",            100, 1, 0, 6, GEMSTONE, CLR_GREEN),
659.  RING("sustain ability", FIXED_ABIL, "bronze",
660.  					    100, 1, 0, 4, COPPER, HI_COPPER),
661.  RING("warning",    WARNING,    "diamond",   100, 1, 0,10, GEMSTONE, CLR_WHITE),
662.  RING("aggravate monster", AGGRAVATE_MONSTER, "sapphire",
663.  					    150, 1, 0, 9, GEMSTONE, CLR_BLUE),
664.  RING("cold resistance", COLD_RES, "brass",  150, 1, 0, 4, COPPER, HI_COPPER),
665.  RING("gain constitution", 0,   "opal",      150, 1, 1, 7, MINERAL,  HI_MINERAL),
666.  RING("gain dexterity",  0,     "obsidian",  150, 1, 1, 7, GEMSTONE, CLR_BLACK),
667.  RING("gain intelligence", 0,   "plain",     150, 1, 1, 7, MINERAL,  HI_MINERAL),
668.  RING("gain strength", 0,       "granite",   150, 1, 1, 7, MINERAL, HI_MINERAL),
669.  RING("gain wisdom",     0,     "glass",     150, 1, 1, 7, MINERAL,  CLR_CYAN),
670.  RING("increase accuracy", 0,   "clay",      150, 1, 1, 4, MINERAL, CLR_RED),
671.  RING("increase damage", 0,     "coral",     150, 1, 1, 4, MINERAL, CLR_ORANGE),
672.  RING("slow digestion",  SLOW_DIGESTION, "steel",
673.  					    200, 1, 0, 8, IRON, HI_METAL),
674.  RING("invisibility", INVIS,    "wire",      150, 1, 0, 5, IRON, HI_METAL),
675.  RING("poison resistance", POISON_RES, "pearl",
676.  					    150, 1, 0, 4, IRON, CLR_WHITE),
677.  RING("see invisible", SEE_INVIS, "engagement",
678.  											150, 1, 0, 5, IRON, HI_METAL),
679.  RING("shock resistance", SHOCK_RES, "copper",
680.  					    150, 1, 0, 3, COPPER, HI_COPPER),
681.  RING("fire resistance", FIRE_RES, "iron",   200, 1, 0, 5, IRON, HI_METAL),
682.  RING("free action",     FREE_ACTION, "twisted",
683.  					    200, 1, 0, 6, IRON, HI_METAL),
684.  /*RING("infravision", 0, "zinc",              200, 1, 0, 5, MITHRIL, HI_METAL),*/
685.  RING("levitation", LEVITATION, "agate",     200, 1, 0, 7, GEMSTONE, CLR_RED),
686.  RING("regeneration", REGENERATION, "moonstone",
687.  											200, 1, 0, 6, MINERAL, HI_MINERAL),
688.  RING("searching",  SEARCHING,  "tiger eye", 200, 1, 0, 6, GEMSTONE, CLR_BROWN),
689.  RING("teleportation", TELEPORT, "silver",   200, 1, 0, 3, SILVER, HI_SILVER),
690.  RING("conflict",   CONFLICT, "ruby",        300, 1, 0, 9, GEMSTONE, CLR_RED),
691.  RING("polymorph", POLYMORPH, "ivory",       300, 1, 0, 4, BONE, CLR_WHITE),
692.  RING("polymorph control", POLYMORPH_CONTROL, "emerald",
693.  					    300, 1, 0, 8, GEMSTONE, CLR_BRIGHT_GREEN),
694.  RING("teleport control", TELEPORT_CONTROL, "gold",
695.  											300, 1, 0, 3, GOLD, HI_GOLD),
696.  /* More descriptions: cameo, intaglio */
697.  #undef RING
698.  
699.  /* amulets ... - THE Amulet comes last because it is special */
700.  #define AMULET(name,desc,power,prob) OBJECT( \
701.  		OBJ(name,desc), BITS(0,0,0,0,1,0,0,0,0,0,0,0,IRON), power, \
702.  		AMULET_CLASS, prob, 0, 20, 150, 0, 0, 0, 0, 20, HI_METAL )
703.  AMULET("amulet of change",        "square",     0,          110),
704.  AMULET("amulet of drain resistance","warped",   DRAIN_RES,   60),
705.  AMULET("amulet of ESP",           "circular",   TELEPAT,    140),
706.  AMULET("amulet of flying",        "convex",     FLYING,      50),
707.  AMULET("amulet of life saving",   "spherical",  LIFESAVED,   60),
708.  AMULET("amulet of magical breathing", "octagonal", MAGICAL_BREATHING, 50),
709.  AMULET("amulet of reflection",    "hexagonal",  REFLECTING,  60),
710.  AMULET("amulet of restful sleep", "triangular", SLEEPING,   110),
711.  AMULET("amulet of strangulation", "oval",       STRANGLED,  110),
712.  AMULET("amulet of unchanging",    "concave",    UNCHANGING,	 50),
713.  AMULET("amulet versus poison",    "pyramidal",  POISON_RES, 140),
714.  AMULET("amulet versus stone",     "lunate",   /*STONE_RES*/0,60),
715.  OBJECT(OBJ("cheap plastic imitation of the Amulet of Yendor",
716.  	"Amulet of Yendor"), BITS(0,0,1,0,0,0,0,0,0,0,0,0,PLASTIC), 0,
717.  	AMULET_CLASS, 0, 0, 20,    0, 0, 0, 0, 0,  1, HI_METAL),
718.  OBJECT(OBJ("Amulet of Yendor",	/* note: description == name */
719.  	"Amulet of Yendor"), BITS(0,0,1,0,1,0,1,1,0,0,0,0,MITHRIL), 0,
720.  	AMULET_CLASS, 0, 0, 20, 30000, 0, 0, 0, 0, 20, HI_METAL),
721.  #undef AMULET
722.  
723.  /* tools ... */
724.  /* tools with weapon characteristics come last */
725.  #define TOOL(name,desc,kn,mrg,mgc,chg,prob,wt,cost,mat,color) \
726.  	OBJECT( OBJ(name,desc), \
727.  		BITS(kn,mrg,chg,0,mgc,chg,0,0,0,0,0,P_NONE,mat), \
728.  		0, TOOL_CLASS, prob, 0, \
729.  		wt, cost, 0, 0, 0, 0, wt, color )
730.  #define CONTAINER(name,desc,kn,mgc,chg,bi,prob,wt,cost,mat,color) \
731.  	OBJECT( OBJ(name,desc), \
732.  		BITS(kn,0,chg,1,mgc,chg,0,0,bi,0,0,P_NONE,mat), \
733.  		0, TOOL_CLASS, prob, 0, \
734.  		wt, cost, 0, 0, 0, 0, wt, color )
735.  #define WEPTOOL(name,desc,kn,mgc,chg,bi,prob,wt,cost,sdam,ldam,hitbon,typ,sub,mat,clr) \
736.  	OBJECT( OBJ(name,desc), \
737.  		BITS(kn,0,1,chg,mgc,1,0,0,bi,0,typ,sub,mat), \
738.  		0, TOOL_CLASS, prob, 0, \
739.  		wt, cost, sdam, ldam, hitbon, 0, wt, clr )
740.  /* Containers */
741.  CONTAINER("large box", (char *)0,       1, 0, 0, 1,  40,350,   8, WOOD, HI_WOOD),
742.  CONTAINER("chest", (char *)0,           1, 0, 0, 1,  35,600,  16, WOOD, HI_WOOD),
743.  CONTAINER("ice box", (char *)0,         1, 0, 0, 1,  10,900,  42, PLASTIC, CLR_WHITE),
744.  CONTAINER("sack", "bag",                0, 0, 0, 0,  40, 15,   2, CLOTH, HI_CLOTH),
745.  CONTAINER("oilskin sack", "bag",        0, 0, 0, 0,  10, 15, 100, CLOTH, HI_CLOTH),
746.  CONTAINER("bag of holding", "bag",      0, 1, 0, 0,  20, 15, 100, CLOTH, HI_CLOTH),
747.  CONTAINER("bag of tricks", "bag",       0, 1, 1, 0,  20, 15, 100, CLOTH, HI_CLOTH),
748.  
749.  /* Unlocking tools */
750.  TOOL("skeleton key", "key",     0, 0, 0, 0,  80,  3,  10, IRON, HI_METAL),
751.  #ifdef TOURIST
752.  TOOL("lock pick", (char *)0,    1, 0, 0, 0,  60,  4,  20, IRON, HI_METAL),
753.  TOOL("credit card", (char *)0,  1, 0, 0, 0,  15,  1,  10, PLASTIC, CLR_WHITE),
754.  #else
755.  TOOL("lock pick", (char *)0,    1, 0, 0, 0,  75,  4,  20, IRON, HI_METAL),
756.  #endif
757.  
758.  /* Light sources */
759.  /* [Tom] made candles cheaper & more common */
760.  TOOL("tallow candle", "candle", 0, 1, 0, 0,  50,  2,   1, WAX, CLR_WHITE),
761.  TOOL("wax candle", "candle",    0, 1, 0, 0,  40,  2,   2, WAX, CLR_WHITE),
762.  TOOL("magic candle",  "candle", 0, 1, 1, 0,   5,  2, 500, WAX, CLR_WHITE),
763.  TOOL("oil lamp", "lamp",        0, 0, 0, 0,  25, 20,  10, COPPER, CLR_YELLOW),
764.  TOOL("brass lantern", (char *)0,1, 0, 0, 0,  15, 30,  12, COPPER, CLR_YELLOW),
765.  TOOL("magic lamp", "lamp",      0, 0, 1, 0,  10, 20,1000, COPPER, CLR_YELLOW),
766.  
767.  /* Instruments */
768.  /* KMH -- made less common */
769.  TOOL("tin whistle", "whistle",  0, 0, 0, 0,  63,  3,  10, METAL, HI_METAL),
770.  TOOL("magic whistle", "whistle",0, 0, 1, 0,  25,  3,  10, METAL, HI_METAL),
771.  /* "If tin whistles are made out of tin, what do they make foghorns out of?" */
772.  TOOL("wooden flute", "flute",   0, 0, 0, 0,   2,  5,  12, WOOD, HI_WOOD),
773.  TOOL("magic flute", "flute",    0, 0, 1, 1,   1,  5,  36, WOOD, HI_WOOD),
774.  TOOL("tooled horn", "horn",     0, 0, 0, 0,   2, 18,  15, BONE, CLR_WHITE),
775.  TOOL("frost horn", "horn",      0, 0, 1, 1,   1, 18,  50, BONE, CLR_WHITE),
776.  TOOL("fire horn", "horn",       0, 0, 1, 1,   1, 18,  50, BONE, CLR_WHITE),
777.  TOOL("horn of plenty", "horn",  0, 0, 1, 1,   1, 18,  50, BONE, CLR_WHITE),
778.  TOOL("wooden harp", "harp",     0, 0, 0, 0,   2, 30,  50, WOOD, HI_WOOD),
779.  TOOL("magic harp", "harp",      0, 0, 1, 1,   1, 30,  50, WOOD, HI_WOOD),
780.  TOOL("bell", (char *)0,         1, 0, 0, 0,   1, 30,  50, COPPER, HI_COPPER),
781.  TOOL("bugle", (char *)0,        1, 0, 0, 0,   2, 10,  15, COPPER, HI_COPPER),
782.  TOOL("leather drum", "drum",    0, 0, 0, 0,   2, 25,  25, LEATHER, HI_LEATHER),
783.  TOOL("drum of earthquake", "drum",
784.                                  0, 0, 1, 1,   1, 25,  25, LEATHER, HI_LEATHER),
785.  
786.  /* Traps */
787.  TOOL("land mine",(char *)0,     1, 0, 0, 0,   0,300, 180, IRON, CLR_RED),
788.  TOOL("beartrap", (char *)0,     1, 0, 0, 0,   0,200,  60, IRON, HI_METAL),
789.  
790.  /* Weapon-tools */
791.  # ifdef P_SPOON
792.  /* Added by Tsanth, in homage to Final Fantasy 2 */
793.  /* KMH -- Not randomly generated (no damage!) */
794.  WEPTOOL("spoon", (char *)0,
795.  	1, 0, 0, 0,  0,  1, 5000,  0,  0, 0, WHACK,  -P_DART, PLATINUM, HI_METAL),
796.  # endif /* P_SPOON */
797.  #ifdef LIGHTSABERS
798.  # ifdef D_SABER
799.  WEPTOOL("pick-axe", (char *)0,
800.  	1, 0, 0, 0, 17, 80,   50,  6,  3, 0, WHACK,  P_PICK_AXE, IRON, HI_METAL),
801.  # else
802.  WEPTOOL("pick-axe", (char *)0,
803.  	1, 0, 0, 0, 18, 80,   50,  6,  3, 0, WHACK,  P_PICK_AXE, IRON, HI_METAL),
804.  # endif
805.  #else	/* LIGHTSABERS */
806.  WEPTOOL("pick-axe", (char *)0,
807.  	1, 0, 0, 0, 20, 80,   50,  6,  3, 0, WHACK,  P_PICK_AXE, IRON, HI_METAL),
808.  #endif
809.  WEPTOOL("fishing pole", (char *)0,
810.  	1, 0, 0, 0,  5,  30,  50,  2,  6, 0, WHACK,  P_POLEARMS, METAL, HI_METAL),
811.  WEPTOOL("grappling hook", "iron hook",
812.  	0, 0, 0, 0,  5,  30,  50,  2,  6, 0, WHACK,  P_FLAIL, IRON, HI_METAL),
813.  /* 3.4.1: unicorn horn left classified as "magic" */
814.  WEPTOOL("unicorn horn", (char *)0,
815.  	1, 1, 0, 1,  0,  20, 100, 12, 12, 0, PIERCE, P_UNICORN_HORN, BONE, CLR_WHITE),
816.  /* WEPTOOL("torch", (char *)0,
817.  	   1, 0, 0,  0,  25, 8, 5, 2, WHACK, P_CLUB, WOOD, HI_WOOD), */
818.  
819.  OBJECT(OBJ("torch", (char *)0),
820.  	BITS(1,1,1,0,0,1,0,0,0,0,WHACK,P_CLUB,WOOD),
821.  	0, TOOL_CLASS, 25, 0,
822.  	20, 8, 2, 5, WHACK, 0, 20, HI_WOOD ),
823.  
824.  #ifdef LIGHTSABERS
825.  /* [WAC]
826.   * Lightsabers are -3 to hit 
827.   * Double lightsaber is -4 to hit (only red)
828.   * DMG is increased: 10.5/15.5
829.   * green :9 + d3, 13 + d5
830.   * blue : 8 + d5, 12 + d7
831.   * red :  6 + d9, 10 + d11
832.   * red double: 6 + d9 + d9, 10 + d11 + d11  (15/21) in double mode
833.   */
834.  WEPTOOL("green lightsaber", "lightsaber",
835.  	0, 0, 1, 0,  1, 60, 500, 3,  5, -3, SLASH, P_LIGHTSABER, PLASTIC, HI_METAL),
836.  # ifdef D_SABER
837.  WEPTOOL("blue lightsaber",  "lightsaber",
838.  	0, 0, 1, 0,  1, 60, 500, 5,  7, -3, SLASH, P_LIGHTSABER, PLATINUM, HI_METAL),
839.  # endif /* D_SABER */
840.  WEPTOOL("red lightsaber",  "lightsaber",
841.  	0, 0, 1, 0,  1, 60, 500, 9,  11, -3, SLASH, P_LIGHTSABER, PLATINUM, HI_METAL),
842.  WEPTOOL("red double lightsaber",  "double lightsaber",
843.  	0, 0, 1, 1,  0, 60,1000, 9,  11, -4, SLASH, P_LIGHTSABER, PLATINUM, HI_METAL),
844.  #endif	/* LIGHTSABERS */
845.  
846.  /* Other tools */
847.  #ifdef TOURIST
848.  TOOL("expensive camera", (char *)0,
849.  				1, 0, 0, 1,  10, 12, 200, PLASTIC, CLR_BLACK),
850.  TOOL("mirror", "looking glass", 0, 0, 0, 0,  40, 13,  10, GLASS, HI_SILVER),
851.  #else
852.  TOOL("mirror", "looking glass", 0, 0, 0, 0,  50, 13,  10, GLASS, HI_SILVER),
853.  #endif
854.  TOOL("crystal ball", "glass orb",
855.  								0, 0, 1, 1,  10,150,  60, GLASS, HI_GLASS),
856.  #if 0
857.  /* STEPHEN WHITE'S NEW CODE */
858.  /* KMH -- removed because there's potential for abuse */
859.  TOOL("orb of enchantment", "glass orb",
860.  				0, 0, 1, 1,   5, 75, 750, GLASS, HI_GLASS),
861.  TOOL("orb of charging", "glass orb",
862.  				0, 0, 1, 1,   5, 75, 750, GLASS, HI_GLASS),
863.  TOOL("orb of destruction", "glass orb",
864.  				0, 0, 0, 0,   5, 75, 750, GLASS, HI_GLASS),
865.  #endif
866.  TOOL("lenses", (char *)0,	1, 0, 0, 0,   5,  3,  80, GLASS, HI_GLASS),
867.  TOOL("blindfold", (char *)0,    1, 0, 0, 0,  50,  2,  20, CLOTH, CLR_BLACK),
868.  TOOL("towel", (char *)0,        1, 0, 0, 0,  50,  2,  50, CLOTH, CLR_MAGENTA),
869.  #ifdef STEED
870.  TOOL("saddle", (char *)0,       1, 0, 0, 0,   5,100, 150, LEATHER, HI_LEATHER),
871.  TOOL("leash", (char *)0,        1, 0, 0, 0,  65, 12,  20, LEATHER, HI_LEATHER),
872.  #else
873.  TOOL("leash", (char *)0,        1, 0, 0, 0,  70, 12,  20, LEATHER, HI_LEATHER),
874.  #endif
875.  TOOL("stethoscope", (char *)0,  1, 0, 0, 0,  25,  4,  75, IRON, HI_METAL),
876.  TOOL("tinning kit", (char *)0,  1, 0, 0, 1,  15, 75,  30, IRON, HI_METAL),
877.  CONTAINER("medical kit", "leather bag",
878.  				0, 0, 0, 0,  10, 25, 500, LEATHER, HI_LEATHER),
879.  TOOL("tin opener", (char *)0,   1, 0, 0, 0,  25,  4,  30, IRON, HI_METAL),
880.  TOOL("can of grease", (char *)0,1, 0, 0, 1,  15, 15,  20, IRON, HI_METAL),
881.  TOOL("figurine", (char *)0,     1, 0, 1, 0,  25, 50,  80, MINERAL, HI_MINERAL),
882.  TOOL("magic marker", (char *)0, 1, 0, 1, 1,  15,  2,  50, PLASTIC, CLR_RED),
883.  
884.  /* Two pseudo tools. These can never exist outside of medical kits. */
885.  OBJECT(OBJ("bandage", (char *)0),
886.  		BITS(1,1,0,0,0,0,0,1,0,0,0,P_NONE,CLOTH), 0,
887.  		TOOL_CLASS, 0, 0, 1, 1, 0, 0, 0, 0, 0, CLR_WHITE),
888.  OBJECT(OBJ("phial", (char *)0),
889.  		BITS(1,1,0,0,0,0,0,1,0,0,0,P_NONE,GLASS), 0,
890.  		TOOL_CLASS, 0, 0, 2, 1, 0, 0, 0, 0, 1, HI_GLASS),
891.  
892.  /* Two special unique artifact "tools" */
893.  OBJECT(OBJ("Candelabrum of Invocation", "candelabrum"),
894.  		BITS(0,0,1,0,1,0,1,1,0,0,0,0,GOLD), 0,
895.  		TOOL_CLASS, 0, 0,10, 5000, 0, 0, 0, 0, 200, HI_GOLD),
896.  OBJECT(OBJ("Bell of Opening", "silver bell"),
897.  		BITS(0,0,1,0,1,1,1,1,0,0,0,0,SILVER), 0,
898.  		TOOL_CLASS, 0, 0,10, 5000, 0, 0, 0, 0, 50, HI_SILVER),
899.  #undef TOOL
900.  #undef CONTAINER
901.  #undef WEPTOOL
902.  
903.  
904.  /* Comestibles ... */
905.  #define FOOD(name,prob,delay,wt,unk,tin,nutrition,color) OBJECT( \
906.  		OBJ(name,(char *)0), BITS(1,1,unk,0,0,0,0,0,0,0,0,0,tin), 0, \
907.  		FOOD_CLASS, prob, delay, \
908.  		wt, nutrition/20 + 5, 0, 0, 0, 0, nutrition, color )
909.  /* all types of food (except tins & corpses) must have a delay of at least 1. */
910.  /* delay on corpses is computed and is weight dependant */
911.  /* dog eats foods 0-4 but prefers tripe rations above all others */
912.  /* fortune cookies can be read */
913.  /* carrots improve your vision */
914.  /* +0 tins contain monster meat */
915.  /* +1 tins (of spinach) make you stronger (like Popeye) */
916.  /* food CORPSE is a cadaver of some type */
917.  /* meatballs/sticks/rings are only created from objects via stone to flesh */
918.  
919.  /* Meat */
920.  FOOD("tripe ration",       142, 2, 10, 0, FLESH, 200, CLR_BROWN),
921.  FOOD("corpse",               0, 1,  0, 0, FLESH,   0, CLR_BROWN),
922.  FOOD("egg",                 80, 1,  1, 1, FLESH,  80, CLR_WHITE),
923.  FOOD("meatball",             0, 1,  1, 0, FLESH,   5, CLR_BROWN),
924.  FOOD("meat stick",           0, 1,  1, 0, FLESH,   5, CLR_BROWN),
925.  FOOD("huge chunk of meat",   0,20,400, 0, FLESH,2000, CLR_BROWN),
926.  /* special case because it's not mergable */
927.  OBJECT(OBJ("meat ring", (char *)0),
928.      BITS(1,0,0,0,0,0,0,0,0,0,0,0,FLESH),
929.      0, FOOD_CLASS, 0, 1, 5, 1, 0, 0, 0, 0, 5, CLR_BROWN),
930.  
931.  
932.  /* Body parts.... eeeww */
933.  FOOD("eyeball",              0, 1,  0, 0, FLESH,  10, CLR_WHITE),
934.  FOOD("severed hand",         0, 1,  0, 0, FLESH,  40, CLR_BROWN),
935.  
936.  /* Fruits & veggies */
937.  FOOD("kelp frond",           0, 1,  1, 0, VEGGY,  30, CLR_GREEN),
938.  FOOD("eucalyptus leaf",      4, 1,  1, 0, VEGGY,  30, CLR_GREEN),
939.  FOOD("clove of garlic",      7, 1,  1, 0, VEGGY,  40, CLR_WHITE),
940.  FOOD("sprig of wolfsbane",   7, 1,  1, 0, VEGGY,  40, CLR_GREEN),
941.  FOOD("apple",               13, 1,  2, 0, VEGGY,  50, CLR_RED),
942.  FOOD("carrot",              15, 1,  2, 0, VEGGY,  50, CLR_ORANGE),
943.  FOOD("pear",                 9, 1,  2, 0, VEGGY,  50, CLR_BRIGHT_GREEN),
944.  FOOD("asian pear",           1, 1,  2, 0, VEGGY,  75, CLR_BRIGHT_GREEN),
945.  FOOD("banana",              10, 1,  2, 0, VEGGY,  80, CLR_YELLOW),
946.  FOOD("orange",              10, 1,  2, 0, VEGGY,  80, CLR_ORANGE),
947.  FOOD("mushroom",             1, 1,  5, 0, VEGGY,  90, CLR_BLACK),
948.  FOOD("melon",                9, 1,  5, 0, VEGGY, 100, CLR_BRIGHT_GREEN),
949.  FOOD("slime mold",          75, 1,  5, 0, VEGGY, 250, HI_ORGANIC),
950.  
951.  /* People food */
952.  FOOD("lump of royal jelly",  1, 1,  2, 0, VEGGY, 200, CLR_YELLOW),
953.  FOOD("cream pie",           10, 1, 10, 0, VEGGY, 100, CLR_WHITE),
954.  FOOD("sandwich",            10, 1, 10, 0, FLESH, 100, CLR_WHITE),
955.  FOOD("candy bar",           13, 1,  2, 0, VEGGY, 100, CLR_BROWN),
956.  FOOD("fortune cookie",      55, 1,  1, 0, VEGGY,  40, CLR_YELLOW),
957.  FOOD("pancake",             14, 2,  2, 0, VEGGY, 200, CLR_YELLOW),
958.  FOOD("tortilla",             1, 2,  2, 0, VEGGY,  80, CLR_WHITE),
959.  /* [Tom] more food.... taken off pancake (25) */
960.  FOOD("cheese",              10, 2,  2, 0, FLESH, 250, CLR_YELLOW),
961.  FOOD("pill",                 1, 1,  1, 0, VEGGY,   0, CLR_BRIGHT_MAGENTA),
962.  FOOD("holy wafer",           7, 1,  1, 0, VEGGY, 150, CLR_WHITE),
963.  FOOD("lembas wafer",        20, 2,  5, 0, VEGGY, 800, CLR_WHITE),
964.  FOOD("cram ration",         20, 3, 15, 0, VEGGY, 600, HI_ORGANIC),
965.  FOOD("food ration",        380, 5, 20, 0, VEGGY, 800, HI_ORGANIC),
966.  FOOD("K-ration",             0, 1, 10, 0, VEGGY, 400, HI_ORGANIC),
967.  FOOD("C-ration",             0, 1, 10, 0, VEGGY, 300, HI_ORGANIC),
968.  FOOD("tin",                 75, 0, 10, 1, METAL,   0, HI_METAL),
969.  #undef FOOD
970.  
971.  /* potions ... */
972.  #define POTION(name,desc,mgc,power,prob,cost,color) OBJECT( \
973.  		OBJ(name,desc), BITS(0,1,0,0,mgc,0,0,0,0,0,0,0,GLASS), power, \
974.  		POTION_CLASS, prob, 0, 20, cost, 0, 0, 0, 0, 10, color )
975.  POTION("booze", "brown",                0, 0,          40,  50, CLR_BROWN),
976.  POTION("fruit juice", "dark",           0, 0,          40,  50, CLR_BLACK),
977.  POTION("see invisible", "magenta",      1, SEE_INVIS,  38,  50, CLR_MAGENTA),
978.  POTION("sickness", "fizzy",             0, 0,          40,  50, CLR_CYAN),
979.  POTION("sleeping",  "effervescent",     1, 0,          40, 100, CLR_GRAY),
980.  POTION("clairvoyance","luminescent",    1, 0,          20, 100, CLR_WHITE),
981.  POTION("confusion", "orange",           1, CONFUSION,  40, 100, CLR_ORANGE),
982.  POTION("hallucination", "sky blue",     1, HALLUC,     40, 100, CLR_CYAN),
983.  POTION("healing", "purple-red",         1, 0,          55, 100, CLR_MAGENTA),
984.  POTION("extra healing", "puce",         1, 0,          45, 100, CLR_RED),
985.  POTION("restore ability", "pink",       1, 0,          40, 100, CLR_BRIGHT_MAGENTA),
986.  POTION("blindness", "yellow",           1, BLINDED,    38, 150, CLR_YELLOW),
987.  POTION("ESP", "muddy",                  1, TELEPAT,    20, 150, CLR_BROWN),
988.  POTION("gain energy", "cloudy",         1, 0,          40, 150, CLR_WHITE),
989.  POTION("invisibility", "brilliant blue",1, INVIS,      40, 150, CLR_BRIGHT_BLUE),
990.  POTION("monster detection", "bubbly",   1, 0,          38, 150, CLR_WHITE),
991.  POTION("object detection", "smoky",     1, 0,          38, 150, CLR_GRAY),
992.  POTION("enlightenment", "swirly",       1, 0,          20, 200, CLR_BROWN),
993.  POTION("full healing",  "black",        1, 0,          20, 200, CLR_BLACK),
994.  POTION("levitation", "cyan",            1, LEVITATION, 38, 200, CLR_CYAN),
995.  POTION("polymorph", "golden",           1, 0,          10, 200, CLR_YELLOW),
996.  POTION("speed", "dark green",           1, FAST,       38, 200, CLR_GREEN),
997.  POTION("acid", "white",                 0, 0,          20, 250, CLR_WHITE),
998.  POTION("oil", "murky",                  0, 0,          30, 250, CLR_BROWN),
999.  POTION("gain ability", "ruby",          1, 0,          38, 300, CLR_RED),
1000. POTION("gain level", "milky",           1, 0,          20, 300, CLR_WHITE),
1001. POTION("invulnerability", "icy",        1, 0,           5, 300, CLR_BRIGHT_BLUE),
1002. POTION("paralysis", "emerald",          1, 0,          38, 300, CLR_BRIGHT_GREEN),
1003. POTION("water", "clear",                0, 0,          55, 100, CLR_CYAN),
1004. POTION("blood", "blood-red",            0, 0,           0,  50, CLR_RED),
1005. POTION("vampire blood", "blood-red",    1, 0,           0, 350, CLR_RED),
1006. POTION("amnesia", "sparkling",          1, 0,          16, 100, CLR_CYAN),
1007. #undef POTION
1008. 
1009. /* scrolls ... */
1010. #define SCROLL(name,text,sub,mgc,prob,cost) OBJECT( \
1011. 		OBJ(name,text), BITS(0,1,0,0,mgc,0,0,0,0,0,0,sub,PAPER), 0, \
1012. 		SCROLL_CLASS, prob, 0, 5, cost, 0, 0, 0, 0, 6, HI_PAPER )
1013. /* Attack */
1014. SCROLL("create monster",        "LEP GEX VEN ZEA",      P_ATTACK_SPELL, 1,  45, 200),
1015. /* Enchantment */
1016. SCROLL("taming",                "PRIRUTSENIE",          P_ENCHANTMENT_SPELL, 1,  15, 200),
1017. /* Divination */
1018. SCROLL("light",                 "VERR YED HORRE",       P_DIVINATION_SPELL, 1,  90,  50),
1019. SCROLL("food detection",        "YUM YUM",              P_DIVINATION_SPELL, 1,  25, 100),
1020. SCROLL("gold detection",        "THARR",                P_DIVINATION_SPELL, 1,  33, 100),
1021. SCROLL("identify",              "KERNOD WEL",           P_DIVINATION_SPELL, 1, 185,  20),
1022. SCROLL("magic mapping",         "ELAM EBOW",            P_DIVINATION_SPELL, 1,  45, 100),
1023. /* Enchantment */
1024. SCROLL("confuse monster",       "NR 9",                 P_ENCHANTMENT_SPELL,  1,  43, 100),
1025. SCROLL("scare monster",         "XIXAXA XOXAXA XUXAXA", P_ENCHANTMENT_SPELL,  1,  35, 100),
1026. SCROLL("enchant weapon",        "DAIYEN FOOELS",        P_ENCHANTMENT_SPELL,  1,  80,  60),
1027. SCROLL("enchant armor",         "ZELGO MER",            P_ENCHANTMENT_SPELL,  1,  63,  80),
1028. /* Protection */
1029. SCROLL("remove curse",          "PRATYAVAYAH",          P_PROTECTION_SPELL, 1,  65,  80),
1030. /* Body */
1031. SCROLL("teleportation",         "VENZAR BORGAVVE",      P_BODY_SPELL, 1,  55, 100),
1032. /* Matter */
1033. SCROLL("fire",                  "ANDOVA BEGARIN",       P_MATTER_SPELL, 1,  33, 100),
1034. SCROLL("earth",                 "KIRJE",                P_MATTER_SPELL, 1,  20, 200),
1035. 
1036. SCROLL("destroy armor",         "JUYED AWK YACC",       P_NONE, 1,  45, 100),
1037. SCROLL("amnesia",               "DUAM XNAHT",           P_NONE, 1,  35, 200),
1038. SCROLL("charging",              "HACKEM MUCHE",         P_NONE, 1,  15, 300),
1039. SCROLL("genocide",              "ELBIB YLOH",           P_NONE, 1,  15, 300),
1040. SCROLL("punishment",            "VE FORBRYDERNE",       P_NONE, 1,  15, 300),
1041. SCROLL("stinking cloud",	"VELOX NEB",            P_NONE, 1,  15, 300),
1042. SCROLL((char *)0,		"FOOBIE BLETCH",        P_NONE, 1,   0, 100),
1043. SCROLL((char *)0,		"TEMOV",                P_NONE, 1,   0, 100),
1044. SCROLL((char *)0,		"GARVEN DEH",           P_NONE, 1,   0, 100),
1045. SCROLL((char *)0,		"READ ME",              P_NONE, 1,   0, 100),
1046. /* these must come last because they have special descriptions */
1047. #ifdef MAIL
1048. SCROLL("mail",                  "stamped",              P_NONE, 0,   0,   0),
1049. #endif
1050. SCROLL("blank paper",           "unlabeled",            P_NONE, 0,  28,  60),
1051. #undef SCROLL
1052. 
1053. /* spell books ... */
1054. #define SPELL(name,desc,sub,prob,delay,level,mgc,dir,color) OBJECT( \
1055. 		OBJ(name,desc), BITS(0,0,1,0,mgc,1,0,0,0,0,dir,sub,PAPER), 0, \
1056. 		SPBOOK_CLASS, prob, delay, \
1057. 		50, level*100, 0, 0, 0, level, 20, color )
1058. /* Attack spells */
1059. SPELL("force bolt",      "red",         P_ATTACK_SPELL, 25,  2, 1, 1, IMMEDIATE, CLR_RED),
1060. SPELL("create monster",  "turquoise",   P_ATTACK_SPELL, 25,  3, 2, 1, NODIR,     CLR_BRIGHT_CYAN),
1061. SPELL("drain life",      "velvet",      P_ATTACK_SPELL, 10,  4, 3, 1, IMMEDIATE, CLR_MAGENTA),
1062.   /* NEEDS TILE */ /* WAC -- probs from force bolt and extra healing */
1063. SPELL("command undead",  "dark",        P_ATTACK_SPELL, 10,  7, 5, 1, IMMEDIATE, CLR_BLACK),
1064. SPELL("summon undead",   "black",       P_ATTACK_SPELL, 10,  7, 5, 1, IMMEDIATE, CLR_BLACK),
1065. /* Healing spells */
1066. SPELL("stone to flesh",	 "thick",       P_HEALING_SPELL, 15,  1, 3, 1, IMMEDIATE, HI_PAPER),
1067. SPELL("healing",         "white",       P_HEALING_SPELL, 30,  2, 1, 1, IMMEDIATE, CLR_WHITE),
1068. SPELL("cure blindness",  "yellow",      P_HEALING_SPELL, 20,  2, 2, 1, IMMEDIATE, CLR_YELLOW),
1069. SPELL("cure sickness",   "indigo",      P_HEALING_SPELL, 20,  3, 3, 1, NODIR,     CLR_BLUE),
1070. SPELL("extra healing",   "plaid",       P_HEALING_SPELL, 15,  5, 3, 1, IMMEDIATE, CLR_GREEN),
1071. SPELL("restore ability", "light brown", P_HEALING_SPELL, 15,  5, 4, 1, NODIR,     CLR_BROWN),
1072. SPELL("create familiar", "glittering",  P_HEALING_SPELL, 10,  7, 6, 1, NODIR,     CLR_WHITE),
1073. /* Divination spells */
1074. SPELL("light",           "cloth",       P_DIVINATION_SPELL, 30,  1, 1, 1, NODIR,     HI_CLOTH),
1075. SPELL("detect monsters", "leather",     P_DIVINATION_SPELL, 20,  1, 1, 1, NODIR,     HI_LEATHER),
1076. SPELL("detect food",     "cyan",        P_DIVINATION_SPELL, 15,  3, 2, 1, NODIR,     CLR_CYAN),
1077. SPELL("clairvoyance",    "dark blue",   P_DIVINATION_SPELL, 15,  3, 3, 1, NODIR,     CLR_BLUE),
1078. SPELL("detect unseen",   "violet",      P_DIVINATION_SPELL, 15,  4, 3, 1, NODIR,     CLR_MAGENTA),
1079. SPELL("identify",        "bronze",      P_DIVINATION_SPELL, 30,  8, 5, 1, NODIR,     HI_COPPER),
1080. SPELL("detect treasure", "gray",        P_DIVINATION_SPELL, 25,  5, 4, 1, NODIR,     CLR_GRAY),
1081. SPELL("magic mapping",   "dusty",       P_DIVINATION_SPELL, 15,  7, 5, 1, NODIR,     HI_PAPER),
1082. /* Enchantment spells */
1083. SPELL("confuse monster", "orange",      P_ENCHANTMENT_SPELL, 25,  2, 2, 1, IMMEDIATE, CLR_ORANGE),
1084. SPELL("slow monster",    "light green", P_ENCHANTMENT_SPELL, 25,  2, 2, 1, IMMEDIATE, CLR_BRIGHT_GREEN),
1085. SPELL("cause fear",      "light blue",  P_ENCHANTMENT_SPELL, 20,  3, 3, 1, NODIR,     CLR_BRIGHT_BLUE),
1086. SPELL("charm monster",   "magenta",     P_ENCHANTMENT_SPELL, 20,  3, 3, 1, IMMEDIATE, CLR_MAGENTA),
1087. SPELL("enchant weapon",  "dull",        P_ENCHANTMENT_SPELL,  5,  8, 7, 1, NODIR,     CLR_WHITE),
1088. SPELL("enchant armor",   "thin",        P_ENCHANTMENT_SPELL,  5,  8, 7, 1, NODIR,     CLR_WHITE),
1089. /* Protection spells */
1090. SPELL("protection",      "wide",        P_PROTECTION_SPELL,  5,  3, 1, 1, NODIR,     HI_PAPER),
1091. SPELL("resist poison",   "big",         P_PROTECTION_SPELL, 20,  2, 1, 1, NODIR,     CLR_GRAY),
1092. SPELL("resist sleep",    "fuzzy",       P_PROTECTION_SPELL, 20,  2, 1, 1, NODIR,     CLR_BROWN),
1093. SPELL("endure cold",     "deep",        P_PROTECTION_SPELL, 15,  3, 2, 1, NODIR,     HI_PAPER),
1094. SPELL("endure heat",     "spotted",     P_PROTECTION_SPELL, 15,  3, 2, 1, NODIR,     HI_PAPER),
1095. SPELL("insulate",        "long",        P_PROTECTION_SPELL, 15,  3, 2, 1, NODIR,     HI_PAPER),
1096. SPELL("remove curse",    "wrinkled",    P_PROTECTION_SPELL, 25,  5, 5, 1, NODIR,     HI_PAPER),
1097. SPELL("turn undead",     "copper",      P_PROTECTION_SPELL, 15,  8, 6, 1, IMMEDIATE, HI_COPPER),
1098. /* Body spells */
1099. SPELL("jumping",         "torn",        P_BODY_SPELL, 15,  3, 1, 1, IMMEDIATE, HI_PAPER),
1100. SPELL("haste self",      "purple",      P_BODY_SPELL, 20,  4, 3, 1, NODIR,     CLR_MAGENTA),
1101. SPELL("enlighten",       "faded",       P_BODY_SPELL, 15,  5, 4, 1, NODIR,     CLR_GRAY),
1102. SPELL("invisibility",    "dark brown",  P_BODY_SPELL, 20,  5, 4, 1, NODIR,     CLR_BROWN),
1103. SPELL("levitation",      "tan",         P_BODY_SPELL, 15,  4, 4, 1, NODIR,     CLR_BROWN),
1104. SPELL("teleport away",   "gold",        P_BODY_SPELL, 15,  6, 6, 1, IMMEDIATE, HI_GOLD),
1105. SPELL("passwall",        "ochre",       P_BODY_SPELL,  5,  7, 6, 1, NODIR,     CLR_YELLOW),
1106. SPELL("polymorph",       "silver",      P_BODY_SPELL, 15,  8, 6, 1, IMMEDIATE, HI_SILVER),
1107. /* Matter spells */
1108. SPELL("knock",           "pink",        P_MATTER_SPELL, 25,  1, 1, 1, IMMEDIATE, CLR_BRIGHT_MAGENTA),
1109. SPELL("flame sphere",    "canvas",      P_MATTER_SPELL, 20,  2, 1, 1, NODIR, CLR_BROWN),
1110. SPELL("freeze sphere",   "hardcover",   P_MATTER_SPELL, 20,  2, 1, 1, NODIR, CLR_BROWN),
1111. SPELL("wizard lock",     "dark green",  P_MATTER_SPELL, 30,  3, 2, 1, IMMEDIATE, CLR_GREEN),
1112. SPELL("dig",             "parchment",   P_MATTER_SPELL, 20,  6, 5, 1, RAY,       HI_PAPER),
1113. SPELL("cancellation",    "shining",     P_MATTER_SPELL, 15,  8, 7, 1, IMMEDIATE, CLR_WHITE),
1114. /* Ray type spells are all here.  Kludge for zap.c */
1115. SPELL("magic missile",   "vellum",      P_ATTACK_SPELL, 40,  3, 2, 1, RAY,       HI_PAPER),
1116. SPELL("fireball",        "ragged",      P_MATTER_SPELL, 15,  6, 4, 1, RAY,       HI_PAPER),
1117. SPELL("cone of cold",    "dog eared",   P_MATTER_SPELL, 15,  8, 5, 1, RAY,       HI_PAPER),
1118. SPELL("sleep",           "mottled",     P_ENCHANTMENT_SPELL, 35,  1, 1, 1, RAY,  HI_PAPER),
1119. SPELL("finger of death", "stained",     P_ATTACK_SPELL,  5, 10, 7, 1, RAY,       HI_PAPER),
1120. SPELL("lightning",       "rainbow",     P_MATTER_SPELL, 10,  7, 4, 1, RAY,       HI_PAPER),
1121. SPELL("poison blast",    "tattered",    P_ATTACK_SPELL,  5,  7, 4, 1, RAY,       HI_PAPER),
1122. SPELL("acid stream",     "colorful",    P_MATTER_SPELL,  5,  7, 4, 1, RAY,       HI_PAPER),
1123. /* Description placeholders and special spellbooks */
1124. SPELL((char *)0,		 "tartan",      P_NONE,  0,  0, 0, 1, 0,         CLR_RED),
1125. SPELL((char *)0,		 "stylish",     P_NONE,  0,  0, 0, 1, 0,         HI_PAPER),
1126. SPELL((char *)0,		 "psychedelic", P_NONE,  0,  0, 0, 1, 0,         CLR_BRIGHT_MAGENTA),
1127. SPELL((char *)0,		 "spiral-bound",P_NONE,  0,  0, 0, 1, 0,         HI_PAPER),
1128. SPELL((char *)0,		 "left-handed", P_NONE,  0,  0, 0, 1, 0,         HI_PAPER),
1129. SPELL((char *)0,		 "stapled",     P_NONE,  0,  0, 0, 1, 0,         HI_PAPER),
1130. SPELL("blank paper",	 "plain",		P_NONE, 20,  0, 0, 0, 0,         HI_PAPER),
1131. 	/* ...Blank spellbook must come last because it retains its description */
1132. OBJECT(OBJ("Book of the Dead", "papyrus"),
1133. 	BITS(0,0,1,0,1,0,1,1,0,0,0,0,PAPER), 0,
1134. 	SPBOOK_CLASS, 0, 0,20, 10000, 0, 0, 0, 7, 20, HI_PAPER),
1135. 	/* ...A special, one of a kind, spellbook */
1136. #undef SPELL
1137. 
1138. /* wands ... */
1139. #define WAND(name,typ,prob,cost,mgc,dir,metal,color) OBJECT( \
1140. 		OBJ(name,typ), BITS(0,0,1,0,mgc,1,0,0,0,0,dir,0,metal), 0, \
1141. 		WAND_CLASS, prob, 0, 7, cost, 0, 0, 0, 0, 30, color )
1142. WAND("light",          "glass",    50, 100, 1, NODIR,     GLASS,    HI_GLASS),
1143. WAND("nothing",        "oak",      20, 100, 0, IMMEDIATE, WOOD,     HI_WOOD),
1144. WAND("enlightenment",  "crystal",  30, 150, 1, NODIR,     GLASS,    HI_GLASS),
1145. WAND("healing",        "bamboo",   60, 150, 1, IMMEDIATE, WOOD,     CLR_YELLOW),
1146. WAND("locking",        "aluminum", 25, 150, 1, IMMEDIATE, METAL,    HI_METAL),
1147. WAND("make invisible", "marble",   45, 150, 1, IMMEDIATE, MINERAL,  HI_MINERAL),
1148. WAND("opening",        "zinc",     25, 150, 1, IMMEDIATE, METAL,    HI_METAL),
1149. WAND("probing",        "uranium",  30, 150, 1, IMMEDIATE, METAL,    HI_METAL),
1150. WAND("secret door detection", "balsa",
1151.                                    30, 150, 1, NODIR,     WOOD,     HI_WOOD),
1152. WAND("slow monster",   "tin",      45, 150, 1, IMMEDIATE, METAL,    HI_METAL),
1153. WAND("speed monster",  "brass",    45, 150, 1, IMMEDIATE, COPPER,   HI_COPPER),
1154. WAND("striking",       "ebony",    65, 150, 1, IMMEDIATE, WOOD,     HI_WOOD),
1155. WAND("undead turning", "copper",   45, 150, 1, IMMEDIATE, COPPER,   HI_COPPER),
1156. WAND("draining",       "ceramic",  15, 175, 1, IMMEDIATE, MINERAL,  HI_MINERAL),
1157. 		/* KMH -- 15/1000 probability from light */
1158. WAND("cancellation",   "platinum", 45, 200, 1, IMMEDIATE, PLATINUM, CLR_WHITE),
1159. WAND("create monster", "maple",    35, 200, 1, NODIR,     WOOD,     HI_WOOD),
1160. WAND("fear",           "rusty",    25, 200, 1, IMMEDIATE, IRON,     CLR_RED),
1161. WAND("polymorph",      "silver",   45, 200, 1, IMMEDIATE, SILVER,   HI_SILVER),
1162. WAND("teleportation",  "iridium",  45, 200, 1, IMMEDIATE, METAL,    CLR_BRIGHT_CYAN),
1163. WAND("create horde",   "black",     5, 300, 1, NODIR,     PLASTIC,  CLR_BLACK),
1164. WAND("extra healing",  "bronze",   30, 300, 1, IMMEDIATE, COPPER,   CLR_YELLOW),
1165. WAND("wishing",        "pine",      5, 500, 1, NODIR,     WOOD,     HI_WOOD),
1166. /* Ray wands have to come last, and in this order. */
1167. /* This is extremely kludgy, but that's what zap.c expects. */
1168. WAND("digging",        "iron",     50, 150, 1, RAY,       IRON,     HI_METAL),
1169. WAND("magic missile",  "steel",    50, 150, 1, RAY,       IRON,     HI_METAL),
1170. WAND("fire",           "hexagonal",25, 175, 1, RAY,       IRON,     HI_METAL),
1171. WAND("cold",           "short",    30, 175, 1, RAY,       IRON,     HI_METAL),
1172. WAND("sleep",          "runed",    50, 175, 1, RAY,       IRON,     HI_METAL),
1173. WAND("death",          "long",      5, 500, 1, RAY,       IRON,     HI_METAL),
1174. WAND("lightning",      "curved",   20, 175, 1, RAY,       IRON,     HI_METAL),
1175. WAND("fireball",       "octagonal", 5, 300, 1, RAY,       IRON,     HI_METAL),
1176. WAND((char *)0,        "forked",    0, 150, 1, 0,         WOOD,     HI_WOOD),
1177. WAND((char *)0,        "spiked",    0, 150, 1, 0,         IRON,     HI_METAL),
1178. WAND((char *)0,        "jeweled",   0, 150, 1, 0,         IRON,     HI_MINERAL),
1179. #undef WAND
1180. 
1181. /* coins ... - so far, gold is all there is */
1182. #define COIN(name,prob,metal,worth) OBJECT( \
1183. 		OBJ(name,(char *)0), BITS(0,1,0,0,0,0,0,0,0,0,0,P_NONE,metal), 0, \
1184. 		COIN_CLASS, prob, 0, 1, worth, 0, 0, 0, 0, 0, HI_GOLD )
1185. 	COIN("gold piece",      1000, GOLD,1),
1186. #undef COIN
1187. 
1188. /* gems ... - includes stones and rocks but not boulders */
1189. #define GEM(name,desc,prob,wt,gval,nutr,mohs,glass,color) OBJECT( \
1190. 	    OBJ(name,desc), \
1191. 	    BITS(0,1,0,0,0,0,0,0,0,HARDGEM(mohs),0,-P_SLING,glass), 0, \
1192. 	    GEM_CLASS, prob, 0, 1, gval, 3, 3, 0, 0, nutr, color )
1193. #define ROCK(name,desc,kn,prob,wt,gval,sdam,ldam,mgc,nutr,mohs,glass,color) OBJECT( \
1194. 	    OBJ(name,desc), \
1195. 	    BITS(kn,1,0,0,mgc,0,0,0,0,HARDGEM(mohs),0,-P_SLING,glass), 0, \
1196. 	    GEM_CLASS, prob, 0, wt, gval, sdam, ldam, 0, 0, nutr, color )
1197. GEM("dilithium crystal", "white",      2,  1, 4500, 15,  5, GEMSTONE, CLR_WHITE),
1198. GEM("diamond", "white",                3,  1, 4000, 15, 10, GEMSTONE, CLR_WHITE),
1199. GEM("ruby", "red",                     4,  1, 3500, 15,  9, GEMSTONE, CLR_RED),
1200. GEM("jacinth", "orange",               3,  1, 3250, 15,  9, GEMSTONE, CLR_ORANGE),
1201. GEM("sapphire", "blue",                4,  1, 3000, 15,  9, GEMSTONE, CLR_BLUE),
1202. GEM("black opal", "black",             3,  1, 2500, 15,  8, GEMSTONE, CLR_BLACK),
1203. GEM("emerald", "green",                5,  1, 2500, 15,  8, GEMSTONE, CLR_GREEN),
1204. GEM("turquoise", "green",              6,  1, 2000, 15,  6, GEMSTONE, CLR_GREEN),
1205. GEM("citrine", "yellow",               4,  1, 1500, 15,  6, GEMSTONE, CLR_YELLOW),
1206. GEM("aquamarine", "green",             6,  1, 1500, 15,  8, GEMSTONE, CLR_GREEN),
1207. GEM("amber", "yellowish brown",        8,  1, 1000, 15,  2, GEMSTONE, CLR_BROWN),
1208. GEM("topaz", "yellowish brown",       10,  1,  900, 15,  8, GEMSTONE, CLR_BROWN),
1209. GEM("jet", "black",                    6,  1,  850, 15,  7, GEMSTONE, CLR_BLACK),
1210. GEM("opal", "white",                  12,  1,  800, 15,  6, GEMSTONE, CLR_WHITE),
1211. GEM("chrysoberyl", "yellow",           8,  1,  700, 15,  5, GEMSTONE, CLR_YELLOW),
1212. GEM("garnet", "red",                  12,  1,  700, 15,  7, GEMSTONE, CLR_RED),
1213. GEM("amethyst", "violet",             14,  1,  600, 15,  7, GEMSTONE, CLR_MAGENTA),
1214. GEM("jasper", "red",                  15,  1,  500, 15,  7, GEMSTONE, CLR_RED),
1215. GEM("fluorite", "violet",             15,  1,  400, 15,  4, GEMSTONE, CLR_MAGENTA),
1216. GEM("obsidian", "black",               9,  1,  200, 15,  6, GEMSTONE, CLR_BLACK),
1217. GEM("agate", "orange",                12,  1,  200, 15,  6, GEMSTONE, CLR_ORANGE),
1218. GEM("jade", "green",                  10,  1,  300, 15,  6, GEMSTONE, CLR_GREEN),
1219. GEM("worthless piece of white glass", "white",   76, 1, 0, 6, 5, GLASS, CLR_WHITE),
1220. GEM("worthless piece of blue glass", "blue",     76, 1, 0, 6, 5, GLASS, CLR_BLUE),
1221. GEM("worthless piece of red glass", "red",       76, 1, 0, 6, 5, GLASS, CLR_RED),
1222. GEM("worthless piece of yellowish brown glass", "yellowish brown",
1223. 												 76, 1, 0, 6, 5, GLASS, CLR_BROWN),
1224. GEM("worthless piece of orange glass", "orange", 76, 1, 0, 6, 5, GLASS, CLR_ORANGE),
1225. GEM("worthless piece of yellow glass", "yellow", 76, 1, 0, 6, 5, GLASS, CLR_YELLOW),
1226. GEM("worthless piece of black glass",  "black",  76, 1, 0, 6, 5, GLASS, CLR_BLACK),
1227. GEM("worthless piece of green glass", "green",   76, 1, 0, 6, 5, GLASS, CLR_GREEN),
1228. GEM("worthless piece of violet glass", "violet", 76, 1, 0, 6, 5, GLASS, CLR_MAGENTA),
1229. 
1230. /* Placement note: there is a wishable subrange for   
1231.  * "gray stones" in the o_ranges[] array in objnam.c  
1232.  * that is currently everything between luckstones and flint (inclusive).
1233.  */
1234. ROCK("luckstone", "gray",	0, 10,  10, 60, 3, 3, 1, 10, 7, MINERAL, CLR_GRAY),
1235. ROCK("healthstone", "gray",	0,  8,  10, 60, 3, 3, 1, 10, 7, MINERAL, CLR_GRAY),
1236. ROCK("loadstone", "gray",	0, 10, 500,  1, 3, 3, 1, 10, 6, MINERAL, CLR_GRAY),
1237. ROCK("touchstone", "gray",	0,  4,  10, 45, 3, 3, 1, 10, 6, MINERAL, CLR_GRAY),
1238. ROCK("whetstone", "gray",	0,  3,  10, 45, 3, 3, 1, 10, 7, MINERAL, CLR_GRAY),
1239. ROCK("flint", "gray",		0, 10,  10,  1, 6, 6, 0, 10, 7, MINERAL, CLR_GRAY),
1240. ROCK("rock", (char *)0,		1,100,  10,  0, 3, 3, 0, 10, 7, MINERAL, CLR_GRAY),
1241. #undef GEM
1242. #undef ROCK
1243. 
1244. /* miscellaneous ... */
1245. /* Note: boulders and rocks are not normally created at random; the
1246.  * probabilities only come into effect when you try to polymorph them.
1247.  * Boulders weigh more than MAX_CARR_CAP; statues use corpsenm to take
1248.  * on a specific type and may act as containers (both affect weight).
1249.  */
1250. OBJECT(OBJ("boulder",(char *)0), BITS(1,0,0,0,0,0,0,0,1,0,0,P_NONE,MINERAL), 0,
1251. 		ROCK_CLASS,   100, 0, 6000,  0, 20, 20, 0, 0, 2000, HI_MINERAL),
1252. OBJECT(OBJ("statue", (char *)0), BITS(1,0,0,1,0,0,0,0,0,0,0,P_NONE,MINERAL), 0,
1253. 		ROCK_CLASS,   900, 0, 2500,  0, 20, 20, 0, 0, 2500, CLR_WHITE),
1254. 
1255. OBJECT(OBJ("heavy iron ball", (char *)0), BITS(1,0,0,0,0,0,0,0,0,0,WHACK,P_NONE,IRON), 0,
1256. 		BALL_CLASS,  1000, 0,  480, 10, 25, 25, 0, 0,  200, HI_METAL),
1257. 						/* +d4 when "very heavy" */
1258. OBJECT(OBJ("iron chain", (char *)0), BITS(1,0,0,0,0,0,0,0,0,0,WHACK,P_NONE,IRON), 0,
1259. 		CHAIN_CLASS, 1000, 0,  120,  0,  4,  4, 0, 0,  200, HI_METAL),
1260. 						/* +1 both l & s */
1261. 
1262. OBJECT(OBJ("blinding venom", "splash of venom"),
1263. 		BITS(0,1,0,0,0,0,0,1,0,0,0,P_NONE,LIQUID), 0,
1264. 		VENOM_CLASS,  500, 0,	 1,  0,  0,  0, 0, 0,	 0, HI_ORGANIC),
1265. OBJECT(OBJ("acid venom", "splash of venom"),
1266. 		BITS(0,1,0,0,0,0,0,1,0,0,0,P_NONE,LIQUID), 0,
1267. 		VENOM_CLASS,  500, 0,	 1,  0,  6,  6, 0, 0,	 0, HI_ORGANIC),
1268. 		/* +d6 small or large */
1269. 
1270. /* fencepost, the deadly Array Terminator -- name [1st arg] *must* be NULL */
1271. 	OBJECT(OBJ((char *)0,(char *)0), BITS(0,0,0,0,0,0,0,0,0,0,0,P_NONE,0), 0,
1272. 		ILLOBJ_CLASS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
1273. }; /* objects[] */
1274. 
1275. #ifndef OBJECTS_PASS_2_
1276. 
1277. /* perform recursive compilation for second structure */
1278. #  undef OBJ
1279. #  undef OBJECT
1280. #  define OBJECTS_PASS_2_
1281. #include "objects.c"
1282. 
1283. void NDECL(objects_init);
1284. 
1285. /* dummy routine used to force linkage */
1286. void
1287. objects_init()
1288. {
1289.     return;
1290. }
1291. 
1292. #endif	/* !OBJECTS_PASS_2_ */
1293. 
1294. /*objects.c*/