Using horrific amounts of #ifdef USE_TILE etc, the tutorial texts now give different information for tiles (mouse clicks) and non-tiles (key commands).
Unfortunately, while I am confident this is a vast improvement the new messages for tiles tend to be rather wordy because "clicking on the item with your left mouse button" is much verbose than "pressing 'w'". That, and most of the time I want to print the tile information in addition to the general commands. So, it would be helpful if someone else could go over the texts at one point - there's no need to hurry, though.
Also a bit of general improvement, which is always nice. I'd somehow forgotten to include a tutorial trigger for mutations, and of course the first potion I tried was mutation. :)
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3941 c06c8d41-db1a-0410-9941-cceddc491573
LS5XCCGKQHSJQGWLWLGTP2F5OYWK4ND5AQQAGRN6H2HVBSXNCCZAC
DDDXFHD5EE7BSS6EKVFAXFSGWJWPFFJDE6W6WJHIPZM64EFQJCRQC
CTLRYTHXAZCMYIL6YJMV7357NC25EXT7QC3UQT4RB6HGSBXKPREQC
O6ZMFKDI3XO2SWPNEYHIPYFDWJR4TVDP5BAATK6LVCVETQID6E7AC
RHSSI6I2IGIDQLDPNDEB6KF5TGJEQQTMA2H6FWNI7A7JDUWFBUJAC
76MT5JQZVCEU6FXMOE7ACRT4J2XGP3OMF3KGGZ4BR5F4WRKCJDRQC
7NDXS36TE7QVXTXJWMYSVG5UHCCLPIO4VL6NXFGTDK3ZNKE3A2IAC
XRZPPYWPWUOM4SFNI6BHKH2UKJQNLKOV6Y7XIEPEZXE5QYRT26PAC
77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC
RCU52DRCPWJVQ6HME4QR6V6EVQWTBKZTPWDI47UGUDAUBPOO5YNAC
ACDPN464TK2LKLHSDN3YVRHAPF7WLSLLU3UHIYEXKFDEZPEU3XSQC
ZBPZZ5A7AB2VFZKQ2UJXVDGUK22OCZJCEN2RWTGDGK3VXFCCDKVAC
2RZHHEBFIBAYIBY4B3G6CXKTRJBZVA3CZCQDTY47VFL2RU74YKFAC
ESWIM76FGJL4QFLSHU6AC4D74PT7OPLQ7ZCJYWLZS5UCBAJDXYHAC
7HA2754QW3SBCAJ5K6KUXNXXXIZB5BIBCFPLXADCXHH6EREKXHSAC
PT7EKXV55EVJ2EYFZEL3KCGRI37KKMNXGN76CYVBAUPHKP4ZLDLAC
GL6SGPBZQPJBVGPOASYVCTAFXS7RNARR6Y5WZMIO5YCTB7ZJY4KAC
2ESKXYN266CEMLSL6DNCKG4REDO34FXL4ODVGMWDJTNJRKMXWCRQC
TI2HASZUN3QBTNWRCXLXJHOZBOUHFEOQUCPK5EYLATL7BP32H6LQC
Q4YYTFXYZUDBYWT37U354CJOAQMAAIWM5W72TAEGMEUKZIUZBMGAC
U3KGUJJQWQORJIIFH3ADVNIEEX5HOX6KEOXO7DJSL7L3Z6GG3PAQC
BKL4VOE2R2ZZS35A3HTLVZW5FBIV7Y4YSHSS2PTBLRXMZCIP6JCAC
BNJDMDVY4YX5OQJ3AYBGHOEJPKO724XWPSK5XLVT4V5F54NK34YAC
YZ3BCKFW4PTYDL5EG2PW52KKRHPWCYPSXYH7TJAINF3335N2XCHAC
HYS3HXTXATFPN7GLN3WBGDCP22UT2D3JBVUS7SP5FE7L54TDCJRQC
TC7C6MT52KXUCLPHH37VLPKIBPMYOYLIOXYJAB7ZKDMZB4OHDTPQC
6HQB2N6N75R2RGKJFWRUN7WAC2PNGWQFXTII5DTRLTHZ2BOTMTVAC
TOOHYAX73C5KPSWGHPCBWCUN62WMMO3BI5CWEEMGV3WBFZ5RIH5AC
Z6XF4AIERIW4U4AR3HU2ILYFZ54IK4K4ORQ6JKCEWRO5LZODWDDAC
ZDHRCGDMMY34ZW2PVEBZJ657YULM3UYRQXFQ3QYDKSGS2PDQW5WQC
PL6I2CMSTHY5ZHWVMIQE5YTM5S5VPKBNZM6QJVHZSSKOJGIJ5W4AC
TRNEOO3YKZSUGYTJZDDXZTJFQJXY6PWKBDJXAOLY3FZAD6WHTUTQC
XIXBLWIVUPWM3P6XQIB7CS45JOOIYE6OBYYYERCFAYYO4VOWOYUQC
SJP5BHX6MFWF3OSQPEF4WUWZWPUGMOVURTT2CUVT6H3A66LETXUAC
5Z6ZTK37C3X2YBHO2HX3ULMCHKQXDUDMX4TUIRCBTTP2IQ57BVQAC
BFCFMN2BXNLXJCYYCL2V2XTDQQNM3PJPSRB6CU76FM3332NC7GMAC
5TG5LXU4DX65KMWCZ7YJHOB3VAETQAVBUHEUSQTPMA327XV2HQWAC
IHOKNI4O7EEW4UBMKHP6XOZNEIQSW4AYOT4O3JXUIXNNR553IQAQC
GTPAKUU3R5AS3LQNCCZIP3BWV473RM4EB2AIS4FXAJRXHEOVH2PAC
L4UCVNVRFTHENDKDOY6X75LXIE2B7XIMSKGVKHBOXNID7RDTBQRAC
ACKNLTFL2RI3PMRWLNRVLRWGQAMLRFKNGNS5LED6NFE5GVGFIHFAC
CMNLYUECIMEZSOYG4KOSINOPER5OM7PPCGIHCM7LQVWEO77XFUYQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
CGYTZT5QWIEGYKUOLOK7MFXSLJKLYRZONER5ZCDZO5XYWSLG475QC
JVSCP4FTW2G57C6YD5HZOZXTODGZH7TR75JQGFJBEPX3LCZH236QC
IXVKL2SINZN4DMJSZSYFVK5YLGSBGV4KCN7GKYQL7SZQDCM3S7YQC
7K5P2GRF6QUXTMERG2R3BB6DZFQYJQ6V2KNPMBPFDLOP36NQILPAC
CH7JECYYH35H4TRHRNRTRJCQTQLZ2WRH62TKV72SUIU2RTK5OH7AC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
you.species = get_tutorial_species(Options.tutorial_type);
you.char_class = get_tutorial_job(Options.tutorial_type);
you.species = _get_tutorial_species(Options.tutorial_type);
you.char_class = _get_tutorial_job(Options.tutorial_type);
letter, species_name(get_tutorial_species(type), 1).c_str(),
get_class_name(get_tutorial_job(type)), desc);
letter, species_name(_get_tutorial_species(type), 1).c_str(),
get_class_name(_get_tutorial_job(type)), desc);
snprintf(info, INFO_SIZE, "You are a %s %s, and the tutorial will reflect that.",
species_name(get_tutorial_species(Options.tutorial_type), 1),
get_class_name(get_tutorial_job(Options.tutorial_type)));
snprintf(info, INFO_SIZE, "You are a %s %s, and the tutorial will reflect "
"that.", species_name(you.species, 1), you.class_name);
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 "
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 "
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>.";
result += "</";
result += colour_to_str(channel_to_colour(MSGCH_TUTORIAL));
result += ">" EOL;
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>"
#ifdef USE_TILE
" or by clicking into the message area"
#endif
"." EOL;
"keys, movement is also possible with <w>hjklyubn</w>. A basic "
"command list can be found under <w>?\?</w>, and the most "
"keys, movement is also possible with <w>hjklyubn</w>. "
#ifdef USE_TILE
"You can also move by clicking somewhere on the map. If this is "
"considered safe, i.e. there are no monsters around, you'll move "
"towards the chosen square."
#endif
EOL
"A basic command list can be found under <w>?\?</w>, and the most "
"playing experience your characters will last longer.", MSGCH_TUTORIAL);
mpr( "Perhaps the following advice can improve your playing style:", MSGCH_TUTORIAL);
"playing experience your characters will last longer.",
MSGCH_TUTORIAL);
mpr( "Perhaps the following advice can improve your playing style:",
MSGCH_TUTORIAL);
text = "Don't forget to go berserk when fighting particularly "
"difficult foes. It is risky, but makes you faster "
"and beefier.";
text = "Don't forget to go berserk when fighting particularly "
"difficult foes. It is risky, but makes you faster and beefier.";
text = "Your bow and arrows are extremely powerful against "
"distant monsters. Be sure to collect all arrows lying "
"around in the dungeon.";
text = "Your bow and arrows are extremely powerful against distant "
"monsters. Be sure to collect all arrows lying around in the "
"dungeon.";
text = "Learn when to run away from things you can't handle - this is "
"important! It is often wise to skip a particularly dangerous "
"level. But don't overdo this as monsters will only get harder "
"the deeper you delve.";
text = "Learn when to run away from things you can't handle - this "
"is important! It is often wise to skip a particularly "
"dangerous level. But don't overdo this as monsters will "
"only get harder the deeper you delve.";
text = "Rest between encounters. In Crawl, searching and resting are "
"one and the same. To search for one turn, press <w>s</w>, "
"<w>.</w>, <w>delete</w> or <w>keypad-5</w>. "
"Pressing <w>5</w> or <w>shift-and-keypad-5</w> will "
"let you rest for a longer time (you will stop resting when "
"fully healed).";
text = "Rest between encounters. In Crawl, searching and resting "
"are one and the same. To search for one turn, press "
"<w>s</w>, <w>.</w>, <w>delete</w> or <w>keypad-5</w>. "
"Pressing <w>5</w> or <w>shift-and-keypad-5</w> "
#ifdef USE_TILE
", or clicking into the stat area "
#endif
"will let you rest for a longer time (you will stop resting "
"after 100 turns, or when fully healed).";
text = "Remember to use those scrolls, potions or wands you've found. "
"Very often, you cannot expect to identify everything with the "
"scroll only. Learn to improvise: identify through usage.";
text = "Remember to use those scrolls, potions or wands you've "
"found. Very often, you cannot expect to identify "
"everything with the scroll only. Learn to improvise: "
"identify through usage.";
text = "If a particular encounter feels overwhelming don't forget to "
"use emergency items early on. A scroll of teleportation or a "
"potion of speed can really save your bacon.";
text = "If a particular encounter feels overwhelming don't "
"forget to use emergency items early on. A scroll of "
"teleportation or a potion of speed can really save your "
"bacon.";
text = "Never fight more than one monster, if you can help it. Always "
"back into a corridor so that they are forced to fight you one "
"on one.";
text = "Never fight more than one monster, if you can help it. "
"Always back into a corridor so that they are forced to "
"fight you one on one.";
text = "Congrats! You survived until the end of this tutorial - be sure to "
"try the other ones as well. Note that the help screen (<w>?\?</w>) "
"will look different from now on. Here's a last playing hint:";
text = "Congrats! You survived until the end of this tutorial - be sure "
"to try the other ones as well. Note that the help screen "
"(<w>?\?</w>) will look very different from now on. Here's a last "
"playing hint:";
"travel to one of the spots. It is even possible to enter words "
"like <w>\"shop\"</w> or <w>\"altar\"</w>.";
"travel to one of the spots. It is even possible to enter "
"words like <w>\"shop\"</w> or <w>\"altar\"</w>.";
text = "The game keeps an automated logbook for your characters. Use "
"<w>?:</w> to read it. You can enter notes manually with "
"the <w>:</w> command. Once your character perishes, two "
"morgue files are left in the <w>/morgue</w> directory. "
"The one ending in .txt contains a copy of your logbook. "
"During play, you can create a dump file with <w>#</w>.";
text = "The game keeps an automated logbook for your characters. "
"Use <w>?:</w> to read it. You can enter notes manually "
"with the <w>:</w> command. Once your character perishes, "
"two morgue files are left in the <w>/morgue</w> "
"directory. The one ending in .txt contains a copy of "
"your logbook. During play, you can create a dump file "
"with <w>#</w>.";
text = "Crawl has a macro function built in: press <w>~m</w> "
"to define a macro by first specifying a trigger key (say, "
"<w>F1</w>) and a command sequence, for example "
"<w>za+.</w>. The latter will make the <w>F1</w> "
"key always zap the spell in slot a at the nearest monster. "
"For more information on macros, type <w>?~</w>.";
text = "Crawl has a macro function built in: press <w>~m</w> "
"to define a macro by first specifying a trigger key "
"(say, <w>F1</w>) and a command sequence, for example "
"<w>za+.</w>. The latter will make the <w>F1</w> "
"key always zap the spell in slot a at the nearest "
"monster. For more information on macros, type <w>?~</w>.";
text = "The interface can be greatly customised. All options are "
"explained in the file <w>options_guide.txt</w> which "
"can be found in the <w>docs</w> directory. The "
"options themselves are set in <w>init.txt</w> or "
"<w>.crawlrc</w>. Crawl will complain if it can't "
"find either file.\n";
text = "The interface can be greatly customised. All options are "
"explained in the file <w>options_guide.txt</w> which "
"can be found in the <w>docs</w> directory. The options "
"themselves are set in <w>init.txt</w> or "
"<w>.crawlrc</w>. Crawl will complain if it can't find "
"either file.";
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 += "If you don't want to eat it, consider <w>c</w>hopping this "
"corpse up under <w>p</w>rayer as a sacrifice to ";
text += ". Whenever you view a corpse while in tutorial mode "
"you can reread this information.";
text += ". Whenever you view a corpse while in tutorial mode you can "
"reread this information.";
"terrain with full hitpoints and magic. For resting, "
"press <w>5</w> or <w>Shift-numpad 5</w>.";
"terrain with full hitpoints and magic. For resting, press "
"<w>5</w> or <w>Shift-numpad 5</w>"
#ifdef USE_TILE
", or click on the stat area with your mouse"
#endif
".";
#ifndef USE_TILE
unsigned ch;
unsigned short col;
get_mons_glyph(&mon, &ch, &col);
text += colourize_glyph(col, ch);
text += " is a monster, usually depicted by a letter. Some typical "
"early monsters look like <brown>r</brown>, <green>l</green>, "
"<brown>K</brown> or <lightgrey>g</lightgrey>. "
#else
#ifdef USE_TILE
text += ". Examples for typical early monsters are: rat, "
"giant newt, kobold and goblin. "
text += ". Examples for typical early monsters are rats, giant newts, "
"kobolds, or goblins. You can gain information about any monster "
"by hovering your mouse over its tile, and read the monster "
"description by clicking on it with your <w>right mouse button</w>."
#else
unsigned ch;
unsigned short col;
get_mons_glyph(&mon, &ch, &col);
text += _colourize_glyph(col, ch);
text += " is a monster, usually depicted by a letter. Some typical "
"early monsters look like <brown>r</brown>, <green>l</green>, "
"<brown>K</brown> or <lightgrey>g</lightgrey>. ";
if (crawl_view.mlistsz.y > 0)
{
text += "Your console settings allowing, you'll always see a "
"list of monsters somewhere on the screen." EOL;
}
text += "You can gain information about it by pressing <w>x</w> and "
"moving the cursor on the monster, and read the monster "
"description by then pressing <w>v</w>. "
"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.";
"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());
#ifdef USE_TILE
text += EOL "As a short-cut you can also <w>right-click</w> on your "
"bow to read its description, and <w>left-click</w> to wield "
"it.";
#endif
formatted_message_history(text, MSGCH_TUTORIAL, 0,
_get_tutorial_cols());
text = "However, as a conjurer you will want to deal with it using magic. "
"If you have a look at your spellbook from your <w>i</w>nventory, "
"you'll find an explanation of how to do this.";
text = "However, as a conjurer you will want to deal with it using "
"magic. 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());
#ifdef USE_TILE
text += EOL "As a short-cut you can also <w>right-click</w> on your "
"book in your inventory to read its description.";
#endif
formatted_message_history(text, MSGCH_TUTORIAL, 0,
_get_tutorial_cols());
"Generally, items are shown by "
"non-letter symbols like <w>%?!\"=()[</w>. "
"Generally, items are shown by non-letter symbols like "
"<w>%?!\"=()[</w>. "
#else
"You can also pick up an item by clicking on your <w>left mouse "
"button</w> while standing on its square. "
"<w>d</w>. Several types of objects will usually be picked up "
"automatically."
"\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());
#ifdef USE_TILE
"a <w>left mouse click</w> while pressing the <w>Shift key</w>. "
"Whenever you <w>right-click</w> on an item in your inventory"
#else
"<w>d</w>. Any time you look at an item in your <w>i</w>nventory"
#endif
", you can read about its properties and its description.";
formatted_message_history(text, MSGCH_TUTORIAL, 0, _get_tutorial_cols());
// force more() to highlight this item
#ifdef USE_TILE
more();
#endif
"If it's a spellbook you'll then be able to memorise "
"spells via <w>M</w> and cast a memorised spell with "
"<w>z</w>.";
"If it's a spellbook you'll then be able to memorise spells "
"via <w>M</w> and cast a memorised spell with <w>z</w>.";
#else
text << ". You can read it doing a <w>right click</w> with your "
"mouse, and memorise spells with a <w>left click</w>. ";
#endif
<< ", though, you might instead wish to burn those tomes of "
"hated magic by using the corresponding "
<< ", though, you might instead wish to burn those tomes "
"of hated magic by using the corresponding "
"you've picked up. "
"Use <w>w</w> to wield it, but be aware that this weapon "
"you've picked up. Use <w>w</w> "
#ifdef USE_TILE
"or click on it with your <w>left mouse button</w> "
#endif
"to wield it, but be aware that this weapon "
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. Selecting the item in your "
"<w>i</w>nventory gives more information about both missiles "
"and launcher.";
text << "This is the first stack of missiles "
#ifndef USE_TILE
"('<w>)</w>') "
#endif
"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. "
#ifdef USE_TILE
"<w>Right-clicking</w> on "
#else
"Selecting "
#endif
"the item in your <w>i</w>nventory will give more "
"information about both missiles and launcher.";
text << "\nAs you're already trained in Bows you should stick with "
"arrows and collect more of them in the dungeon.";
text << "\nAs you're already trained in Bows you should stick"
" with arrows and collect more of them in the dungeon.";
text << "\nHowever, as a spellslinger you don't really need another "
"type of ranged attack, unless there's another effect in "
"addition to damage.";
text << "\nHowever, as a spellslinger you don't really need "
"another type of ranged attack, unless there's another "
"effect in addition to damage.";
text << "\nFor now you might be best off with sticking to darts or "
"stones for ranged attacks.";
text << "\nFor now you might be best off with sticking to darts "
"or stones for ranged attacks.";
"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 from your <w>i</w>nventory.";
"you've picked up. "
#ifdef USE_TILE
"You can click on it to wear it, and click a second time to "
"take it off again. Doing a <w>right mouse click</w> will "
"show you its properties.";
#else
"Use <w>W</w> to wear it and <w>T</w> to take it off again. "
"You can view its properties from your <w>i</w>nventory.";
#endif
<< ". Type <w>P</w> to put it on and <w>R</w> to remove "
"it. You can view its properties from your <w>i</w>nventory"
#else
<< ". You can click on it to put it on, and click a second time "
"remove it off again. By clicking on it with your <w>right "
"mouse button</w> you can view its properties"
<< ". Type <w>P</w> to put it on and <w>R</w> to remove "
"it. You can view its properties from your <w>i</w>nventory, "
"although often magic is necessary to reveal its true nature.";
break;
<< ", though often magic is necessary to reveal its true "
"nature.";
break;
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 "
"e<w>v</w>oking it. As usually, selecting it from your "
"<w>i</w>nventory might give you more information.";
text << "This is a curious object indeed. You can play around with "
"it to find out what it does by "
#ifdef USE_TILE
"clicking on it once to <w>w</w>ield it, and a second time "
"to e<w>v</w>oke "
#else
"<w>w</w>ielding and e<w>v</w>oking "
#endif
"it. As usually, selecting it from your <w>i</w>nventory "
"might give you more information.";
"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 "
"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 "
"respectively, but will usually be unable to return right away.";
"respectively "
#ifdef USE_TILE
"(or by using your <w>left mouse button</w> in combination "
"with the <w>Shift key</w>)"
#endif
", but will usually be unable to return right away.";
text << "Oops... you just triggered a trap. An unwary adventurer will "
"occasionally stumble into one of these nasty constructions";
text << "Oops... you just triggered a trap. An unwary adventurer "
"will occasionally stumble into one of these nasty "
"constructions";
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 ";
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 ";
"event: you get more health and magic points, and occasionally "
"increases to your attributes (strength, dexterity, intelligence).";
"event: you get more health and magic points, and "
"occasionally increases to your attributes (strength, "
"dexterity, intelligence).";
"(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 "
"(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 "
"Brief descriptions of these appear at the lower end of the stats "
"area. Press <w>@</w> for more details. A list of all "
"possible enchantments is in the manual.";
"Brief descriptions of these appear at the lower end of the "
"stats area. Press <w>@</w> for more details. A list of all "
"possible enchantments is in the manual (<w>?5</w>).";
text << "wait with <w>5</w>) or you could quaff a potion of "
"healing. ";
text << "wait with <w>5</w>"
#ifdef USE_TILE
"or by clicking onto the stats area"
#endif
"), or you could quaff a potion of healing. ";
text << "wait with <w>5</w>) or you could quaff a potion of "
"healing. ";
text << "wait with <w>5</w>"
#ifdef USE_TILE
"or by clicking onto the stats area"
#endif
"), or you could quaff a potion of healing. ";
text << "Curses are comparatively harmless, but they do mean that you "
"cannot remove cursed equipment and will have to suffer the "
"(possibly) bad effects until you find and read a scroll of "
"remove curse. Weapons can also be uncursed using enchanting "
"scrolls.";
text << "Curses are comparatively harmless, but they do mean that "
"you cannot remove cursed equipment and will have to suffer "
"the (possibly) bad effects until you find and read a scroll "
"of remove curse. Weapons and armour can also be uncursed "
"using the appropriate enchantment scrolls.";
"with a sharp implement. Your starting weapon will do nicely. "
"Try to dine on chunks in order to save permanent food.";
"with a sharp implement. Your starting weapon will do "
"nicely. Try to dine on chunks in order to save permanent "
"food.";
text << "There's a more comfortable way to pick up several items at the "
"same time. If you press <w>,</w> or <w>g</w> twice "
"you can choose items from a menu. This takes fewer keystrokes "
"but has no influence on the number of turns needed. Multi-pickup "
"will be interrupted by monsters or other dangerous events.";
text << "There's a more comfortable way to pick up several items at "
"the same time. If you press <w>,</w> or <w>g</w> "
#ifdef USE_TILE
", or click your left mouse button "
#endif
"twice you can choose items from a menu. This takes fewer "
"keystrokes but has no influence on the number of turns "
"needed. Multi-pickup will be interrupted by monsters or "
"other dangerous events.";
text << "It is not usually a good idea to run around encumbered; it "
"slows you down and increases your hunger.";
text << "It is not usually a good idea to run around encumbered; "
"it slows you down and increases your hunger.";
text << "Sadly, your inventory is limited to 52 items, and it appears "
"your knapsack is full.";
text << "Sadly, your inventory is limited to 52 items, and it "
"appears your knapsack is full.";
text << " However, this is easy enough to rectify: simply <w>d</w>rop "
"some of the stuff you don't need or that's too heavy to lug "
"around permanently.";
text << " However, this is easy enough to rectify: simply "
"<w>d</w>rop some of the stuff you don't need or that's too "
"heavy to lug around permanently.";
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</w>rop them now.";
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</w>rop them now.";
"<w>.</w> or <w>Enter</w> lets your character move "
"there on its own.";
"<w>.</w> or <w>Enter</w> lets your character move there on "
"its own.";
#ifdef USE_TILE
text << "\nAlso, clicking on the right-side minimap with your "
"<w>right mouse button</w> will zoom into that dungeon area. "
"Clicking with the <w>left mouse button</w> instead will let "
"you move there.";
#endif
text << "You have explored the dungeon on this level. The downstairs look "
"like '<w>></w>'. Proceed there and press <w>></w> to "
"go down. ";
text << "Hey, you've finished exploring the dungeon on this level! "
"You can search for stairs from the level map (<w>X</w>) "
"by pressing <w>></w>. The cursor will jump to the nearest "
"staircase, and by pressing <w>.</w> or <w>Enter</w> your "
"character can move there, too. ";
"Try searching for secret doors in suspicious looking spots; "
"use <w>s</w>, <w>.</w> or <w>5</w> to do so.";
"Try searching for secret doors in suspicious looking "
"spots; use <w>s</w>, <w>.</w> or for 100 turns with "
"<w>5</w> "
#ifdef USE_TILE
"(or alternatively click on the stat area) "
#endif
"to do so.";
text << "Each level of Crawl has three white up and three white down "
"stairs. Unexplored parts can often be accessed via another "
"level or through secret doors. To find the latter, search "
"the adjacent squares of walls for one turn with <w>s</w> "
"or <w>.</w>, or for 100 turns with <w>5</w> or "
"<w>Shift-numpad 5.";
text << "Each level of Crawl has three "
#ifndef USE_TILE
"white "
#endif
"up and three "
#ifndef USE_TILE
"white "
#endif
"down stairs. Unexplored parts can often be accessed via "
"another level or through secret doors. To find the "
"latter, search the adjacent squares of walls for one "
"turn with <w>s</w> or <w>.</w>, or for 100 turns with "
"<w>5</w> or <w>Shift-numpad 5"
#ifdef USE_TILE
", or by clicking on the stat area"
#endif
".";
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.";
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>"
#ifdef USE_TILE
", or click on the stat area"
#endif
" to do so.";
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!";
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!";
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.";
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 exhaustion status.";
"danger of dying, check your options carefully. Often, retreat or "
"use of some item might be a viable alternative to fighting on.";
"danger of dying, check your options carefully. Often, "
"retreat or use of some item might be a viable alternative "
"to fighting on.";
if (Options.tutorial_type == TUT_BERSERK_CHAR && you.religion == GOD_TROG
&& !you.duration[DUR_BERSERKER] && !you.duration[DUR_EXHAUSTED]
if (you.religion == GOD_TROG && !you.duration[DUR_BERSERKER]
&& !you.duration[DUR_EXHAUSTED]
"like Invisibility. The only reliable way to get rid of mutations "
"is with potions of cure mutation. There are about as many "
"harmful as beneficial mutations, and most of them have three "
"levels. Check your mutations with <w>A</w>.";
"like Invisibility. The only reliable way to get rid of "
"mutations is with potions of cure mutation. There are about "
"as many harmful as beneficial mutations, and most of them "
"have three levels. Check your mutations with <w>A</w>.";
text << "While unsporting, it is sometimes useful to attack a fleeing "
"monster by throwing something after it. To do this, press "
"<w>f</w>, choose a throwing weapon, e.g. one of your "
text << "While unsporting, it is sometimes useful to attack a "
"fleeing monster by throwing something after it. To do this, "
#ifdef USE_TILE
"in tiles, you can choose your firing "
"ammunition by <w>left-clicking</w> on it with your mouse. "
"In the case of weapons (rather than missiles) you need to "
"be pressing <w>Ctrl</w> at the same time, to distinguish "
"the action from wielding. Then target the monster by "
"clicking on it."
#else
"press <w>f</w>, choose a throwing weapon, e.g. one of your "
"<w>.</w>, <w>f</w> or <w>Enter</w>. The closest "
"monster will be autoselected. If you've got the fire_order "
"option set you can directly use <w>ff</w> or "
"<w>f+.</w> instead; the game will pick the first weapon "
"that fits the option.";
"<w>.</w>, <w>f</w> or <w>Enter</w>. The closest monster "
"will be autoselected. If you've got the fire_order option "
"set you can directly use <w>ff</w> or <w>f+.</w> instead; "
"the game will pick the first weapon that fits the option."
#endif
"\nIf you miss, you can fire at it again with <w>ff</w>.";
"it a bit more closely by pressing <w>x</w> and moving "
"the cursor onto its square.";
"it a bit more closely by pressing "
#ifdef USE_TILE
"hovering your mouse over its tile";
#else
"<w>x</w> and moving the cursor onto its square.";
#endif
"certain sources. For an overview of your resistances "
"(among other things) type <w>%</w>.";
"certain sources. For an overview of your "
"resistances (among other things) type <w>%</w>"
#ifdef USE_TILE
" or click on your avatar with the <w>right mouse "
"button</w>"
#endif
".";
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.";
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.";
ostr << "\nA cursed piece of armour, once worn, cannot be removed "
"again until the curse has been lifted by reading a "
"scroll of remove curse.";
ostr << "\nA cursed piece of armour, once worn, cannot be "
"removed again until the curse has been lifted by "
"reading a scroll of remove curse or enchant armour.";
"unfortunate wearer's neck or fingers until the curse is "
"finally lifted when he or she reads a scroll of remove "
"curse.";
"unfortunate wearer's neck or fingers until the curse "
"is finally lifted when he or she reads a scroll of "
"remove curse.";
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();
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();
ostr << "\nFor now, however, that will have to wait "
"until you've learned the basics of Spellcasting "
"by reading lots of scrolls.";
ostr << "\nFor now, however, that will have to wait until "
"you've learned the basics of Spellcasting by "
"reading lots of scrolls.";
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)";
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)";
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. ";
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"
#ifdef USE_TILE
", both of which can be done by clicking on it"
#endif
".";
ostr << "\n\nYou can use this rod's magic by <w>w</w>ielding "
"and e<w>v</w>oking it.";
ostr << "\n\nYou can use this rod's magic by "
"<w>w</w>ielding and e<w>v</w>oking it"
#ifdef USE_TILE
", both of which can be achieved by clicking on it"
#endif
".";
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 << "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 << "It also offers its wielder protection from certain "
"sources. For an overview of your resistances (among "
"other things) type <w>%</w>.";
ostr << "It also offers its wielder protection from "
"certain sources. For an overview of your "
"resistances (among other things) type <w>%</w>"
#ifdef USE_TILE
" or click on your avatar with the <w>right mouse "
"button</w>"
#endif
".";
"<w><<</w> and <w>></w>, respectively. Note that "
"you will usually be unable to return right away.";
"<w><<</w> and <w>></w>, respectively. Note that you will "
"usually be unable to return right away.";
ostr << "This is your chance to join a religion! In general, the "
"gods will help their followers, bestowing powers of all "
"sorts upon them, but many of them demand a life of "
"dedication, constant tributes or entertainment in return. "
"\nYou can get information about <w>"
ostr << "This is your chance to join a religion! In general, "
"the gods will help their followers, bestowing powers "
"of all sorts upon them, but many of them demand a "
"life of dedication, constant tributes or "
"entertainment in return. \nYou can get information "
"about <w>"
<< "</w> by pressing <w>p</w> while standing on "
"the altar. Before taking up the responding faith you'll "
<< "</w> by pressing <w>p</w> while standing on the "
"altar. Before taking up the responding faith you'll "
<< " likes to have items or corpses sacrificed on altars, "
"here you can do this by <w>d</w>ropping them, "
"then <w>p</w>raying. As a follower, pressing "
"<w>^</w> allows you to check "
<< " likes to have items or corpses sacrificed on "
"altars, here you can do this by <w>d</w>ropping "
"them, then <w>p</w>raying. As a follower, "
"pressing <w>^</w> "
#ifdef USE_TILE
"(alternatively press <w>Control</w> while "
"<w>right-clicking</w> on your avatar) "
#endif
"allows you to check "
// Don't ask during tutorial, or if there aren't enough rows left
if (!Options.tutorial_left && allow_inscribe
&& wherey() <= get_number_of_lines() - 3)
// Don't ask if there aren't enough rows left
if (allow_inscribe && wherey() <= get_number_of_lines() - 3)