summaryrefslogtreecommitdiffstats
path: root/crawl-ref
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref')
-rw-r--r--crawl-ref/docs/monster_glyphs.txt10
-rw-r--r--crawl-ref/source/acr.cc23
-rw-r--r--crawl-ref/source/command.cc30
-rw-r--r--crawl-ref/source/dat/descript/features.txt4
-rw-r--r--crawl-ref/source/food.cc9
-rw-r--r--crawl-ref/source/format.cc4
-rw-r--r--crawl-ref/source/item_use.cc3
-rw-r--r--crawl-ref/source/itemprop.cc5
-rw-r--r--crawl-ref/source/message.cc4
-rw-r--r--crawl-ref/source/mon-data.h4
-rw-r--r--crawl-ref/source/tutorial.cc446
11 files changed, 298 insertions, 244 deletions
diff --git a/crawl-ref/docs/monster_glyphs.txt b/crawl-ref/docs/monster_glyphs.txt
index 234174bc9e..e2f7eb1454 100644
--- a/crawl-ref/docs/monster_glyphs.txt
+++ b/crawl-ref/docs/monster_glyphs.txt
@@ -69,6 +69,10 @@ mon_glyph = deep elf sorcerer : red
mon_glyph = deep elf annihilator : green
mon_glyph = deep elf master archer : lightmagenta
+# lizards
+mon_glyph = giant newt : lightgreen
+mon_glyph = giant lizard : green
+
# snakes and naga
mon_glyph = small snake : lightgreen
mon_glyph = snake : green
@@ -193,6 +197,12 @@ mon_glyph = Frederick : darkgrey
#
# monster old colour new colour
# ------- ---------- ----------
+# lizards
+# giant newt lightgreen green
+# giant lizard green lightgreen
+#
+# monster old colour new colour
+# ------- ---------- ----------
# snakes and naga
# small snake lightgreen green
# snake green lightgreen
diff --git a/crawl-ref/source/acr.cc b/crawl-ref/source/acr.cc
index babba346fb..c7581c92d1 100644
--- a/crawl-ref/source/acr.cc
+++ b/crawl-ref/source/acr.cc
@@ -3213,22 +3213,23 @@ command_type keycode_to_command( keycode_type key )
case 'y': return CMD_MOVE_UP_LEFT;
case 'a': return CMD_USE_ABILITY;
- case 'c': return CMD_CLOSE_DOOR;
+ case 'c': return CMD_BUTCHER;
case 'd': return CMD_DROP;
case 'e': return CMD_EAT;
case 'f': return CMD_FIRE;
case 'g': return CMD_PICKUP;
case 'i': return CMD_DISPLAY_INVENTORY;
case 'm': return CMD_DISPLAY_SKILLS;
- case 'o': return CMD_OPEN_DOOR;
+ case 'o': return CMD_EXPLORE;
case 'p': return CMD_PRAY;
case 'q': return CMD_QUAFF;
case 'r': return CMD_READ;
case 's': return CMD_SEARCH;
- case 'v': return CMD_EXAMINE_OBJECT;
+ case 't': return CMD_SHOUT;
+ case 'v': return CMD_EVOKE;
case 'w': return CMD_WIELD_WEAPON;
case 'x': return CMD_LOOK_AROUND;
- case 'z': return CMD_ZAP_WAND;
+ case 'z': return CMD_CAST_SPELL;
case 'B': return CMD_RUN_DOWN_LEFT;
case 'H': return CMD_RUN_LEFT;
@@ -3240,14 +3241,13 @@ command_type keycode_to_command( keycode_type key )
case 'Y': return CMD_RUN_UP_LEFT;
case 'A': return CMD_DISPLAY_MUTATIONS;
- case 'C': return CMD_EXPERIENCE_CHECK;
- case 'D': return CMD_BUTCHER;
- case 'E': return CMD_EVOKE;
+ case 'C': return CMD_CLOSE_DOOR;
+ case 'E': return CMD_EXPERIENCE_CHECK;
case 'F': return CMD_NO_CMD;
case 'G': return CMD_NO_CMD;
case 'I': return CMD_DISPLAY_SPELLS;
case 'M': return CMD_MEMORISE_SPELL;
- case 'O': return CMD_DISPLAY_OVERMAP;
+ case 'O': return CMD_OPEN_DOOR;
case 'P': return CMD_WEAR_JEWELLERY;
case 'Q': return CMD_QUIT;
case 'R': return CMD_REMOVE_JEWELLERY;
@@ -3256,7 +3256,7 @@ command_type keycode_to_command( keycode_type key )
case 'V': return CMD_GET_VERSION;
case 'W': return CMD_WEAR_ARMOUR;
case 'X': return CMD_DISPLAY_MAP;
- case 'Z': return CMD_CAST_SPELL;
+ case 'Z': return CMD_ZAP_WAND;
case '.': return CMD_MOVE_NOWHERE;
case '<': return CMD_GO_UPSTAIRS;
@@ -3267,11 +3267,11 @@ command_type keycode_to_command( keycode_type key )
case ':': return CMD_MAKE_NOTE;
case '_': return CMD_READ_MESSAGES;
case ';': return CMD_INSPECT_FLOOR;
- case '!': return CMD_SHOUT;
case '^': return CMD_DISPLAY_RELIGION;
case '#': return CMD_CHARACTER_DUMP;
case '=': return CMD_ADJUST_INVENTORY;
case '?': return CMD_DISPLAY_COMMANDS;
+ case '!': return CMD_ANNOTATE_LEVEL;
case '~': return CMD_MACRO_ADD;
case '&': return CMD_WIZARD;
case '"': return CMD_LIST_JEWELLERY;
@@ -3302,9 +3302,8 @@ command_type keycode_to_command( keycode_type key )
case CONTROL('E'): return CMD_FORGET_STASH;
case CONTROL('F'): return CMD_SEARCH_STASHES;
case CONTROL('G'): return CMD_INTERLEVEL_TRAVEL;
- case CONTROL('I'): return CMD_ANNOTATE_LEVEL;
case CONTROL('M'): return CMD_NO_CMD;
- case CONTROL('O'): return CMD_EXPLORE;
+ case CONTROL('O'): return CMD_DISPLAY_OVERMAP;
case CONTROL('P'): return CMD_REPLAY_MESSAGES;
#ifdef USE_TILE
case CONTROL('Q'): return CMD_EDIT_PREFS;
diff --git a/crawl-ref/source/command.cc b/crawl-ref/source/command.cc
index 7e7c34e143..cc1310ae2c 100644
--- a/crawl-ref/source/command.cc
+++ b/crawl-ref/source/command.cc
@@ -1511,8 +1511,8 @@ void list_commands(bool wizard, int hotkey, bool do_redraw_screen)
"<w>/ Dir.</w>, <w>Shift-Dir.</w>: long walk\n"
"<w>* Dir.</w>, <w>Ctrl-Dir.</w> : untrap, open door,\n"
" attack without move\n"
+ "<w>o</w> : auto-explore\n"
"<w>Ctrl-G</w> : interlevel travel\n"
- "<w>Ctrl-O</w> : auto-explore\n"
"<w>Ctrl-W</w> : set Waypoint\n"
"<w>Ctrl-F</w> : Find items\n"
" \n",
@@ -1523,7 +1523,6 @@ void list_commands(bool wizard, int hotkey, bool do_redraw_screen)
"<h>Item Interaction (inventory):\n"
"<w>i</w> : show Inventory list\n"
"<w>]</w> : show inventory of equipped items\n"
- "<w>v</w> : View item description\n"
"<w>{</w> : inscribe item\n"
"<w>f</w> : Fire or throw an item\n"
"<w>e</w> : Eat food (but tries floor first)\n"
@@ -1533,7 +1532,7 @@ void list_commands(bool wizard, int hotkey, bool do_redraw_screen)
"<w>M</w> : Memorise a spell from a book\n"
"<w>w</w> : Wield an item ( <w>-</w> for none)\n"
"<w>'</w> : wield item a, or switch to b\n"
- "<w>E</w> : Evoke power of wielded item\n"
+ "<w>v</w> : Evoke power of wielded item\n"
"<w>W</w> : Wear armour\n"
"<w>T</w> : Take off armour\n"
"<w>P</w> : Put on jewellery\n"
@@ -1598,7 +1597,7 @@ void list_commands(bool wizard, int hotkey, bool do_redraw_screen)
"<w>(</w> : cycle current ammunition\n"
"<w>)</w> : display current weapons\n"
"<w>\"</w> : display worn jewellery\n"
- "<w>C</w> : display experience info\n"
+ "<w>E</w> : display experience info\n"
"<w>^</w> : show religion screen\n"
"<w>A</w> : show Abilities/mutations\n"
"<w>\\</w> : show item knowledge\n"
@@ -1614,7 +1613,7 @@ void list_commands(bool wizard, int hotkey, bool do_redraw_screen)
"<w>;</w> : examine occupied tile\n"
"<w>x</w> : eXamine surroundings/targets\n"
"<w>X</w> : eXamine level map\n"
- "<w>O</w> : show dungeon Overview\n",
+ "<w>Ctrl-O</w> : show dungeon Overview\n",
true, true, cmdhelp_textfilter,45);
cols.add_formatted(
@@ -1624,7 +1623,7 @@ void list_commands(bool wizard, int hotkey, bool do_redraw_screen)
" (press twice for pick up menu) \n"
"<w>d</w> : Drop an item\n"
"<w>d#</w>: Drop exact number of items \n"
- "<w>D</w> : Dissect a corpse \n"
+ "<w>c</w> : chop up a corpse \n"
"<w>e</w> : Eat food from floor \n",
true, true, cmdhelp_textfilter);
@@ -1634,7 +1633,7 @@ void list_commands(bool wizard, int hotkey, bool do_redraw_screen)
"<w>a</w> : use special Ability\n"
"<w>p</w> : Pray\n"
"<w>Z</w> : cast a spell\n"
- "<w>!</w> : shout or command allies\n"
+ "<w>t</w> : shout or command allies\n"
"<w>`</w> : re-do previous command\n"
"<w>0</w> : repeat next command # of times\n"
" \n",
@@ -1647,7 +1646,7 @@ void list_commands(bool wizard, int hotkey, bool do_redraw_screen)
"<w>Ctrl-P</w> : show Previous messages\n"
"<w>Ctrl-R</w> : Redraw screen\n"
"<w>Ctrl-C</w> : Clear main and level maps\n"
- "<w>Ctrl-I</w> : annotate the dungeon level\n"
+ "<w>!</w> : annotate the dungeon level\n"
"<w>#</w> : dump character to file\n"
"<w>:</w> : add note (use <w>?:</w> to read notes)\n"
"<w>~</w> : add macro\n"
@@ -1713,9 +1712,9 @@ void list_tutorial_help()
text <<
"<h>Item types (and common commands)\n"
"<cyan>)</cyan> : hand weapons (<w>w</w>ield)\n"
- "<brown>(</brown> : missiles (<w>t</w>hrow or <w>f</w>ire)\n"
+ "<brown>(</brown> : missiles (<w>f</w>ire)\n"
"<cyan>[</cyan> : armour (<w>W</w>ear and <w>T</w>ake off)\n"
- "<brown>%</brown> : food and corpses (<w>e</w>at and <w>D</w>issect)\n"
+ "<brown>%</brown> : food and corpses (<w>c</w>hop and <w>e</w>at)\n"
"<w>?</w> : scrolls (<w>r</w>ead)\n"
"<magenta>!</magenta> : potions (<w>q</w>uaff)\n"
"<blue>=</blue> : rings (<w>P</w>ut on and <w>R</w>emove)\n"
@@ -1729,7 +1728,7 @@ void list_tutorial_help()
"<brown>";
get_item_symbol(DNGN_ITEM_STAVE, &ch, &colour);
text << static_cast<char>(ch);
- text << "</brown> : staves, rods (<w>w</w>ield and <w>E</w>voke)\n"
+ text << "</brown> : staves, rods (<w>w</w>ield and e<w>v</w>oke)\n"
"\n"
"<h>Movement and attacking\n"
"Use the <w>numpad</w> for movement (try both\n"
@@ -1740,7 +1739,6 @@ void list_tutorial_help()
"with the wielded weapon or barehanded.\n"
"For ranged attacks use either\n"
"<w>f</w> to launch missiles (like arrows)\n"
- "<w>t</w> to throw items by hand (like darts)\n"
"<w>Z</w> to cast spells (<w>Z?</w> lists spells).\n",
cols.add_formatted(
@@ -1754,21 +1752,21 @@ void list_tutorial_help()
"<w>s</w> : search for one turn (also <w>.</w> and <w>Del</w>)\n"
"<w>5</w> : rest full/search longer (<w>Shift-Num 5</w>)\n"
"<w>x</w> : examine surroundings\n"
- "<w>v</w> : examine object in inventory\n"
- "<w>i</w> : list inventory\n"
+ "<w>i</w> : list inventory (select item to view it)\n"
"<w>g</w> : pick up item from ground (also <w>,</w>)\n"
"<w>d</w> : drop item\n"
"<w>X</w> : show map of the whole level\n"
"<w><<</w> or <w>></w> : ascend/descend the stairs\n"
"<w>Ctrl-P</w> : show previous messages\n"
"\n"
+ "\n"
"<h>Targeting (for spells and missiles)\n"
"Use <w>+</w> (or <w>=</w>) and <w>-</w> to cycle between\n"
"hostile monsters. <w>Enter</w> or <w>.</w> or <w>Del</w>\n"
"all fire at the selected target.\n"
"If the previous target is still alive\n"
- "and in sight, one of <w>f</w>, <w>p</w>, <w>t</w> fires\n"
- "at it again (without selecting anything).\n",
+ "and in sight, one of <w>f</w> or <w>p</w> fires at it\n"
+ "again (without selecting anything).\n",
true, true, cmdhelp_textfilter, 40);
show_keyhelp_menu(cols.formatted_lines(), false);
diff --git a/crawl-ref/source/dat/descript/features.txt b/crawl-ref/source/dat/descript/features.txt
index b7154b9d6e..025ab22054 100644
--- a/crawl-ref/source/dat/descript/features.txt
+++ b/crawl-ref/source/dat/descript/features.txt
@@ -10,7 +10,7 @@ A burning altar of Makhleb
%%%%
A closed door
-A wooden door. To open it, try simply walking into it, or press 'o'.
+A wooden door. To open it, try simply walking into it, or press 'O'.
%%%%
A corrupted altar of Lugonu
@@ -269,7 +269,7 @@ An iron altar of Okawaru
%%%%
An open door
-A wooden door. You can close it by standing next to it and pressing 'c'.
+A wooden door. You can close it by standing next to it and pressing 'C'.
%%%%
An orcish idol
diff --git a/crawl-ref/source/food.cc b/crawl-ref/source/food.cc
index 4230529edd..26d07231a2 100644
--- a/crawl-ref/source/food.cc
+++ b/crawl-ref/source/food.cc
@@ -287,7 +287,7 @@ bool butchery(int which_corpse)
// if there are several corpses on the square.
if ( num_corpses == 0 )
{
- mpr("There isn't anything to dissect here.");
+ mpr("There isn't anything to butcher here.");
return false;
}
else if ( !prechosen
@@ -301,7 +301,7 @@ bool butchery(int which_corpse)
continue;
// offer the possibility of butchering
- mprf("Butcher %s? [y/n/q/D]", mitm[o].name(DESC_NOCAP_A).c_str());
+ mprf("Butcher %s? [y/n/q/c]", mitm[o].name(DESC_NOCAP_A).c_str());
// possible results:
// 0 - cancel all butchery (quit)
// 1 - say no to this butchery, continue prompting
@@ -317,8 +317,7 @@ bool butchery(int which_corpse)
if (keyin == ' ' || keyin == '\r' || keyin == '\n' ||
keyin == 'n' || keyin == 'N')
result = 1;
- if (keyin == 'y' || keyin == 'Y' || keyin == 'd' ||
- keyin == 'D')
+ if (keyin == 'y' || keyin == 'Y' || keyin == 'c' || keyin == 'C')
result = 2;
}
@@ -444,7 +443,7 @@ bool butchery(int which_corpse)
if (canceled_butcher)
canned_msg(MSG_OK);
else
- mpr("There isn't anything else to dissect here.");
+ mpr("There isn't anything else to butcher here.");
return false;
} // end butchery()
diff --git a/crawl-ref/source/format.cc b/crawl-ref/source/format.cc
index c70c5cefcc..3a0d0887ba 100644
--- a/crawl-ref/source/format.cc
+++ b/crawl-ref/source/format.cc
@@ -213,9 +213,9 @@ void formatted_string::parse_string1(
currs.clear();
}
- if (revert_colour)
+ if (revert_colour)
{
- colour_stack.pop_back();
+ colour_stack.pop_back();
if (colour_stack.size() < 1)
{
ASSERT(false);
diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc
index 3d8e47ee1d..6b34a39fec 100644
--- a/crawl-ref/source/item_use.cc
+++ b/crawl-ref/source/item_use.cc
@@ -1451,9 +1451,10 @@ command_type fire_target_behaviour::get_command(int key)
{
case '(':
case CONTROL('N'):
+ case ')':
case CONTROL('P'):
{
- const int direction = (key == CONTROL('P')) ? -1 : +1;
+ const int direction = (key == CONTROL('P') || key == ')') ? -1 : +1;
const int next = get_next_fire_item(item, direction);
if (next != item && next != ENDOFPACK)
{
diff --git a/crawl-ref/source/itemprop.cc b/crawl-ref/source/itemprop.cc
index e6f39143c1..104cac560b 100644
--- a/crawl-ref/source/itemprop.cc
+++ b/crawl-ref/source/itemprop.cc
@@ -2191,11 +2191,10 @@ bool gives_resistance( const item_def &item )
}
if (item.sub_type >= RING_PROTECTION_FROM_FIRE
- && item.sub_type <= RING_PROTECTION_FROM_COLD
+ && item.sub_type <= RING_PROTECTION_FROM_COLD
|| item.sub_type == RING_SEE_INVISIBLE
|| item.sub_type >= RING_LIFE_PROTECTION
- && item.sub_type <= RING_TELEPORT_CONTROL
- || item.sub_type == RING_TELEPORTATION
+ && item.sub_type <= RING_TELEPORT_CONTROL
|| item.sub_type == RING_SUSTAIN_ABILITIES)
{
return true;
diff --git a/crawl-ref/source/message.cc b/crawl-ref/source/message.cc
index a90d285f83..5fd25a0030 100644
--- a/crawl-ref/source/message.cc
+++ b/crawl-ref/source/message.cc
@@ -249,8 +249,8 @@ int channel_to_colour( msg_channel_type channel, int param )
case MSGCH_GOD:
case MSGCH_PRAY:
ret = (Options.channels[ channel ] == MSGCOL_DEFAULT)
- ? god_colour( static_cast<god_type>(param) )
- : god_message_altar_colour( static_cast<god_type>(param) );
+ ? god_colour( static_cast<god_type>(param) )
+ : god_message_altar_colour( static_cast<god_type>(param) );
break;
case MSGCH_DURATION:
diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h
index 46b7bec17c..9a1a2427cd 100644
--- a/crawl-ref/source/mon-data.h
+++ b/crawl-ref/source/mon-data.h
@@ -821,7 +821,7 @@
// lizards 'l'
{
- MONS_GIANT_NEWT, 'l', LIGHTGREEN, "giant newt",
+ MONS_GIANT_NEWT, 'l', GREEN, "giant newt",
M_COLD_BLOOD | M_AMPHIBIOUS,
MR_NO_FLAGS,
150, 10, MONS_GIANT_LIZARD, MONS_GIANT_NEWT, MH_NATURAL, -3,
@@ -854,7 +854,7 @@
},
{
- MONS_GIANT_LIZARD, 'l', GREEN, "giant lizard",
+ MONS_GIANT_LIZARD, 'l', LIGHTGREEN, "giant lizard",
M_COLD_BLOOD,
MR_NO_FLAGS,
600, 10, MONS_GIANT_LIZARD, MONS_GIANT_LIZARD, MH_NATURAL, -3,
diff --git a/crawl-ref/source/tutorial.cc b/crawl-ref/source/tutorial.cc
index a905c928ac..7e5b0a5d70 100644
--- a/crawl-ref/source/tutorial.cc
+++ b/crawl-ref/source/tutorial.cc
@@ -37,7 +37,7 @@
#include "stuff.h"
#include "terrain.h"
#ifdef USE_TILE
-#include "tiles.h"
+ #include "tiles.h"
#endif
#include "view.h"
@@ -127,7 +127,7 @@ bool pick_tutorial()
if (keyn >= 'a' && keyn <= 'a' + TUT_TYPES_NUM - 1)
{
Options.tutorial_type = keyn - 'a';
- you.species = get_tutorial_species(Options.tutorial_type);
+ you.species = get_tutorial_species(Options.tutorial_type);
you.char_class = get_tutorial_job(Options.tutorial_type);
// activate all triggers
@@ -136,14 +136,14 @@ bool pick_tutorial()
// store whether explore, stash search or travelling was used
Options.tut_explored = true;
- Options.tut_stashes = true;
- Options.tut_travel = true;
+ Options.tut_stashes = true;
+ Options.tut_travel = true;
// used to compare which fighting means was used most often
- Options.tut_spell_counter = 0;
- Options.tut_throw_counter = 0;
+ Options.tut_spell_counter = 0;
+ Options.tut_throw_counter = 0;
+ Options.tut_melee_counter = 0;
Options.tut_berserk_counter = 0;
- Options.tut_melee_counter = 0;
// for occasional healing reminders
Options.tut_last_healed = 0;
@@ -157,10 +157,10 @@ bool pick_tutorial()
{
// in this case, undo previous choices
// set_startup_options();
- you.species = SP_UNKNOWN;
+ you.species = SP_UNKNOWN;
you.char_class = JOB_UNKNOWN;
- Options.race = 0;
- Options.cls = 0;
+ Options.race = 0;
+ Options.cls = 0;
}
switch (keyn)
@@ -174,7 +174,7 @@ bool pick_tutorial()
case 'X':
cprintf(EOL "Goodbye!");
end(0);
- return false; // as if
+ return false;
}
}
return false;
@@ -434,12 +434,16 @@ static formatted_string tutorial_map_intro()
{
std::string result;
- result = "<magenta>"
- "What you see here is the typical Crawl screen. The upper left map "
- "shows your hero as the <w>@</w> in the center. The parts "
- "of the map you remember but cannot currently see will be greyed "
- "out."
- "</magenta>" EOL;
+ result = "<";
+ result += colour_to_str(channel_to_colour(MSGCH_TUTORIAL));
+ result += ">";
+ result += "What you see here is the typical Crawl screen. The upper left map "
+ "shows your hero as the <w>@</w> in the center. The parts "
+ "of the map you remember but cannot currently see will be greyed "
+ "out.";
+ result += "</";
+ result += colour_to_str(channel_to_colour(MSGCH_TUTORIAL));
+ result += ">" EOL;
result += " --more-- Press <white>Escape</white> to skip the basics";
linebreak_string2(result,get_tutorial_cols());
@@ -451,33 +455,35 @@ static formatted_string tutorial_stats_intro()
std::ostringstream istr;
// Note: must fill up everything to override the map
- istr << "<magenta>"
- "To the right, important properties of \n"
- "the character are displayed. The most \n"
- "basic one is your health, measured as \n"
- "<w>HP: " << you.hp << "/" << you.hp_max << "</w>. ";
+ istr << "<"
+ << colour_to_str(channel_to_colour(MSGCH_TUTORIAL))
+ << ">"
+ << "To the right, important properties of \n"
+ "the character are displayed. The most \n"
+ "basic one is your health, measured as \n"
+ "<w>HP: " << you.hp << "/" << you.hp_max << "</w>. ";
if (Options.tutorial_type==TUT_MAGIC_CHAR)
istr << " ";
istr <<
- "These are your current out \n"
- "of maximum health points. When health \n"
- "drops to zero, you die. \n"
- "<w>Magic: "
- << you.magic_points << "/" << you.max_magic_points <<
- "</w> is your energy for casting \n"
- "spells, although more mundane actions \n"
- "often draw from Magic, too. \n"
- "Further down, <w>Str</w>ength, <w>Dex</w>terity and \n"
- "<w>Int</w>elligence are shown and provide an \n"
- "all-around account of the character's \n"
- "attributes. \n"
- "</magenta>"
- " \n"
- " --more-- Press <w>Escape</w> to skip the basics\n"
- " \n"
- " \n";
+ "These are your current out \n"
+ "of maximum health points. When health \n"
+ "drops to zero, you die. \n"
+ "<w>Magic: " << you.magic_points << "/" << you.max_magic_points
+ << "</w> is your energy for casting \n"
+ "spells, although more mundane actions \n"
+ "often draw from Magic, too. \n"
+ "Further down, <w>Str</w>ength, <w>Dex</w>terity and \n"
+ "<w>Int</w>elligence are shown and provide an \n"
+ "all-around account of the character's \n"
+ "attributes. \n"
+ << "</" << colour_to_str(channel_to_colour(MSGCH_TUTORIAL)) << ">"
+ " \n"
+ " --more-- Press <w>Escape</w> to skip the basics\n"
+ " \n"
+ " \n";
+
return formatted_string::parse_block(istr.str(), false);
}
@@ -485,12 +491,16 @@ static formatted_string tutorial_message_intro()
{
std::string result;
- result = "<magenta>"
- "This lower part of the screen is reserved for messages. Everything "
+ result = "<";
+ result += colour_to_str(channel_to_colour(MSGCH_TUTORIAL));
+ result += ">";
+ result += "This lower part of the screen is reserved for messages. Everything "
"related to the tutorial is shown in this colour. If you missed "
"something, previous messages can be read again with "
- "<w>Ctrl-P</w>."
- "</magenta>" EOL;
+ "<w>Ctrl-P</w>.";
+ result += "</";
+ result += colour_to_str(channel_to_colour(MSGCH_TUTORIAL));
+ result += ">" EOL;
result += " --more-- Press <w>Escape</w> to skip the basics";
linebreak_string2(result,get_tutorial_cols());
@@ -605,8 +615,8 @@ void tutorial_death_screen()
int hint = random2(6);
// If a character has been unusually busy with projectiles and spells
// give some other hint rather than the first one.
- if (Options.tut_throw_counter + Options.tut_spell_counter
- >= Options.tut_melee_counter && hint == 0)
+ if (hint == 0 && Options.tut_throw_counter + Options.tut_spell_counter
+ >= Options.tut_melee_counter)
{
hint = random2(5)+1;
}
@@ -658,7 +668,7 @@ void tutorial_death_screen()
Options.tutorial_events.init(false);
}
-// if a character survives until Xp 5, the tutorial is declared finished
+// if a character survives until Xp 7, the tutorial is declared finished
// and they get a more advanced playing hint, depending on what they might
// know by now
void tutorial_finished()
@@ -676,7 +686,7 @@ void tutorial_finished()
if (Options.tut_explored)
{
text = "Walking around and exploring levels gets easier by using "
- "auto-explore (<w>Ctrl-O</w>). You can even make Crawl "
+ "auto-explore (<w>o</w>). You can even make Crawl "
"automatically pick up interesting items by setting the "
"option <w>explore_greedy=true</w> in the init file.";
}
@@ -757,10 +767,10 @@ void tutorial_dissection_reminder(bool healthy)
Options.tut_just_triggered = true;
std::string text;
- text += "If you don't want to eat it, consider <w>D</w>issecting "
+ text += "If you don't want to eat it, consider <w>c</w>hopping "
"this corpse under <w>p</w>rayer as a sacrifice to ";
text += god_name(you.religion);
- text += ". Whenever you <w>v</w>iew a corpse while in tutorial mode "
+ text += ". Whenever you view a corpse while in tutorial mode "
"you can reread this information.";
formatted_message_history(text, MSGCH_TUTORIAL, 0, get_tutorial_cols());
@@ -875,7 +885,6 @@ static std::string colourize_glyph(int col, unsigned glyph)
text << "</" << colour_str << ">";
return text.str();
}
-
#endif
static bool mons_is_highlighted(const monsters *mons)
@@ -914,8 +923,8 @@ void tutorial_first_monster(const monsters &mon)
text += colourize_glyph(col, ch);
text += " is a monster, usually depicted by a letter. Some typical "
- "early monsters look like <brown>r</brown>, <lightgray>g</lightgray>, "
- "<darkgray>b</darkgray> or <brown>K</brown>. "
+ "early monsters look like <brown>r</brown>, <green>l</green>, "
+ "<brown>K</brown> or <lightgrey>g</lightgrey>. "
#else
// need to highlight monster
const coord_def ep = grid2view(coord_def(mon.x, mon.y));
@@ -936,17 +945,17 @@ void tutorial_first_monster(const monsters &mon)
if (Options.tutorial_type == TUT_RANGER_CHAR)
{
text = "However, as a hunter you will want to deal with it using your "
- "bow. If you have a look at your bow with <w>v</w>, you'll "
- "find an explanation of how to do this. First <w>w</w>ield "
- "it, then follow the instructions.";
+ "bow. If you have a look at your bow from your <w>i</w>nventory, "
+ "you'll find an explanation of how to do this. First "
+ "<w>w</w>ield it, then follow the instructions.";
formatted_message_history(text, MSGCH_TUTORIAL, 0, get_tutorial_cols());
}
else if (Options.tutorial_type == TUT_MAGIC_CHAR)
{
text = "However, as a conjurer you will want to deal with it using magic. "
- "If you have a look at your spellbook with <w>v</w>, you'll "
- "find an explanation of how to do this.";
+ "If you have a look at your spellbook from your <w>i</w>nventory, "
+ "you'll find an explanation of how to do this.";
formatted_message_history(text, MSGCH_TUTORIAL, 0, get_tutorial_cols());
}
@@ -990,8 +999,8 @@ void tutorial_first_item(const item_def &item)
"Once it is in your inventory, you can drop it again with "
"<w>d</w>. Several types of objects will usually be picked up "
"automatically."
- "\nAny time you <w>v</w>iew an item, you can read about its "
- "properties and description.";
+ "\nAny time you look at an item in your <w>i</w>nventory, you can "
+ "read about its properties and description.";
formatted_message_history(text, MSGCH_TUTORIAL, 0, get_tutorial_cols());
}
@@ -1076,7 +1085,8 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"spellcasting by reading lots of scrolls.";
}
text << "\nDuring the tutorial you can reread this information at "
- "any time by <w>v</w>iewing the item in question.";
+ "any time by having a look in your <w>i</w>nventory at the "
+ "item in question.";
break;
case TUT_SEEN_WEAPON:
@@ -1087,7 +1097,7 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"you've picked up. "
"Use <w>w</w> to wield it, but be aware that this weapon "
"might train a different skill from your current one. You can "
- "view the weapon's properties with <w>v</w>.";
+ "view the weapon's properties from your <w>i</w>nventory.";
if (Options.tutorial_type == TUT_BERSERK_CHAR)
{
@@ -1100,8 +1110,9 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
text << "This is the first stack of missiles ('<w>)</w>') you've "
"picked up. Darts can be thrown by hand, but other missile types "
"like arrows and needles require a launcher and training in "
- "using it to be really effective. <w>v</w> gives more "
- "information about both missiles and launcher.";
+ "using it to be really effective. Selecting the item in your "
+ "<w>i</w>nventory gives more information about both missiles "
+ "and launcher.";
if (Options.tutorial_type == TUT_RANGER_CHAR)
{
@@ -1128,7 +1139,7 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
#endif
"you've picked up. Use <w>W</w> to wear it and "
"<w>T</w> to take it off again. You can view its "
- "properties with <w>v</w>.";
+ "properties from your <w>i</w>nventory.";
if (you.species == SP_CENTAUR || you.species == SP_MINOTAUR)
{
@@ -1159,19 +1170,20 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
" ('<w>%</w>')"
#endif
". When a corpse is lying on the ground, you can "
- "<w>D</w>issect with a sharp implement. Once hungry you "
- "can <w>e</w>at the resulting chunks (though they may "
+ "<w>c</w>hop it up with a sharp implement. Once hungry you "
+ "can then <w>e</w>at the resulting chunks (though they may "
"not be healthy).";
if (god_likes_butchery(you.religion))
{
text << " During prayer you can offer corpses to "
<< god_name(you.religion)
- << " by dissecting them, as well. Note that the gods will not "
+ << " by chopping them, as well. Note that the gods will not "
<< "accept rotting flesh.";
}
text << "\nDuring the tutorial you can reread this information at "
- "any time by <w>v</w>iewing the item in question.";
+ "any time by selecting the item in question in your "
+ "<w>i</w>nventory.";
break;
case TUT_SEEN_JEWELLERY:
@@ -1184,14 +1196,15 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
<< " ('<w>\"</w>')"
#endif
<< ". Type <w>P</w> to put it on and <w>R</w> to remove "
- "it. You can view it with <w>v</w> although often magic "
- "is necessary to reveal its true nature.";
+ "it. You can view its properties from your <w>i</w>nventory, "
+ "although often magic is necessary to reveal its true nature.";
break;
case TUT_SEEN_MISC:
text << "This is a curious object indeed. You can play around with it "
"to find out what it does by <w>w</w>ielding and "
- "<w>E</w>voking it.";
+ "e<w>v</w>oking it. As usually, selecting it from your "
+ "<w>i</w>nventory might give you more information.";
break;
case TUT_SEEN_STAFF:
@@ -1206,18 +1219,24 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"Magicians use staves to increase their power in certain spell "
"schools. By contrast, a rod allows the casting of certain "
"spells even without magic knowledge simply by "
- "<w>E</w>voking it. For the latter the power depends on "
+ "e<w>v</w>oking it. For the latter the power depends on "
"your Evocations skill.";
text << "\nDuring the tutorial you can reread this information at "
- "any time by <w>v</w>iewing the item in question.";
+ "any time by selecting the item in question in your "
+ "<w>i</w>nventory.";
break;
case TUT_SEEN_STAIRS:
+ // don't give this information during the first turn
if (you.num_turns < 1)
return;
text << "These ";
#ifndef USE_TILE
+ // monsters standing on stairs
+ if (mgrd[ex][ey] != NON_MONSTER)
+ return;
+
object = env.show[ex][ey];
colour = env.show_col[ex][ey];
{ unsigned short dummy; get_item_symbol( object, &ch, &dummy ); }
@@ -1243,7 +1262,8 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
colour = env.show_col[ex][ey];
get_item_symbol( object, &ch, &colour );
- text << colourize_glyph(colour, ch) << " ";
+ text << colourize_glyph(colour, ch);
+ text << " ";
#else
tile_place_cursor(ep.x-1,ep.y-1,true);
#endif
@@ -1325,10 +1345,12 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"Spellcasting skills.";
if (you.religion == GOD_TROG)
+ {
text << " Also, kills of living creatures are automatically "
"dedicated to "
<< god_name(you.religion)
<< ".";
+ }
break;
case TUT_NEW_LEVEL:
@@ -1394,7 +1416,7 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
case TUT_YOU_HUNGRY:
text << "There are two ways to overcome hunger: food you started "
"with or found, and selfmade chunks from corpses. To get the "
- "latter, all you need to do is <w>D</w>issect a corpse "
+ "latter, all you need to do is <w>c</w>hop up a corpse "
"with a sharp implement. Your starting weapon will do nicely. "
"Try to dine on chunks in order to save permanent food.";
@@ -1441,7 +1463,7 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
case TUT_MAKE_CHUNKS:
text << "How lucky! That monster left a corpse which you can now "
- "<w>D</w>issect. One or more chunks will appear that you "
+ "<w>c</w>hop up. One or more chunks will appear that you "
"can then <w>e</w>at. Beware that some chunks may be, "
"sometimes or always, hazardous. Only experience can help "
"you here.";
@@ -1464,16 +1486,16 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
text << "Hey, that monster left a corpse! If you don't need it for "
"food or other purposes, you can sacrifice it to "
<< god_name(you.religion)
- << " by <w>D</w>issecting it while <w>p</w>raying.";
+ << " by <w>c</w>hopping it while <w>p</w>raying.";
break;
-
+
case TUT_SHIFT_RUN:
text << "Walking around takes fewer keystrokes if you press "
"<w>Shift-direction</w> or <w>/ <w>direction</w>. "
"That will let you run until a monster comes into sight or "
"your character sees something interesting.";
break;
-
+
case TUT_MAP_VIEW:
text << "As you explore a level, orientation can become difficult. "
"Press <w>X</w> to bring up the level map. Typing "
@@ -1482,7 +1504,7 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"<w>.</w> or <w>Enter</w> lets your character move "
"there on its own.";
break;
-
+
case TUT_DONE_EXPLORE:
text << "You have explored the dungeon on this level. The downstairs look "
"like '<w>></w>'. Proceed there and press <w>></w> to "
@@ -1504,35 +1526,35 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"<w>Shift-numpad 5.";
}
break;
-
+
case TUT_NEED_HEALING:
text << "If you're low on hitpoints or magic and there's no urgent need "
"to move, you can rest for a bit. Press <w>5</w> or "
"<w>shift-numpad-5</w> to do so.";
break;
-
+
case TUT_NEED_POISON_HEALING:
text << "Your poisoning could easily kill you, so now would be a good "
"time to <w>q</w>uaff a potion of heal wounds or, better "
"yet, a potion of healing. If you have seen neither of these so "
"far, try unknown ones in your inventory. Good luck!";
break;
-
+
case TUT_POSTBERSERK:
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 current status.";
break;
-
+
case TUT_RUN_AWAY:
text << "Whenever you've got only a few hitpoints left and you're in "
"danger of dying, check your options carefully. Often, retreat or "
"use of some item might be a viable alternative to fighting on.";
-
+
if (you.species == SP_CENTAUR)
text << " As a four-legged centaur you are particularly quick - "
"running is an option!";
-
+
if (Options.tutorial_type == TUT_BERSERK_CHAR && you.religion == GOD_TROG
&& !you.duration[DUR_BERSERKER] && !you.duration[DUR_EXHAUSTED]
&& you.hunger_state >= HS_SATIATED)
@@ -1543,13 +1565,13 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"to temporarily gain more hitpoints and greater strength. ";
}
break;
-
+
case TUT_RETREAT_CASTER:
text << "Without magical power you're unable to cast spells. While "
"melee is a possibility, that's not where your strengths lie, "
"so retreat (if possible) might be the better option.";
break;
-
+
case TUT_YOU_MUTATED:
text << "Mutations can be obtained from several sources, among them "
"potions, spell miscasts, and overuse of strong enchantments "
@@ -1558,12 +1580,12 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"harmful as beneficial mutations, and most of them have three "
"levels. Check your mutations with <w>A</w>.";
break;
-
+
case TUT_NEW_ABILITY:
text << "You just gained a new ability. Press <w>a</w> to take a "
"look at your abilities or to use one of them.";
break;
-
+
case TUT_WIELD_WEAPON:
if (Options.tutorial_type == TUT_RANGER_CHAR
&& you.inv[ you.equip[EQ_WEAPON] ].sub_type == WPN_BOW)
@@ -1572,14 +1594,14 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"b by pressing <w>'</w>.";
}
break;
-
+
case TUT_FLEEING_MONSTER:
if (!Options.tutorial_type == TUT_BERSERK_CHAR)
return;
-
+
text << "While unsporting, it is sometimes useful to attack a fleeing "
"monster by throwing something after it. To do this, press "
- "<w>t</w>, choose a throwing weapon, e.g. one of your "
+ "<w>f</w>, choose a throwing weapon, e.g. one of your "
"spears, use <w>+</w> to select a monster and press "
"<w>.</w>, <w>f</w> or <w>Enter</w>. The closest "
"monster will be autoselected. If you've got the fire_order "
@@ -1587,7 +1609,7 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"<w>f+.</w> instead; the game will pick the first weapon "
"that fits the option.";
break;
-
+
case TUT_MONSTER_BRAND:
#ifdef USE_TILE
tile_place_cursor(ep.x-1,ep.y-1,true);
@@ -1596,11 +1618,11 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"it a bit more closely by pressing <w>x</w> and moving "
"the cursor onto its square.";
break;
-
+
case TUT_SEEN_MONSTER:
case TUT_SEEN_FIRST_OBJECT:
break;
-
+
default:
text << "You've found something new (but I don't know what)!";
}
@@ -1618,12 +1640,13 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
formatted_string tut_abilities_info()
{
std::ostringstream text;
- text << "<magenta>"
+ text << "<" << colour_to_str(channel_to_colour(MSGCH_TUTORIAL)) << ">";
+ text <<
"This screen shows your character's set of talents. You can gain new " EOL
"abilities via certain items, through religion or by way of mutations. " EOL
"Activation of an ability usually comes at a cost, e.g. nutrition or " EOL
"Magic power. ";
-
+
if (you.religion != GOD_NO_GOD)
{
text <<
@@ -1636,7 +1659,7 @@ formatted_string tut_abilities_info()
}
text << ".";
}
- text << "</magenta>";
+ text << "</" << colour_to_str(channel_to_colour(MSGCH_TUTORIAL)) << ">";
return formatted_string::parse_string(text.str(), false);
}
@@ -1651,14 +1674,14 @@ static std::string tut_target_mode(bool spells = false)
"Once you're aiming at the correct monster, simply hit "
"<w>f</w>, <w>Enter</w> or <w>.</w> to shoot at it. "
"If you miss, <w>";
-
+
if (spells)
result += "Zap";
else
result += "ff";
-
+
result += "</w> fires at the same target again.";
-
+
return (result);
}
@@ -1672,8 +1695,8 @@ static std::string tut_abilities()
static std::string tut_throw_stuff(const item_def &item)
{
std::string result;
-
- result = "To do this, type <w>t</w> to throw, then <w>";
+
+ result = "To do this, type <w>f</w> to fire, then <w>";
result += item.slot;
result += "</w> for ";
result += (item.quantity > 1 ? "these" : "this");
@@ -1689,7 +1712,7 @@ static std::string tut_throw_stuff(const item_def &item)
void tutorial_describe_item(const item_def &item)
{
std::ostringstream ostr;
- ostr << "<magenta>";
+ ostr << "<" << colour_to_str(channel_to_colour(MSGCH_TUTORIAL)) << ">";
switch (item.base_type)
{
case OBJ_WEAPONS:
@@ -1702,7 +1725,7 @@ void tutorial_describe_item(const item_def &item)
if (gives_ability(item) && wherey() <= get_number_of_lines() - 5)
{
ostr << "When wielded, some weapons (such as this one) "
- "offer abilities that can be evoked. ";
+ "offer abilities that can be e<w>v</w>oked. ";
ostr << tut_abilities();
break;
} // or if it grants a resistance
@@ -1716,7 +1739,7 @@ void tutorial_describe_item(const item_def &item)
}
return;
}
-
+
item_def *weap = you.slot_item(EQ_WEAPON);
bool wielded = (weap && (*weap).slot == item.slot);
bool long_text = false;
@@ -1726,10 +1749,10 @@ void tutorial_describe_item(const item_def &item)
ostr << "You can wield this weapon with <w>w</w>, or use "
"<w>'</w> to switch between the weapons in slot "
"a and b. (Use <w>=</w> to adjust item slots.)";
-
+
// weapon skill used by this weapon and the best weapon skill
int curr_wpskill, best_wpskill;
-
+
// maybe this is a launching weapon
if (is_range_weapon(item))
{
@@ -1746,7 +1769,7 @@ void tutorial_describe_item(const item_def &item)
if (you.skills[SK_UNARMED_COMBAT] > you.skills[best_wpskill])
best_wpskill = SK_UNARMED_COMBAT;
}
-
+
if (you.skills[curr_wpskill] + 2 < you.skills[best_wpskill])
{
ostr << "\nOn second look you've been training in <w>"
@@ -1773,10 +1796,11 @@ void tutorial_describe_item(const item_def &item)
ostr << "To attack a monster, you can simply walk into it.";
}
}
+
if (is_throwable(item, you.body_size()) && !long_text)
{
ostr << "\n\nSome weapons (including this one), can also be "
- "<w>t</w>hrown. ";
+ "<w>f</w>ired. ";
ostr << tut_throw_stuff(item);
long_text = true;
}
@@ -1788,7 +1812,7 @@ void tutorial_describe_item(const item_def &item)
<< "enchantment or have special properties, good or bad. "
<< "The rarer the description, the greater the potential "
<< "value of an item.";
-
+
Options.tutorial_events[TUT_SEEN_RANDART] = 0;
}
if (item_known_cursed( item ) && !long_text)
@@ -1796,10 +1820,10 @@ void tutorial_describe_item(const item_def &item)
ostr << "\n\nOnce wielded, a cursed weapon won't leave your hands "
"again until the curse has been lifted by reading a "
"scroll of remove curse or one of the enchantment scrolls.";
-
+
if (!wielded && is_throwable(item, you.body_size()))
ostr << " (Throwing it is safe, though.)";
-
+
Options.tutorial_events[TUT_YOU_CURSED] = 0;
}
Options.tutorial_events[TUT_SEEN_WEAPON] = 0;
@@ -1809,7 +1833,7 @@ void tutorial_describe_item(const item_def &item)
if ( is_throwable(item, player_size()) )
{
ostr << item.name(DESC_CAP_YOUR)
- << " can be thrown without the use of a launcher. ";
+ << " can be <w>f</w>ired without the use of a launcher. ";
ostr << tut_throw_stuff(item);
}
else if (is_launched(&you, you.weapon(), item))
@@ -1833,7 +1857,7 @@ void tutorial_describe_item(const item_def &item)
}
Options.tutorial_events[TUT_SEEN_MISSILES] = 0;
break;
-
+
case OBJ_ARMOUR:
{
bool wearable = true;
@@ -1876,14 +1900,14 @@ void tutorial_describe_item(const item_def &item)
}
if (gives_resistance(item))
{
- ostr << "\n\nThis armour offers its wearer protection from "
- "certain sources. For an overview of your resistances "
- "(among other things) type <w>%</w>.";
+ ostr << "\n\nThis armour offers its wearer protection from "
+ "certain sources. For an overview of your resistances "
+ "(among other things) type <w>%</w>.";
}
if (is_artefact(item) && gives_ability(item))
{
ostr << "\nWhen worn, some types of armour (such as this one) "
- "offer abilities that can be evoked. ";
+ "offer abilities that can be e<w>v</w>oked. ";
ostr << tut_abilities();
}
Options.tutorial_events[TUT_SEEN_ARMOUR] = 0;
@@ -1908,12 +1932,12 @@ void tutorial_describe_item(const item_def &item)
}
Options.tutorial_events[TUT_SEEN_FOOD] = 0;
break;
-
+
case OBJ_SCROLLS:
ostr << "Type <w>r</w> to read this scroll. ";
Options.tutorial_events[TUT_SEEN_SCROLL] = 0;
break;
-
+
case OBJ_JEWELLERY:
{
ostr << "Jewellery can be <w>P</w>ut on or <w>R</w>emoved "
@@ -1936,8 +1960,8 @@ void tutorial_describe_item(const item_def &item)
}
if (gives_ability(item))
{
- ostr << "\nWhen worn, some types of jewellery (such as this one) "
- "offer abilities that can be evoked. ";
+ ostr << "\n\nWhen worn, some types of jewellery (such as this one) "
+ "offer abilities that can be e<w>v</w>oked. ";
ostr << tut_abilities();
}
Options.tutorial_events[TUT_SEEN_JEWELLERY] = 0;
@@ -1947,76 +1971,78 @@ void tutorial_describe_item(const item_def &item)
ostr << "Use <w>q</w> to quaff this potion. ";
Options.tutorial_events[TUT_SEEN_POTION] = 0;
break;
-
+
case OBJ_BOOKS:
- if (!item_ident(item, ISFLAG_KNOW_TYPE))
+ if (item.sub_type == BOOK_MANUAL)
{
- ostr << "It's a book, you can <w>r</w>ead it. ";
+ ostr << "A manual can greatly help you in training a skill. "
+ "To use it, <w>r</w>ead it while your experience "
+ "pool (the number in brackets) is full. Note that "
+ "this will drain said pool, so only use this manual "
+ "if you think you need the skill in question.";
}
- else
+ else // it's a spellbook
{
- if (item.sub_type == BOOK_MANUAL)
+ if (you.religion == GOD_TROG)
+ {
+ if (!item_ident(item, ISFLAG_KNOW_TYPE))
+ ostr << "It's a book, you can <w>r</w>ead it.";
+ else
+ {
+ ostr << "A spellbook! You could <w>M</w>emorise some "
+ "spells and then cast them with <w>z</w>.";
+ }
+ ostr << "\nAs a worshipper of "
+ << god_name(GOD_TROG)
+ << ", though, you might instead wish to burn this "
+ "tome of hated magic by using the corresponding "
+ "<w>a</w>bility. "
+ "Note that this only works on books that are "
+ "lying on the floor and not on your current "
+ "square. ";
+ }
+ else if (!item_ident(item, ISFLAG_KNOW_TYPE))
+ {
+ ostr << "It's a book, you can <w>r</w>ead it.";
+ }
+ else if (!you.skills[SK_SPELLCASTING])
{
- ostr << "A manual can greatly help you in training a skill. "
- "To use it, <w>r</w>ead it while your experience "
- "pool (the number in brackets) is full. Note that "
- "this will drain said pool, so only use this manual "
- "if you think you need the skill in question.";
+ ostr << "A spellbook! You could <w>M</w>emorise some "
+ "spells and then cast them with <w>z</w>. ";
+
+ ostr << "\nFor now, however, that will have to wait "
+ "until you've learned the basics of Spellcasting "
+ "by reading lots of scrolls.";
}
- else // it's a spellbook
+ else // actually can cast spells
{
- if (you.religion == GOD_TROG)
+ if (player_can_memorise(item))
{
- ostr << "A spellbook! You could <w>M</w>emorise some "
- "spells and then cast them with <w>Z</w>. ";
- ostr << "\nAs a worshipper of "
- << god_name(GOD_TROG)
- << ", though, you might instead wish to burn this "
- "tome of hated magic by using the corresponding "
- "<w>a</w>bility. "
- "Note that this only works on books that are "
- "lying on the floor and not on your current "
- "square. ";
+ ostr << "Such a <lightblue>highlighted spell</lightblue> "
+ "can be <w>M</w>emorised right away. ";
}
- else if (!you.skills[SK_SPELLCASTING])
+ else
{
- ostr << "A spellbook! You could <w>M</w>emorise some "
- "spells and then cast them with <w>Z</w>. ";
- ostr << "\nFor now, however, that will have to wait "
- "until you've learned the basics of Spellcasting "
- "by reading lots of scrolls.";
+ ostr << "You cannot memorise any "
+ << (you.spell_no ? "more " : "")
+ << "spells right now. This will change as you "
+ "grow in levels and Spellcasting proficiency. ";
}
- else // actually can cast spells
- {
- if (player_can_memorise(item))
- {
- ostr << "Such a <lightblue>highlighted spell</lightblue> "
- "can be <w>M</w>emorised right away. ";
- }
- else
- {
- ostr << "You cannot memorise any "
- << (you.spell_no ? "more " : "")
- << "spells right now. This will change as you "
- "grow in levels and Spellcasting proficiency. ";
- }
- if (you.spell_no)
- {
- ostr << "\n\nTo do magic, type <w>Z</w> and "
- "choose a spell, e.g. <w>a</w> (check "
- "with <w>?</w>). For attack spells "
- "you'll ";
- ostr << tut_target_mode(true);
- }
+ if (you.spell_no)
+ {
+ ostr << "\n\nTo do magic, type <w>z</w> and choose a "
+ "spell, e.g. <w>a</w> (check with <w>?</w>). "
+ "For attack spells you'll ";
+ ostr << tut_target_mode(true);
}
}
}
Options.tutorial_events[TUT_SEEN_SPBOOK] = 0;
break;
-
+
case OBJ_CORPSES:
- ostr << "Corpses lying on the floor can be <w>D</w>issected "
+ 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)";
@@ -2033,38 +2059,58 @@ void tutorial_describe_item(const item_def &item)
"you might just as well <w>d</w>rop this.";
Options.tutorial_events[TUT_SEEN_CARRION] = 0;
break;
-
+
case OBJ_STAVES:
- ostr << "Staffs have to be <w>w</w>ielded to be of use. "
- "There are staves that help spellcasters, and others that "
- "allow you to harness spells hidden within.";
- if (!item_ident(item, ISFLAG_KNOW_TYPE))
+ if (item_is_rod( item ))
{
- ostr << "\n\nTo find out what this staff might do, you have to "
- "wield it, then <w>E</w>voke it to see if anything "
- "interesting happens. If nothing happens, it's probably "
- "an ancient staff capable of enhancing certain spell "
- "schools while suppressing others. ";
- if (you.spell_no)
+ if (!item_ident(item, ISFLAG_KNOW_TYPE))
{
- ostr << "You can find out which one, by casting spells while "
- "wielding this staff. Eventually, the staff might "
- "react to a spell of its school and identify itself.";
+ ostr << "\n\nTo find out what this rod might do, you have to "
+ "<w>w</w>ield and e<w>v</w>oke it to see if you can "
+ "use the spells hidden within. ";
+ }
+ else
+ {
+ ostr << "\n\nYou can use this rod's magic by <w>w</w>ielding "
+ "and e<w>v</w>oking it.";
}
}
- else if (item.sub_type <= STAFF_AIR && gives_resistance(item))
+ else
{
- ostr << "\nThis staff offers its wielder protection from "
- "certain sources. For an overview of your resistances "
- "(among other things) type <w>%</w>.";
- }
+ ostr << "This staff can enhance your spellcasting of specific "
+ "spell schools. ";
+ bool gives_resist = false;
+ if (you.spell_no && !item_ident(item, ISFLAG_KNOW_TYPE))
+ {
+ ostr << "You can find out which one by casting spells while "
+ "wielding this staff. Eventually, the staff might "
+ "react to a spell of its school and identify itself.";
+ }
+ else if (gives_resistance(item))
+ {
+ ostr << "It also offers its wielder protection from certain "
+ "sources. For an overview of your resistances (among "
+ "other things) type <w>%</w>.";
+ gives_resist = true;
+ }
+
+ if (!gives_resist && Options.tutorial_type == TUT_BERSERK_CHAR
+ && you.religion == GOD_TROG)
+ {
+ ostr << "\n\nSeeing how "
+ << god_name(GOD_TROG, false)
+ << " frowns upon the use of magic, this staff will be "
+ "of little use to you and you might just as well "
+ "<w>d</w>rop it now.";
+ }
+ }
Options.tutorial_events[TUT_SEEN_STAFF] = 0;
break;
case OBJ_MISCELLANY:
ostr << "Miscellanous items sometimes harbour magical powers. Try "
- "<w>w</w>ielding and <w>E</w>voking it.";
+ "<w>w</w>ielding and e<w>v</w>oking it.";
Options.tutorial_events[TUT_SEEN_MISC] = 0;
break;
@@ -2072,7 +2118,7 @@ void tutorial_describe_item(const item_def &item)
return;
}
- ostr << "</magenta>";
+ ostr << "</" << colour_to_str(channel_to_colour(MSGCH_TUTORIAL)) << ">";
std::string broken = ostr.str();
linebreak_string2(broken, get_tutorial_cols());
cgotoxy(1, wherey() + 2);
@@ -2110,7 +2156,7 @@ bool tutorial_feat_interesting(dungeon_feature_type feat)
void tutorial_describe_feature(dungeon_feature_type feat)
{
std::ostringstream ostr;
- ostr << "\n<magenta>";
+ ostr << "\n<" << colour_to_str(channel_to_colour(MSGCH_TUTORIAL)) << ">";
switch (feat)
{
@@ -2238,6 +2284,7 @@ void tutorial_describe_feature(dungeon_feature_type feat)
else
return;
}
+ ostr << "</" << colour_to_str(channel_to_colour(MSGCH_TUTORIAL)) << ">";
std::string broken = ostr.str();
linebreak_string2(broken, get_tutorial_cols());
@@ -2265,7 +2312,7 @@ bool tutorial_monster_interesting(const monsters *mons)
void tutorial_describe_monster(const monsters *mons)
{
std::ostringstream ostr;
- ostr << "\n\n<magenta>";
+ ostr << "\n\n<" << colour_to_str(channel_to_colour(MSGCH_TUTORIAL)) << ">";
if (mons_is_unique(mons->type))
{
@@ -2316,6 +2363,7 @@ void tutorial_describe_monster(const monsters *mons)
<< mons_pronoun((monster_type) mons->type, PRONOUN_NOCAP)
<< " has been distracted by something.";
}
+ ostr << "</" << colour_to_str(channel_to_colour(MSGCH_TUTORIAL)) << ">";
std::string broken = ostr.str();
linebreak_string2(broken, get_tutorial_cols());