diff options
-rw-r--r-- | crawl-ref/source/enum.h | 3 | ||||
-rw-r--r-- | crawl-ref/source/monstuff.cc | 2 | ||||
-rw-r--r-- | crawl-ref/source/skills2.cc | 27 | ||||
-rw-r--r-- | crawl-ref/source/tutorial.cc | 66 |
4 files changed, 70 insertions, 28 deletions
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index 28a846bb8b..a423412ad5 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -3693,7 +3693,8 @@ enum tutorial_event_type TUT_YOU_MUTATED, // 40 TUT_NEW_ABILITY, TUT_WIELD_WEAPON, - TUT_EVENTS_NUM // 43 + TUT_FLEEING_MONSTER, + TUT_EVENTS_NUM // 44 }; // for numbers higher than 45 change size of tutorial_events in externs.h enum tutorial_types diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc index ee039dec11..68b4633883 100644 --- a/crawl-ref/source/monstuff.cc +++ b/crawl-ref/source/monstuff.cc @@ -1462,6 +1462,8 @@ void behaviour_event( monsters *mon, int event, int src, // assume monsters know where to run from, even // if player is invisible. setTarget = true; + if (see_grid(mon->x, mon->y)) + learned_something_new(TUT_FLEEING_MONSTER); break; case ME_CORNERED: diff --git a/crawl-ref/source/skills2.cc b/crawl-ref/source/skills2.cc index 019c44a927..4af9af03e6 100644 --- a/crawl-ref/source/skills2.cc +++ b/crawl-ref/source/skills2.cc @@ -1937,18 +1937,33 @@ void show_skills() } } - // if any more skills added, must adapt letters to go into caps - gotoxy(1, bottom_line-1); - textcolor(LIGHTGREY); - cprintf("Press the letter of a skill to choose whether you want to practise it."); - - if (!player_genus(GENPC_DRACONIAN) || you.max_level >= 7) + if (Options.tutorial_left) + { + textcolor(MAGENTA); + gotoxy(1, bottom_line-5); + formatted_string::parse_block( + "This screen shows the skill set of your character. You can pick up new" EOL + "skills by performing the corresponding actions. The number next to the" EOL + "skill is your current level, the higher the better. The blue percent " EOL + "value shows your progress towards the next skill level. You can toggle" EOL + "which skills to train by pressing their slot letters. A <darkgrey>greyish<magenta> skill " EOL + "will increase at a decidedly slower rate and ease training of others. ", + false).display(); + } + else { + // if any more skills added, must adapt letters to go into caps + gotoxy(1, bottom_line-1); + textcolor(LIGHTGREY); + cprintf("Press the letter of a skill to choose whether you want to practise it."); + if (!player_genus(GENPC_DRACONIAN) || you.max_level >= 7) + { gotoxy(1, bottom_line); formatted_string::parse_string("Press '!' to toggle between " "<blue>progress</blue> and " "<red>aptitude</red> " "display.").display(); + } } int get_thing = getch(); diff --git a/crawl-ref/source/tutorial.cc b/crawl-ref/source/tutorial.cc index eba41f060b..7cf37d0414 100644 --- a/crawl-ref/source/tutorial.cc +++ b/crawl-ref/source/tutorial.cc @@ -342,6 +342,8 @@ static std::string tut_debug_list(int event) return "gained a divine ability"; case TUT_WIELD_WEAPON: return "wielded an unsuitable weapon"; + case TUT_FLEEING_MONSTER: + return "made a monster flee"; default: return "faced a bug"; } @@ -806,6 +808,9 @@ void tutorial_first_monster(const monsters& mon) unsigned short col; get_mons_glyph(&mon, &ch, &col); + if (ch == ' ') // happens if monster standing on dropped corpse or item + return; + std::string text = "<magenta>That "; text += colour_to_tag(col); text += ch; @@ -822,24 +827,28 @@ 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. Do this as follows: <w>wbf+.<magenta> where <w>wb<magenta> " - "wields the bow, <w>f<magenta> fires appropriate ammunition " - "(your arrows) and enters targeting mode. <w>+<magenta> and " - "<w>-<magenta> allow you to select the proper monster. Finally, " - "<w>Enter<magenta> or <w>.<magenta> fire. If you miss, " - "<w>ff<magenta> fires at the previous target again."; + "bow. Do this as follows: <w>wbff<magenta> where <w>wb<magenta> " + "wields the bow, and <w>ff<magenta> fires appropriate ammunition " + "(your arrows) at the nearest hostile monster. If you'd like to " + "choose a new monster you can type <w>f<magenta> followed by " + "<w>+<magenta> or <w>-<magenta> instead to cycle through the " + "available targets. Then press <w>Enter<magenta>, <w>f<magenta> " + "or <w>.<magenta> to fire. If you miss, <w>ff<magenta> fires at " + "the previous target again."; print_formatted_paragraph(text, get_tutorial_cols(), MSGCH_TUTORIAL); } else if (Options.tutorial_type == TUT_MAGIC_CHAR) { - text = "However, as a conjurer you will want to deal with it using magic." - "Do this as follows: <w>Za+.<magenta> where <w>Za<magenta> zaps " + text = "However, as a conjurer you will want to deal with it using magic. " + "Do this as follows: <w>Za.<magenta> where <w>Za<magenta> zaps " "the first spell you know, "; text += spell_title(get_spell_by_letter('a')); - text += ", and enters targeting mode. <w>+<magenta> and <w>-<magenta> " - "allow you to select the proper target. Finally, <w>Enter<magenta> " - "or <w>.<magenta> fire. If you miss, <w>Zap<magenta> will " - "fire at the previous target again."; + text += ", and <w>.<magenta> shoots at the targetted monster (the closest " + "hostile monster). To target a different monster, use <w>+<magenta> " + "or <w>-<magenta> to cycle through the available targets. " + "<w>Enter<magenta>, <w>f<magenta> or <w>.<magenta> will fire. If you " + "miss, <w>Za<magenta> followed by any of the aforementioned keys " + "will fire at it again."; print_formatted_paragraph(text, get_tutorial_cols(), MSGCH_TUTORIAL); } @@ -911,8 +920,7 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y) get_item_symbol(DNGN_ITEM_BOOK, &ch, &colour); text << "You have picked up a spellbook ('<w>" << static_cast<char>(ch) - << - "'<magenta>). You can read it by typing <w>r<magenta>, " + << "'<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>."; @@ -923,16 +931,14 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y) } break; case TUT_SEEN_WEAPON: - text << - "This is the first weapon ('<w>(<magenta>') you've picked up. " + 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>."; if (Options.tutorial_type == TUT_BERSERK_CHAR) { - text << - "\nAs you're already trained in Axes you should stick " + text << "\nAs you're already trained in Axes you should stick " "with these. Checking other axes can be worthwhile."; } break; @@ -1034,6 +1040,9 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y) break; case TUT_SEEN_TRAPS: + object = env.show[ex][ey]; + colour = env.show_col[ex][ey]; + get_item_symbol( object, &ch, &colour ); text << "Oops... you just triggered a trap. An unwary adventurer will " "occasionally stumble into one of these nasty constructions " "depicted by <w>^<magenta>. They can do physical damage (with " @@ -1081,8 +1090,8 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y) { text << "\nTo dedicate your kills to " << god_name(you.religion) - << " <w>p<magenta>ray before battle. Not all gods will be " - "pleased by doing this."; + << " <w>p<magenta>ray before battle. Note that not all gods " + "will be pleased about you doing this."; } break; case TUT_NEW_LEVEL: @@ -1249,7 +1258,8 @@ void learned_something_new(tutorial_event_type seen_what, int x, int y) 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.berserker) + if (Options.tutorial_type == TUT_BERSERK_CHAR && !you.berserker + && !you.hunger) { text << "\nAlso, with " << god_name(you.religion) @@ -1279,6 +1289,20 @@ 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; + + text << "While unsporting, it is sometimes useful to attack a fleeing " + "monster by throwing something after it. To do this, press " + "<w>t<magenta>, choose a throwing weapon, e.g. one of your " + "spears, use <w>+<magenta> to select a monster and press " + "<w>.<magenta>, <w>f<magenta> or <w>Enter<magenta>. The closest " + "monster will be autoselected. If you've got the fire_order " + "option set you can directly use <w>ff<magenta> or " + "<w>f+.<magenta> instead; the game will pick the first weapon " + "that fits the option."; + break; case TUT_SEEN_MONSTER: case TUT_SEEN_FIRST_OBJECT: break; |