1 | /* SCCS Id: @(#)objects.c 3.3 2000/02/18 */
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 |
14 | #else /* !OBJECTS_PASS_2_ */
15 | /* second pass */
16 | # ifdef TEXTCOLOR
17 | #include "color.h"
18 | # define COLOR_FIELD(X) X,
19 | # else
20 | # define COLOR_FIELD(X) /*empty*/
21 | # endif
22 | #endif /* !OBJECTS_PASS_2_ */
23 |
24 |
25 | /* objects have symbols: ) [ = " ( % ! ? + / $ * ` 0 _ . */
26 |
27 | /*
28 | * Note: OBJ() and BITS() macros are used to avoid exceeding argument
29 | * limits imposed by some compilers. The ctnr field of BITS currently
30 | * does not map into struct objclass, and is ignored in the expansion.
31 | * The 0 in the expansion corresponds to oc_pre_discovered, which is
32 | * set at run-time during role-specific character initialization.
33 | */
34 |
35 | #ifndef OBJECTS_PASS_2_
36 | /* first pass -- object descriptive text */
37 | # define OBJ(name,desc) name,desc
38 | # define OBJECT(obj,bits,prp,sym,prob,dly,wt,cost,sdam,ldam,oc1,oc2,nut,color) \
39 | {obj}
40 |
41 | NEARDATA struct objdescr obj_descr[] = {
42 | #else
43 | /* second pass -- object definitions */
44 |
45 | # define BITS(nmkn,mrg,uskn,ctnr,mgc,chrg,uniq,nwsh,big,tuf,dir,sub,mtrl) \
46 | nmkn,mrg,uskn,0,mgc,chrg,uniq,nwsh,big,tuf,dir,mtrl,sub /* SCO ODT 1.1 cpp fodder */
47 | # define OBJECT(obj,bits,prp,sym,prob,dly,wt,cost,sdam,ldam,oc1,oc2,nut,color) \
48 | {0, 0, (char *)0, bits, prp, sym, dly, COLOR_FIELD(color) \
49 | prob, wt, cost, sdam, ldam, oc1, oc2, nut}
50 | # ifndef lint
51 | # define HARDGEM(n) (n >= 8)
52 | # else
53 | # define HARDGEM(n) (0)
54 | # endif
55 |
56 | NEARDATA struct objclass objects[] = {
57 | #endif
58 | /* dummy object[0] -- description [2nd arg] *must* be NULL */
59 | OBJECT(OBJ("strange object",(char *)0), BITS(1,0,0,0,0,0,0,0,0,0,0,P_NONE,0),
60 | 0, ILLOBJ_CLASS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
61 |
62 | /* weapons ... */
63 | #define WEAPON(name,app,kn,mg,bi,prob,wt,cost,sdam,ldam,hitbon,typ,sub,metal,color) \
64 | OBJECT( \
65 | OBJ(name,app), BITS(kn,mg,1,0,0,1,0,0,bi,0,typ,sub,metal), 0, \
66 | WEAPON_CLASS, prob, 0, \
67 | wt, cost, sdam, ldam, hitbon, 0, wt, color )
68 | #define PROJECTILE(name,app,kn,prob,wt,cost,sdam,ldam,hitbon,metal,sub,color) \
69 | OBJECT( \
70 | OBJ(name,app), \
71 | BITS(kn,1,1,0,0,1,0,0,0,0,PIERCE,sub,metal), 0, \
72 | WEAPON_CLASS, prob, 0, \
73 | wt, cost, sdam, ldam, hitbon, 0, wt, color )
74 | #define BOW(name,app,kn,prob,wt,cost,hitbon,metal,sub,color) \
75 | OBJECT( \
76 | OBJ(name,app), BITS(kn,0,1,0,0,1,0,0,0,0,0,sub,metal), 0, \
77 | WEAPON_CLASS, prob, 0, \
78 | wt, cost, 2, 2, hitbon, 0, wt, color )
79 |
80 | /* Note: for weapons that don't do an even die of damage (ex. 2-7 or 3-18)
81 | * the extra damage is added on in weapon.c, not here! */
82 |
83 | #define P PIERCE
84 | #define S SLASH
85 | #define B WHACK
86 |
87 | /* missiles */
88 | PROJECTILE("arrow", (char *)0,
89 | 1, 55, 1, 2, 6, 6, 0, IRON, -P_BOW, HI_METAL),
90 | PROJECTILE("elven arrow", "runed arrow",
91 | 0, 20, 1, 2, 7, 6, 0, WOOD, -P_BOW, HI_WOOD),
92 | PROJECTILE("orcish arrow", "crude arrow",
93 | 0, 20, 1, 2, 5, 6, 0, IRON, -P_BOW, CLR_BLACK),
94 | PROJECTILE("silver arrow", (char *)0,
95 | 1, 12, 1, 5, 6, 6, 0, SILVER, -P_BOW, HI_SILVER),
96 | PROJECTILE("ya", "bamboo arrow",
97 | 0, 15, 1, 4, 7, 7, 1, METAL, -P_BOW, HI_METAL),
98 | PROJECTILE("crossbow bolt", (char *)0,
99 | 1, 55, 1, 2, 4, 6, 0, IRON, -P_CROSSBOW, HI_METAL),
100 |
101 | WEAPON("dart", (char *)0,
102 | 1, 1, 0, 60, 1, 2, 3, 2, 0, P, -P_DART, IRON, HI_METAL),
103 | WEAPON("shuriken", "throwing star",
104 | 0, 1, 0, 35, 1, 5, 8, 6, 2, P, -P_SHURIKEN, IRON, HI_METAL),
105 | WEAPON("boomerang", (char *)0,
106 | 1, 1, 0, 15, 5, 20, 9, 9, 0, 0, -P_BOOMERANG, WOOD, HI_WOOD),
107 |
108 | /* spears */
109 | WEAPON("spear", (char *)0,
110 | 1, 1, 0, 50, 30, 3, 6, 8, 0, P, P_SPEAR, IRON, HI_METAL),
111 | WEAPON("elven spear", "runed spear",
112 | 0, 1, 0, 10, 30, 3, 7, 8, 0, P, P_SPEAR, WOOD, HI_WOOD),
113 | WEAPON("orcish spear", "crude spear",
114 | 0, 1, 0, 13, 30, 3, 5, 8, 0, P, P_SPEAR, IRON, CLR_BLACK),
115 | WEAPON("dwarvish spear", "stout spear",
116 | 0, 1, 0, 12, 35, 3, 8, 8, 0, P, P_SPEAR, IRON, HI_METAL),
117 | WEAPON("silver spear", (char *)0,
118 | 1, 1, 0, 2, 36, 40, 6, 8, 0, P, P_SPEAR, SILVER, HI_SILVER),
119 | WEAPON("javelin", "throwing spear",
120 | 0, 1, 0, 10, 20, 3, 6, 6, 0, P, P_JAVELIN, IRON, HI_METAL),
121 |
122 | WEAPON("trident", (char *)0,
123 | 1, 0, 0, 8, 25, 5, 6, 4, 0, P, P_TRIDENT, IRON, HI_METAL),
124 | /* +1 small, +2d4 large */
125 |
126 | /* blades */
127 | WEAPON("dagger", (char *)0,
128 | 1, 1, 0, 30, 10, 4, 4, 3, 2, P, P_DAGGER, IRON, HI_METAL),
129 | WEAPON("elven dagger", "runed dagger",
130 | 0, 1, 0, 10, 10, 4, 5, 3, 2, P, P_DAGGER, WOOD, HI_WOOD),
131 | WEAPON("orcish dagger", "crude dagger",
132 | 0, 1, 0, 12, 10, 4, 3, 3, 2, P, P_DAGGER, IRON, CLR_BLACK),
133 | WEAPON("silver dagger", (char *)0,
134 | 1, 1, 0, 3, 12, 40, 4, 3, 2, P, P_DAGGER, SILVER, HI_SILVER),
135 | WEAPON("athame", (char *)0,
136 | 1, 1, 0, 0, 10, 4, 4, 3, 2, S, P_DAGGER, IRON, HI_METAL),
137 | WEAPON("scalpel", (char *)0,
138 | 1, 1, 0, 0, 5, 4, 3, 3, 2, S, P_KNIFE, IRON, HI_METAL),
139 | WEAPON("knife", (char *)0,
140 | 1, 1, 0, 20, 5, 4, 3, 2, 0, P|S, P_KNIFE, IRON, HI_METAL),
141 | WEAPON("stiletto", (char *)0,
142 | 1, 1, 0, 5, 5, 4, 3, 2, 0, P|S, P_KNIFE, IRON, HI_METAL),
143 | WEAPON("worm tooth", (char *)0,
144 | 1, 0, 0, 0, 20, 2, 2, 2, 0, 0, P_KNIFE, 0, CLR_WHITE),
145 | WEAPON("crysknife", (char *)0,
146 | 1, 0, 0, 0, 20,100, 10, 10, 3, P, P_KNIFE, MINERAL, CLR_WHITE),
147 |
148 | WEAPON("axe", (char *)0,
149 | 1, 0, 0, 40, 60, 8, 6, 4, 0, S, P_AXE, IRON, HI_METAL),
150 | WEAPON("battle-axe", "double-headed axe",
151 | 0, 0, 1, 10,120, 40, 8, 6, 0, S, P_AXE, IRON, HI_METAL),
152 | /* "double-bitted" ? */
153 |
154 | /* swords */
155 | WEAPON("short sword", (char *)0,
156 | 1, 0, 0, 8, 30, 10, 6, 8, 0, P, P_SHORT_SWORD, IRON, HI_METAL),
157 | WEAPON("elven short sword", "runed short sword",
158 | 0, 0, 0, 2, 30, 10, 8, 8, 0, P, P_SHORT_SWORD, WOOD, HI_WOOD),
159 | WEAPON("orcish short sword", "crude short sword",
160 | 0, 0, 0, 3, 30, 10, 5, 8, 0, P, P_SHORT_SWORD, IRON, CLR_BLACK),
161 | WEAPON("dwarvish short sword", "broad short sword",
162 | 0, 0, 0, 2, 30, 10, 7, 8, 0, P, P_SHORT_SWORD, IRON, HI_METAL),
163 | WEAPON("scimitar", "curved sword",
164 | 0, 0, 0, 15, 40, 15, 8, 8, 0, S, P_SCIMITAR, IRON, HI_METAL),
165 | WEAPON("silver saber", (char *)0,
166 | 1, 0, 0, 6, 40, 75, 8, 8, 0, S, P_SABER, SILVER, HI_SILVER),
167 | WEAPON("broadsword", (char *)0,
168 | 1, 0, 0, 8, 70, 10, 4, 6, 0, S, P_BROAD_SWORD, IRON, HI_METAL),
169 | /* +d4 small, +1 large */
170 | WEAPON("elven broadsword", "runed broadsword",
171 | 0, 0, 0, 4, 70, 10, 6, 6, 0, S, P_BROAD_SWORD, WOOD, HI_WOOD),
172 | /* +d4 small, +1 large */
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("two-handed sword", (char *)0,
176 | 1, 0, 1, 22,150, 50, 12, 6, 0, S, P_TWO_HANDED_SWORD, IRON, HI_METAL),
177 | /* +2d6 large */
178 | WEAPON("katana", "samurai sword",
179 | 0, 0, 0, 4, 40, 80, 10, 12, 1, S, P_LONG_SWORD, IRON, HI_METAL),
180 | /* special swords set up for artifacts */
181 | WEAPON("tsurugi", "long samurai sword",
182 | 0, 0, 1, 0, 60,500, 16, 8, 2, S, P_TWO_HANDED_SWORD, METAL, HI_METAL),
183 | /* +2d6 large */
184 | WEAPON("runesword", "runed broadsword",
185 | 0, 0, 0, 0, 40,300, 4, 6, 0, S, P_BROAD_SWORD, IRON, CLR_BLACK),
186 | /* +d4 small, +1 large */
187 | /* +5d2 +d8 from level drain */
188 |
189 | /* polearms */
190 | /* spear-type */
191 | WEAPON("partisan", "vulgar polearm",
192 | 0, 0, 1, 5, 80, 10, 6, 6, 0, P, P_POLEARMS, IRON, HI_METAL),
193 | /* +1 large */
194 | WEAPON("ranseur", "hilted polearm",
195 | 0, 0, 1, 5, 50, 6, 4, 4, 0, P, P_POLEARMS, IRON, HI_METAL),
196 | /* +d4 both */
197 | WEAPON("spetum", "forked polearm",
198 | 0, 0, 1, 5, 50, 5, 6, 6, 0, P, P_POLEARMS, IRON, HI_METAL),
199 | /* +1 small, +d6 large */
200 | WEAPON("glaive", "single-edged polearm",
201 | 0, 0, 1, 8, 75, 6, 6, 10, 0, S, P_POLEARMS, IRON, HI_METAL),
202 | WEAPON("lance", (char *)0,
203 | 1, 0, 0, 4,180, 10, 6, 8, 0, P, P_LANCE, IRON, HI_METAL),
204 | /* axe-type */
205 | WEAPON("halberd", "angled poleaxe",
206 | 0, 0, 1, 8,150, 10, 10, 6, 0, P|S, P_POLEARMS, IRON, HI_METAL),
207 | /* +1d6 large */
208 | WEAPON("bardiche", "long poleaxe",
209 | 0, 0, 1, 4,120, 7, 4, 4, 0, S, P_POLEARMS, IRON, HI_METAL),
210 | /* +1d4 small, +2d4 large */
211 | WEAPON("voulge", "pole cleaver",
212 | 0, 0, 1, 4,125, 5, 4, 4, 0, S, P_POLEARMS, IRON, HI_METAL),
213 | /* +d4 both */
214 | WEAPON("dwarvish mattock", "broad pick",
215 | 0, 0, 1, 13,120, 50, 12, 8,-1, B, P_PICK_AXE, IRON, HI_METAL),
216 |
217 | /* curved/hooked */
218 | WEAPON("fauchard", "pole sickle",
219 | 0, 0, 1, 6, 60, 5, 6, 8, 0, P|S, P_POLEARMS, IRON, HI_METAL),
220 | WEAPON("guisarme", "pruning hook",
221 | 0, 0, 1, 6, 80, 5, 4, 8, 0, S, P_POLEARMS, IRON, HI_METAL),
222 | /* +1d4 small */
223 | WEAPON("bill-guisarme", "hooked polearm",
224 | 0, 0, 1, 4,120, 7, 4, 10, 0, P|S, P_POLEARMS, IRON, HI_METAL),
225 | /* +1d4 small */
226 | /* other */
227 | WEAPON("lucern hammer", "pronged polearm",
228 | 0, 0, 1, 5,150, 7, 4, 6, 0, B|P, P_POLEARMS, IRON, HI_METAL),
229 | /* +1d4 small */
230 | WEAPON("bec de corbin", "beaked polearm",
231 | 0, 0, 1, 4,100, 8, 8, 6, 0, B|P, P_POLEARMS, IRON, HI_METAL),
232 |
233 | /* bludgeons */
234 | WEAPON("mace", (char *)0,
235 | 1, 0, 0, 40, 30, 5, 6, 6, 0, B, P_MACE, IRON, HI_METAL),
236 | /* +1 small */
237 | WEAPON("morning star", (char *)0,
238 | 1, 0, 0, 12,120, 10, 4, 6, 0, B, P_MORNING_STAR, IRON, HI_METAL),
239 | /* +d4 small, +1 large */
240 | WEAPON("war hammer", (char *)0,
241 | 1, 0, 0, 15, 50, 5, 4, 4, 0, B, P_HAMMER, IRON, HI_METAL),
242 | /* +1 small */
243 | WEAPON("club", (char *)0,
244 | 1, 0, 0, 12, 30, 3, 6, 3, 0, B, P_CLUB, WOOD, HI_WOOD),
245 | #ifdef KOPS
246 | WEAPON("rubber hose", (char *)0,
247 | 1, 0, 0, 0, 20, 3, 4, 3, 0, B, P_WHIP, PLASTIC, CLR_BROWN),
248 | #endif
249 | WEAPON("quarterstaff", "staff",
250 | 0, 0, 1, 11, 40, 5, 6, 6, 0, B, P_QUARTERSTAFF, WOOD, HI_WOOD),
251 | /* two-piece */
252 | WEAPON("aklys", "thonged club",
253 | 0, 0, 0, 8, 15, 4, 6, 3, 0, B, P_CLUB, IRON, HI_METAL),
254 | WEAPON("flail", (char *)0,
255 | 1, 0, 0, 40, 15, 4, 6, 4, 0, B, P_FLAIL, IRON, HI_METAL),
256 | /* +1 small, +1d4 large */
257 | /* misc */
258 | WEAPON("bullwhip", (char *)0,
259 | 1, 0, 0, 2, 20, 4, 2, 1, 0, 0, P_WHIP, LEATHER, CLR_BROWN),
260 |
261 | /* bows */
262 | BOW("bow", (char *)0, 1, 24, 30, 60, 0, WOOD, P_BOW, HI_WOOD),
263 | BOW("elven bow", "runed bow", 0, 12, 30, 60, 0, WOOD, P_BOW, HI_WOOD),
264 | BOW("orcish bow", "crude bow", 0, 12, 30, 60, 0, WOOD, P_BOW, CLR_BLACK),
265 | BOW("yumi", "long bow", 0, 0, 30, 60, 0, WOOD, P_BOW, HI_WOOD),
266 | BOW("sling", (char *)0, 1, 40, 3, 20, 0, WOOD, P_SLING, HI_WOOD),
267 | BOW("crossbow", (char *)0, 1, 45, 50, 40, 0, WOOD, P_CROSSBOW, HI_WOOD),
268 |
269 | #undef P
270 | #undef S
271 | #undef B
272 |
273 | #undef WEAPON
274 | #undef PROJECTILE
275 | #undef BOW
276 |
277 | /* armor ... */
278 | /* IRON denotes ferrous metals, including steel.
279 | * Only IRON weapons and armor can rust.
280 | * Only COPPER (including brass) corrodes.
281 | * Some creatures are vulnerable to SILVER.
282 | */
283 | #define ARMOR(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,sub,metal,c) \
284 | OBJECT( \
285 | OBJ(name,desc), BITS(kn,0,1,0,mgc,1,0,0,blk,0,0,sub,metal), power, \
286 | ARMOR_CLASS, prob, delay, wt, cost, \
287 | 0, 0, 10 - ac, can, wt, c )
288 | #define HELM(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \
289 | ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_HELM,metal,c)
290 | #define CLOAK(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \
291 | ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_CLOAK,metal,c)
292 | #define SHIELD(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,metal,c) \
293 | ARMOR(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,ARM_SHIELD,metal,c)
294 | #define GLOVES(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \
295 | ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_GLOVES,metal,c)
296 | #define BOOTS(name,desc,kn,mgc,power,prob,delay,wt,cost,ac,can,metal,c) \
297 | ARMOR(name,desc,kn,mgc,0,power,prob,delay,wt,cost,ac,can,ARM_BOOTS,metal,c)
298 |
299 | /* helmets */
300 | HELM("elven leather helm", "leather hat",
301 | 0, 0, 0, 6, 1, 3, 8, 9, 0, LEATHER, HI_LEATHER),
302 | HELM("orcish helm", "iron skull cap",
303 | 0, 0, 0, 6, 1, 30, 10, 9, 0, IRON, CLR_BLACK),
304 | HELM("dwarvish iron helm", "hard hat",
305 | 0, 0, 0, 6, 1, 40, 20, 8, 0, IRON, HI_METAL),
306 | HELM("fedora", (char *)0,
307 | 1, 0, 0, 0, 0, 3, 1,10, 0, CLOTH, CLR_BROWN),
308 | HELM("cornuthaum", "conical hat",
309 | 0, 1, CLAIRVOYANT,
310 | 3, 1, 4, 80,10, 2, CLOTH, CLR_BLUE),
311 | HELM("dunce cap", "conical hat",
312 | 0, 1, 0, 3, 1, 4, 1,10, 0, CLOTH, CLR_BLUE),
313 | HELM("dented pot", (char *)0,
314 | 1, 0, 0, 2, 0, 10, 8, 9, 0, IRON, CLR_BLACK),
315 | /* With shuffled appearances... */
316 | HELM("helmet", "plumed helmet",
317 | 0, 0, 0, 10, 1, 30, 10, 9, 0, IRON, HI_METAL),
318 | HELM("helm of brilliance", "etched helmet",
319 | 0, 1, 0, 6, 1, 50, 50, 9, 0, IRON, CLR_GREEN),
320 | HELM("helm of opposite alignment", "crested helmet",
321 | 0, 1, 0, 6, 1, 50, 50, 9, 0, IRON, HI_METAL),
322 | HELM("helm of telepathy", "visored helmet",
323 | 0, 1, TELEPAT, 2, 1, 50, 50, 9, 0, IRON, HI_METAL),
324 |
325 | /* suits of armor */
326 | /*
327 | * There is code in polyself.c that assumes (1) and (2).
328 | * There is code in objnam.c, mon.c, read.c that assumes (2).
329 | *
330 | * (1) The dragon scale mails and the dragon scales are together.
331 | * (2) That the order of the dragon scale mail and dragon scales is the
332 | * the same defined in monst.c.
333 | */
334 | #define DRGN_ARMR(name,power,cost,ac,color) \
335 | ARMOR(name,(char *)0,1,0,1,power,0,5,40,cost,ac,0,ARM_SUIT,DRAGON_HIDE,color)
336 | DRGN_ARMR("gray dragon scale mail", ANTIMAGIC, 1200, 1, CLR_GRAY),
337 | DRGN_ARMR("silver dragon scale mail", REFLECTING, 1200, 1, SILVER),
338 | #if 0 /* DEFERRED */
339 | DRGN_ARMR("shimmering dragon scale mail", DISPLACED, 1200, 1, CLR_CYAN),
340 | #endif
341 | DRGN_ARMR("red dragon scale mail", FIRE_RES, 900, 1, CLR_RED),
342 | DRGN_ARMR("white dragon scale mail", COLD_RES, 900, 1, CLR_WHITE),
343 | DRGN_ARMR("orange dragon scale mail", SLEEP_RES, 900, 1, CLR_ORANGE),
344 | DRGN_ARMR("black dragon scale mail", DISINT_RES, 1200, 1, CLR_BLACK),
345 | DRGN_ARMR("blue dragon scale mail", SHOCK_RES, 900, 1, CLR_BLUE),
346 | DRGN_ARMR("green dragon scale mail", POISON_RES, 900, 1, CLR_GREEN),
347 | DRGN_ARMR("yellow dragon scale mail", ACID_RES, 900, 1, CLR_YELLOW),
348 |
349 | /* For now, only dragons leave these. */
350 | DRGN_ARMR("gray dragon scales", ANTIMAGIC, 700, 7, CLR_GRAY),
351 | DRGN_ARMR("silver dragon scales", REFLECTING, 700, 7, SILVER),
352 | #if 0 /* DEFERRED */
353 | DRGN_ARMR("shimmering dragon scales", DISPLACED, 700, 7, CLR_CYAN),
354 | #endif
355 | DRGN_ARMR("red dragon scales", FIRE_RES, 500, 7, CLR_RED),
356 | DRGN_ARMR("white dragon scales", COLD_RES, 500, 7, CLR_WHITE),
357 | DRGN_ARMR("orange dragon scales", SLEEP_RES, 500, 7, CLR_ORANGE),
358 | DRGN_ARMR("black dragon scales", DISINT_RES, 700, 7, CLR_BLACK),
359 | DRGN_ARMR("blue dragon scales", SHOCK_RES, 500, 7, CLR_BLUE),
360 | DRGN_ARMR("green dragon scales", POISON_RES, 500, 7, CLR_GREEN),
361 | DRGN_ARMR("yellow dragon scales", ACID_RES, 500, 7, CLR_YELLOW),
362 | #undef DRGN_ARMR
363 |
364 | ARMOR("plate mail", (char *)0,
365 | 1, 0, 1, 0, 44, 5, 450, 600, 3, 2, ARM_SUIT, IRON, HI_METAL),
366 | ARMOR("crystal plate mail", (char *)0,
367 | 1, 0, 1, 0, 10, 5, 450, 820, 3, 2, ARM_SUIT, GLASS, CLR_WHITE),
368 | #ifdef TOURIST
369 | ARMOR("bronze plate mail", (char *)0,
370 | 1, 0, 1, 0, 25, 5, 450, 400, 4, 0, ARM_SUIT, COPPER, HI_COPPER),
371 | #else
372 | ARMOR("bronze plate mail", (char *)0,
373 | 1, 0, 1, 0, 35, 5, 450, 400, 4, 0, ARM_SUIT, COPPER, HI_COPPER),
374 | #endif
375 | ARMOR("splint mail", (char *)0,
376 | 1, 0, 1, 0, 62, 5, 400, 80, 4, 1, ARM_SUIT, IRON, HI_METAL),
377 | ARMOR("banded mail", (char *)0,
378 | 1, 0, 1, 0, 72, 5, 350, 90, 4, 0, ARM_SUIT, IRON, HI_METAL),
379 | ARMOR("dwarvish mithril-coat", (char *)0,
380 | 1, 0, 0, 0, 10, 1, 150, 240, 4, 3, ARM_SUIT, MITHRIL, HI_METAL),
381 | ARMOR("elven mithril-coat", (char *)0,
382 | 1, 0, 0, 0, 15, 1, 150, 240, 5, 3, ARM_SUIT, MITHRIL, HI_METAL),
383 | ARMOR("chain mail", (char *)0,
384 | 1, 0, 0, 0, 72, 5, 300, 75, 5, 1, ARM_SUIT, IRON, HI_METAL),
385 | ARMOR("orcish chain mail", "crude chain mail",
386 | 0, 0, 0, 0, 20, 5, 300, 75, 6, 1, ARM_SUIT, IRON, CLR_BLACK),
387 | ARMOR("scale mail", (char *)0,
388 | 1, 0, 0, 0, 72, 5, 250, 45, 6, 0, ARM_SUIT, IRON, HI_METAL),
389 | ARMOR("studded leather armor", (char *)0,
390 | 1, 0, 0, 0, 72, 3, 200, 15, 7, 1, ARM_SUIT, LEATHER, HI_LEATHER),
391 | ARMOR("ring mail", (char *)0,
392 | 1, 0, 0, 0, 72, 5, 250, 100, 7, 0, ARM_SUIT, IRON, HI_METAL),
393 | ARMOR("orcish ring mail", "crude ring mail",
394 | 0, 0, 0, 0, 20, 5, 250, 80, 8, 1, ARM_SUIT, IRON, CLR_BLACK),
395 | ARMOR("leather armor", (char *)0,
396 | 1, 0, 0, 0, 82, 3, 150, 5, 8, 0, ARM_SUIT, LEATHER, HI_LEATHER),
397 | ARMOR("leather jacket", (char *)0,
398 | 1, 0, 0, 0, 12, 0, 30, 10, 9, 0, ARM_SUIT, LEATHER, CLR_BLACK),
399 |
400 | #ifdef TOURIST
401 | /* shirts */
402 | ARMOR("Hawaiian shirt", (char *)0,
403 | 1, 0, 0, 0, 8, 0, 5, 3, 10, 0, ARM_SHIRT, CLOTH, CLR_MAGENTA),
404 | ARMOR("T-shirt", (char *)0,
405 | 1, 0, 0, 0, 2, 0, 5, 2, 10, 0, ARM_SHIRT, CLOTH, CLR_WHITE),
406 | #endif
407 |
408 | /* cloaks */
409 | /* 'cope' is not a spelling mistake... leave it be */
410 | CLOAK("mummy wrapping", (char *)0,
411 | 1, 0, 0, 0, 0, 3, 2, 10, 1, CLOTH, CLR_GRAY),
412 | CLOAK("elven cloak", "faded pall",
413 | 0, 1, STEALTH, 10, 0, 10, 60, 9, 3, CLOTH, CLR_BLACK),
414 | CLOAK("orcish cloak", "coarse mantelet",
415 | 0, 0, 0, 10, 0, 10, 40, 10, 2, CLOTH, CLR_BLACK),
416 | CLOAK("dwarvish cloak", "hooded cloak",
417 | 0, 0, 0, 10, 0, 10, 50, 10, 2, CLOTH, HI_CLOTH),
418 | CLOAK("oilskin cloak", "slippery cloak",
419 | 0, 0, 0, 10, 0, 10, 50, 9, 3, CLOTH, HI_CLOTH),
420 | CLOAK("robe", (char *)0,
421 | 1, 1, 0, 0, 0, 15, 50, 8, 3, CLOTH, CLR_RED),
422 | CLOAK("alchemy smock", "apron",
423 | 0, 1, POISON_RES, 9, 0, 10, 50, 9, 1, CLOTH, CLR_WHITE),
424 | /* With shuffled appearances... */
425 | CLOAK("cloak of protection", "tattered cape",
426 | 0, 1, PROTECTION,10, 0, 10, 50, 7, 3, CLOTH, HI_CLOTH),
427 | CLOAK("cloak of invisibility", "opera cloak",
428 | 0, 1, INVIS, 11, 0, 10, 60, 9, 2, CLOTH, CLR_BRIGHT_MAGENTA),
429 | CLOAK("cloak of magic resistance", "ornamental cope",
430 | 0, 1, ANTIMAGIC, 2, 0, 10, 60, 9, 3, CLOTH, CLR_WHITE),
431 | CLOAK("cloak of displacement", "piece of cloth",
432 | 0, 1, DISPLACED, 11, 0, 10, 50, 9, 2, CLOTH, HI_CLOTH),
433 |
434 | /* shields */
435 | SHIELD("small shield", (char *)0,
436 | 1, 0, 0, 0, 6, 0, 30, 3, 9, 0, WOOD, HI_WOOD),
437 | SHIELD("elven shield", "blue and green shield",
438 | 0, 0, 0, 0, 2, 0, 50, 7, 8, 0, IRON, CLR_GREEN),
439 | SHIELD("Uruk-hai shield", "white-handed shield",
440 | 0, 0, 0, 0, 2, 0, 50, 7, 9, 0, IRON, HI_METAL),
441 | SHIELD("orcish shield", "red-eyed shield",
442 | 0, 0, 0, 0, 2, 0, 50, 7, 9, 0, IRON, CLR_RED),
443 | SHIELD("large shield", (char *)0,
444 | 1, 0, 1, 0, 7, 0,100, 10, 8, 0, IRON, HI_METAL),
445 | SHIELD("dwarvish roundshield", "large round shield",
446 | 0, 0, 0, 0, 4, 0,100, 10, 8, 0, IRON, HI_METAL),
447 | SHIELD("shield of reflection", "polished silver shield",
448 | 0, 1, 0, REFLECTING, 3, 0, 50, 50, 8, 0, SILVER, HI_SILVER),
449 |
450 | /* gloves */
451 | /* these have their color but not material shuffled, so the IRON must stay
452 | * CLR_BROWN (== HI_LEATHER)
453 | */
454 | GLOVES("leather gloves", "old gloves",
455 | 0, 0, 0, 16, 1, 10, 8, 9, 0, LEATHER, HI_LEATHER),
456 | GLOVES("gauntlets of fumbling", "padded gloves",
457 | 0, 1, FUMBLING, 8, 1, 10, 50, 9, 0, LEATHER, HI_LEATHER),
458 | GLOVES("gauntlets of power", "riding gloves",
459 | 0, 1, 0, 8, 1, 30, 50, 9, 0, IRON, CLR_BROWN),
460 | GLOVES("gauntlets of dexterity", "fencing gloves",
461 | 0, 1, 0, 8, 1, 10, 50, 9, 0, LEATHER, HI_LEATHER),
462 |
463 | /* boots */
464 | BOOTS("low boots", "walking shoes",
465 | 0, 0, 0, 25, 2, 10, 8, 9, 0, LEATHER, HI_LEATHER),
466 | BOOTS("iron shoes", "hard shoes",
467 | 0, 0, 0, 7, 2, 50, 16, 8, 0, IRON, HI_METAL),
468 | BOOTS("high boots", "jackboots",
469 | 0, 0, 0, 15, 2, 20, 12, 8, 0, LEATHER, HI_LEATHER),
470 | /* With shuffled appearances... */
471 | BOOTS("speed boots", "combat boots",
472 | 0, 1, FAST, 12, 2, 20, 50, 9, 0, LEATHER, HI_LEATHER),
473 | BOOTS("water walking boots", "jungle boots",
474 | 0, 1, WWALKING, 12, 2, 20, 50, 9, 0, LEATHER, HI_LEATHER),
475 | BOOTS("jumping boots", "hiking boots",
476 | 0, 1, JUMPING, 12, 2, 20, 50, 9, 0, LEATHER, HI_LEATHER),
477 | BOOTS("elven boots", "mud boots",
478 | 0, 1, STEALTH, 12, 2, 15, 8, 9, 0, LEATHER, HI_LEATHER),
479 | BOOTS("kicking boots", "buckled boots",
480 | 0, 1, 0, 12, 2, 15, 8, 9, 0, IRON, CLR_BROWN),
481 | BOOTS("fumble boots", "riding boots",
482 | 0, 1, FUMBLING, 12, 2, 20, 30, 9, 0, LEATHER, HI_LEATHER),
483 | BOOTS("levitation boots", "snow boots",
484 | 0, 1, LEVITATION,12, 2, 15, 30, 9, 0, LEATHER, HI_LEATHER),
485 | #undef HELM
486 | #undef CLOAK
487 | #undef SHIELD
488 | #undef GLOVES
489 | #undef BOOTS
490 | #undef ARMOR
491 |
492 | /* rings ... */
493 | #define RING(name,power,stone,cost,mgc,spec,mohs,metal,color) OBJECT( \
494 | OBJ(name,stone), \
495 | BITS(0,0,spec,0,mgc,spec,0,0,0,HARDGEM(mohs),0,P_NONE,metal), \
496 | power, RING_CLASS, 0, 0, 3, cost, 0, 0, 0, 0, 15, color )
497 | RING("adornment", ADORNED, "wooden", 100, 1, 1, 2, WOOD, HI_WOOD),
498 | RING("gain strength", 0, "granite", 150, 1, 1, 7, MINERAL, HI_MINERAL),
499 | RING("gain constitution", 0, "opal", 150, 1, 1, 7, MINERAL, HI_MINERAL),
500 | RING("increase accuracy", 0, "clay", 150, 1, 1, 4, MINERAL, CLR_RED),
501 | RING("increase damage", 0, "coral", 150, 1, 1, 4, MINERAL, CLR_ORANGE),
502 | RING("protection", PROTECTION, "black onyx",100, 1, 1, 7, MINERAL, CLR_BLACK),
503 | RING("regeneration", REGENERATION, "moonstone",
504 | 200, 1, 0, 6, MINERAL, HI_MINERAL),
505 | RING("searching", SEARCHING, "tiger eye", 200, 1, 0, 6, GEMSTONE, CLR_BROWN),
506 | RING("stealth", STEALTH, "jade", 100, 1, 0, 6, GEMSTONE, CLR_GREEN),
507 | RING("sustain ability", FIXED_ABIL, "bronze",
508 | 100, 1, 0, 4, COPPER, HI_COPPER),
509 | RING("levitation", LEVITATION, "agate", 200, 1, 0, 7, GEMSTONE, CLR_RED),
510 | RING("hunger", HUNGER, "topaz", 100, 1, 0, 8, GEMSTONE, CLR_CYAN),
511 | RING("aggravate monster", AGGRAVATE_MONSTER, "sapphire",
512 | 150, 1, 0, 9, GEMSTONE, CLR_BLUE),
513 | RING("conflict", CONFLICT, "ruby", 300, 1, 0, 9, GEMSTONE, CLR_RED),
514 | RING("warning", WARNING, "diamond", 100, 1, 0,10, GEMSTONE, CLR_WHITE),
515 | RING("poison resistance", POISON_RES, "pearl",
516 | 150, 1, 0, 4, IRON, CLR_WHITE),
517 | RING("fire resistance", FIRE_RES, "iron", 200, 1, 0, 5, IRON, HI_METAL),
518 | RING("cold resistance", COLD_RES, "brass", 150, 1, 0, 4, COPPER, HI_COPPER),
519 | RING("shock resistance", SHOCK_RES, "copper",
520 | 150, 1, 0, 3, COPPER, HI_COPPER),
521 | RING("free action", FREE_ACTION, "twisted",
522 | 200, 1, 0, 6, IRON, HI_METAL),
523 | RING("slow digestion", SLOW_DIGESTION, "steel",
524 | 200, 1, 0, 8, IRON, HI_METAL),
525 | RING("teleportation", TELEPORT, "silver", 200, 1, 0, 3, SILVER, HI_SILVER),
526 | RING("teleport control", TELEPORT_CONTROL, "gold",
527 | 300, 1, 0, 3, GOLD, HI_GOLD),
528 | RING("polymorph", POLYMORPH, "ivory", 300, 1, 0, 4, BONE, CLR_WHITE),
529 | RING("polymorph control", POLYMORPH_CONTROL, "emerald",
530 | 300, 1, 0, 8, GEMSTONE, CLR_BRIGHT_GREEN),
531 | RING("invisibility", INVIS, "wire", 150, 1, 0, 5, IRON, HI_METAL),
532 | RING("see invisible", SEE_INVIS, "engagement",
533 | 150, 1, 0, 5, IRON, HI_METAL),
534 | RING("protection from shape changers", PROT_FROM_SHAPE_CHANGERS, "shiny",
535 | 100, 1, 0, 5, IRON, CLR_BRIGHT_CYAN),
536 | #undef RING
537 |
538 | /* amulets ... - THE Amulet comes last because it is special */
539 | #define AMULET(name,desc,power,prob) OBJECT( \
540 | OBJ(name,desc), BITS(0,0,0,0,1,0,0,0,0,0,0,P_NONE,IRON), power, \
541 | AMULET_CLASS, prob, 0, 20, 150, 0, 0, 0, 0, 20, HI_METAL )
542 |
543 | AMULET("amulet of ESP", "circular", TELEPAT, 175),
544 | AMULET("amulet of life saving", "spherical", LIFESAVED, 75),
545 | AMULET("amulet of strangulation", "oval", STRANGLED, 135),
546 | AMULET("amulet of restful sleep", "triangular", SLEEPING, 135),
547 | AMULET("amulet versus poison", "pyramidal", POISON_RES, 165),
548 | AMULET("amulet of change", "square", 0, 130),
549 | /* POLYMORPH */
550 | AMULET("amulet of unchanging", "concave", UNCHANGING, 45),
551 | AMULET("amulet of reflection", "hexagonal", REFLECTING, 75),
552 | AMULET("amulet of magical breathing", "octagonal", MAGICAL_BREATHING, 65),
553 | OBJECT(OBJ("cheap plastic imitation of the Amulet of Yendor",
554 | "Amulet of Yendor"), BITS(0,0,1,0,0,0,0,0,0,0,0,0,PLASTIC), 0,
555 | AMULET_CLASS, 0, 0, 20, 0, 0, 0, 0, 0, 1, HI_METAL),
556 | OBJECT(OBJ("Amulet of Yendor", /* note: description == name */
557 | "Amulet of Yendor"), BITS(0,0,1,0,1,0,1,1,0,0,0,0,MITHRIL), 0,
558 | AMULET_CLASS, 0, 0, 20, 3500, 0, 0, 0, 0, 20, HI_METAL),
559 | #undef AMULET
560 |
561 | /* tools ... */
562 | /* tools with weapon characteristics come last */
563 | #define TOOL(name,desc,kn,mrg,mgc,chg,prob,wt,cost,mat,color) \
564 | OBJECT( OBJ(name,desc), \
565 | BITS(kn,mrg,chg,0,mgc,chg,0,0,0,0,0,P_NONE,mat), \
566 | 0, TOOL_CLASS, prob, 0, \
567 | wt, cost, 0, 0, 0, 0, wt, color )
568 | #define CONTAINER(name,desc,kn,mgc,chg,prob,wt,cost,mat,color) \
569 | OBJECT( OBJ(name,desc), \
570 | BITS(kn,0,chg,1,mgc,chg,0,0,0,0,0,P_NONE,mat), \
571 | 0, TOOL_CLASS, prob, 0, \
572 | wt, cost, 0, 0, 0, 0, wt, color )
573 | #define WEPTOOL(name,desc,kn,mgc,bi,prob,wt,cost,sdam,ldam,hitbon,sub,mat,clr) \
574 | OBJECT( OBJ(name,desc), \
575 | BITS(kn,0,1,0,mgc,1,0,0,bi,0,hitbon,sub,mat), \
576 | 0, TOOL_CLASS, prob, 0, \
577 | wt, cost, sdam, ldam, hitbon, 0, wt, clr )
578 | /* containers */
579 | CONTAINER("large box", (char *)0, 1, 0, 0, 40,350, 8, WOOD, HI_WOOD),
580 | CONTAINER("chest", (char *)0, 1, 0, 0, 35,600, 16, WOOD, HI_WOOD),
581 | CONTAINER("ice box", (char *)0, 1, 0, 0, 5,900, 42, PLASTIC, CLR_WHITE),
582 | CONTAINER("sack", "bag", 0, 0, 0, 35, 15, 2, CLOTH, HI_CLOTH),
583 | CONTAINER("oilskin sack", "bag", 0, 0, 0, 5, 15, 100, CLOTH, HI_CLOTH),
584 | CONTAINER("bag of holding", "bag", 0, 1, 0, 20, 15, 100, CLOTH, HI_CLOTH),
585 | CONTAINER("bag of tricks", "bag", 0, 1, 1, 20, 15, 100, CLOTH, HI_CLOTH),
586 | #undef CONTAINER
587 |
588 | /* lock opening tools */
589 | TOOL("skeleton key", "key", 0, 0, 0, 0, 80, 3, 10, IRON, HI_METAL),
590 | #ifdef TOURIST
591 | TOOL("lock pick", (char *)0, 1, 0, 0, 0, 60, 4, 20, IRON, HI_METAL),
592 | TOOL("credit card", (char *)0, 1, 0, 0, 0, 15, 1, 10, PLASTIC, CLR_WHITE),
593 | #else
594 | TOOL("lock pick", (char *)0, 1, 0, 0, 0, 75, 4, 20, IRON, HI_METAL),
595 | #endif
596 | /* light sources */
597 | TOOL("tallow candle", "candle", 0, 1, 0, 0, 20, 2, 10, WAX, CLR_WHITE),
598 | TOOL("wax candle", "candle", 0, 1, 0, 0, 5, 2, 20, WAX, CLR_WHITE),
599 | TOOL("brass lantern", (char *)0,1, 0, 0, 0, 30, 30, 12, COPPER, CLR_YELLOW),
600 | TOOL("oil lamp", "lamp", 0, 0, 0, 0, 45, 20, 10, COPPER, CLR_YELLOW),
601 | TOOL("magic lamp", "lamp", 0, 0, 1, 0, 15, 20, 50, COPPER, CLR_YELLOW),
602 | /* other tools */
603 | #ifdef TOURIST
604 | TOOL("expensive camera", (char *)0,
605 | 1, 0, 0, 1, 15, 12, 200, PLASTIC, CLR_BLACK),
606 | TOOL("mirror", "looking glass", 0, 0, 0, 0, 45, 13, 10, GLASS, HI_SILVER),
607 | #else
608 | TOOL("mirror", "looking glass", 0, 0, 0, 0, 60, 13, 10, GLASS, HI_SILVER),
609 | #endif
610 | TOOL("crystal ball", "glass orb",
611 | 0, 0, 1, 1, 15,150, 60, GLASS, HI_GLASS),
612 | TOOL("lenses", (char *)0, 1, 0, 0, 0, 5, 3, 80, GLASS, HI_GLASS),
613 | TOOL("blindfold", (char *)0, 1, 0, 0, 0, 50, 2, 20, CLOTH, CLR_BLACK),
614 | TOOL("towel", (char *)0, 1, 0, 0, 0, 50, 2, 50, CLOTH, CLR_MAGENTA),
615 | #ifdef STEED
616 | TOOL("saddle", (char *)0, 1, 0, 0, 0, 5,200, 150, LEATHER, HI_LEATHER),
617 | TOOL("leash", (char *)0, 1, 0, 0, 0, 65, 12, 20, LEATHER, HI_LEATHER),
618 | #else
619 | TOOL("leash", (char *)0, 1, 0, 0, 0, 70, 12, 20, LEATHER, HI_LEATHER),
620 | #endif
621 | TOOL("stethoscope", (char *)0, 1, 0, 0, 0, 25, 4, 75, IRON, HI_METAL),
622 | TOOL("tinning kit", (char *)0, 1, 0, 0, 1, 15,100, 30, IRON, HI_METAL),
623 | TOOL("tin opener", (char *)0, 1, 0, 0, 0, 35, 4, 30, IRON, HI_METAL),
624 | TOOL("can of grease", (char *)0,1, 0, 0, 1, 15, 15, 20, IRON, HI_METAL),
625 | TOOL("figurine", (char *)0, 1, 0, 1, 0, 25, 50, 80, MINERAL, HI_MINERAL),
626 | TOOL("magic marker", (char *)0, 1, 0, 1, 1, 15, 2, 50, PLASTIC, CLR_RED),
627 | /* traps */
628 | TOOL("land mine",(char *)0, 1, 0, 0, 0, 0,300, 180, IRON, CLR_RED),
629 | TOOL("beartrap", (char *)0, 1, 0, 0, 0, 0,200, 60, IRON, HI_METAL),
630 | /* instruments */
631 | TOOL("tin whistle", "whistle", 0, 0, 0, 0, 100, 3, 10, METAL, HI_METAL),
632 | TOOL("magic whistle", "whistle",0, 0, 1, 0, 30, 3, 10, METAL, HI_METAL),
633 | /* "If tin whistles are made out of tin, what do they make foghorns out of?" */
634 | TOOL("wooden flute", "flute", 0, 0, 0, 0, 4, 5, 12, WOOD, HI_WOOD),
635 | TOOL("magic flute", "flute", 0, 0, 1, 1, 2, 5, 36, WOOD, HI_WOOD),
636 | TOOL("tooled horn", "horn", 0, 0, 0, 0, 5, 18, 15, BONE, CLR_WHITE),
637 | TOOL("frost horn", "horn", 0, 0, 1, 1, 2, 18, 50, BONE, CLR_WHITE),
638 | TOOL("fire horn", "horn", 0, 0, 1, 1, 2, 18, 50, BONE, CLR_WHITE),
639 | TOOL("horn of plenty", "horn", 0, 0, 1, 1, 2, 18, 50, BONE, CLR_WHITE),
640 | TOOL("wooden harp", "harp", 0, 0, 0, 0, 4, 30, 50, WOOD, HI_WOOD),
641 | TOOL("magic harp", "harp", 0, 0, 1, 1, 2, 30, 50, WOOD, HI_WOOD),
642 | TOOL("bell", (char *)0, 1, 0, 0, 0, 2, 30, 50, COPPER, HI_COPPER),
643 | TOOL("bugle", (char *)0, 1, 0, 0, 0, 4, 10, 15, COPPER, HI_COPPER),
644 | TOOL("leather drum", "drum", 0, 0, 0, 0, 4, 25, 25, LEATHER, HI_LEATHER),
645 | TOOL("drum of earthquake", "drum",
646 | 0, 0, 1, 1, 2, 25, 25, LEATHER, HI_LEATHER),
647 | /* tools useful as weapons */
648 | WEPTOOL("pick-axe", (char *)0,
649 | 1, 0, 0, 20, 100, 50, 6, 3, WHACK, P_PICK_AXE, IRON, HI_METAL),
650 | WEPTOOL("grappling hook", "iron hook",
651 | 0, 0, 0, 5, 30, 50, 2, 6, WHACK, P_FLAIL, IRON, HI_METAL),
652 | WEPTOOL("unicorn horn", (char *)0,
653 | 1, 1, 1, 0, 20, 100, 12, 12, PIERCE, P_UNICORN_HORN, BONE, CLR_WHITE),
654 |
655 | /* two special unique artifact "tools" */
656 | OBJECT(OBJ("Candelabrum of Invocation", "candelabrum"),
657 | BITS(0,0,1,0,1,0,1,1,0,0,0,P_NONE,GOLD), 0,
658 | TOOL_CLASS, 0, 0,10, 3000, 0, 0, 0, 0, 200, HI_GOLD),
659 | OBJECT(OBJ("Bell of Opening", "silver bell"),
660 | BITS(0,0,1,0,1,1,1,1,0,0,0,P_NONE,SILVER), 0,
661 | TOOL_CLASS, 0, 0,10, 1000, 0, 0, 0, 0, 50, HI_SILVER),
662 | #undef TOOL
663 | #undef WEPTOOL
664 |
665 | /* Comestibles ... */
666 | #define FOOD(name,prob,delay,wt,unk,tin,nutrition,color) OBJECT( \
667 | OBJ(name,(char *)0), BITS(1,1,unk,0,0,0,0,0,0,0,0,P_NONE,tin), 0, \
668 | FOOD_CLASS, prob, delay, \
669 | wt, nutrition/20 + 5, 0, 0, 0, 0, nutrition, color )
670 | /* all types of food (except tins & corpses) must have a delay of at least 1. */
671 | /* delay on corpses is computed and is weight dependant */
672 | /* dog eats foods 0-4 but prefers tripe rations above all others */
673 | /* fortune cookies can be read */
674 | /* carrots improve your vision */
675 | /* +0 tins contain monster meat */
676 | /* +1 tins (of spinach) make you stronger (like Popeye) */
677 | /* food CORPSE is a cadaver of some type */
678 | /* meatballs/sticks/rings are only created from objects via stone to flesh */
679 |
680 | /* meat */
681 | FOOD("tripe ration", 140, 2, 10, 0, FLESH, 200, CLR_BROWN),
682 | FOOD("corpse", 0, 1, 0, 0, FLESH, 0, CLR_BROWN),
683 | FOOD("egg", 85, 1, 1, 1, FLESH, 80, CLR_WHITE),
684 | FOOD("meatball", 0, 1, 1, 0, FLESH, 5, CLR_BROWN),
685 | FOOD("meat stick", 0, 1, 1, 0, FLESH, 5, CLR_BROWN),
686 | FOOD("huge chunk of meat", 0,20,400, 0, FLESH,2000, CLR_BROWN),
687 | /* special case because it's not mergable */
688 | OBJECT(OBJ("meat ring", (char *)0),
689 | BITS(1,0,0,0,0,0,0,0,0,0,0,0,FLESH),
690 | 0, FOOD_CLASS, 0, 1, 5, 1, 0, 0, 0, 0, 5, CLR_BROWN),
691 |
692 | /* fruits & veggies */
693 | FOOD("kelp frond", 0, 1, 1, 0, VEGGY, 30, CLR_GREEN),
694 | FOOD("eucalyptus leaf", 3, 1, 1, 0, VEGGY, 30, CLR_GREEN),
695 | FOOD("apple", 15, 1, 2, 0, VEGGY, 50, CLR_RED),
696 | FOOD("orange", 10, 1, 2, 0, VEGGY, 80, CLR_ORANGE),
697 | FOOD("pear", 10, 1, 2, 0, VEGGY, 50, CLR_BRIGHT_GREEN),
698 | FOOD("melon", 10, 1, 5, 0, VEGGY, 100, CLR_BRIGHT_GREEN),
699 | FOOD("banana", 10, 1, 2, 0, VEGGY, 80, CLR_YELLOW),
700 | FOOD("carrot", 15, 1, 2, 0, VEGGY, 50, CLR_ORANGE),
701 | FOOD("sprig of wolfsbane", 7, 1, 1, 0, VEGGY, 40, CLR_GREEN),
702 | FOOD("clove of garlic", 7, 1, 1, 0, VEGGY, 40, CLR_WHITE),
703 | FOOD("slime mold", 75, 1, 5, 0, VEGGY, 250, HI_ORGANIC),
704 |
705 | /* people food */
706 | FOOD("lump of royal jelly", 0, 1, 2, 0, VEGGY, 200, CLR_YELLOW),
707 | FOOD("cream pie", 25, 1, 10, 0, VEGGY, 100, CLR_WHITE),
708 | FOOD("candy bar", 13, 1, 2, 0, VEGGY, 100, CLR_BROWN),
709 | FOOD("fortune cookie", 55, 1, 1, 0, VEGGY, 40, CLR_YELLOW),
710 | FOOD("pancake", 25, 2, 2, 0, VEGGY, 200, CLR_YELLOW),
711 | FOOD("lembas wafer", 20, 2, 5, 0, VEGGY, 800, CLR_WHITE),
712 | FOOD("cram ration", 20, 3, 15, 0, VEGGY, 600, HI_ORGANIC),
713 | FOOD("food ration", 380, 5, 20, 0, VEGGY, 800, HI_ORGANIC),
714 | FOOD("K-ration", 0, 1, 10, 0, VEGGY, 400, HI_ORGANIC),
715 | FOOD("C-ration", 0, 1, 10, 0, VEGGY, 300, HI_ORGANIC),
716 | FOOD("tin", 75, 0, 10, 1, METAL, 0, HI_METAL),
717 | #undef FOOD
718 |
719 | /* potions ... */
720 | #define POTION(name,desc,mgc,power,prob,cost,color) OBJECT( \
721 | OBJ(name,desc), BITS(0,1,0,0,mgc,0,0,0,0,0,0,P_NONE,GLASS), power, \
722 | POTION_CLASS, prob, 0, 20, cost, 0, 0, 0, 0, 10, color )
723 | POTION("gain ability", "ruby", 1, 0, 42, 300, CLR_RED),
724 | POTION("restore ability", "pink", 1, 0, 40, 100, CLR_BRIGHT_MAGENTA),
725 | POTION("confusion", "orange", 1, CONFUSION, 42, 100, CLR_ORANGE),
726 | POTION("blindness", "yellow", 1, BLINDED, 40, 150, CLR_YELLOW),
727 | POTION("paralysis", "emerald", 1, 0, 42, 300, CLR_BRIGHT_GREEN),
728 | POTION("speed", "dark green", 1, FAST, 42, 200, CLR_GREEN),
729 | POTION("levitation", "cyan", 1, LEVITATION, 42, 200, CLR_CYAN),
730 | POTION("hallucination", "sky blue", 1, HALLUC, 40, 100, CLR_CYAN),
731 | POTION("invisibility", "brilliant blue",1, INVIS, 40, 150, CLR_BRIGHT_BLUE),
732 | POTION("see invisible", "magenta", 1, SEE_INVIS, 42, 50, CLR_MAGENTA),
733 | POTION("healing", "purple-red", 1, 0, 57, 100, CLR_MAGENTA),
734 | POTION("extra healing", "puce", 1, 0, 47, 100, CLR_RED),
735 | POTION("gain level", "milky", 1, 0, 20, 300, CLR_WHITE),
736 | POTION("enlightenment", "swirly", 1, 0, 20, 200, CLR_BROWN),
737 | POTION("monster detection", "bubbly", 1, 0, 40, 150, CLR_WHITE),
738 | POTION("object detection", "smoky", 1, 0, 42, 150, CLR_GRAY),
739 | POTION("gain energy", "cloudy", 1, 0, 42, 150, CLR_WHITE),
740 | POTION("sleeping", "effervescent", 1, 0, 42, 100, CLR_GRAY),
741 | POTION("full healing", "black", 1, 0, 10, 200, CLR_BLACK),
742 | POTION("polymorph", "golden", 1, 0, 10, 200, CLR_YELLOW),
743 | POTION("booze", "brown", 0, 0, 42, 50, CLR_BROWN),
744 | POTION("sickness", "fizzy", 0, 0, 42, 50, CLR_CYAN),
745 | POTION("fruit juice", "dark", 0, 0, 42, 50, CLR_BLACK),
746 | POTION("acid", "white", 0, 0, 10, 250, CLR_WHITE),
747 | POTION("oil", "murky", 0, 0, 30, 250, CLR_BROWN),
748 | POTION("water", "clear", 0, 0, 92, 100, CLR_CYAN),
749 | #undef POTION
750 |
751 | /* scrolls ... */
752 | #define SCROLL(name,text,mgc,prob,cost) OBJECT( \
753 | OBJ(name,text), BITS(0,1,0,0,mgc,0,0,0,0,0,0,P_NONE,PAPER), 0, \
754 | SCROLL_CLASS, prob, 0, 5, cost, 0, 0, 0, 0, 6, HI_PAPER )
755 | SCROLL("enchant armor", "ZELGO MER", 1, 63, 80),
756 | SCROLL("destroy armor", "JUYED AWK YACC", 1, 45, 100),
757 | SCROLL("confuse monster", "NR 9", 1, 53, 100),
758 | SCROLL("scare monster", "XIXAXA XOXAXA XUXAXA", 1, 35, 100),
759 | SCROLL("remove curse", "PRATYAVAYAH", 1, 65, 80),
760 | SCROLL("enchant weapon", "DAIYEN FOOELS", 1, 80, 60),
761 | SCROLL("create monster", "LEP GEX VEN ZEA", 1, 45, 200),
762 | SCROLL("taming", "PRIRUTSENIE", 1, 15, 200),
763 | SCROLL("genocide", "ELBIB YLOH", 1, 15, 300),
764 | SCROLL("light", "VERR YED HORRE", 1, 90, 50),
765 | SCROLL("teleportation", "VENZAR BORGAVVE", 1, 55, 100),
766 | SCROLL("gold detection", "THARR", 1, 33, 100),
767 | SCROLL("food detection", "YUM YUM", 1, 25, 100),
768 | SCROLL("identify", "KERNOD WEL", 1, 180, 20),
769 | SCROLL("magic mapping", "ELAM EBOW", 1, 45, 100),
770 | SCROLL("amnesia", "DUAM XNAHT", 1, 35, 200),
771 | SCROLL("fire", "ANDOVA BEGARIN", 1, 30, 100),
772 | SCROLL("earth", "KIRJE", 1, 18, 200),
773 | SCROLL("punishment", "VE FORBRYDERNE", 1, 15, 300),
774 | SCROLL("charging", "HACKEM MUCHE", 1, 15, 300),
775 | SCROLL("stinking cloud", "VELOX NEB", 1, 15, 300),
776 | SCROLL((char *)0, "FOOBIE BLETCH", 1, 0, 100),
777 | SCROLL((char *)0, "TEMOV", 1, 0, 100),
778 | SCROLL((char *)0, "GARVEN DEH", 1, 0, 100),
779 | SCROLL((char *)0, "READ ME", 1, 0, 100),
780 | /* these must come last because they have special descriptions */
781 | #ifdef MAIL
782 | SCROLL("mail", "stamped", 0, 0, 0),
783 | #endif
784 | SCROLL("blank paper", "unlabeled", 0, 28, 60),
785 | #undef SCROLL
786 |
787 | /* spellbooks ... */
788 | #define SPELL(name,desc,sub,prob,delay,level,mgc,dir,color) OBJECT( \
789 | OBJ(name,desc), BITS(0,0,0,0,mgc,0,0,0,0,0,dir,sub,PAPER), 0, \
790 | SPBOOK_CLASS, prob, delay, \
791 | 50, level*100, 0, 0, 0, level, 20, color )
792 | SPELL("dig", "parchment", P_MATTER_SPELL, 20, 6, 5, 1, RAY, HI_PAPER),
793 | SPELL("magic missile", "vellum", P_ATTACK_SPELL, 45, 2, 2, 1, RAY, HI_PAPER),
794 | SPELL("fireball", "ragged", P_ATTACK_SPELL, 20, 4, 4, 1, RAY, HI_PAPER),
795 | SPELL("cone of cold", "dog eared", P_ATTACK_SPELL, 10, 7, 4, 1, RAY, HI_PAPER),
796 | SPELL("sleep", "mottled", P_ENCHANTMENT_SPELL, 50, 1, 1, 1, RAY, HI_PAPER),
797 | SPELL("finger of death", "stained", P_ATTACK_SPELL, 5, 10, 7, 1, RAY, HI_PAPER),
798 | SPELL("light", "cloth", P_DIVINATION_SPELL, 45, 1, 1, 1, NODIR, HI_CLOTH),
799 | SPELL("detect monsters", "leather", P_DIVINATION_SPELL, 43, 1, 1, 1, NODIR, HI_LEATHER),
800 | SPELL("healing", "white", P_HEALING_SPELL, 40, 2, 1, 1, IMMEDIATE, CLR_WHITE),
801 | SPELL("knock", "pink", P_MATTER_SPELL, 35, 1, 1, 1, IMMEDIATE, CLR_BRIGHT_MAGENTA),
802 | SPELL("force bolt", "red", P_ATTACK_SPELL, 35, 2, 1, 1, IMMEDIATE, CLR_RED),
803 | SPELL("confuse monster", "orange", P_ENCHANTMENT_SPELL, 30, 2, 2, 1, IMMEDIATE, CLR_ORANGE),
804 | SPELL("cure blindness", "yellow", P_HEALING_SPELL, 25, 2, 2, 1, IMMEDIATE, CLR_YELLOW),
805 | SPELL("drain life", "velvet", P_ATTACK_SPELL, 10, 2, 2, 1, IMMEDIATE, CLR_MAGENTA),
806 | SPELL("slow monster", "light green", P_ENCHANTMENT_SPELL, 30, 2, 2, 1, IMMEDIATE, CLR_BRIGHT_GREEN),
807 | SPELL("wizard lock", "dark green", P_MATTER_SPELL, 30, 3, 2, 1, IMMEDIATE, CLR_GREEN),
808 | SPELL("create monster", "turquoise", P_CLERIC_SPELL, 35, 3, 2, 1, NODIR, CLR_BRIGHT_CYAN),
809 | SPELL("detect food", "cyan", P_DIVINATION_SPELL, 30, 3, 2, 1, NODIR, CLR_CYAN),
810 | SPELL("cause fear", "light blue", P_ENCHANTMENT_SPELL, 25, 3, 3, 1, NODIR, CLR_BRIGHT_BLUE),
811 | SPELL("clairvoyance", "dark blue", P_DIVINATION_SPELL, 15, 3, 3, 1, NODIR, CLR_BLUE),
812 | SPELL("cure sickness", "indigo", P_HEALING_SPELL, 32, 3, 3, 1, NODIR, CLR_BLUE),
813 | SPELL("charm monster", "magenta", P_ENCHANTMENT_SPELL, 20, 3, 3, 1, IMMEDIATE, CLR_MAGENTA),
814 | SPELL("haste self", "purple", P_ESCAPE_SPELL, 33, 4, 3, 1, NODIR, CLR_MAGENTA),
815 | SPELL("detect unseen", "violet", P_DIVINATION_SPELL, 20, 4, 3, 1, NODIR, CLR_MAGENTA),
816 | SPELL("levitation", "tan", P_ESCAPE_SPELL, 20, 4, 4, 1, NODIR, CLR_BROWN),
817 | SPELL("extra healing", "plaid", P_HEALING_SPELL, 27, 5, 3, 1, IMMEDIATE, CLR_GREEN),
818 | SPELL("restore ability", "light brown", P_HEALING_SPELL, 25, 5, 4, 1, NODIR, CLR_BROWN),
819 | SPELL("invisibility", "dark brown", P_ESCAPE_SPELL, 25, 5, 4, 1, NODIR, CLR_BROWN),
820 | SPELL("detect treasure", "gray", P_DIVINATION_SPELL, 20, 5, 4, 1, NODIR, CLR_GRAY),
821 | SPELL("remove curse", "wrinkled", P_CLERIC_SPELL, 25, 5, 3, 1, NODIR, HI_PAPER),
822 | SPELL("magic mapping", "dusty", P_DIVINATION_SPELL, 18, 7, 5, 1, NODIR, HI_PAPER),
823 | SPELL("identify", "bronze", P_DIVINATION_SPELL, 20, 6, 3, 1, NODIR, HI_COPPER),
824 | SPELL("turn undead", "copper", P_CLERIC_SPELL, 16, 8, 6, 1, IMMEDIATE, HI_COPPER),
825 | SPELL("polymorph", "silver", P_MATTER_SPELL, 10, 8, 6, 1, IMMEDIATE, HI_SILVER),
826 | SPELL("teleport away", "gold", P_ESCAPE_SPELL, 15, 6, 6, 1, IMMEDIATE, HI_GOLD),
827 | SPELL("create familiar", "glittering", P_CLERIC_SPELL, 10, 7, 6, 1, NODIR, CLR_WHITE),
828 | SPELL("cancellation", "shining", P_MATTER_SPELL, 15, 8, 7, 1, IMMEDIATE, CLR_WHITE),
829 | SPELL("protection", "dull", P_CLERIC_SPELL, 18, 3, 1, 1, NODIR, HI_PAPER),
830 | SPELL("jumping", "thin", P_ESCAPE_SPELL, 20, 3, 1, 1, IMMEDIATE, HI_PAPER),
831 | SPELL("stone to flesh", "thick", P_HEALING_SPELL, 15, 1, 3, 1, IMMEDIATE, HI_PAPER),
832 | #if 0 /* DEFERRED */
833 | SPELL("flame sphere", "canvas", P_MATTER_SPELL, 20, 2, 1, 1, NODIR, CLR_BROWN),
834 | SPELL("freeze sphere", "hardcover", P_MATTER_SPELL, 20, 2, 1, 1, NODIR, CLR_BROWN),
835 | #endif
836 | /* blank spellbook must come last because it retains its description */
837 | SPELL("blank paper", "plain", P_NONE, 18, 0, 0, 0, 0, HI_PAPER),
838 | /* a special, one of a kind, spellbook */
839 | OBJECT(OBJ("Book of the Dead", "papyrus"), BITS(0,0,1,0,1,0,1,1,0,0,0,P_NONE,PAPER), 0,
840 | SPBOOK_CLASS, 0, 0,20, 3500, 0, 0, 0, 7, 20, HI_PAPER),
841 | #undef SPELL
842 |
843 | /* wands ... */
844 | #define WAND(name,typ,prob,cost,mgc,dir,metal,color) OBJECT( \
845 | OBJ(name,typ), BITS(0,0,1,0,mgc,1,0,0,0,0,dir,P_NONE,metal), 0, \
846 | WAND_CLASS, prob, 0, 7, cost, 0, 0, 0, 0, 30, color )
847 | WAND("light", "glass", 95, 100, 1, NODIR, GLASS, HI_GLASS),
848 | WAND("secret door detection", "balsa",
849 | 50, 150, 1, NODIR, WOOD, HI_WOOD),
850 | WAND("enlightenment", "crystal", 15, 150, 1, NODIR, GLASS, HI_GLASS),
851 | WAND("create monster", "maple", 45, 200, 1, NODIR, WOOD, HI_WOOD),
852 | WAND("wishing", "pine", 5, 500, 1, NODIR, WOOD, HI_WOOD),
853 | WAND("nothing", "oak", 25, 100, 0, IMMEDIATE, WOOD, HI_WOOD),
854 | WAND("striking", "ebony", 75, 150, 1, IMMEDIATE, WOOD, HI_WOOD),
855 | WAND("make invisible", "marble", 45, 150, 1, IMMEDIATE, MINERAL, HI_MINERAL),
856 | WAND("slow monster", "tin", 50, 150, 1, IMMEDIATE, METAL, HI_METAL),
857 | WAND("speed monster", "brass", 50, 150, 1, IMMEDIATE, COPPER, HI_COPPER),
858 | WAND("undead turning", "copper", 50, 150, 1, IMMEDIATE, COPPER, HI_COPPER),
859 | WAND("polymorph", "silver", 45, 200, 1, IMMEDIATE, SILVER, HI_SILVER),
860 | WAND("cancellation", "platinum", 45, 200, 1, IMMEDIATE, PLATINUM, CLR_WHITE),
861 | WAND("teleportation", "iridium", 45, 200, 1, IMMEDIATE, METAL, CLR_BRIGHT_CYAN),
862 | WAND("opening", "zinc", 25, 150, 1, IMMEDIATE, METAL, HI_METAL),
863 | WAND("locking", "aluminum", 25, 150, 1, IMMEDIATE, METAL, HI_METAL),
864 | WAND("probing", "uranium", 30, 150, 1, IMMEDIATE, METAL, HI_METAL),
865 | WAND("digging", "iron", 55, 150, 1, RAY, IRON, HI_METAL),
866 | WAND("magic missile", "steel", 50, 150, 1, RAY, IRON, HI_METAL),
867 | WAND("fire", "hexagonal",40, 175, 1, RAY, IRON, HI_METAL),
868 | WAND("cold", "short", 40, 175, 1, RAY, IRON, HI_METAL),
869 | WAND("sleep", "runed", 50, 175, 1, RAY, IRON, HI_METAL),
870 | WAND("death", "long", 5, 500, 1, RAY, IRON, HI_METAL),
871 | WAND("lightning", "curved", 40, 175, 1, RAY, IRON, HI_METAL),
872 | WAND((char *)0, "forked", 0, 150, 1, 0, WOOD, HI_WOOD),
873 | WAND((char *)0, "spiked", 0, 150, 1, 0, IRON, HI_METAL),
874 | WAND((char *)0, "jeweled", 0, 150, 1, 0, IRON, HI_MINERAL),
875 | #undef WAND
876 |
877 | /* coins ... - so far, gold is all there is */
878 | #define COIN(name,prob,metal) OBJECT( \
879 | OBJ(name,(char *)0), BITS(0,1,0,0,0,0,0,0,0,0,0,P_NONE,metal), 0, \
880 | GOLD_CLASS, prob, 0, 1, 0, 0, 0, 0, 0, 0, HI_GOLD )
881 | COIN("gold piece", 1000, GOLD),
882 | #undef COIN
883 |
884 | /* gems ... - includes stones and rocks but not boulders */
885 | #define GEM(name,desc,prob,wt,gval,nutr,mohs,glass,color) OBJECT( \
886 | OBJ(name,desc), \
887 | BITS(0,1,0,0,0,0,0,0,0,HARDGEM(mohs),0,-P_SLING,glass), 0, \
888 | GEM_CLASS, prob, 0, 1, gval, 3, 3, 0, 0, nutr, color )
889 | #define ROCK(name,desc,kn,prob,wt,gval,sdam,ldam,mgc,nutr,mohs,glass,color) OBJECT( \
890 | OBJ(name,desc), \
891 | BITS(kn,1,0,0,mgc,0,0,0,0,HARDGEM(mohs),0,-P_SLING,glass), 0, \
892 | GEM_CLASS, prob, 0, wt, gval, sdam, ldam, 0, 0, nutr, color )
893 | GEM("dilithium crystal", "white", 2, 1, 4500, 15, 5, GEMSTONE, CLR_WHITE),
894 | GEM("diamond", "white", 3, 1, 4000, 15, 10, GEMSTONE, CLR_WHITE),
895 | GEM("ruby", "red", 4, 1, 3500, 15, 9, GEMSTONE, CLR_RED),
896 | GEM("jacinth", "orange", 3, 1, 3250, 15, 9, GEMSTONE, CLR_ORANGE),
897 | GEM("sapphire", "blue", 4, 1, 3000, 15, 9, GEMSTONE, CLR_BLUE),
898 | GEM("black opal", "black", 3, 1, 2500, 15, 8, GEMSTONE, CLR_BLACK),
899 | GEM("emerald", "green", 5, 1, 2500, 15, 8, GEMSTONE, CLR_GREEN),
900 | GEM("turquoise", "green", 6, 1, 2000, 15, 6, GEMSTONE, CLR_GREEN),
901 | GEM("citrine", "yellow", 4, 1, 1500, 15, 6, GEMSTONE, CLR_YELLOW),
902 | GEM("aquamarine", "green", 6, 1, 1500, 15, 8, GEMSTONE, CLR_GREEN),
903 | GEM("amber", "yellowish brown", 8, 1, 1000, 15, 2, GEMSTONE, CLR_BROWN),
904 | GEM("topaz", "yellowish brown", 10, 1, 900, 15, 8, GEMSTONE, CLR_BROWN),
905 | GEM("jet", "black", 6, 1, 850, 15, 7, GEMSTONE, CLR_BLACK),
906 | GEM("opal", "white", 12, 1, 800, 15, 6, GEMSTONE, CLR_WHITE),
907 | GEM("chrysoberyl", "yellow", 8, 1, 700, 15, 5, GEMSTONE, CLR_YELLOW),
908 | GEM("garnet", "red", 12, 1, 700, 15, 7, GEMSTONE, CLR_RED),
909 | GEM("amethyst", "violet", 14, 1, 600, 15, 7, GEMSTONE, CLR_MAGENTA),
910 | GEM("jasper", "red", 15, 1, 500, 15, 7, GEMSTONE, CLR_RED),
911 | GEM("fluorite", "violet", 15, 1, 400, 15, 4, GEMSTONE, CLR_MAGENTA),
912 | GEM("obsidian", "black", 9, 1, 200, 15, 6, GEMSTONE, CLR_BLACK),
913 | GEM("agate", "orange", 12, 1, 200, 15, 6, GEMSTONE, CLR_ORANGE),
914 | GEM("jade", "green", 10, 1, 300, 15, 6, GEMSTONE, CLR_GREEN),
915 | GEM("worthless piece of white glass", "white", 77, 1, 0, 6, 5, GLASS, CLR_WHITE),
916 | GEM("worthless piece of blue glass", "blue", 77, 1, 0, 6, 5, GLASS, CLR_BLUE),
917 | GEM("worthless piece of red glass", "red", 77, 1, 0, 6, 5, GLASS, CLR_RED),
918 | GEM("worthless piece of yellowish brown glass", "yellowish brown",
919 | 77, 1, 0, 6, 5, GLASS, CLR_BROWN),
920 | GEM("worthless piece of orange glass", "orange", 76, 1, 0, 6, 5, GLASS, CLR_ORANGE),
921 | GEM("worthless piece of yellow glass", "yellow", 77, 1, 0, 6, 5, GLASS, CLR_YELLOW),
922 | GEM("worthless piece of black glass", "black", 76, 1, 0, 6, 5, GLASS, CLR_BLACK),
923 | GEM("worthless piece of green glass", "green", 77, 1, 0, 6, 5, GLASS, CLR_GREEN),
924 | GEM("worthless piece of violet glass", "violet", 77, 1, 0, 6, 5, GLASS, CLR_MAGENTA),
925 |
926 | ROCK("luckstone", "gray", 0, 10, 10, 60, 3, 3, 1, 10, 7, MINERAL, CLR_GRAY),
927 | ROCK("loadstone", "gray", 0, 10, 500, 1, 3, 3, 1, 10, 6, MINERAL, CLR_GRAY),
928 | ROCK("flint", "gray", 0, 18, 10, 1, 6, 6, 0, 10, 7, MINERAL, CLR_GRAY),
929 | ROCK("rock", (char *)0, 1,100, 10, 0, 3, 3, 0, 10, 7, MINERAL, CLR_GRAY),
930 | #undef GEM
931 | #undef ROCK
932 |
933 | /* miscellaneous ... */
934 | /* Note: boulders and rocks are not normally created at random; the
935 | * probabilities only come into effect when you try to polymorph them.
936 | * Boulders weigh more than MAX_CARR_CAP; statues use corpsenm to take
937 | * on a specific type and may act as containers (both affect weight).
938 | */
939 | OBJECT(OBJ("boulder",(char *)0), BITS(1,0,0,0,0,0,0,0,1,0,0,P_NONE,MINERAL), 0,
940 | ROCK_CLASS, 100, 0, 6000, 0, 20, 20, 0, 0, 2000, HI_MINERAL),
941 | OBJECT(OBJ("statue", (char *)0), BITS(1,0,0,1,0,0,0,0,0,0,0,P_NONE,MINERAL), 0,
942 | ROCK_CLASS, 900, 0, 2500, 0, 20, 20, 0, 0, 2500, CLR_WHITE),
943 |
944 | OBJECT(OBJ("heavy iron ball", (char *)0), BITS(1,0,0,0,0,0,0,0,0,0,WHACK,P_NONE,IRON), 0,
945 | BALL_CLASS, 1000, 0, 480, 10, 25, 25, 0, 0, 200, HI_METAL),
946 | /* +d4 when "very heavy" */
947 | OBJECT(OBJ("iron chain", (char *)0), BITS(1,0,0,0,0,0,0,0,0,0,WHACK,P_NONE,IRON), 0,
948 | CHAIN_CLASS, 1000, 0, 120, 0, 4, 4, 0, 0, 200, HI_METAL),
949 | /* +1 both l & s */
950 |
951 | OBJECT(OBJ("blinding venom", "splash of venom"),
952 | BITS(0,1,0,0,0,0,0,1,0,0,0,P_NONE,LIQUID), 0,
953 | VENOM_CLASS, 500, 0, 1, 0, 0, 0, 0, 0, 0, HI_ORGANIC),
954 | OBJECT(OBJ("acid venom", "splash of venom"),
955 | BITS(0,1,0,0,0,0,0,1,0,0,0,P_NONE,LIQUID), 0,
956 | VENOM_CLASS, 500, 0, 1, 0, 6, 6, 0, 0, 0, HI_ORGANIC),
957 | /* +d6 small or large */
958 |
959 | /* fencepost, the deadly Array Terminator -- name [1st arg] *must* be NULL */
960 | OBJECT(OBJ((char *)0,(char *)0), BITS(0,0,0,0,0,0,0,0,0,0,0,P_NONE,0), 0,
961 | ILLOBJ_CLASS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
962 | }; /* objects[] */
963 |
964 | #ifndef OBJECTS_PASS_2_
965 |
966 | /* perform recursive compilation for second structure */
967 | # undef OBJ
968 | # undef OBJECT
969 | # define OBJECTS_PASS_2_
970 | #include "objects.c"
971 |
972 | void NDECL(objects_init);
973 |
974 | /* dummy routine used to force linkage */
975 | void
976 | objects_init()
977 | {
978 | return;
979 | }
980 |
981 | #endif /* !OBJECTS_PASS_2_ */
982 |
983 | /*objects.c*/