summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/tutorial.cc
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2007-08-16 19:20:45 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2007-08-16 19:20:45 +0000
commitcb1a4eab762f953396c49c15fb178e2f47d56105 (patch)
tree0baa86d5474f887f880a2cb447936cbb1668bd11 /crawl-ref/source/tutorial.cc
parent5fc6dd64feee1a620b1b5141ca3efa4ef51766f2 (diff)
downloadcrawl-ref-cb1a4eab762f953396c49c15fb178e2f47d56105.tar.gz
crawl-ref-cb1a4eab762f953396c49c15fb178e2f47d56105.zip
Yet another tutorial update
... and Sif Muna finally gets those other titles. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2007 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/tutorial.cc')
-rw-r--r--crawl-ref/source/tutorial.cc248
1 files changed, 188 insertions, 60 deletions
diff --git a/crawl-ref/source/tutorial.cc b/crawl-ref/source/tutorial.cc
index a9df4e5746..ab20e8e819 100644
--- a/crawl-ref/source/tutorial.cc
+++ b/crawl-ref/source/tutorial.cc
@@ -563,31 +563,35 @@ void tutorial_death_screen()
more();
if (Options.tutorial_type == TUT_MAGIC_CHAR
- && Options.tut_spell_counter < Options.tut_melee_counter )
+ && Options.tut_spell_counter < Options.tut_melee_counter )
{
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 (Options.tutorial_type == TUT_BERSERK_CHAR
- && Options.tut_berserk_counter < 1 )
+ else if (Options.tutorial_type == TUT_BERSERK_CHAR && you.religion == GOD_TROG
+ && Options.tut_berserk_counter <= 3 )
{
text = "Don't forget to go berserk when fighting particularly "
"difficult foes. It is risky, but makes you faster "
"and beefier.";
}
else if (Options.tutorial_type == TUT_RANGER_CHAR
- && 2*Options.tut_throw_counter < Options.tut_melee_counter )
+ && 2*Options.tut_throw_counter < Options.tut_melee_counter )
+ {
text = "Your bow and arrows are extremely powerful against "
"distant monsters. Be sure to collect all arrows lying "
"around in the dungeon.";
+ }
else
{
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 (Options.tut_throw_counter + Options.tut_spell_counter
+ >= Options.tut_melee_counter && hint == 0)
+ {
hint = random2(5)+1;
+ }
switch(hint)
{
@@ -735,8 +739,9 @@ void tutorial_dissection_reminder()
text += "If you don't need to eat it, consider <w>D<magenta>issecting "
"this corpse under <w>p<magenta>rayer as a sacrifice to ";
text += god_name(you.religion);
- text += ".";
-
+ text += ". Whenever you <w>v<magenta>iew a corpse while in tutorial mode "
+ "you can reread this information.";
+
print_formatted_paragraph(text, get_tutorial_cols(), MSGCH_TUTORIAL);
Options.tut_just_triggered = true;
}
@@ -763,6 +768,14 @@ void tutorial_healing_reminder()
text = "Remember to rest between fights and to enter unexplored "
"terrain with full hitpoints and magic. For resting, "
"press <w>5<magenta> or <w>Shift-numpad 5<magenta>.";
+
+ if (you.religion == GOD_TROG && !you.duration[DUR_BERSERKER]
+ && !you.duration[DUR_EXHAUSTED] && you.hunger_state >= HS_SATIATED)
+ {
+ text += "\nAlso, berserking might help you not to lose so many "
+ "hitpoints in the first place. To use your abilities type "
+ "<w>a<magenta>.";
+ }
print_formatted_paragraph(text, get_tutorial_cols(), MSGCH_TUTORIAL);
}
Options.tut_last_healed = you.num_turns;
@@ -899,7 +912,9 @@ void tutorial_first_item(const item_def &item)
"<w>,<magenta> you will pick it up. Generally, items are shown by "
"non-letter symbols like <w>%?!\"=()[<magenta>. Once it is in your "
"inventory, you can drop it again with <w>d<magenta>. Several types "
- "of objects will usually be picked up automatically.";
+ "of objects will usually be picked up automatically."
+ "\nAny time you <w>v<magenta>iew an item, you can read about its "
+ "properties and description.";
print_formatted_paragraph(text, get_tutorial_cols(), MSGCH_TUTORIAL);
Options.tutorial_events[TUT_SEEN_FIRST_OBJECT] = 0;
@@ -929,35 +944,51 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
{
case TUT_SEEN_POTION:
text << "You have picked up your first potion ('<w>!<magenta>'). "
- "Use <w>q<magenta> to drink (quaff) it.";
+ "Use <w>q<magenta> to drink (quaff) it.";
break;
+
case TUT_SEEN_SCROLL:
text << "You have picked up your first scroll ('<w>?<magenta>'). "
- "Type <w>r<magenta> to read it.";
+ "Type <w>r<magenta> to read it.";
break;
+
case TUT_SEEN_WAND:
text << "You have picked up your first wand ('<w>/<magenta>'). "
- "Type <w>z<magenta> to zap it.";
+ "Type <w>z<magenta> to zap it.";
break;
+
case TUT_SEEN_SPBOOK:
get_item_symbol(DNGN_ITEM_BOOK, &ch, &colour);
- text << "You have picked up a spellbook ('<w>"
+ text << "You have picked up a book ('<w>"
<< static_cast<char>(ch)
- << "'<magenta>). You can read it by typing <w>r<magenta>, "
- "memorise spells via <w>M<magenta> and cast a memorised "
- "spell with <w>Z<magenta>.";
+ << "'<magenta>) that you can read by typing <w>r<magenta>. "
+ "If it's a spellbook you'll then be able to memorise "
+ "spells via <w>M<magenta> and cast a memorised spell with "
+ "<w>Z<magenta>.";
if (!you.skills[SK_SPELLCASTING])
{
text << "\nHowever, first you will have to get accustomed to "
"spellcasting by reading lots of scrolls.";
}
+ if (you.religion == GOD_TROG)
+ {
+ more();
+ text << "\n\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<magenta>bility.";
+ }
+ text << "\nDuring the tutorial you can reread this information at "
+ "any time by <w>v<magenta>iewing the item in question.";
break;
+
case TUT_SEEN_WEAPON:
text << "This is the first weapon ('<w>(<magenta>') you've picked up. "
- "Use <w>w<magenta> 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<magenta>.";
+ "Use <w>w<magenta> 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<magenta>.";
if (Options.tutorial_type == TUT_BERSERK_CHAR)
{
@@ -965,12 +996,14 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"with these. Checking other axes can be worthwhile.";
}
break;
+
case TUT_SEEN_MISSILES:
text << "This is the first stack of missiles ('<w>)<magenta>') 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<magenta> gives more "
"information about both missiles and launcher.";
+
if (Options.tutorial_type == TUT_RANGER_CHAR)
{
text << "\nAs you're already trained in Bows you should stick with "
@@ -988,6 +1021,7 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"stones for ranged attacks.";
}
break;
+
case TUT_SEEN_ARMOUR:
text << "This is the first piece of armour ('<w>[<magenta>') you've "
"picked up. Use <w>W<magenta> to wear it and <w>T<magenta> to "
@@ -1001,21 +1035,25 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
<< (you.species == SP_CENTAUR ? "boots" : "helmets");
}
break;
+
case TUT_SEEN_RANDART:
text << "Weapons and armour that have unusual descriptions like this "
"are much more likely to be of higher enchantment or have "
"special properties, good or bad. The rarer the description, "
"the greater the potential value of an item.";
break;
+
case TUT_SEEN_FOOD:
text << "You have picked up some food ('<w>%<magenta>'). You can eat it "
"by typing <w>e<magenta>.";
break;
+
case TUT_SEEN_CARRION:
text << "You have picked up a corpse ('<w>%<magenta>'). When a corpse "
"is lying on the ground, you can <w>D<magenta>issect with a "
"sharp implement. Once hungry you can <w>e<magenta>at the "
"resulting chunks (though they may not be healthy).";
+
if (god_likes_butchery(you.religion))
{
text << " During prayer you can offer corpses to "
@@ -1023,7 +1061,10 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
<< " by dissecting 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<magenta>iewing the item in question.";
break;
+
case TUT_SEEN_JEWELLERY:
text << "You have picked up a a piece of jewellery, either a ring "
"('<w>=<magenta>') or an amulet ('<w>\"<magenta>'). Type "
@@ -1031,11 +1072,13 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"can view it with <w>v<magenta> 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<magenta>ielding and "
"<w>E<magenta>voking it.";
break;
+
case TUT_SEEN_STAFF:
get_item_symbol(DNGN_ITEM_STAVE, &ch, &colour);
text << "You have picked up a magic staff or a rod, both of which are "
@@ -1047,7 +1090,10 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"spells even without magic knowledge simply by "
"<w>E<magenta>voking 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<magenta>iewing the item in question.";
break;
+
case TUT_SEEN_STAIRS:
if (you.num_turns < 1)
return;
@@ -1063,6 +1109,7 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"upstairs.";
break;
+
case TUT_SEEN_ESCAPE_HATCH:
if (you.num_turns < 1)
return;
@@ -1078,6 +1125,7 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"quickly leave a level with <w><<<magenta> and <w>><magenta>, "
"respectively, but will usually be unable to return right away.";
break;
+
case TUT_SEEN_TRAP:
object = env.show[ex][ey];
colour = env.show_col[ex][ey];
@@ -1091,6 +1139,7 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"can do physical damage (with darts or needles, for example) "
"or have other, more magical effects, like teleportation.";
break;
+
case TUT_SEEN_ALTAR:
object = env.show[ex][ey];
colour = env.show_col[ex][ey];
@@ -1101,11 +1150,13 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"<w>p<magenta> while standing on the square. Before taking up "
"the responding faith you'll be asked for confirmation.";
break;
+
case TUT_SEEN_SHOP:
text << "The <yellow>" << stringize_glyph(get_screen_glyph(x,y))
<< "<magenta> is a shop. You can enter it by typing "
- "<w><<<magenta>.";
+ "<w><<<magenta>.";
break;
+
case TUT_SEEN_DOOR:
if (you.num_turns < 1)
return;
@@ -1115,10 +1166,12 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"Sometimes it is useful to close a door. Do so by pressing "
"<w>c<magenta>, followed by the direction.";
break;
+
case TUT_KILLED_MONSTER:
text << "Congratulations, your character just gained some experience by "
"killing this monster! Every action will use up some of it to "
"train certain skills. For example, fighting monsters ";
+
if (Options.tutorial_type == TUT_BERSERK_CHAR)
text << "in melee battle will raise your Axes and Fighting skills.";
else if (Options.tutorial_type == TUT_RANGER_CHAR)
@@ -1134,10 +1187,12 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
<< god_name(you.religion)
<< ".";
break;
+
case TUT_NEW_LEVEL:
text << "Well done! Reaching a new experience level is always a nice "
"event: you get more health and magic points, and occasionally "
"increases to your attributes (strength, dexterity, intelligence).";
+
if (Options.tutorial_type == TUT_MAGIC_CHAR)
{
text << "\nAlso, new experience levels let you learn more spells "
@@ -1147,30 +1202,38 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"zapped with <w>Zb<magenta>.";
}
break;
+
case TUT_SKILL_RAISE:
text << "One of your skills just got raised. To view or manage your "
"skill set, type <w>m<magenta>.";
break;
+
case TUT_YOU_ENCHANTED:
text << "Enchantments of all types can befall you temporarily. "
"Brief descriptions of these appear at the lower end of the stats "
"area. Press <w>@<magenta> for more details. A list of all "
"possible enchantments is in the manual.";
break;
+
case TUT_YOU_SICK:
learned_something_new(TUT_YOU_ENCHANTED);
text << "Corpses can be spoiled or inedible, making you sick. "
"Also, some monsters' flesh is less palatable than others'. "
"While sick, your hitpoints won't regenerate and sometimes "
"an attribute may decrease. It wears off with time (wait with "
- "<w>5<magenta>) or you can quaff a potion of healing.";
+ "<w>5<magenta>) or you can quaff a potion of healing. "
+ "Also you can always press <w>@<magenta> to see your current "
+ "status. ";
break;
+
case TUT_YOU_POISON:
learned_something_new(TUT_YOU_ENCHANTED);
text << "Poison will slowly reduce your hp. It wears off with time "
"(wait with <w>5<magenta>) or you could quaff a potion of "
- "healing.";
+ "healing. Also you can always press <w>@<magenta> to see your "
+ "current status. ";
break;
+
case TUT_YOU_CURSED:
text << "Curses are comparatively harmless, but they do mean that you "
"cannot remove cursed equipment and will have to suffer the "
@@ -1178,6 +1241,7 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"remove curse. Weapons can also be uncursed using enchanting "
"scrolls.";
break;
+
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 "
@@ -1185,12 +1249,14 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"with a sharp implement. Your starting weapon will do nicely. "
"Try to dine on chunks in order to save permanent food.";
break;
+
case TUT_YOU_STARVING:
text << "You are now suffering from terrible hunger. You'll need to "
"<w>e<magenta>at something quickly, or you'll die. The safest "
"way to deal with this is to simply eat something from your "
"inventory rather than wait for a monster to leave a corpse.";
break;
+
case TUT_MULTI_PICKUP:
text << "There's a more comfortable way to pick up several items at the "
"same time. If you press <w>,<magenta> or <w>g<magenta> twice "
@@ -1198,6 +1264,7 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"but has no influence on the number of turns needed. Multi-pickup "
"will be interrupted by monsters or other dangerous events.";
break;
+
case TUT_HEAVY_LOAD:
if (you.burden_state != BS_UNENCUMBERED)
text << "It is not usually a good idea to run around encumbered; it "
@@ -1210,17 +1277,20 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"some of the stuff you don't need or that's too heavy to lug "
"around permanently.";
break;
+
case TUT_ROTTEN_FOOD:
text << "One or more of the chunks or corpses you carry has started to "
"rot. Few races can digest these safely, so you might just as "
"well <w>d<magenta>rop them now.";
break;
+
case TUT_MAKE_CHUNKS:
text << "How lucky! That monster left a corpse which you can now "
"<w>D<magenta>issect. One or more chunks will appear that you "
"can then <w>e<magenta>at. Beware that some chunks may be, "
"sometimes or always, hazardous. Only experience can help "
"you here.";
+
if (you.duration[DUR_PRAYER]
&& (god_likes_butchery(you.religion)
|| god_hates_butchery(you.religion)))
@@ -1231,22 +1301,24 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
<< ".";
}
break;
+
case TUT_OFFER_CORPSE:
- if (!god_likes_butchery(you.religion))
- {
+ if (!god_likes_butchery(you.religion) || you.hunger_state <= HS_HUNGRY)
return;
- }
+
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<magenta>issecting it while <w>p<magenta>raying.";
break;
+
case TUT_SHIFT_RUN:
text << "Walking around takes less keystrokes if you press "
"<w>Shift-direction<magenta> or <w>/ direction<magenta>. "
"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<magenta> to bring up the level map. Typing "
@@ -1255,6 +1327,7 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"<w>.<magenta> or <w>Enter<magenta> 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>><magenta>'. Proceed there and press <w>><magenta> to "
@@ -1276,31 +1349,38 @@ 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<magenta> or "
"<w>shift-numpad-5<magenta> 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<magenta>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.";
+ "out. Press <w>@<magenta> 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.hunger_state >= HS_SATIATED)
+ && !you.duration[DUR_BERSERKER] && !you.duration[DUR_EXHAUSTED]
+ && you.hunger_state >= HS_SATIATED)
{
text << "\nAlso, with "
<< god_name(you.religion)
@@ -1308,11 +1388,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 "
@@ -1321,10 +1403,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<magenta>.";
break;
+
case TUT_NEW_ABILITY:
text << "You just gained a new ability. Press <w>a<magenta> 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)
@@ -1333,6 +1417,7 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"b by pressing <w>'<magenta>.";
}
break;
+
case TUT_FLEEING_MONSTER:
if (!Options.tutorial_type == TUT_BERSERK_CHAR)
return;
@@ -1347,16 +1432,19 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y)
"<w>f+.<magenta> instead; the game will pick the first weapon "
"that fits the option.";
break;
+
case TUT_MONSTER_BRAND:
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.";
break;
+
case TUT_SEEN_MONSTER:
case TUT_SEEN_FIRST_OBJECT:
break;
- case TUT_EVENTS_NUM:
- text << "You've found something new (but I don't know what)!";
+
+ default:
+ text << "You've found something new (but I don't know what)!";
}
if ( !text.str().empty() )
@@ -1453,12 +1541,20 @@ void tutorial_describe_item(item_def &item)
if (is_artefact(item) && item_type_known(item))
{
// exception: you can activate it
- if (gives_ability(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. ";
ostr << tut_abilities();
break;
+ } // or if it grants a resistance
+ else if (gives_resistance(item)
+ && wherey() <= get_number_of_lines() - 3)
+ {
+ ostr << "\nThis weapon offers its wearer protection from "
+ "certain sources. For an overview of your resistances "
+ "(among other things) type <w>%<magenta>.";
+ break;
}
return;
}
@@ -1541,7 +1637,8 @@ void tutorial_describe_item(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.";
+ "scroll of remove curse or one of the enchantment scrolls.";
+
if (!wielded && is_throwable(item, you.body_size()))
ostr << " (Throwing it is safe, though.)";
@@ -1585,14 +1682,18 @@ void tutorial_describe_item(item_def &item)
bool wearable = true;
if (you.species == SP_CENTAUR && item.sub_type == ARM_BOOTS)
{
- ostr << "As a Centaur you cannot wear boots.";
+ ostr << "As a Centaur you cannot wear boots. "
+ "(Type <w>A<magenta> to see a list of your mutations "
+ "and innate abilities.)";
wearable = false;
}
else if (you.species == SP_MINOTAUR && item.sub_type == ARM_HELMET
&& get_helmet_type(item) != THELM_CAP
&& get_helmet_type(item) != THELM_WIZARD_HAT)
{
- ostr << "As a Minotaur you cannot wear helmets.";
+ ostr << "As a Minotaur you cannot wear helmets. "
+ "(Type <w>A<magenta> to see a list of your mutations "
+ "and innate abilities.)";
wearable = false;
}
else
@@ -1618,6 +1719,12 @@ void tutorial_describe_item(item_def &item)
"again until the curse has been lifted by reading a "
"scroll of remove curse.";
}
+ 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>%<magenta>.";
+ }
if (is_artefact(item) && gives_ability(item))
{
ostr << "\nWhen worn, some types of armour (such as this one) "
@@ -1664,6 +1771,14 @@ void tutorial_describe_item(item_def &item)
"finally lifted when he or she reads a scroll of remove "
"curse.";
}
+ if (gives_resistance(item))
+ {
+ ostr << "\n\nThis "
+ << (item.sub_type < NUM_RINGS ? "ring" : "amulet")
+ << " offers its wearer protection "
+ "from certain sources. For an overview of your "
+ "resistances (among other things) type <w>%<magenta>.";
+ }
if (gives_ability(item))
{
ostr << "\nWhen worn, some types of jewellery (such as this one) "
@@ -1702,7 +1817,7 @@ void tutorial_describe_item(item_def &item)
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 "
+ "tome of hated magic by using the corresponding "
"<w>a<magenta>bility. "
"Note that this only works on books that are "
"lying on the floor and not on your current "
@@ -1718,14 +1833,14 @@ void tutorial_describe_item(item_def &item)
}
else // actually can cast spells
{
- if (player_can_memorize(item))
+ if (player_can_memorise(item))
{
ostr << "Such a <lightblue>highlighted spell<magenta> "
- "can be <w>M<magenta>emorized right away. ";
+ "can be <w>M<magenta>emorised right away. ";
}
else
{
- ostr << "You cannot memorize any "
+ ostr << "You cannot memorise any "
<< (you.spell_no ? "more " : "")
<< "spells right now. This will change as you "
"grow in levels and Spellcasting proficiency. ";
@@ -1734,8 +1849,9 @@ void tutorial_describe_item(item_def &item)
if (you.spell_no)
{
ostr << "\n\nTo do magic, type <w>Z<magenta> and "
- "choose a spell (check with <w>?<magenta>). "
- "For attack spells you'll ";
+ "choose a spell, e.g. <w>a<magenta> (check "
+ "with <w>?<magenta>). For attack spells "
+ "you'll ";
ostr << tut_target_mode(true);
}
}
@@ -1781,6 +1897,13 @@ void tutorial_describe_item(item_def &item)
"react to a spell of its school and identify itself.";
}
}
+ else if (item.sub_type <= STAFF_AIR && gives_resistance(item))
+ {
+ ostr << "\nThis staff offers its wielder protection from "
+ "certain sources. For an overview of your resistances "
+ "(among other things) type <w>%<magenta>.";
+ }
+
Options.tutorial_events[TUT_SEEN_STAFF] = 0;
break;
@@ -1809,8 +1932,6 @@ bool tutorial_feat_interesting(dungeon_feature_type feat)
switch (feat)
{
- case DNGN_CLOSED_DOOR:
- case DNGN_OPEN_DOOR:
case DNGN_ORCISH_IDOL:
case DNGN_GRANITE_STATUE:
case DNGN_SILVER_STATUE:
@@ -1838,16 +1959,6 @@ void tutorial_describe_feature(dungeon_feature_type feat)
switch (feat)
{
- case DNGN_CLOSED_DOOR:
- ostr << "You can open it by walking into it.";
- Options.tutorial_events[TUT_SEEN_DOOR];
- break;
- case DNGN_OPEN_DOOR:
- ostr << "You can close an open door if you stand next to it while "
- "the doorway's empty, and then press <w>c<magenta> followed "
- "by the direction of the door.";
- Options.tutorial_events[TUT_SEEN_DOOR];
- break;
case DNGN_ORCISH_IDOL:
case DNGN_GRANITE_STATUE:
case DNGN_SILVER_STATUE:
@@ -1994,6 +2105,9 @@ void tutorial_describe_feature(dungeon_feature_type feat)
bool tutorial_monster_interesting(const monsters *mons)
{
+ if (mons_is_unique(mons->type) || mons->type == MONS_PLAYER_GHOST)
+ return true;
+
// highlighted in some way
if (get_mons_colour(mons) != mons->colour)
return true;
@@ -2012,16 +2126,30 @@ void tutorial_describe_monster(const monsters *mons)
std::ostringstream ostr;
ostr << "<magenta>";
- int level_diff
- = mons_level(mons->type) - (you.your_level + Options.ood_interesting);
-
- if (you.level_type == LEVEL_DUNGEON && level_diff >= 0)
+ if (mons_is_unique(mons->type))
+ {
+ ostr << "Did you think you were the only adventurer in the dungeon? "
+ "Well, you thought wrong! These unique adversaries often "
+ "possess skills that normal monster wouldn't, so be careful.";
+ }
+ else if(mons->type == MONS_PLAYER_GHOST)
+ {
+ ostr << "The ghost of a deceased adventurer, it would like nothing "
+ "better than to send you the same way.";
+ }
+ else
{
- ostr << "This kind of monster is usually only encountered "
- << (level_diff > 5 ? "much " : "")
- << "deeper in the dungeon, so it's probably "
- << (level_diff > 5 ? "extremely" : "very")
- << " dangerous!\n\n";
+ int level_diff
+ = mons_level(mons->type) - (you.your_level + Options.ood_interesting);
+
+ if (you.level_type == LEVEL_DUNGEON && level_diff >= 0)
+ {
+ ostr << "This kind of monster is usually only encountered "
+ << (level_diff > 5 ? "much " : "")
+ << "deeper in the dungeon, so it's probably "
+ << (level_diff > 5 ? "extremely" : "very")
+ << " dangerous!\n\n";
+ }
}
if (mons->has_ench(ENCH_BERSERK))