diff options
Diffstat (limited to 'crawl-ref/source/itemprop.h')
-rw-r--r-- | crawl-ref/source/itemprop.h | 550 |
1 files changed, 547 insertions, 3 deletions
diff --git a/crawl-ref/source/itemprop.h b/crawl-ref/source/itemprop.h index 7c051d0b70..61c4cbe41d 100644 --- a/crawl-ref/source/itemprop.h +++ b/crawl-ref/source/itemprop.h @@ -14,6 +14,553 @@ #include "externs.h" +enum armour_type +{ + ARM_ROBE, // 0 + ARM_LEATHER_ARMOUR, + ARM_RING_MAIL, + ARM_SCALE_MAIL, + ARM_CHAIN_MAIL, + ARM_SPLINT_MAIL, // 5 + ARM_BANDED_MAIL, + ARM_PLATE_MAIL, + ARM_SHIELD, + ARM_CLOAK, + ARM_HELMET, // 10 + ARM_GLOVES, + ARM_BOOTS, + ARM_BUCKLER, + ARM_LARGE_SHIELD, + ARM_DRAGON_HIDE, // 15 + ARM_TROLL_HIDE, + ARM_CRYSTAL_PLATE_MAIL, + ARM_DRAGON_ARMOUR, + ARM_TROLL_LEATHER_ARMOUR, + ARM_ICE_DRAGON_HIDE, // 20 + ARM_ICE_DRAGON_ARMOUR, + ARM_STEAM_DRAGON_HIDE, + ARM_STEAM_DRAGON_ARMOUR, + ARM_MOTTLED_DRAGON_HIDE, + ARM_MOTTLED_DRAGON_ARMOUR, // 25 + ARM_STORM_DRAGON_HIDE, + ARM_STORM_DRAGON_ARMOUR, + ARM_GOLD_DRAGON_HIDE, + ARM_GOLD_DRAGON_ARMOUR, + ARM_ANIMAL_SKIN, // 30 + ARM_SWAMP_DRAGON_HIDE, + ARM_SWAMP_DRAGON_ARMOUR, + ARM_STUDDED_LEATHER_ARMOUR, + ARM_CAP, + ARM_CENTAUR_BARDING, // 35 + ARM_NAGA_BARDING, + + NUM_ARMOURS +}; + +enum armour_property_type +{ + PARM_AC, // 0 + PARM_EVASION +}; + +enum boot_type // used in pluses2 +{ + TBOOT_BOOTS = 0, + TBOOT_NAGA_BARDING, + TBOOT_CENTAUR_BARDING, + NUM_BOOT_TYPES +}; + +enum brand_type // equivalent to (you.inv[].special or mitm[].special) % 30 +{ + SPWPN_NORMAL, // 0 + SPWPN_FLAMING, + SPWPN_FREEZING, + SPWPN_HOLY_WRATH, + SPWPN_ELECTROCUTION, + SPWPN_ORC_SLAYING, // 5 + SPWPN_VENOM, + SPWPN_PROTECTION, + SPWPN_DRAINING, + SPWPN_SPEED, + SPWPN_VORPAL, // 10 + SPWPN_FLAME, + SPWPN_FROST, + SPWPN_VAMPIRICISM, + SPWPN_DISRUPTION, + SPWPN_PAIN, // 15 + SPWPN_DISTORTION, + SPWPN_REACHING, // 17 + SPWPN_RETURNING, + SPWPN_CONFUSE, + SPWPN_RANDART_I = 25, // 25 + SPWPN_RANDART_II, + SPWPN_RANDART_III, + SPWPN_RANDART_IV, + SPWPN_RANDART_V, + NUM_SPECIAL_WEAPONS, + SPWPN_DUMMY_CRUSHING, // ONLY TEMPORARY USAGE -- converts to VORPAL + + // everything above this point is a special artefact wield: + SPWPN_SINGING_SWORD = 181, // 181 + SPWPN_WRATH_OF_TROG, + SPWPN_SCYTHE_OF_CURSES, + SPWPN_MACE_OF_VARIABILITY, + SPWPN_GLAIVE_OF_PRUNE, // 185 + SPWPN_SCEPTRE_OF_TORMENT, + SPWPN_SWORD_OF_ZONGULDROK, + + // these three are not generated randomly {dlb} + SPWPN_SWORD_OF_CEREBOV, + SPWPN_STAFF_OF_DISPATER, + SPWPN_SCEPTRE_OF_ASMODEUS, // 190 + + SPWPN_SWORD_OF_POWER, + SPWPN_KNIFE_OF_ACCURACY, + SPWPN_STAFF_OF_OLGREB, + SPWPN_VAMPIRES_TOOTH, + SPWPN_STAFF_OF_WUCAD_MU // 195 +}; + +enum corpse_type +{ + CORPSE_BODY, // 0 + CORPSE_SKELETON +}; + +enum hands_reqd_type +{ + HANDS_ONE, + HANDS_HALF, + HANDS_TWO, + + HANDS_DOUBLE // not a level, marks double ended weapons (== half) +}; + +enum helmet_type +{ + THELM_HELMET = 0x0000, + THELM_HELM = 0x0001, + THELM_CAP = 0x0002, + THELM_WIZARD_HAT = 0x0003, + THELM_NUM_TYPES = 4, + + THELM_SPECIAL = 0x0004, // type used only for artefacts (mask, hat) + THELM_TYPE_MASK = 0x00ff, + + THELM_DESC_PLAIN = 0x0000, + THELM_DESC_WINGED = 0x0100, + THELM_DESC_HORNED = 0x0200, + THELM_DESC_CRESTED = 0x0300, + THELM_DESC_PLUMED = 0x0400, + THELM_DESC_SPIKED = 0x0500, + THELM_DESC_VISORED = 0x0600, + THELM_DESC_JEWELLED = 0x0700, + + THELM_DESC_MASK = 0xff00 +}; + +enum jewellery_type +{ + RING_FIRST_RING = 0, + + RING_REGENERATION = RING_FIRST_RING, // 0 + RING_PROTECTION, + RING_PROTECTION_FROM_FIRE, + RING_POISON_RESISTANCE, + RING_PROTECTION_FROM_COLD, + RING_STRENGTH, // 5 + RING_SLAYING, + RING_SEE_INVISIBLE, + RING_INVISIBILITY, + RING_HUNGER, + RING_TELEPORTATION, // 10 + RING_EVASION, + RING_SUSTAIN_ABILITIES, + RING_SUSTENANCE, + RING_DEXTERITY, + RING_INTELLIGENCE, // 15 + RING_WIZARDRY, + RING_MAGICAL_POWER, + RING_LEVITATION, + RING_LIFE_PROTECTION, + RING_PROTECTION_FROM_MAGIC, // 20 + RING_FIRE, + RING_ICE, + RING_TELEPORT_CONTROL, // 23 + + NUM_RINGS, // 24, keep as last ring; can overlap + // safely with first amulet. + + AMU_FIRST_AMULET = 35, + AMU_RAGE = AMU_FIRST_AMULET, // 35 + AMU_RESIST_SLOW, + AMU_CLARITY, + AMU_WARDING, + AMU_RESIST_CORROSION, + AMU_THE_GOURMAND, // 40 + AMU_CONSERVATION, + AMU_CONTROLLED_FLIGHT, + AMU_INACCURACY, + AMU_RESIST_MUTATION, + + NUM_JEWELLERY +}; + +enum launch_retval +{ + LRET_FUMBLED = 0, // must be left as 0 + LRET_LAUNCHED, + LRET_THROWN +}; + +enum misc_item_type +{ + MISC_BOTTLED_EFREET, // 0 + MISC_CRYSTAL_BALL_OF_SEEING, + MISC_AIR_ELEMENTAL_FAN, + MISC_LAMP_OF_FIRE, + MISC_STONE_OF_EARTH_ELEMENTALS, + MISC_LANTERN_OF_SHADOWS, + MISC_HORN_OF_GERYON, + MISC_BOX_OF_BEASTS, + MISC_CRYSTAL_BALL_OF_ENERGY, + MISC_EMPTY_EBONY_CASKET, + MISC_CRYSTAL_BALL_OF_FIXATION, + MISC_DISC_OF_STORMS, + + // pure decks + MISC_DECK_OF_ESCAPE, + MISC_DECK_OF_DESTRUCTION, + MISC_DECK_OF_DUNGEONS, + MISC_DECK_OF_SUMMONING, + MISC_DECK_OF_WONDERS, + MISC_DECK_OF_PUNISHMENT, + + // mixed decks + MISC_DECK_OF_WAR, + MISC_DECK_OF_CHANGES, + MISC_DECK_OF_DEFENSE, + + MISC_RUNE_OF_ZOT, + + NUM_MISCELLANY // mv: used for random generation +}; + +enum missile_type +{ + MI_STONE, // 0 + MI_ARROW, + MI_BOLT, + MI_DART, + MI_NEEDLE, + MI_LARGE_ROCK, + MI_SLING_BULLET, + MI_JAVELIN, + MI_THROWING_NET, + NUM_MISSILES, + MI_NONE // was MI_EGGPLANT... used for launch type detection +}; + +enum rune_type +{ + // Note: that runes DIS-SWAMP have the same numeric value as the branch + RUNE_DIS = BRANCH_DIS, + RUNE_GEHENNA = BRANCH_GEHENNA, + RUNE_COCYTUS = BRANCH_COCYTUS, + RUNE_TARTARUS = BRANCH_TARTARUS, + RUNE_SLIME_PITS = BRANCH_SLIME_PITS, + RUNE_VAULTS = BRANCH_VAULTS, + RUNE_SNAKE_PIT = BRANCH_SNAKE_PIT, + RUNE_ELVEN_HALLS = BRANCH_ELVEN_HALLS, // unused + RUNE_TOMB = BRANCH_TOMB, + RUNE_SWAMP = BRANCH_SWAMP, + RUNE_SHOALS = BRANCH_SHOALS, + + // Runes 50 and 51 are for Pandemonium (general demon) and the Abyss + RUNE_DEMONIC = 50, + RUNE_ABYSSAL, + + // Runes 60-63 correspond to the Pandemonium demonlords, + // and are equal to the corresponding vault. + RUNE_MNOLEG = 60, + RUNE_LOM_LOBON, + RUNE_CEREBOV, + RUNE_GLOORX_VLOQ, + NUM_RUNE_TYPES, // should always be last + RUNE_NONE +}; + +enum scroll_type +{ + SCR_IDENTIFY, // 0 + SCR_TELEPORTATION, + SCR_FEAR, + SCR_NOISE, + SCR_REMOVE_CURSE, + SCR_DETECT_CURSE, // 5 + SCR_SUMMONING, + SCR_ENCHANT_WEAPON_I, + SCR_ENCHANT_ARMOUR, + SCR_TORMENT, + SCR_RANDOM_USELESSNESS, // 10 + SCR_CURSE_WEAPON, + SCR_CURSE_ARMOUR, + SCR_IMMOLATION, + SCR_BLINKING, + SCR_PAPER, // 15 + SCR_MAGIC_MAPPING, + SCR_FORGETFULNESS, + SCR_ACQUIREMENT, + SCR_ENCHANT_WEAPON_II, + SCR_VORPALISE_WEAPON, // 20 + SCR_RECHARGING, + SCR_ENCHANT_WEAPON_III, + NUM_SCROLLS +}; + +enum special_armour_type +{ + SPARM_NORMAL, // 0 + SPARM_RUNNING, + SPARM_FIRE_RESISTANCE, + SPARM_COLD_RESISTANCE, + SPARM_POISON_RESISTANCE, + SPARM_SEE_INVISIBLE, // 5 + SPARM_DARKNESS, + SPARM_STRENGTH, + SPARM_DEXTERITY, + SPARM_INTELLIGENCE, + SPARM_PONDEROUSNESS, // 10 + SPARM_LEVITATION, + SPARM_MAGIC_RESISTANCE, + SPARM_PROTECTION, + SPARM_STEALTH, + SPARM_RESISTANCE, // 15 + SPARM_POSITIVE_ENERGY, + SPARM_ARCHMAGI, + SPARM_PRESERVATION, // 18 + SPARM_RANDART_I = 25, // must remain at 25 for now - how high do they go? {dlb} + SPARM_RANDART_II = 26, // 26 + SPARM_RANDART_III = 27, // 27 + SPARM_RANDART_IV = 28, // 28 + SPARM_RANDART_V = 29 // 29 - highest value found thus far {dlb} +}; + +enum special_missile_type // to separate from weapons in general {dlb} +{ + SPMSL_NORMAL, // 0 + SPMSL_FLAME, // 1 + SPMSL_ICE, // 2 + SPMSL_POISONED, // 3 + SPMSL_POISONED_II, // 4 - unused + SPMSL_CURARE // 5 +}; + +enum special_ring_type // jewellery mitm[].special values +{ + SPRING_RANDART = 200, + SPRING_UNRANDART = 201 +}; + +enum special_wield_type // you.special_wield +{ + SPWLD_NONE, // 0 + SPWLD_SING, + SPWLD_TROG, + SPWLD_CURSE, + SPWLD_VARIABLE, // 4 + SPWLD_PRUNE, // 5 - implicit in it_use3::special_wielded() {dlb} + SPWLD_TORMENT, // 6 + SPWLD_ZONGULDROK, + SPWLD_POWER, + SPWLD_WUCAD_MU, // 9 + SPWLD_OLGREB, // 10 + SPWLD_SHADOW = 50, // 50 + SPWLD_NOISE // further differentiation useless -> removed (jpeg) +}; + +enum stave_type +{ + // staves + STAFF_WIZARDRY = 0, + STAFF_POWER, + STAFF_FIRE, + STAFF_COLD, + STAFF_POISON, + STAFF_ENERGY, + STAFF_DEATH, + STAFF_CONJURATION, + STAFF_ENCHANTMENT, + STAFF_SUMMONING, + STAFF_AIR, + STAFF_EARTH, + STAFF_CHANNELING, + // rods + STAFF_SMITING, // must be first rod! + STAFF_SPELL_SUMMONING, + STAFF_DESTRUCTION_I, + STAFF_DESTRUCTION_II, + STAFF_DESTRUCTION_III, + STAFF_DESTRUCTION_IV, + STAFF_WARDING, + STAFF_DISCOVERY, + STAFF_DEMONOLOGY, + STAFF_STRIKING, + STAFF_VENOM, + NUM_STAVES // must remain last member {dlb} +}; + +enum weapon_type +{ +// Base weapons + WPN_CLUB, // 0 + WPN_MACE, + WPN_FLAIL, + WPN_DAGGER, + WPN_MORNINGSTAR, + WPN_SHORT_SWORD, // 5 + WPN_LONG_SWORD, + WPN_GREAT_SWORD, + WPN_SCIMITAR, + WPN_HAND_AXE, + WPN_BATTLEAXE, // 10 + WPN_SPEAR, + WPN_HALBERD, + WPN_SLING, + WPN_BOW, + WPN_CROSSBOW, // 15 + WPN_HAND_CROSSBOW, + WPN_GLAIVE, + WPN_QUARTERSTAFF, +// these three not created ordinarily + WPN_SCYTHE, + WPN_GIANT_CLUB, // 20 + WPN_GIANT_SPIKED_CLUB, +// "rare" weapons - some have special cases and are uncommon + WPN_EVENINGSTAR, + WPN_QUICK_BLADE, + WPN_KATANA, + WPN_EXECUTIONERS_AXE, // 25 + WPN_DOUBLE_SWORD, + WPN_TRIPLE_SWORD, + WPN_HAMMER, + WPN_ANCUS, + WPN_WHIP, // 30 + WPN_SABRE, + WPN_DEMON_BLADE, + WPN_DEMON_WHIP, + WPN_DEMON_TRIDENT, + WPN_BROAD_AXE, // 35 +// base items (continued) + WPN_WAR_AXE, + WPN_TRIDENT, + WPN_SPIKED_FLAIL, + WPN_GREAT_MACE, + WPN_DIRE_FLAIL, // 40 + WPN_KNIFE, + WPN_BLOWGUN, + WPN_FALCHION, + WPN_BLESSED_BLADE, // 44 + WPN_LONGBOW, + WPN_LAJATANG, + WPN_LOCHABER_AXE, + + NUM_WEAPONS, // 48 - must be last regular member {dlb} + +// special cases + WPN_UNARMED = 500, // 500 + WPN_UNKNOWN = 1000, // 1000 + WPN_RANDOM +}; + +enum weapon_description_type +{ + DWPN_PLAIN = 0, // 0 - added to round out enum {dlb} + DWPN_RUNED = 1, // 1 + DWPN_GLOWING, + DWPN_ORCISH, + DWPN_ELVEN, + DWPN_DWARVEN // 5 +}; + +enum weapon_property_type +{ + PWPN_DAMAGE, // 0 + PWPN_HIT, + PWPN_SPEED, + PWPN_ACQ_WEIGHT +}; + +enum vorpal_damage_type +{ + // Types of damage a weapon can do... currently assuming that anything + // with BLUDGEON always does "AND" with any other specified types, + // and and sets not including BLUDGEON are "OR". + DAM_BASH = 0x0000, // non-melee weapon blugeoning + DAM_BLUDGEON = 0x0001, // crushing + DAM_SLICE = 0x0002, // slicing/chopping + DAM_PIERCE = 0x0004, // stabbing/piercing + DAM_WHIP = 0x0008, // whip slashing (no butcher) + + // These are used for vorpal weapon desc (don't set more than one) + DVORP_NONE = 0x0000, // used for non-melee weapons + DVORP_CRUSHING = 0x1000, + DVORP_SLICING = 0x2000, + DVORP_PIERCING = 0x3000, + DVORP_CHOPPING = 0x4000, // used for axes + DVORP_SLASHING = 0x5000, // used for whips + DVORP_STABBING = 0x6000, // used for knives/daggers + + DVORP_CLAWING = 0x7000, // claw damage + + // These are shortcuts to tie vorpal/damage types for easy setting... + // as above, setting more than one vorpal type is trouble. + DAMV_NON_MELEE = DVORP_NONE | DAM_BASH, // launchers + DAMV_CRUSHING = DVORP_CRUSHING | DAM_BLUDGEON, + DAMV_SLICING = DVORP_SLICING | DAM_SLICE, + DAMV_PIERCING = DVORP_PIERCING | DAM_PIERCE, + DAMV_CHOPPING = DVORP_CHOPPING | DAM_SLICE, + DAMV_SLASHING = DVORP_SLASHING | DAM_WHIP, + DAMV_STABBING = DVORP_STABBING | DAM_PIERCE, + + DAM_MASK = 0x0fff, // strips vorpal specification + DAMV_MASK = 0xf000 // strips non-vorpal specification +}; + +// NOTE: This order is very special! Its basically the same as ZAP_*, +// and there are bits of the code that still use that fact.. see zap_wand(). +enum wand_type // mitm[].subtype +{ + WAND_FLAME, // 0 + WAND_FROST, + WAND_SLOWING, + WAND_HASTING, + WAND_MAGIC_DARTS, + WAND_HEALING, // 5 + WAND_PARALYSIS, + WAND_FIRE, + WAND_COLD, + WAND_CONFUSION, + WAND_INVISIBILITY, // 10 + WAND_DIGGING, + WAND_FIREBALL, + WAND_TELEPORTATION, + WAND_LIGHTNING, + WAND_POLYMORPH_OTHER, // 15 + WAND_ENSLAVEMENT, + WAND_DRAINING, + WAND_RANDOM_EFFECTS, + WAND_DISINTEGRATION, + NUM_WANDS // must remain last member {dlb} +}; + +enum zap_count_type +{ + ZAPCOUNT_EMPTY = -1, + ZAPCOUNT_UNKNOWN = -2 +}; + void init_properties(void); // Returns true if this item should be preserved as far as possible. @@ -162,9 +709,6 @@ bool is_shield(const item_def &item); bool is_shield_incompatible(const item_def &weapon, const item_def *shield = NULL); -bool is_deck(const item_def &item); -deck_rarity_type deck_rarity(const item_def &item); - // Only works for armour/weapons/missiles std::string item_base_name(const item_def &item); const char* weapon_base_name(unsigned char subtype); |