summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/tutorial.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/tutorial.cc')
-rw-r--r--crawl-ref/source/tutorial.cc51
1 files changed, 44 insertions, 7 deletions
diff --git a/crawl-ref/source/tutorial.cc b/crawl-ref/source/tutorial.cc
index e82c899047..d99dd0b2f6 100644
--- a/crawl-ref/source/tutorial.cc
+++ b/crawl-ref/source/tutorial.cc
@@ -863,6 +863,16 @@ static std::string colour_to_tag(int col, bool closed = false)
}
#endif
+static bool mons_is_highlighted(const monsters *mons)
+{
+ return (mons_friendly(mons)
+ && Options.friend_brand != CHATTR_NORMAL
+ || mons_looks_stabbable(mons)
+ && Options.stab_brand != CHATTR_NORMAL
+ || mons_looks_distracted(mons)
+ && Options.may_stab_brand != CHATTR_NORMAL);
+}
+
void tutorial_first_monster(const monsters &mon)
{
if (!Options.tutorial_events[TUT_SEEN_MONSTER])
@@ -871,7 +881,7 @@ void tutorial_first_monster(const monsters &mon)
// crude hack:
// if the first monster is sleeping wake it
// (highlighting is an unnecessary complication)
- if (get_mons_colour(&mon) != (&mon)->colour)
+ if (mons_is_highlighted(&mon))
{
noisy(1, mon.x, mon.y);
viewwindow(true, false);
@@ -890,6 +900,9 @@ void tutorial_first_monster(const monsters &mon)
"<lightgray>b<magenta> or <brown>K<magenta>. "
#else
// need to highlight monster
+ const coord_def ep = grid2view(coord_def(mon.x, mon.y));
+ tile_place_cursor(ep.x-1,ep.y-1,true);
+
text += "monster is a ";
text += mon.name(DESC_PLAIN).c_str();
text += ". Examples for typical early monsters are: rat, "
@@ -937,9 +950,17 @@ void tutorial_first_item(const item_def &item)
std::string text = "<magenta>That ";
#ifndef USE_TILE
+ unsigned ch;
+ unsigned short col;
+ get_item_glyph(&item, &ch, &col);
+
text += colour_to_tag(col);
text += ch;
text += "<magenta>";
+#else
+ // highlight item
+ const coord_def ep = grid2view(coord_def(item.x, item.y));
+ tile_place_cursor(ep.x-1,ep.y-1,true);
#endif
text += "is an item. If you move there and press <w>g<magenta> or "
"<w>,<magenta> you will pick it up. "
@@ -971,13 +992,17 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
return;
std::ostringstream text;
+
#ifndef USE_TILE
const int ex = x - you.x_pos + 9;
const int ey = y - you.y_pos + 9;
unsigned ch;
unsigned short colour;
int object;
+#else
+ const coord_def ep = grid2view(coord_def(x,y));
#endif
+
switch(seen_what)
{
case TUT_SEEN_POTION:
@@ -1179,6 +1204,8 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
text << colour_to_tag(colour) << static_cast<char>(ch)
<< "<magenta> ";
+#else
+ tile_place_cursor(ep.x-1,ep.y-1,true);
#endif
text << "are some downstairs. You can enter the next (deeper) "
"level by following them down (<w>><magenta>). To get back to "
@@ -1201,6 +1228,8 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
if (ch == '<')
text << "<";
text << "<magenta> ";
+#else
+ tile_place_cursor(ep.x-1,ep.y-1,true);
#endif
text << "are some kind of escape hatch. You can use them to "
"quickly leave a level with <w><<<magenta> and <w>><magenta>, "
@@ -1217,7 +1246,7 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
if (ch == ' ' || colour == BLACK)
colour = LIGHTCYAN;
- text << "depicted by " << colour_to_tag(colour) << "^<magenta>"
+ text << "depicted by " << colour_to_tag(colour) << "^<magenta>";
#endif
text << ". They can do physical damage (with darts or needles, for "
"example) or have other, more magical effects, like "
@@ -1232,6 +1261,8 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
get_item_symbol( object, &ch, &colour );
text << colour_to_tag(colour) << static_cast<char>(ch) << "<magenta> ";
+#else
+ tile_place_cursor(ep.x-1,ep.y-1,true);
#endif
text << "is an altar. You can get information about it by pressing "
"<w>p<magenta> while standing on the square. Before taking up "
@@ -1239,6 +1270,9 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
break;
case TUT_SEEN_SHOP:
+#ifdef USE_TILES
+ tile_place_cursor(ep.x-1,ep.y-1,true);
+#endif
text << "That "
#ifndef USE_TILE
"<yellow>" << stringize_glyph(get_screen_glyph(x,y))
@@ -1251,6 +1285,9 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
if (you.num_turns < 1)
return;
+#ifdef USE_TILES
+ tile_place_cursor(ep.x-1,ep.y-1,true);
+#endif
text << "That "
#ifndef USE_TILE
"<w>" << stringize_glyph(get_screen_glyph(x,y)) << "<magenta> "
@@ -1536,6 +1573,9 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
break;
case TUT_MONSTER_BRAND:
+#ifdef USE_TILE
+ tile_place_cursor(ep.x-1,ep.y-1,true);
+#endif
text << "That monster looks a bit unusual. You might wish to examine "
"it a bit more closely by pressing <w>x<magenta> and moving "
"the cursor onto its square.";
@@ -2197,12 +2237,8 @@ bool tutorial_monster_interesting(const monsters *mons)
return true;
// highlighted in some way
- if (mons_friendly(mons) && Options.friend_brand != CHATTR_NORMAL
- || mons_looks_stabbable(mons) && Options.stab_brand != CHATTR_NORMAL
- || mons_looks_distracted(mons) && Options.may_stab_brand != CHATTR_NORMAL)
- {
+ if (mons_is_highlighted(mons))
return true;
- }
// monster is (seriously) out of depth
if (you.level_type == LEVEL_DUNGEON &&
@@ -2247,6 +2283,7 @@ void tutorial_describe_monster(const monsters *mons)
if (mons->has_ench(ENCH_BERSERK))
ostr << "A berserking monster is bloodthirsty and fighting madly.\n";
+ // monster is highlighted
if (mons_friendly(mons))
{
ostr << "Friendly monsters will follow you around and attempt to aid "