1 #pragma once
2 
3 #include <vector>
4 
5 #include "tag-version.h"
6 
7 using std::vector;
8 
9 /* Don't change the order of any enums in this file unless you are breaking
10  * save compatibility. See ../docs/develop/save_compatibility.txt for
11  * more details, including how to schedule both the current and future
12  * enum orders.
13  *
14  * If you do break compatibility and change the order, be sure to change
15  * rltiles/dc-item.txt to match.
16  */
17 
18 enum armour_type
19 {
20     ARM_ROBE, // order of mundane armour matters to _upgrade_body_armour
21     ARM_FIRST_MUNDANE_BODY = ARM_ROBE,
22     ARM_LEATHER_ARMOUR,
23     ARM_RING_MAIL,
24     ARM_SCALE_MAIL,
25     ARM_CHAIN_MAIL,
26     ARM_PLATE_ARMOUR,
27     ARM_LAST_MUNDANE_BODY = ARM_PLATE_ARMOUR,
28 #if TAG_MAJOR_VERSION > 34
29     ARM_CRYSTAL_PLATE_ARMOUR,
30 #endif
31 
32     ARM_CLOAK,
33 #if TAG_MAJOR_VERSION > 34
34     ARM_SCARF,
35 #endif
36 
37 #if TAG_MAJOR_VERSION == 34
38     ARM_CAP,
39 #endif
40     ARM_HAT,
41     ARM_HELMET,
42 
43     ARM_GLOVES,
44 
45     ARM_BOOTS,
46 
47     ARM_BUCKLER, // order of shields matters
48     ARM_FIRST_SHIELD = ARM_BUCKLER,
49     ARM_KITE_SHIELD,
50     ARM_TOWER_SHIELD,
51     ARM_LAST_SHIELD = ARM_TOWER_SHIELD,
52 
53 #if TAG_MAJOR_VERSION == 34
54     ARM_CRYSTAL_PLATE_ARMOUR,
55 #endif
56 
57     ARM_ANIMAL_SKIN,
58 
59 #if TAG_MAJOR_VERSION == 34
60     ARM_TROLL_HIDE,
61 #endif
62     ARM_TROLL_LEATHER_ARMOUR,
63 
64 #if TAG_MAJOR_VERSION == 34
65     ARM_FIRE_DRAGON_HIDE,
66 #endif
67     ARM_FIRE_DRAGON_ARMOUR,
68 #if TAG_MAJOR_VERSION == 34
69     ARM_ICE_DRAGON_HIDE,
70 #endif
71     ARM_ICE_DRAGON_ARMOUR,
72 #if TAG_MAJOR_VERSION == 34
73     ARM_STEAM_DRAGON_HIDE,
74 #endif
75     ARM_STEAM_DRAGON_ARMOUR,
76 #if TAG_MAJOR_VERSION == 34
77     ARM_ACID_DRAGON_HIDE,
78 #endif
79     ARM_ACID_DRAGON_ARMOUR,
80 #if TAG_MAJOR_VERSION == 34
81     ARM_STORM_DRAGON_HIDE,
82 #endif
83     ARM_STORM_DRAGON_ARMOUR,
84 #if TAG_MAJOR_VERSION == 34
85     ARM_GOLD_DRAGON_HIDE,
86 #endif
87     ARM_GOLD_DRAGON_ARMOUR,
88 #if TAG_MAJOR_VERSION == 34
89     ARM_SWAMP_DRAGON_HIDE,
90 #endif
91     ARM_SWAMP_DRAGON_ARMOUR,
92 #if TAG_MAJOR_VERSION == 34
93     ARM_PEARL_DRAGON_HIDE,
94 #endif
95     ARM_PEARL_DRAGON_ARMOUR,
96 #if TAG_MAJOR_VERSION > 34
97     ARM_SHADOW_DRAGON_ARMOUR,
98     ARM_QUICKSILVER_DRAGON_ARMOUR,
99 #endif
100 
101 #if TAG_MAJOR_VERSION == 34
102     ARM_CENTAUR_BARDING,
103 #endif
104     ARM_BARDING,
105 
106 #if TAG_MAJOR_VERSION == 34
107     ARM_SHADOW_DRAGON_HIDE,
108     ARM_SHADOW_DRAGON_ARMOUR,
109     ARM_QUICKSILVER_DRAGON_HIDE,
110     ARM_QUICKSILVER_DRAGON_ARMOUR,
111     ARM_SCARF,
112 #endif
113 
114     NUM_ARMOURS
115 };
116 
117 enum armour_property_type
118 {
119     PARM_AC,
120     PARM_EVASION,
121 };
122 
123 const int SP_FORBID_EGO   = -1;
124 const int SP_FORBID_BRAND = -1;
125 const int SP_UNKNOWN_BRAND = 31; // seen_weapon/armour is a 32-bit bitfield
126 
127 // Be sure to update _debug_acquirement_stats and _str_to_ego to match.
128 enum brand_type // item_def.special
129 {
130     SPWPN_FORBID_BRAND = -1,
131     SPWPN_NORMAL,
132     SPWPN_FLAMING,
133     SPWPN_FREEZING,
134     SPWPN_HOLY_WRATH,
135     SPWPN_ELECTROCUTION,
136 #if TAG_MAJOR_VERSION == 34
137     SPWPN_ORC_SLAYING,
138     SPWPN_DRAGON_SLAYING,
139 #endif
140     SPWPN_VENOM,
141     SPWPN_PROTECTION,
142     SPWPN_DRAINING,
143     SPWPN_SPEED,
144     SPWPN_VORPAL,
145 #if TAG_MAJOR_VERSION == 34
146     SPWPN_FLAME,   // ranged, only
147     SPWPN_FROST,   // ranged, only
148 #endif
149     SPWPN_VAMPIRISM,
150     SPWPN_PAIN,
151     SPWPN_ANTIMAGIC,
152     SPWPN_DISTORTION,
153 #if TAG_MAJOR_VERSION == 34
154     SPWPN_REACHING,
155     SPWPN_RETURNING,
156 #endif
157     SPWPN_CHAOS,
158 #if TAG_MAJOR_VERSION == 34
159     SPWPN_EVASION,
160     MAX_GHOST_BRAND = SPWPN_EVASION,
161 #else
162     MAX_GHOST_BRAND = SPWPN_CHAOS,
163 #endif
164 
165 #if TAG_MAJOR_VERSION == 34
166     SPWPN_CONFUSE, // XXX not a real weapon brand, only for Confusing Touch
167 #endif
168     SPWPN_PENETRATION,
169     SPWPN_REAPING,
170     SPWPN_SPECTRAL,
171 
172 // From this point on save compat is irrelevant.
173     NUM_REAL_SPECIAL_WEAPONS,
174 
175     SPWPN_ACID,    // acid bite and Punk
176 #if TAG_MAJOR_VERSION > 34
177     SPWPN_CONFUSE, // Confusing Touch only for the moment
178 #endif
179     SPWPN_DEBUG_RANDART,
180     NUM_SPECIAL_WEAPONS,
181 };
182 COMPILE_CHECK(NUM_SPECIAL_WEAPONS <= SP_UNKNOWN_BRAND);
183 
184 enum corpse_type
185 {
186     CORPSE_BODY,
187     CORPSE_SKELETON,
188 };
189 
190 enum hands_reqd_type
191 {
192     HANDS_ONE,
193     HANDS_TWO,
194 };
195 
196 enum jewellery_type
197 {
198 #if TAG_MAJOR_VERSION == 34
199     RING_REGENERATION,
200 #endif
201     RING_PROTECTION,
202     RING_FIRST_RING = RING_PROTECTION,
203     RING_PROTECTION_FROM_FIRE,
204     RING_POISON_RESISTANCE,
205     RING_PROTECTION_FROM_COLD,
206     RING_STRENGTH,
207     RING_SLAYING,
208     RING_SEE_INVISIBLE,
209     RING_RESIST_CORROSION,
210 #if TAG_MAJOR_VERSION == 34
211     RING_ATTENTION,
212     RING_TELEPORTATION,
213 #endif
214     RING_EVASION,
215 #if TAG_MAJOR_VERSION == 34
216     RING_SUSTAIN_ATTRIBUTES,
217 #endif
218     RING_STEALTH,
219     RING_DEXTERITY,
220     RING_INTELLIGENCE,
221     RING_WIZARDRY,
222     RING_MAGICAL_POWER,
223     RING_FLIGHT,
224     RING_LIFE_PROTECTION,
225     RING_WILLPOWER,
226     RING_FIRE,
227     RING_ICE,
228 #if TAG_MAJOR_VERSION == 34
229     RING_TELEPORT_CONTROL,
230 #endif
231     NUM_RINGS,                         //   keep as last ring; should not overlap
232                                        //   with amulets!
233     // RINGS after num_rings are for unique types for artefacts
234     //   (no non-artefact version).
235     // Currently none.
236     // XXX: trying to add one doesn't actually work
237 
238 #if TAG_MAJOR_VERSION == 34
239     AMU_RAGE = 35,
240     AMU_FIRST_AMULET = AMU_RAGE,
241     AMU_HARM,
242 #endif
243 #if TAG_MAJOR_VERSION > 34
244     AMU_ACROBAT = 35,
245     AMU_FIRST_AMULET = AMU_ACROBAT,
246 #elif TAG_MAJOR_VERSION == 34
247     AMU_ACROBAT,
248 #endif
249     AMU_MANA_REGENERATION,
250 #if TAG_MAJOR_VERSION == 34
251     AMU_THE_GOURMAND,
252     AMU_CONSERVATION,
253     AMU_CONTROLLED_FLIGHT,
254     AMU_INACCURACY,
255 #endif
256     AMU_NOTHING,
257     AMU_GUARDIAN_SPIRIT,
258     AMU_FAITH,
259     AMU_REFLECTION,
260     AMU_REGENERATION,
261 
262     NUM_JEWELLERY
263 };
264 
265 enum class launch_retval
266 {
267     BUGGY = -1, // could be 0 maybe? TODO: test
268     FUMBLED,
269     LAUNCHED,
270     THROWN,
271 };
272 
273 enum misc_item_type
274 {
275 #if TAG_MAJOR_VERSION == 34
276     MISC_BOTTLED_EFREET,
277     MISC_FAN_OF_GALES,
278     MISC_LAMP_OF_FIRE,
279     MISC_STONE_OF_TREMORS,
280     MISC_BUGGY_LANTERN_OF_SHADOWS,
281 #endif
282     MISC_HORN_OF_GERYON,
283     MISC_BOX_OF_BEASTS,
284 #if TAG_MAJOR_VERSION == 34
285     MISC_CRYSTAL_BALL_OF_ENERGY,
286     MISC_BUGGY_EBONY_CASKET,
287 #endif
288     MISC_LIGHTNING_ROD,
289 
290 #if TAG_MAJOR_VERSION == 34
291     MISC_DECK_OF_ESCAPE,
292     MISC_FIRST_DECK = MISC_DECK_OF_ESCAPE,
293     MISC_DECK_OF_DESTRUCTION,
294     MISC_DECK_OF_DUNGEONS,
295     MISC_DECK_OF_SUMMONING,
296     MISC_DECK_OF_WONDERS,
297     MISC_DECK_OF_PUNISHMENT,
298     MISC_DECK_OF_WAR,
299     MISC_DECK_OF_CHANGES,
300     MISC_DECK_OF_DEFENCE,
301     MISC_LAST_DECK = MISC_DECK_OF_DEFENCE,
302 
303     MISC_RUNE_OF_ZOT,
304 #endif
305 
306     MISC_QUAD_DAMAGE, // Sprint only
307 
308     MISC_PHIAL_OF_FLOODS,
309 #if TAG_MAJOR_VERSION == 34
310     MISC_SACK_OF_SPIDERS,
311 #endif
312     MISC_ZIGGURAT,
313 
314     MISC_PHANTOM_MIRROR,
315 #if TAG_MAJOR_VERSION == 34
316     MISC_DECK_OF_ODDITIES,
317 #endif
318     MISC_XOMS_CHESSBOARD,
319     MISC_TIN_OF_TREMORSTONES,
320     MISC_CONDENSER_VANE,
321 
322     NUM_MISCELLANY,
323     MISC_DECK_UNKNOWN = NUM_MISCELLANY,
324 };
325 
326 // in no particular order (but we need *a* fixed order for dbg-scan)
327 const vector<misc_item_type> misc_types =
328 {
329 #if TAG_MAJOR_VERSION == 34
330     MISC_FAN_OF_GALES,
331     MISC_LAMP_OF_FIRE,
332     MISC_STONE_OF_TREMORS,
333     MISC_BUGGY_LANTERN_OF_SHADOWS,
334 #endif
335     MISC_HORN_OF_GERYON, MISC_BOX_OF_BEASTS,
336 #if TAG_MAJOR_VERSION == 34
337     MISC_CRYSTAL_BALL_OF_ENERGY,
338 #endif
339     MISC_LIGHTNING_ROD, MISC_PHIAL_OF_FLOODS,
340     MISC_QUAD_DAMAGE,
341 #if TAG_MAJOR_VERSION == 34
342     MISC_SACK_OF_SPIDERS,
343 #endif
344     MISC_PHANTOM_MIRROR,
345     MISC_XOMS_CHESSBOARD,
346     MISC_ZIGGURAT,
347 #if TAG_MAJOR_VERSION == 34
348     MISC_BOTTLED_EFREET, MISC_BUGGY_EBONY_CASKET,
349 #endif
350     MISC_TIN_OF_TREMORSTONES,
351     MISC_CONDENSER_VANE,
352 };
353 
354 enum missile_type
355 {
356     MI_DART,
357 #if TAG_MAJOR_VERSION == 34
358     MI_NEEDLE,
359 #endif
360     MI_ARROW,
361     MI_BOLT,
362     MI_JAVELIN,
363 
364     MI_STONE,
365     MI_LARGE_ROCK,
366     MI_SLING_BULLET,
367     MI_THROWING_NET,
368     MI_BOOMERANG,
369 
370     NUM_MISSILES,
371     MI_NONE             // was MI_EGGPLANT... used for launch type detection
372 };
373 
374 enum rune_type
375 {
376     RUNE_SWAMP,
377     RUNE_SNAKE,
378     RUNE_SHOALS,
379     RUNE_SLIME,
380     RUNE_ELF, // only used in sprints
381     RUNE_VAULTS,
382     RUNE_TOMB,
383 
384     RUNE_DIS,
385     RUNE_GEHENNA,
386     RUNE_COCYTUS,
387     RUNE_TARTARUS,
388 
389     RUNE_ABYSSAL,
390 
391     RUNE_DEMONIC,
392 
393     // order must match monsters
394     RUNE_MNOLEG,
395     RUNE_LOM_LOBON,
396     RUNE_CEREBOV,
397     RUNE_GLOORX_VLOQ,
398 
399     RUNE_SPIDER,
400     RUNE_FOREST, // only used in sprints
401     NUM_RUNE_TYPES
402 };
403 
404 enum scroll_type
405 {
406     SCR_IDENTIFY,
407     SCR_TELEPORTATION,
408     SCR_FEAR,
409     SCR_NOISE,
410 #if TAG_MAJOR_VERSION == 34
411     SCR_REMOVE_CURSE,
412 #endif
413     SCR_SUMMONING,
414     SCR_ENCHANT_WEAPON,
415     SCR_ENCHANT_ARMOUR,
416     SCR_TORMENT,
417 #if TAG_MAJOR_VERSION == 34
418     SCR_RANDOM_USELESSNESS,
419     SCR_CURSE_WEAPON,
420     SCR_CURSE_ARMOUR,
421 #endif
422     SCR_IMMOLATION,
423     SCR_BLINKING,
424     SCR_MAGIC_MAPPING,
425     SCR_FOG,
426     SCR_ACQUIREMENT,
427 #if TAG_MAJOR_VERSION == 34
428     SCR_ENCHANT_WEAPON_II,
429 #endif
430     SCR_BRAND_WEAPON,
431 #if TAG_MAJOR_VERSION == 34
432     SCR_RECHARGING,
433     SCR_ENCHANT_WEAPON_III,
434 #endif
435     SCR_HOLY_WORD,
436     SCR_VULNERABILITY,
437     SCR_SILENCE,
438     SCR_AMNESIA,
439 #if TAG_MAJOR_VERSION == 34
440     SCR_CURSE_JEWELLERY,
441 #endif
442     NUM_SCROLLS
443 };
444 
445 // Be sure to update _debug_acquirement_stats and str_to_ego to match.
446 enum special_armour_type
447 {
448     SPARM_FORBID_EGO = -1,
449     SPARM_NORMAL,
450 #if TAG_MAJOR_VERSION == 34
451     SPARM_RUNNING,
452 #endif
453     SPARM_FIRE_RESISTANCE,
454     SPARM_COLD_RESISTANCE,
455     SPARM_POISON_RESISTANCE,
456     SPARM_SEE_INVISIBLE,
457     SPARM_INVISIBILITY,
458     SPARM_STRENGTH,
459     SPARM_DEXTERITY,
460     SPARM_INTELLIGENCE,
461     SPARM_PONDEROUSNESS,
462     SPARM_FLYING,
463     SPARM_WILLPOWER,
464     SPARM_PROTECTION,
465     SPARM_STEALTH,
466     SPARM_RESISTANCE,
467     SPARM_POSITIVE_ENERGY,
468     SPARM_ARCHMAGI,
469     SPARM_PRESERVATION,
470     SPARM_REFLECTION,
471     SPARM_SPIRIT_SHIELD,
472     SPARM_ARCHERY,
473 #if TAG_MAJOR_VERSION == 34
474     SPARM_JUMPING,
475 #endif
476     SPARM_REPULSION,
477 #if TAG_MAJOR_VERSION == 34
478     SPARM_CLOUD_IMMUNE,
479 #endif
480     SPARM_HARM,
481     SPARM_SHADOWS,
482     SPARM_RAMPAGING,
483     NUM_REAL_SPECIAL_ARMOURS,
484     NUM_SPECIAL_ARMOURS,
485 };
486 // We have space for 32 brands in the bitfield.
487 COMPILE_CHECK(NUM_SPECIAL_ARMOURS <= SP_UNKNOWN_BRAND);
488 
489 // Be sure to update _str_to_ego to match.
490 enum special_missile_type // to separate from weapons in general {dlb}
491 {
492     SPMSL_FORBID_BRAND = -1,
493     SPMSL_NORMAL,
494     SPMSL_FLAME,
495     SPMSL_FROST,
496     SPMSL_POISONED,
497     SPMSL_CURARE,                      // Needle-only brand
498 #if TAG_MAJOR_VERSION == 34
499     SPMSL_RETURNING,
500 #endif
501     SPMSL_CHAOS,
502 #if TAG_MAJOR_VERSION == 34
503     SPMSL_PENETRATION,
504 #endif
505     SPMSL_DISPERSAL,
506     SPMSL_EXPLODING,                   // Only used by Damnation crossbow
507 #if TAG_MAJOR_VERSION == 34
508     SPMSL_STEEL,
509 #endif
510     SPMSL_SILVER,
511 #if TAG_MAJOR_VERSION == 34
512     SPMSL_PARALYSIS,                   // dart only from here on
513     SPMSL_SLOW,
514     SPMSL_SLEEP,
515     SPMSL_CONFUSION,
516     SPMSL_SICKNESS,
517 #endif
518     SPMSL_FRENZY,                      // Datura
519     SPMSL_BLINDING,                    // Atropa
520     NUM_REAL_SPECIAL_MISSILES,
521     NUM_SPECIAL_MISSILES = NUM_REAL_SPECIAL_MISSILES,
522 };
523 
524 enum special_ring_type // jewellery env.item[].special values
525 {
526     SPRING_RANDART = 200,
527     SPRING_UNRANDART = 201,
528 };
529 
530 enum stave_type
531 {
532 #if TAG_MAJOR_VERSION == 34
533     STAFF_WIZARDRY,
534     STAFF_POWER,
535 #endif
536     STAFF_FIRE,
537     STAFF_COLD,
538     STAFF_POISON,
539 #if TAG_MAJOR_VERSION == 34
540     STAFF_ENERGY,
541 #endif
542     STAFF_DEATH,
543     STAFF_CONJURATION,
544 #if TAG_MAJOR_VERSION == 34
545     STAFF_ENCHANTMENT,
546     STAFF_SUMMONING,
547 #endif
548     STAFF_AIR,
549     STAFF_EARTH,
550 #if TAG_MAJOR_VERSION == 34
551     STAFF_CHANNELING,
552 #endif
553     NUM_STAVES,
554 };
555 
556 #if TAG_MAJOR_VERSION == 34
557 enum rod_type
558 {
559     ROD_LIGHTNING,
560     ROD_SWARM,
561     ROD_IGNITION,
562     ROD_CLOUDS,
563     ROD_DESTRUCTION,
564     ROD_INACCURACY,
565     ROD_WARDING,
566     ROD_SHADOWS,
567     ROD_IRON,
568     ROD_VENOM,
569     NUM_RODS,
570 };
571 #endif
572 
573 enum weapon_type
574 {
575     WPN_CLUB,
576     WPN_WHIP,
577 #if TAG_MAJOR_VERSION == 34
578     WPN_HAMMER,
579 #endif
580     WPN_MACE,
581     WPN_FLAIL,
582     WPN_MORNINGSTAR,
583 #if TAG_MAJOR_VERSION == 34
584     WPN_SPIKED_FLAIL,
585 #endif
586     WPN_DIRE_FLAIL,
587     WPN_EVENINGSTAR,
588     WPN_GREAT_MACE,
589 
590     WPN_DAGGER,
591     WPN_QUICK_BLADE,
592     WPN_SHORT_SWORD,
593     WPN_RAPIER,
594 
595     WPN_FALCHION,
596     WPN_LONG_SWORD,
597     WPN_SCIMITAR,
598     WPN_GREAT_SWORD,
599 
600     WPN_HAND_AXE,
601     WPN_WAR_AXE,
602     WPN_BROAD_AXE,
603     WPN_BATTLEAXE,
604     WPN_EXECUTIONERS_AXE,
605 
606     WPN_SPEAR,
607     WPN_TRIDENT,
608     WPN_HALBERD,
609     WPN_GLAIVE,
610     WPN_BARDICHE,
611 
612 #if TAG_MAJOR_VERSION == 34
613     WPN_BLOWGUN,
614 #endif
615 
616 #if TAG_MAJOR_VERSION > 34
617     WPN_HAND_CROSSBOW,
618 #endif
619     WPN_ARBALEST,
620 #if TAG_MAJOR_VERSION > 34
621     WPN_TRIPLE_CROSSBOW,
622 #endif
623 
624     WPN_SHORTBOW,
625     WPN_LONGBOW,
626 
627 #if TAG_MAJOR_VERSION > 34
628     WPN_HUNTING_SLING,
629     WPN_FUSTIBALUS,
630 #endif
631 
632     WPN_DEMON_WHIP,
633     WPN_GIANT_CLUB,
634     WPN_GIANT_SPIKED_CLUB,
635 
636     WPN_DEMON_BLADE,
637     WPN_DOUBLE_SWORD,
638     WPN_TRIPLE_SWORD,
639 
640     WPN_DEMON_TRIDENT,
641     WPN_SCYTHE,
642 
643     WPN_STAFF,          // Just used for the weapon stats for magical staves.
644     WPN_QUARTERSTAFF,
645     WPN_LAJATANG,
646 
647 #if TAG_MAJOR_VERSION == 34
648     WPN_HUNTING_SLING,
649 
650     WPN_BLESSED_FALCHION,
651     WPN_BLESSED_LONG_SWORD,
652     WPN_BLESSED_SCIMITAR,
653     WPN_BLESSED_GREAT_SWORD,
654 #endif
655     WPN_EUDEMON_BLADE,
656 #if TAG_MAJOR_VERSION == 34
657     WPN_BLESSED_DOUBLE_SWORD,
658     WPN_BLESSED_TRIPLE_SWORD,
659 #endif
660     WPN_SACRED_SCOURGE,
661     WPN_TRISHULA,
662 
663 #if TAG_MAJOR_VERSION == 34
664     WPN_FUSTIBALUS,
665     WPN_HAND_CROSSBOW,
666     WPN_TRIPLE_CROSSBOW,
667 
668     WPN_CUTLASS,
669 #endif
670 
671     NUM_WEAPONS,
672 
673 // special cases
674     WPN_UNARMED,
675     WPN_UNKNOWN,
676     WPN_RANDOM,
677     WPN_VIABLE,
678 
679 // thrown weapons (for hunter weapon selection) - rocks, javelins, boomerangs
680     WPN_THROWN,
681 };
682 
683 enum weapon_property_type
684 {
685     PWPN_DAMAGE,
686     PWPN_HIT,
687     PWPN_SPEED,
688     PWPN_ACQ_WEIGHT,
689 };
690 
691 enum vorpal_damage_type
692 {
693     // These are the types of damage a weapon can do. You can set more
694     // than one of these.
695     DAM_BASH            = 0x0000,       // non-melee weapon blugeoning
696     DAM_BLUDGEON        = 0x0001,       // crushing
697     DAM_SLICE           = 0x0002,       // slicing/chopping
698     DAM_PIERCE          = 0x0004,       // stabbing/piercing
699     DAM_WHIP            = 0x0008,       // whip slashing
700     DAM_MAX_TYPE        = DAM_WHIP,
701 
702     // These are used for vorpal weapon descriptions. You shouldn't set
703     // more than one of these.
704     DVORP_NONE          = 0x0000,       // used for non-melee weapons
705     DVORP_CRUSHING      = 0x1000,
706     DVORP_SLICING       = 0x2000,
707     DVORP_PIERCING      = 0x3000,
708     DVORP_CHOPPING      = 0x4000,       // used for axes
709     DVORP_SLASHING      = 0x5000,       // used for whips
710 
711     DVORP_CLAWING       = 0x6000,       // claw damage
712     DVORP_TENTACLE      = 0x7000,       // tentacle damage
713 
714     // These are shortcuts to tie vorpal/damage types for easy setting...
715     // as above, setting more than one vorpal type is trouble.
716     DAMV_NON_MELEE      = DVORP_NONE     | DAM_BASH,            // launchers
717     DAMV_CRUSHING       = DVORP_CRUSHING | DAM_BLUDGEON,
718     DAMV_SLICING        = DVORP_SLICING  | DAM_SLICE,
719     DAMV_PIERCING       = DVORP_PIERCING | DAM_PIERCE,
720     DAMV_CHOPPING       = DVORP_CHOPPING | DAM_SLICE,
721     DAMV_SLASHING       = DVORP_SLASHING | DAM_WHIP,
722 
723     DAM_MASK            = 0x0fff,       // strips vorpal specification
724     DAMV_MASK           = 0xf000,       // strips non-vorpal specification
725 };
726 
727 enum wand_type
728 {
729     WAND_FLAME,
730 #if TAG_MAJOR_VERSION == 34
731     WAND_FROST_REMOVED,
732     WAND_SLOWING_REMOVED,
733     WAND_HASTING_REMOVED,
734     WAND_MAGIC_DARTS_REMOVED,
735     WAND_HEAL_WOUNDS_REMOVED,
736 #endif
737     WAND_PARALYSIS,
738 #if TAG_MAJOR_VERSION == 34
739     WAND_FIRE_REMOVED,
740     WAND_COLD_REMOVED,
741     WAND_CONFUSION_REMOVED,
742     WAND_INVISIBILITY_REMOVED,
743 #endif
744     WAND_DIGGING,
745     WAND_ICEBLAST,
746 #if TAG_MAJOR_VERSION == 34
747     WAND_TELEPORTATION_REMOVED,
748     WAND_LIGHTNING_REMOVED,
749 #endif
750     WAND_POLYMORPH,
751     WAND_CHARMING,
752     WAND_ACID,
753 #if TAG_MAJOR_VERSION == 34
754     WAND_RANDOM_EFFECTS_REMOVED,
755 #endif
756     WAND_MINDBURST,
757 #if TAG_MAJOR_VERSION == 34
758     WAND_CLOUDS_REMOVED,
759     WAND_SCATTERSHOT_REMOVED,
760 #endif
761     NUM_WANDS
762 };
763 
764 #if TAG_MAJOR_VERSION == 34
765 enum food_type
766 {
767     FOOD_RATION,
768     FOOD_BREAD_RATION,
769     FOOD_PEAR,
770     FOOD_APPLE,
771     FOOD_CHOKO,
772     FOOD_ROYAL_JELLY,   // was: royal jelly
773     FOOD_UNUSED, // was: royal jelly and/or pizza
774     FOOD_FRUIT,  // was: snozzcumber
775     FOOD_PIZZA,
776     FOOD_APRICOT,
777     FOOD_ORANGE,
778     FOOD_BANANA,
779     FOOD_STRAWBERRY,
780     FOOD_RAMBUTAN,
781     FOOD_LEMON,
782     FOOD_GRAPE,
783     FOOD_SULTANA,
784     FOOD_LYCHEE,
785     FOOD_BEEF_JERKY,
786     FOOD_CHEESE,
787     FOOD_SAUSAGE,
788     FOOD_CHUNK,
789     FOOD_AMBROSIA,
790     NUM_FOODS
791 };
792 #endif
793