Source:SLASH'EM 0.0.7E7F2/objects.c

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 [[SLASH'EM 0.0.7E7F2/objects.c#line123 ]], for example.

The latest source code for vanilla NetHack is at Source code.

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*/