From 007ead191a6de85b5b12ccc0c5979a4e9661659a Mon Sep 17 00:00:00 2001 From: j-p-e-g Date: Fri, 28 Nov 2008 11:58:20 +0000 Subject: * Fixed a few issues with transformations. * Moved fixed arts' plusses, name and colour into a struct in randart.cc. (This should maybe be moved into unrand.h.) Name and description are now stored in the props vector like for randarts, and artefact_name() now handles all randarts, unrandarts and fixed artefacts. The Knife of Accuracy should probably be turned into an unrandart. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7673 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/beam.cc | 12 +- crawl-ref/source/effects.cc | 6 +- crawl-ref/source/fight.cc | 3 +- crawl-ref/source/food.cc | 1 + crawl-ref/source/invent.cc | 2 +- crawl-ref/source/it_use2.cc | 1 - crawl-ref/source/item_use.cc | 2 +- crawl-ref/source/itemname.cc | 62 +------ crawl-ref/source/makeitem.cc | 43 +---- crawl-ref/source/player.cc | 4 +- crawl-ref/source/randart.cc | 373 +++++++++++++++++++++++++++++-------------- crawl-ref/source/randart.h | 4 +- 12 files changed, 278 insertions(+), 235 deletions(-) (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc index d288ca768d..9ef30e22da 100644 --- a/crawl-ref/source/beam.cc +++ b/crawl-ref/source/beam.cc @@ -1331,13 +1331,13 @@ static void _zappy( zap_type z_type, int power, bolt &pbolt ) } // Fill - pbolt.name = zinfo->name; - pbolt.flavour = zinfo->flavour; - pbolt.colour = zinfo->colour; - pbolt.type = dchar_glyph(zinfo->glyph); + pbolt.name = zinfo->name; + pbolt.flavour = zinfo->flavour; + pbolt.colour = zinfo->colour; + pbolt.type = dchar_glyph(zinfo->glyph); pbolt.obvious_effect = zinfo->always_obvious; - pbolt.is_beam = zinfo->can_beam; - pbolt.is_explosion = zinfo->is_explosion; + pbolt.is_beam = zinfo->can_beam; + pbolt.is_explosion = zinfo->is_explosion; if (zinfo->power_cap > 0) power = std::min(zinfo->power_cap, power); diff --git a/crawl-ref/source/effects.cc b/crawl-ref/source/effects.cc index 10087e2ddb..2d6da14541 100644 --- a/crawl-ref/source/effects.cc +++ b/crawl-ref/source/effects.cc @@ -1694,11 +1694,11 @@ bool acquirement(object_class_type class_wanted, int agent, if (is_random_artefact(thing)) { origin_acquired(thing, agent); - if ( !is_unrandom_artefact(thing) ) + if (!is_unrandom_artefact(thing)) { - // give another name that takes god gift into account + // Give another name that takes god gift into account. thing.props["randart_name"].get_string() = - randart_name(thing, false); + artefact_name(thing, false); } } } diff --git a/crawl-ref/source/fight.cc b/crawl-ref/source/fight.cc index 40ac2c348d..465afc5ed3 100644 --- a/crawl-ref/source/fight.cc +++ b/crawl-ref/source/fight.cc @@ -4064,7 +4064,8 @@ static bool wielded_weapon_check(const item_def *weapon) if (!you.received_weapon_warning && !you.confused() && (weapon && weapon->base_type != OBJ_STAVES && (weapon->base_type != OBJ_WEAPONS || is_range_weapon(*weapon)) - || you.attribute[ATTR_WEAPON_SWAP_INTERRUPTED])) + || you.attribute[ATTR_WEAPON_SWAP_INTERRUPTED] + && you_tran_can_wear(EQ_WEAPON))) { std::string prompt = "Really attack while "; if (!weapon) diff --git a/crawl-ref/source/food.cc b/crawl-ref/source/food.cc index 69a1cb036f..a3cf2ee638 100644 --- a/crawl-ref/source/food.cc +++ b/crawl-ref/source/food.cc @@ -179,6 +179,7 @@ void weapon_switch(int targ) you.time_taken /= 10; } + you.wield_change = true; you.turn_is_over = true; } diff --git a/crawl-ref/source/invent.cc b/crawl-ref/source/invent.cc index b396e80fd3..b972967274 100644 --- a/crawl-ref/source/invent.cc +++ b/crawl-ref/source/invent.cc @@ -806,7 +806,7 @@ static bool _item_class_selected(const item_def &i, int selector) switch (selector) { case OBJ_ARMOUR: - return (you_tran_can_wear(i)); + return (itype == OBJ_ARMOUR && you_tran_can_wear(i)); case OSEL_UNIDENT: return !fully_identified(i); diff --git a/crawl-ref/source/it_use2.cc b/crawl-ref/source/it_use2.cc index f6f323e511..16ba9dfdd4 100644 --- a/crawl-ref/source/it_use2.cc +++ b/crawl-ref/source/it_use2.cc @@ -425,7 +425,6 @@ bool unwield_item(bool showMsgs) if (showMsgs) mpr("You feel less violent."); break; - case SPWPN_SCYTHE_OF_CURSES: case SPWPN_STAFF_OF_OLGREB: item.plus = 0; item.plus2 = 0; diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc index b566cbcac0..d28de4113f 100644 --- a/crawl-ref/source/item_use.cc +++ b/crawl-ref/source/item_use.cc @@ -718,7 +718,7 @@ void wield_effects(int item_wield_2, bool showMsgs) case SPWPN_SCYTHE_OF_CURSES: you.special_wield = SPWLD_CURSE; - if (!item_cursed(item) && one_chance_in(5)) + if (!item_cursed(item) && one_chance_in(3)) do_curse_item(item, false); break; diff --git a/crawl-ref/source/itemname.cc b/crawl-ref/source/itemname.cc index 83f4b58792..b13d633ed0 100644 --- a/crawl-ref/source/itemname.cc +++ b/crawl-ref/source/itemname.cc @@ -261,54 +261,6 @@ std::string item_def::name(description_level_type descrip, } -static const char* fixed_artefact_name( const item_def& item, bool ident ) -{ - if (ident) - { - switch (item.special) - { - case SPWPN_SINGING_SWORD: return "Singing Sword"; - case SPWPN_WRATH_OF_TROG: return "Wrath of Trog"; - case SPWPN_SCYTHE_OF_CURSES: return "Scythe of Curses"; - case SPWPN_MACE_OF_VARIABILITY: return "Mace of Variability"; - case SPWPN_GLAIVE_OF_PRUNE: return "Glaive of Prune"; - case SPWPN_SCEPTRE_OF_TORMENT: return "Sceptre of Torment"; - case SPWPN_SWORD_OF_ZONGULDROK: return "Sword of Zonguldrok"; - case SPWPN_SWORD_OF_CEREBOV: return "Sword of Cerebov"; - case SPWPN_STAFF_OF_DISPATER: return "Staff of Dispater"; - case SPWPN_SCEPTRE_OF_ASMODEUS: return "Sceptre of Asmodeus"; - case SPWPN_SWORD_OF_POWER: return "Sword of Power"; - case SPWPN_KNIFE_OF_ACCURACY: return "Knife of Accuracy"; - case SPWPN_STAFF_OF_OLGREB: return "Staff of Olgreb"; - case SPWPN_VAMPIRES_TOOTH: return "Vampire's Tooth"; - case SPWPN_STAFF_OF_WUCAD_MU: return "Staff of Wucad Mu"; - default: return "Brodale's Buggy Bola"; - } - } - else - { - switch (item.special) - { - case SPWPN_SINGING_SWORD: return "golden long sword"; - case SPWPN_WRATH_OF_TROG: return "bloodstained battleaxe"; - case SPWPN_SCYTHE_OF_CURSES: return "warped scythe"; - case SPWPN_MACE_OF_VARIABILITY: return "shimmering mace"; - case SPWPN_GLAIVE_OF_PRUNE: return "purple glaive"; - case SPWPN_SCEPTRE_OF_TORMENT: return "jewelled golden mace"; - case SPWPN_SWORD_OF_ZONGULDROK: return "bone long sword"; - case SPWPN_SWORD_OF_CEREBOV: return "great serpentine sword"; - case SPWPN_STAFF_OF_DISPATER: return "golden staff"; - case SPWPN_SCEPTRE_OF_ASMODEUS: return "ruby sceptre"; - case SPWPN_SWORD_OF_POWER: return "chunky great sword"; - case SPWPN_KNIFE_OF_ACCURACY: return "thin dagger"; - case SPWPN_STAFF_OF_OLGREB: return "green glowing staff"; - case SPWPN_VAMPIRES_TOOTH: return "ivory dagger"; - case SPWPN_STAFF_OF_WUCAD_MU: return "ephemeral quarterstaff"; - default: return "buggy bola"; - } - } -} - const char* weapon_brand_name(const item_def& item, bool terse) { switch (get_weapon_brand(item)) @@ -1053,15 +1005,9 @@ std::string item_def::name_aux( description_level_type desc, buff << " "; } - if (is_random_artefact( *this ) && !dbname) - { - buff << get_randart_name(*this); - break; - } - - if (is_fixed_artefact( *this ) && !dbname) + if (is_artefact( *this ) && !dbname) { - buff << fixed_artefact_name( *this, know_type ); + buff << get_artefact_name(*this); break; } @@ -1168,7 +1114,7 @@ std::string item_def::name_aux( description_level_type desc, // When asking for the base item name, randartism is ignored. if (is_random_artefact( *this ) && !basename && !dbname) { - buff << get_randart_name(*this); + buff << get_artefact_name(*this); break; } @@ -1419,7 +1365,7 @@ std::string item_def::name_aux( description_level_type desc, if (is_randart && !dbname) { - buff << get_randart_name(*this); + buff << get_artefact_name(*this); break; } diff --git a/crawl-ref/source/makeitem.cc b/crawl-ref/source/makeitem.cc index d70d8e4955..bd7131e0bd 100644 --- a/crawl-ref/source/makeitem.cc +++ b/crawl-ref/source/makeitem.cc @@ -347,48 +347,9 @@ void item_colour( item_def &item ) switch (item.base_type) { case OBJ_WEAPONS: - if (is_unrandom_artefact( item )) - break; // unrandarts already coloured + if (is_unrandom_artefact( item ) || is_fixed_artefact( item )) + break; // unrandarts and fixed arts already coloured - if (is_fixed_artefact( item )) - { - switch (item.special) - { - case SPWPN_SINGING_SWORD: - case SPWPN_SCEPTRE_OF_TORMENT: - item.colour = YELLOW; - break; - case SPWPN_WRATH_OF_TROG: - case SPWPN_SWORD_OF_POWER: - item.colour = RED; - break; - case SPWPN_SCYTHE_OF_CURSES: - item.colour = DARKGREY; - break; - case SPWPN_MACE_OF_VARIABILITY: - item.colour = random_colour(); - break; - case SPWPN_GLAIVE_OF_PRUNE: - item.colour = MAGENTA; - break; - case SPWPN_SWORD_OF_ZONGULDROK: - item.colour = LIGHTGREY; - break; - case SPWPN_KNIFE_OF_ACCURACY: - item.colour = LIGHTCYAN; - break; - case SPWPN_STAFF_OF_OLGREB: - item.colour = GREEN; - break; - case SPWPN_VAMPIRES_TOOTH: - item.colour = WHITE; - break; - case SPWPN_STAFF_OF_WUCAD_MU: - item.colour = BROWN; - break; - } - break; - } if (is_demonic( item )) item.colour = random_uncommon_colour(); diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index b386f0f4cb..3e1d8450fa 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -571,8 +571,8 @@ bool you_can_wear(int eq, bool special_armour) if (you.species == SP_GHOUL && eq == EQ_GLOVES) return (false); - if (eq == EQ_HELMET - && (player_mutation_level(MUT_HORNS) || player_mutation_level(MUT_BEAK))) + if (eq == EQ_HELMET && (player_mutation_level(MUT_HORNS) + || player_mutation_level(MUT_BEAK))) { return (special_armour); } diff --git a/crawl-ref/source/randart.cc b/crawl-ref/source/randart.cc index 0d885378b1..ffaec3a50d 100644 --- a/crawl-ref/source/randart.cc +++ b/crawl-ref/source/randart.cc @@ -31,6 +31,8 @@ #define RANDART_NAME_KEY "randart_name" #define RANDART_APPEAR_KEY "randart_appearance" +static const char* _get_fixedart_name(const item_def &item); + // The initial generation of a randart is very simple - it occurs in // dungeon.cc and consists of giving it a few random things - plus & // plus2 mainly. @@ -1290,7 +1292,7 @@ static bool _pick_db_name( const item_def &item ) } } -std::string randart_name(const item_def &item, bool appearance) +std::string artefact_name(const item_def &item, bool appearance) { ASSERT(is_artefact(item)); @@ -1298,6 +1300,9 @@ std::string randart_name(const item_def &item, bool appearance) || item.base_type == OBJ_ARMOUR || item.base_type == OBJ_JEWELLERY); + if (is_fixed_artefact( item )) + return _get_fixedart_name( item ); + if (is_unrandom_artefact( item )) { const unrandart_entry *unrand = _seekunrandart( item ); @@ -1411,7 +1416,7 @@ std::string randart_name(const item_def &item, bool appearance) return result; } -std::string get_randart_name( const item_def &item ) +std::string get_artefact_name( const item_def &item ) { ASSERT( is_artefact( item ) ); @@ -1420,12 +1425,12 @@ std::string get_randart_name( const item_def &item ) // print artefact's real name if (item.props.exists(RANDART_NAME_KEY)) return item.props[RANDART_NAME_KEY].get_string(); - return randart_name(item, false); + return artefact_name(item, false); } // print artefact appearance if (item.props.exists(RANDART_APPEAR_KEY)) return item.props[RANDART_APPEAR_KEY].get_string(); - return randart_name(item, false); + return artefact_name(item, false); } int find_unrandart_index(const item_def& artefact) @@ -1482,11 +1487,222 @@ int find_okay_unrandart(unsigned char aclass, unsigned char atype) return (ret); } +struct fixedart_setting +{ + int which; + const char* name; + const char* appearance; + object_class_type base; + int subtype; + int acc; + int dam; + int colour; + bool curse; +}; + +const fixedart_setting fixedarts[] = { + + { + SPWPN_SINGING_SWORD, + "Singing Sword", + "golden long sword", + OBJ_WEAPONS, + WPN_LONG_SWORD, + 7, + 7, + YELLOW, + false + }, + + { + SPWPN_WRATH_OF_TROG, + "Wrath of Trog", + "bloodstained battleaxe", + OBJ_WEAPONS, + WPN_BATTLEAXE, + 3, + 11, + RED, + false + }, + + { + SPWPN_SCYTHE_OF_CURSES, + "Scythe of Curses", + "warped scythe", + OBJ_WEAPONS, + WPN_SCYTHE, + 13, + 13, + DARKGREY, + true + }, + + { + SPWPN_MACE_OF_VARIABILITY, + "Mace of Variability", + "shimmering mace", + OBJ_WEAPONS, + WPN_MACE, + random2(16) - 4, + random2(16) - 4, + random_colour(), + false + }, + + { + SPWPN_GLAIVE_OF_PRUNE, + "Glaive of Prune", + "purple glaive", + OBJ_WEAPONS, + WPN_GLAIVE, + 0, + 12, + MAGENTA, + false + }, + + { + SPWPN_SCEPTRE_OF_TORMENT, + "Sceptre of Torment", + "jewelled golden mace", + OBJ_WEAPONS, + WPN_MACE, + 7, + 6, + YELLOW, + false + }, + + { + SPWPN_SWORD_OF_ZONGULDROK, + "Sword of Zonguldrok", + "bone long sword", + OBJ_WEAPONS, + WPN_LONG_SWORD, + 9, + 9, + LIGHTGREY, + false + }, + + { + SPWPN_SWORD_OF_POWER, + "Sword of Power", + "chunky great sword", + OBJ_WEAPONS, + WPN_GREAT_SWORD, + 0, // set on wield + 0, // set on wield + RED, + false + }, + + { + SPWPN_KNIFE_OF_ACCURACY, + "Knife of Accuracy", + "thin dagger", + OBJ_WEAPONS, + WPN_DAGGER, + 27, + -1, + LIGHTCYAN, + false + }, + + { + SPWPN_STAFF_OF_OLGREB, + "Staff of Olgreb", + "green glowing staff", + OBJ_WEAPONS, + WPN_QUARTERSTAFF, + 0, // set on wield + 0, // set on wield + GREEN, + false + }, + + { + SPWPN_VAMPIRES_TOOTH, + "Vampire's Tooth", + "ivory dagger", + OBJ_WEAPONS, + WPN_DAGGER, + 3, + 4, + WHITE, + false + }, + + { + SPWPN_STAFF_OF_WUCAD_MU, + "Staff of Wucad Mu", + "ephemeral quarterstaff", + OBJ_WEAPONS, + WPN_QUARTERSTAFF, + 0, // set on wield + 0, // set on wield + BROWN, + false + }, + + { + SPWPN_SWORD_OF_CEREBOV, + "Sword of Cerebov", + "great serpentine sword", + OBJ_WEAPONS, + WPN_GREAT_SWORD, + 6, + 6, + YELLOW, + true + }, + + { + SPWPN_STAFF_OF_DISPATER, + "Staff of Dispater", + "golden staff", + OBJ_WEAPONS, + WPN_QUARTERSTAFF, + 4, + 4, + YELLOW, + false + }, + + { + SPWPN_SCEPTRE_OF_ASMODEUS, + "Sceptre of Asmodeus", + "ruby sceptre", + OBJ_WEAPONS, + WPN_QUARTERSTAFF, + 7, + 7, + RED, + false + } +}; + +static const char* _get_fixedart_name(const item_def &item) +{ + // Find the appropriate fixed artefact. + for (unsigned int i = 0; i < ARRAYSZ(fixedarts); ++i) + { + if (fixedarts[i].which == item.special) + { + const fixedart_setting *fixed = &fixedarts[i]; + return (item_type_known(item) ? fixed->name : fixed->appearance); + } + } + return (item_type_known(item) ? "Unnamed Artefact" : "buggy fixedart"); +} + // which == 0 (default) gives random fixed artefact. // Returns true if successful. bool make_item_fixed_artefact( item_def &item, bool in_abyss, int which ) { const bool force = (which != 0); + const fixedart_setting *fixedart = NULL; if (!force) { @@ -1505,125 +1721,44 @@ bool make_item_fixed_artefact( item_def &item, bool in_abyss, int which ) return (false); } - switch (which) + // Find the appropriate fixed artefact. + for (unsigned int i = 0; i < ARRAYSZ(fixedarts); ++i) { - case SPWPN_SINGING_SWORD: - item.base_type = OBJ_WEAPONS; - item.sub_type = WPN_LONG_SWORD; - item.plus = 7; - item.plus2 = 7; - break; - - case SPWPN_WRATH_OF_TROG: - item.base_type = OBJ_WEAPONS; - item.sub_type = WPN_BATTLEAXE; - item.plus = 3; - item.plus2 = 11; - break; - - case SPWPN_SCYTHE_OF_CURSES: - item.base_type = OBJ_WEAPONS; - item.sub_type = WPN_SCYTHE; - item.plus = 13; - item.plus2 = 13; - break; - - case SPWPN_MACE_OF_VARIABILITY: - item.base_type = OBJ_WEAPONS; - item.sub_type = WPN_MACE; - item.plus = random2(16) - 4; - item.plus2 = random2(16) - 4; - break; - - case SPWPN_GLAIVE_OF_PRUNE: - item.base_type = OBJ_WEAPONS; - item.sub_type = WPN_GLAIVE; - item.plus = 0; - item.plus2 = 12; - break; - - case SPWPN_SCEPTRE_OF_TORMENT: - item.base_type = OBJ_WEAPONS; - item.sub_type = WPN_MACE; - item.plus = 7; - item.plus2 = 6; - break; - - case SPWPN_SWORD_OF_ZONGULDROK: - item.base_type = OBJ_WEAPONS; - item.sub_type = WPN_LONG_SWORD; - item.plus = 9; - item.plus2 = 9; - break; - - case SPWPN_SWORD_OF_POWER: - item.base_type = OBJ_WEAPONS; - item.sub_type = WPN_GREAT_SWORD; - item.plus = 0; // set on wield - item.plus2 = 0; // set on wield - break; - - case SPWPN_KNIFE_OF_ACCURACY: - item.base_type = OBJ_WEAPONS; - item.sub_type = WPN_DAGGER; - item.plus = 27; - item.plus2 = -1; - break; - - case SPWPN_STAFF_OF_OLGREB: - item.base_type = OBJ_WEAPONS; - item.sub_type = WPN_QUARTERSTAFF; - item.plus = 0; // set on wield - item.plus2 = 0; // set on wield - break; - - case SPWPN_VAMPIRES_TOOTH: - item.base_type = OBJ_WEAPONS; - item.sub_type = WPN_DAGGER; - item.plus = 3; - item.plus2 = 4; - break; - - case SPWPN_STAFF_OF_WUCAD_MU: - item.base_type = OBJ_WEAPONS; - item.sub_type = WPN_QUARTERSTAFF; - item.plus = 0; // set on wield - item.plus2 = 0; // set on wield - break; - - case SPWPN_SWORD_OF_CEREBOV: - item.base_type = OBJ_WEAPONS; - item.sub_type = WPN_GREAT_SWORD; - item.plus = 6; - item.plus2 = 6; - item.colour = YELLOW; - do_curse_item( item ); - break; - - case SPWPN_STAFF_OF_DISPATER: - item.base_type = OBJ_WEAPONS; - item.sub_type = WPN_QUARTERSTAFF; - item.plus = 4; - item.plus2 = 4; - item.colour = YELLOW; - break; - - case SPWPN_SCEPTRE_OF_ASMODEUS: - item.base_type = OBJ_WEAPONS; - item.sub_type = WPN_QUARTERSTAFF; - item.plus = 7; - item.plus2 = 7; - item.colour = RED; - break; + if (fixedarts[i].which == which) + { + fixedart = &fixedarts[i]; + break; + } + } - default: - DEBUGSTR( "Trying to create illegal fixed artefact!" ); + // None found? + if (fixedart == NULL) + { +#ifdef DEBUG_DIAGNOSTICS + mprf(MSGCH_ERROR, "Couldn't find fixed artefact %d", which); +#endif return (false); } // If we get here, we've made the artefact - item.special = which; - item.quantity = 1; + item.base_type = fixedart->base; + item.sub_type = fixedart->subtype; + item.plus = fixedart->acc; + item.plus2 = fixedart->dam; + item.colour = fixedart->colour; + item.special = which; + item.quantity = 1; + + // get true artefact name + ASSERT(!item.props.exists( RANDART_NAME_KEY )); + item.props[RANDART_NAME_KEY].get_string() = fixedart->name; + + // get artefact appearance + ASSERT(!item.props.exists( RANDART_APPEAR_KEY )); + item.props[RANDART_APPEAR_KEY].get_string() = fixedart->appearance; + + if (fixedart->curse) + do_curse_item(item); // Items originally generated in the abyss and not found will be // shifted to "lost in abyss", and will only be found there. -- bwr @@ -1882,11 +2017,11 @@ bool make_item_randart( item_def &item ) // get true artefact name ASSERT(!item.props.exists( RANDART_NAME_KEY )); - item.props[RANDART_NAME_KEY].get_string() = randart_name(item, false); + item.props[RANDART_NAME_KEY].get_string() = artefact_name(item, false); // get artefact appearance ASSERT(!item.props.exists( RANDART_APPEAR_KEY )); - item.props[RANDART_APPEAR_KEY].get_string() = randart_name(item, true); + item.props[RANDART_APPEAR_KEY].get_string() = artefact_name(item, true); return (true); } diff --git a/crawl-ref/source/randart.h b/crawl-ref/source/randart.h index 19b44981a3..e33d81e765 100644 --- a/crawl-ref/source/randart.h +++ b/crawl-ref/source/randart.h @@ -33,12 +33,12 @@ void set_unique_item_status( object_class_type base_type, int type, /* *********************************************************************** * called from: itemname * *********************************************************************** */ -std::string get_randart_name( const item_def &item ); +std::string get_artefact_name( const item_def &item ); /* *********************************************************************** * called from: effects * *********************************************************************** */ -std::string randart_name( const item_def &item, bool appearance = false ); +std::string artefact_name( const item_def &item, bool appearance = false ); /* *********************************************************************** * called from: describe -- cgit v1.2.3-54-g00ecf