From 05d3781c9f84d761b4f0aa7c3241aea9523710f8 Mon Sep 17 00:00:00 2001 From: zelgadis Date: Tue, 27 May 2008 08:41:39 +0000 Subject: If you try to butcher when there's no corpse on the ground but there's corpses in your pack the game will tell you to drop them so they can be butchered. And if when you butcher a corpse on the ground there's also one in your pack the game will remind you about it, suggesting that you might want to also butcher the corpse in your pack. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5290 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/food.cc | 68 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 64 insertions(+), 4 deletions(-) (limited to 'crawl-ref/source/food.cc') diff --git a/crawl-ref/source/food.cc b/crawl-ref/source/food.cc index ba293e99d2..b759a82cd8 100644 --- a/crawl-ref/source/food.cc +++ b/crawl-ref/source/food.cc @@ -325,11 +325,61 @@ static void _terminate_butchery(bool wpn_switch, bool removed_gloves, you.turn_is_over = true; } +static bool _have_corpses_in_pack(bool remind) +{ + int num = 0; + + for (int i = 0; i < ENDOFPACK; i++) + { + item_def &obj(you.inv[i]); + + if (!is_valid_item( obj )) + continue; + + if (obj.base_type == OBJ_CORPSES) + num++; + } + + if (num == 0) + return false; + + std::string verb = (you.species == SP_VAMPIRE + && you.experience_level > 5) ? "bottle" : "butcher"; + std::string noun, pronoun; + + if (num == 1) + { + noun = "corpse"; + pronoun = "it"; + } + else + { + noun = "corpses"; + pronoun = "them"; + } + + std::ostringstream text; + + if (remind) + text << "You might want to also " << verb << " the " << noun + << " in your pack."; + else + text << "If you dropped the " << noun << " in your pack on solid " + << "ground or into shallow water then you could " << verb + << " " << pronoun << "."; + + mpr(text.str().c_str()); + + return true; +} + + bool butchery(int which_corpse) { if (igrd[you.x_pos][you.y_pos] == NON_ITEM) { - mpr("There isn't anything here!"); + if (!_have_corpses_in_pack(false)) + mpr("There isn't anything here!"); return (false); } @@ -392,9 +442,10 @@ bool butchery(int which_corpse) if (num_corpses == 0) { - mprf("There isn't anything to %s here.", - you.species == SP_VAMPIRE && you.experience_level > 5 ? "bottle" - : "butcher"); + if (!_have_corpses_in_pack(false)) + mprf("There isn't anything to %s here.", + (you.species == SP_VAMPIRE + && you.experience_level > 5) ? "bottle" : "butcher"); return (false); } @@ -433,6 +484,9 @@ bool butchery(int which_corpse) _terminate_butchery(wpn_switch, removed_gloves, new_cursed, old_weapon, old_gloves); + // Remind player of corpses in pack that could be butchered or + // bottled. + _have_corpses_in_pack(true); return success; } @@ -524,6 +578,12 @@ bool butchery(int which_corpse) old_weapon, old_gloves); } + + if (success) + // Remind player of corpses in pack that could be butchered or + // bottled. + _have_corpses_in_pack(true); + return success; } // end butchery() -- cgit v1.2.3-54-g00ecf