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