summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2009-06-01 15:07:05 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2009-06-01 15:07:05 +0000
commit11a4b4ecd53ec83ab4c92c4896566aeebe06ccc1 (patch)
tree46471b69282557785dc0490998c5bdf7c3c31030
parentdf2252332c751342de283f3cc32ff5c34d3b8a53 (diff)
downloadcrawl-ref-11a4b4ecd53ec83ab4c92c4896566aeebe06ccc1.tar.gz
crawl-ref-11a4b4ecd53ec83ab4c92c4896566aeebe06ccc1.zip
* Fix bad item (and crash) resulting from the tile inventory not being
uptodate directly after butchery or during multipickup. * More tutorial tweaks, mostly calling screen updates before displaying certain messages. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/branches/stone_soup-0.5@9873 c06c8d41-db1a-0410-9941-cceddc491573
-rw-r--r--crawl-ref/docs/options_guide.txt8
-rw-r--r--crawl-ref/source/command.cc2
-rw-r--r--crawl-ref/source/dat/descript/ability.txt4
-rw-r--r--crawl-ref/source/describe.cc4
-rw-r--r--crawl-ref/source/directn.cc11
-rw-r--r--crawl-ref/source/religion.cc2
-rw-r--r--crawl-ref/source/tilereg.cc25
-rw-r--r--crawl-ref/source/travel.cc2
-rw-r--r--crawl-ref/source/tutorial.cc96
9 files changed, 114 insertions, 40 deletions
diff --git a/crawl-ref/docs/options_guide.txt b/crawl-ref/docs/options_guide.txt
index 982f01ff40..03ce3406b5 100644
--- a/crawl-ref/docs/options_guide.txt
+++ b/crawl-ref/docs/options_guide.txt
@@ -70,7 +70,7 @@ The contents of this text are:
mlist_allow_alternate_layout, mlist_targetting, classic_hud,
menu_colour, menu_colour_prefix_class, menu_colour_shops,
message_colour, force_more_message,
- msg_condense_repeats
+ msg_condense_repeats, zap_evoke_reminder
4-k Missiles.
fire_items_start, fire_order
4-l Message Channels.
@@ -1411,6 +1411,12 @@ msg_condense_repeats = true
command (Ctrl-P) will likewise condense them into one. For example:
The killer bee misses you. (x5)
+zap_evoke_reminder = true
+ As of 0.5 wands need to be evoked rather than zapped. To smoothen
+ the transition process a message is displayed the first time the
+ player presses 'Z' while there is a wand in inventory.
+ Set this option to false to suppress said message.
+
4-k Missiles.
-----------------
diff --git a/crawl-ref/source/command.cc b/crawl-ref/source/command.cc
index ce6644780c..2152b851b0 100644
--- a/crawl-ref/source/command.cc
+++ b/crawl-ref/source/command.cc
@@ -2279,7 +2279,7 @@ static void _add_formatted_tutorial_help(column_composer &cols)
"<magenta>!</magenta> : potions (<w>q</w>uaff)\n"
"<blue>=</blue> : rings (<w>P</w>ut on and <w>R</w>emove)\n"
"<red>\"</red> : amulets (<w>P</w>ut on and <w>R</w>emove)\n"
- "<darkgrey>/</darkgrey> : wands (<w>Z</w>ap)\n"
+ "<darkgrey>/</darkgrey> : wands (e<w>V</w>oke)\n"
"<lightcyan>";
get_item_symbol(DNGN_ITEM_BOOK, &ch, &colour);
text << static_cast<char>(ch);
diff --git a/crawl-ref/source/dat/descript/ability.txt b/crawl-ref/source/dat/descript/ability.txt
index 05764a82d0..052c1d57df 100644
--- a/crawl-ref/source/dat/descript/ability.txt
+++ b/crawl-ref/source/dat/descript/ability.txt
@@ -132,7 +132,7 @@ Randomly translocate a short distance.
%%%%
Evoke Berserk Rage
-Go berserk. Going berserk greatly, if temporarily, increases your hit points and damage output in melee fights. It will time out quickly if you don't kill anything, but may be extended by multiple kills. While berserk, you cannot perform a number of actions such as, for example, (un)wield a weapon, quaff something, zap wands, evoke items or cast spells. Such a rage is usually followed by deep exhaustion, a time during which you are slowed down, cannot berserk again, and occasionally even pass out.
+Go berserk. Going berserk greatly, if temporarily, increases your hit points and damage output in melee fights. It will time out quickly if you don't kill anything, but may be extended by multiple kills. While berserk, you cannot perform a number of actions such as, for example, (un)wield a weapon, quaff something, evoke wands or items, or cast spells. Such a rage is usually followed by deep exhaustion, a time during which you are slowed down, cannot berserk again, and occasionally even pass out.
%%%%
Evoke Invisibility
@@ -253,7 +253,7 @@ Set all spellbooks within your field of vision on fire. The fire is fuelled by T
%%%%
Berserk
-Go berserk. Going berserk greatly, if temporarily, increases your hit points and damage output in melee fights. It will time out quickly if you don't kill anything, but may be extended by multiple kills. While berserk, you cannot perform a number of actions such as, for example, (un)wield a weapon, quaff something, zap wands, evoke items or cast spells. Such a rage is usually followed by deep exhaustion, a time during which you are slowed down, and cannot berserk again. Unlike other sources of rage, depending on your piety Trog may occasionally prevent you from passing out.
+Go berserk. Going berserk greatly, if temporarily, increases your hit points and damage output in melee fights. It will time out quickly if you don't kill anything, but may be extended by multiple kills. While berserk, you cannot perform a number of actions such as, for example, (un)wield a weapon, quaff something, evoke wands or items, or cast spells. Such a rage is usually followed by deep exhaustion, a time during which you are slowed down, and cannot berserk again. Unlike other sources of rage, depending on your piety Trog may occasionally prevent you from passing out.
%%%%
Trog's Hand
diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc
index 9437a4c4c8..796b75b7e1 100644
--- a/crawl-ref/source/describe.cc
+++ b/crawl-ref/source/describe.cc
@@ -34,6 +34,7 @@ REVISION("$Rev$");
#include "it_use2.h"
#include "itemname.h"
#include "itemprop.h"
+#include "items.h"
#include "macro.h"
#include "mapmark.h"
#include "menu.h"
@@ -2285,6 +2286,9 @@ static bool _describe_spells(const item_def &item)
//---------------------------------------------------------------
void describe_item( item_def &item, bool allow_inscribe )
{
+ if (!is_valid_item(item))
+ return;
+
while (true)
{
const bool spells_shown = _show_item_description(item);
diff --git a/crawl-ref/source/directn.cc b/crawl-ref/source/directn.cc
index 165aae3fec..e24ddacbb8 100644
--- a/crawl-ref/source/directn.cc
+++ b/crawl-ref/source/directn.cc
@@ -1733,8 +1733,9 @@ void direction(dist& moves, targeting_type restricts,
std::string get_terse_square_desc(const coord_def &gc)
{
- std::string desc;
+ std::string desc = "";
const char *unseen_desc = "[unseen terrain]";
+
if (gc == you.pos())
desc = you.your_name;
else if (!map_bounds(gc))
@@ -1763,7 +1764,10 @@ std::string get_terse_square_desc(const coord_def &gc)
desc = mons.full_name(DESC_PLAIN, true);
}
else if (igrd(gc) != NON_ITEM)
- desc = mitm[igrd(gc)].name(DESC_PLAIN);
+ {
+ if (is_valid_item(mitm[igrd(gc)]))
+ desc = mitm[igrd(gc)].name(DESC_PLAIN);
+ }
else
desc = feature_description(gc, false, DESC_PLAIN, false);
@@ -1812,7 +1816,8 @@ void get_square_desc(const coord_def &c, describe_info &inf,
{
// Second priority: objects.
// If examine_mons is true, use terse descriptions.
- get_item_desc(mitm[oid], inf, examine_mons);
+ if (is_valid_item(mitm[oid]))
+ get_item_desc(mitm[oid], inf, examine_mons);
}
else
{
diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc
index 28a42faf35..a6c91d3074 100644
--- a/crawl-ref/source/religion.cc
+++ b/crawl-ref/source/religion.cc
@@ -780,7 +780,7 @@ std::string get_god_dislikes(god_type which_god, bool /*verbose*/)
case GOD_TROG:
dislikes.push_back("you memorise spells");
- dislikes.push_back("you cast spells");
+ dislikes.push_back("you attempt to cast spells");
break;
case GOD_BEOGH:
diff --git a/crawl-ref/source/tilereg.cc b/crawl-ref/source/tilereg.cc
index 007f16c99c..3bb15874ae 100644
--- a/crawl-ref/source/tilereg.cc
+++ b/crawl-ref/source/tilereg.cc
@@ -17,6 +17,7 @@ REVISION("$Rev$");
#include "itemname.h"
#include "it_use2.h"
#include "item_use.h"
+#include "items.h"
#include "message.h"
#include "misc.h"
#include "menu.h"
@@ -1315,21 +1316,24 @@ void InventoryRegion::render()
const coord_def min_pos(sx, sy - dy);
const coord_def max_pos(ex, ey);
- std::string desc;
- if (floor)
+ std::string desc = "";
+ if (floor && is_valid_item(mitm[idx]))
desc = mitm[idx].name(DESC_PLAIN);
- else
+ else if (!floor && is_valid_item(you.inv[idx]))
desc = you.inv[idx].name(DESC_INVENTORY_EQUIP);
- m_tag_font->render_string(x, y, desc.c_str(),
- min_pos, max_pos, WHITE, false, 200);
+ if (!desc.empty())
+ {
+ m_tag_font->render_string(x, y, desc.c_str(),
+ min_pos, max_pos, WHITE, false, 200);
+ }
}
}
void InventoryRegion::add_quad_char(char c, int x, int y, int ofs_x, int ofs_y)
{
int num = c - '0';
- assert(num >=0 && num <= 9);
+ assert(num >= 0 && num <= 9);
int idx = TILE_NUM0 + num;
m_buf_main.add(idx, x, y, ofs_x, ofs_y, false);
@@ -1626,6 +1630,9 @@ bool InventoryRegion::update_tip_text(std::string& tip)
{
const item_def &item = mitm[idx];
+ if (!is_valid_item(item))
+ return (false);
+
tip = "";
if (m_items[item_idx].key)
{
@@ -1663,6 +1670,9 @@ bool InventoryRegion::update_tip_text(std::string& tip)
else
{
const item_def &item = you.inv[idx];
+ if (!is_valid_item(item))
+ return (false);
+
tip = item.name(DESC_INVENTORY_EQUIP);
if (!display_actions)
@@ -1860,6 +1870,9 @@ bool InventoryRegion::update_alt_text(std::string &alt)
else
item = &you.inv[idx];
+ if (!is_valid_item(*item))
+ return (false);
+
describe_info inf;
get_item_desc(*item, inf, true);
diff --git a/crawl-ref/source/travel.cc b/crawl-ref/source/travel.cc
index 4cfb3e457d..d8e1344545 100644
--- a/crawl-ref/source/travel.cc
+++ b/crawl-ref/source/travel.cc
@@ -2968,7 +2968,7 @@ void start_travel(const coord_def& p)
void start_explore(bool grab_items)
{
if (Options.tut_explored)
- Options.tut_explored = 0;
+ Options.tut_explored = false;
if (!player_in_mappable_area())
{
diff --git a/crawl-ref/source/tutorial.cc b/crawl-ref/source/tutorial.cc
index b11e93a761..8a219e6d29 100644
--- a/crawl-ref/source/tutorial.cc
+++ b/crawl-ref/source/tutorial.cc
@@ -26,6 +26,7 @@ REVISION("$Rev$");
#include "food.h"
#include "format.h"
#include "initfile.h"
+#include "invent.h"
#include "itemname.h"
#include "itemprop.h"
#include "items.h"
@@ -726,10 +727,18 @@ void tutorial_death_screen()
text = "As a Conjurer your main weapon should be offensive magic. Cast "
"spells more often! Remember to rest when your Magic is low.";
}
- else if (you.religion == GOD_TROG && Options.tut_berserk_counter <= 3 )
+ else if (you.religion == GOD_TROG && Options.tut_berserk_counter <= 3
+ && !you.duration[DUR_EXHAUSTED])
{
text = "Don't forget to go berserk when fighting particularly "
"difficult foes. It is risky, but makes you faster and beefier.";
+
+ if (you.hunger_state <= HS_HUNGRY)
+ {
+ text += " Berserking is impossible while hungry or worse, so make "
+ "sure to keep some food with you that you can eat when you "
+ "need to go berserk.";
+ }
}
else if (Options.tutorial_type == TUT_RANGER_CHAR
&& 2*Options.tut_throw_counter < Options.tut_melee_counter )
@@ -1226,13 +1235,11 @@ void tutorial_first_monster(const monsters &mon)
// If the first monster is sleeping wake it
// (highlighting is an unnecessary complication).
if (_mons_is_highlighted(&mon))
- {
noisy(1, mon.pos());
- viewwindow(true, false);
- }
stop_running();
+ viewwindow(true, false);
Options.tutorial_events[TUT_SEEN_MONSTER] = false;
Options.tutorial_left--;
Options.tut_just_triggered = true;
@@ -1355,6 +1362,7 @@ void tutorial_first_item(const item_def &item)
stop_running();
+ viewwindow(true, false);
Options.tutorial_events[TUT_SEEN_FIRST_OBJECT] = false;
Options.tutorial_left--;
Options.tut_just_triggered = true;
@@ -1928,6 +1936,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
tiles.place_cursor(CURSOR_TUTORIAL, gc);
tiles.add_text_tag(TAG_TUTORIAL, "Stairs", gc);
#endif
+ viewwindow(true, false);
text << "are some downstairs. You can enter the next (deeper) "
"level by following them down (<w>></w>). To get back to "
"this level again, press <w><<</w> while standing on the "
@@ -1959,6 +1968,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
tiles.place_cursor(CURSOR_TUTORIAL, gc);
tiles.add_text_tag(TAG_TUTORIAL, "Escape hatch", gc);
#endif
+ viewwindow(true, false);
text << "are some kind of escape hatch. You can use them to "
"quickly leave a level with <w><<</w> and <w>></w>, "
"respectively "
@@ -1986,6 +1996,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
tiles.place_cursor(CURSOR_TUTORIAL, gc);
tiles.add_text_tag(TAG_TUTORIAL, "Branch stairs", gc);
#endif
+ viewwindow(true, false);
text << "is the entrance to a different branch of the dungeon, "
"which might have different terrain, level layout and "
"monsters from the current main branch you're in. Branches "
@@ -2023,6 +2034,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
tiles.place_cursor(CURSOR_TUTORIAL, gc);
tiles.add_text_tag(TAG_TUTORIAL, "Portal", gc);
#endif
+ viewwindow(true, false);
text << _describe_portal(gc);
break;
@@ -2036,6 +2048,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
if (monster_at(gc) || you.pos() == gc)
DELAY_EVENT;
+ viewwindow(true, false);
text << "If any items are covering stairs or an escape hatch, then "
"that will be indicated by highlighting the <w><<</w> or "
"<w>></w> symbol, instead of hiding the stair symbol with "
@@ -2048,6 +2061,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
if (monster_at(gc) || you.pos() == gc)
DELAY_EVENT;
+ viewwindow(true, false);
#ifdef USE_TILE
text << "A small question mark on an item tile signifies that there "
"is at least one other item in the same heap that you may want "
@@ -2069,6 +2083,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
if (monster_at(gc) || (you.pos() == gc))
DELAY_EVENT;
+ viewwindow(true, false);
text << "If any items are covering a trap, then that will be "
"indicated by highlighting the <w>^</w> symbol, instead of "
"hiding the trap symbol with an item glyph.";
@@ -2113,6 +2128,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
tiles.add_text_tag(TAG_TUTORIAL, altar, gc);
}
#endif
+ viewwindow(true, false);
text << "is an altar. You can get information about it by pressing "
"<w>p</w> while standing on the square. Before taking up "
"the corresponding faith you'll be asked for confirmation.";
@@ -2131,6 +2147,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
tiles.place_cursor(CURSOR_TUTORIAL, gc);
tiles.add_text_tag(TAG_TUTORIAL, shop_name(gc), gc);
#endif
+ viewwindow(true, false);
text << "That "
#ifndef USE_TILE
<< _colourize_glyph(YELLOW, get_screen_glyph(gc)) << " "
@@ -2148,6 +2165,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
tiles.place_cursor(CURSOR_TUTORIAL, gc);
tiles.add_text_tag(TAG_TUTORIAL, "Closed door", gc);
#endif
+ viewwindow(true, false);
if (you.num_turns < 1)
DELAY_EVENT;
@@ -2164,7 +2182,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
text << "\nIn Tiles, the same can be achieved by clicking on an "
"adjacent door square.";
#endif
- if (Options.tut_explored)
+ if (!Options.tut_explored)
{
text << "\nTo avoid accidentally opening a door you'd rather "
"remain closed during travel or autoexplore, you can mark "
@@ -2174,7 +2192,6 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
"entering that grid until you remove the exclusion with "
"another press of <w>Xe</w>.";
}
-
break;
case TUT_SEEN_SECRET_DOOR:
@@ -2245,7 +2262,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
text << "\nAlso, new experience levels let you learn more spells "
"(the Spellcasting skill also does this). For now, you "
"should try to memorise the second spell of your "
- "starting book with <w>Mcb</w>, which can then be zapped "
+ "starting book with <w>Mbb</w>, which can then be zapped "
"with <w>zb</w>.";
#ifdef USE_TILE
text << " Memorising is also possible by doing a <w>left "
@@ -2300,6 +2317,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
break;
case TUT_YOU_ENCHANTED:
+ viewwindow(true, false);
text << "Enchantments of all types can befall you temporarily. "
"Brief descriptions of these appear at the lower end of the "
"stats area. Press <w>@</w> for more details. A list of all "
@@ -2444,6 +2462,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
case TUT_HEAVY_LOAD:
if (you.burden_state != BS_UNENCUMBERED)
{
+ viewwindow(true, false);
text << "It is not usually a good idea to run around encumbered; "
"it slows you down and increases your hunger.";
}
@@ -2713,6 +2732,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
break;
case TUT_POSTBERSERK:
+ viewwindow(true, false);
text << "Berserking is extremely exhausting! It burns a lot of "
"nutrition, and afterwards you are slowed down and "
"occasionally even pass out. Press <w>@</w> to see your "
@@ -2968,6 +2988,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
if (Options.tutorial_type != TUT_BERSERK_CHAR)
return;
+ viewwindow(true, false);
text << "Now that monster is scared of you! Note that you do not "
"absolutely have to follow it. Rather, you can let it run "
"away. Sometimes, though, it can be useful to attack a "
@@ -2983,6 +3004,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
if (const monsters *m = monster_at(gc))
tiles.add_text_tag(TAG_TUTORIAL, m->name(DESC_CAP_A), gc);
#endif
+ viewwindow(true, false);
text << "That monster looks a bit unusual. You might wish to examine "
"it a bit more closely by "
#ifdef USE_TILE
@@ -3034,6 +3056,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
tiles.add_text_tag(TAG_TUTORIAL, m->name(DESC_CAP_A), gc);
}
#endif
+ viewwindow(true, false);
if (!vis)
{
text << "Uh-oh, some monster noticed you, either one that's "
@@ -3067,6 +3090,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
if (!m || !you.can_see(m))
DELAY_EVENT;
+ viewwindow(true, false);
text << m->name(DESC_CAP_THE, true) << " didn't vanish, but merely "
"moved onto a square which you can't currently see. It's still "
"nearby, unless something happens to it in the short amount of "
@@ -3139,6 +3163,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
break;
case TUT_GLOWING:
+ viewwindow(true, false);
text << "Uh-oh, you've accumulated so much magical contamination that "
"you're glowing! You usually acquire magical contamination "
"from using some powerful magics, like invisibility, haste "
@@ -3170,6 +3195,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
break;
case TUT_CAUGHT_IN_NET:
+ viewwindow(true, false);
text << "While you are held in a net, you cannot move around or engage "
"monsters in combat. Instead, any movement you take is counted "
"as an attempt to struggle free from the net. With a wielded "
@@ -3792,11 +3818,27 @@ void tutorial_describe_item(const item_def &item)
break;
case OBJ_CORPSES:
+ Options.tutorial_events[TUT_SEEN_CARRION] = false;
+
+ if (item.sub_type == CORPSE_SKELETON)
+ {
+ ostr << "Skeletons can be used as components for certain "
+ "necromantic spells. Apart from that, they are "
+ "largely useless.";
+ if (in_inventory(item))
+ {
+ ostr << " In the drop menu you can select all skeletons "
+ "and rotten chunks or corpses in your inventory "
+ "at once with <w>d&</w>.";
+ }
+ break;
+ }
+
ostr << "Corpses lying on the floor can be <w>c</w>hopped up with "
"a sharp implement to produce chunks for food (though they "
"may not be healthy)";
- if (god_likes_butchery(you.religion))
+ if (!food_is_rotten(item) && god_likes_butchery(you.religion))
{
ostr << ", or as a sacrifice to "
<< god_name(you.religion)
@@ -3807,10 +3849,16 @@ void tutorial_describe_item(const item_def &item)
if (food_is_rotten(item))
{
ostr << "Rotten corpses won't be of any use to you, though, so "
- "you might just as well <w>d</w>rop this. Use "
- "<w>d&</w> to select all skeletons and rotten chunks "
- "or corpses in your inventory. No god will accept such "
- "rotten sacrifice, either.";
+ "you might just as well ";
+ if (!in_inventory(item))
+ ostr << "ignore them. ";
+ else
+ {
+ ostr << "<w>d</w>rop this. Use <w>d&</w> to select all "
+ "skeletons and rotten chunks or corpses in your "
+ "inventory. ";
+ }
+ ostr << "No god will accept such rotten sacrifice, either.";
}
else
{
@@ -3819,21 +3867,19 @@ void tutorial_describe_item(const item_def &item)
"practical way to chop it up is to drop it by clicking "
"on it with your <w>left mouse button</w> while "
"<w>Shift</w> is pressed, and then repeat that command "
- "for the corpse tile now lying on the floor. If the "
- "intent is to eat the chunks (rather than offer the "
- "corpse), you can then press <w>Shift + right mouse "
- "button</w> to do that.\n"
- EOL;
+ "for the corpse tile now lying on the floor.";
#endif
- ostr << "If there are several items in your inventory you'd "
- "like to drop, the most convenient way is to use the "
- "<w>d</w>rop menu. On a related note, butchering "
- "several corpses on a floor square is facilitated by "
- "using the <w>c</w>hop prompt where <w>c</w> is a "
- "valid synonym for <w>y</w>es or you can directly chop "
- "<w>a</w>ll corpses.";
}
- Options.tutorial_events[TUT_SEEN_CARRION] = false;
+ if (!in_inventory(item))
+ break;
+
+ ostr << "\n\nIf there are several items in your inventory you'd "
+ "like to drop, the most convenient way is to use the "
+ "<w>d</w>rop menu. On a related note, butchering "
+ "several corpses on a floor square is facilitated by "
+ "using the <w>c</w>hop prompt where <w>c</w> is a "
+ "valid synonym for <w>y</w>es or you can directly chop "
+ "<w>a</w>ll corpses.";
break;
case OBJ_STAVES: