git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5328 c06c8d41-db1a-0410-9941-cceddc491573
NK2TBKWOQBD2ZRGAO4Z3HMZPIN7UX3HNUS2YHEIJUUINUTRMPODQC
NZP2SRKMFBILMJ6K434C3COVRHJY342OPWMBE4DDLOS5EDYIYWYQC
PZNRGNZPN4YLXL2UDMEUPE33AAZZ6Z2YPK6EQGYZL2PNTRWLCUNQC
HIPFIMUOA7DFOFV3DQ55YZJVGNU2GNDYFUCB4MRPUR5DTYDO5YMAC
DHXIQXK5VTL5JDDEERAVLZK4KBQLXFTBN5TQ6MH3PRBLG5ULOS4AC
HNX5L5QUZWBQTOBEVKJTAMRX5NOCK7CVBIKMCLYEJLVJNCCUCXUAC
WF2DSJGR6PKLGQSXEFF4ZW4EZZFGMHXPXWUYAKYBPFJH6KJKAANQC
7NDXS36TE7QVXTXJWMYSVG5UHCCLPIO4VL6NXFGTDK3ZNKE3A2IAC
77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC
ESWIM76FGJL4QFLSHU6AC4D74PT7OPLQ7ZCJYWLZS5UCBAJDXYHAC
LS5XCCGKQHSJQGWLWLGTP2F5OYWK4ND5AQQAGRN6H2HVBSXNCCZAC
W54GZBNFKPOF6DTOVK73PVASTQI5DXG42WQ6CXFDPXHFZOHUVVSQC
XRZPPYWPWUOM4SFNI6BHKH2UKJQNLKOV6Y7XIEPEZXE5QYRT26PAC
ACDPN464TK2LKLHSDN3YVRHAPF7WLSLLU3UHIYEXKFDEZPEU3XSQC
7HA2754QW3SBCAJ5K6KUXNXXXIZB5BIBCFPLXADCXHH6EREKXHSAC
TI2HASZUN3QBTNWRCXLXJHOZBOUHFEOQUCPK5EYLATL7BP32H6LQC
JJULXW764V5C2HJKZNWQAEWB6QM5YZADD7ZCE35LYTBFEM6PMYCAC
U3KGUJJQWQORJIIFH3ADVNIEEX5HOX6KEOXO7DJSL7L3Z6GG3PAQC
BFCFMN2BXNLXJCYYCL2V2XTDQQNM3PJPSRB6CU76FM3332NC7GMAC
YDDLIMYVR5YEORQ6YXEG3M4O26M3XIZ6OCXQTHEVLKTAAJP3FI5AC
HQTS3VQ6PNUZKHNVEWMML7JNAAAKL4DSW3KFSRCCSLGYTDHZFCCAC
4CK7LBQIQYKOEZ6B4YGRYDXV2ICEA3OHQHCXXVPNSMEKGPCHR52QC
QXD3HX6QQ37PW6HVKIIKGFLO2ACROLUGKK66KFX7ED6SO4FDXB2AC
TOOHYAX73C5KPSWGHPCBWCUN62WMMO3BI5CWEEMGV3WBFZ5RIH5AC
Z6XF4AIERIW4U4AR3HU2ILYFZ54IK4K4ORQ6JKCEWRO5LZODWDDAC
5HF63O5IRRERI2V3SZEDHUNFHUF2B4RSVWQR6C6DR5JF5UYSROWAC
HMC247EGUJ3Q25DQ3VKUCIGLIO4SZORFQQWAPAF6S2WLQY3WU5TQC
Q4YYTFXYZUDBYWT37U354CJOAQMAAIWM5W72TAEGMEUKZIUZBMGAC
GL6SGPBZQPJBVGPOASYVCTAFXS7RNARR6Y5WZMIO5YCTB7ZJY4KAC
MCBXXIV6GICTZB56APSXMJEI63FVQWVZR3H2DRNMMFDH2XCGK4JAC
GTPAKUU3R5AS3LQNCCZIP3BWV473RM4EB2AIS4FXAJRXHEOVH2PAC
S2LIBA2CLTZ6ZU66AUZ2CCNLCDOBSGWQGTZ6HFAFP2XSWAALGLSQC
45EMD3KLQPMERNMIKU5G76H6556XOMIW352TSBP7VLWJX2YYGS7AC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
LDBTCT5WIPLJPZWXS2RUQ26QKISCUUTLO77M464WOE6VSYSNPKYAC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
TJISAZK5RWKXIIC5UTQNY4KT3UX3ASGBUQQNWZ7ZDULPRYFRZXQQC
RC6L3CIBLJEH4GWRFD7UQNGI6PZT74FRUVOYHSAN2XCC74NZUASQC
3YK4G4IQBXW63HPGU5WRTV6L2FCMKAK4DOTCHFK2FNSB5B3Y3PVQC
6PAG7GHXHIYXJPPTEK4KZQZT4CL2SJDAGTVIUDB4KK66PVSTWUMAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
4O3VTUJT5T7NBNF3Q45XO2WHS6TCJXVLH6CKX4K36WUBDRT5F6KAC
P2OYYNPHIBGOLT4CRLNTTIXDN34EU2QCMFQJNLAMUAHQXZTEDPXQC
PBKRKGKARGZSLVFVDTK5NWDXQD26NHNN67LDSSB75CLEWBR6TLEQC
WZNB427K3EUNV3FMVXLQTM4UIHER4FIKQXWLUUXRNQC3OQ33VQYAC
XX3TYGTDZY7AT53JJDTMKQXOYL4TUPVXXE2WY53UKZZOZ4UXDTQQC
72CQFK27NR37P2WQ32U4PEXXKMRIO7JEMJN2ZCPNVPZMT7UPFJJAC
VNHFP63ZLLZU3A3PLXP4BITX57DUIYDHFOHQYK3BOBHV3S64G26QC
3KAINFIXO7WNWGUGZB43EUNFRS2ZPBLQZDTY456QACMRHYIJ7WDAC
DGHHGJ6RCXFF3I53K2DI2FDB3UW2SUZAWWAQ7T6YW6374WOQASUQC
CVOQOT7B2FYC3E6ZPOMC7TCJMLEFFIRPTHNRNW5L65NCTAHPA42AC
VCG3BRIYRTNNWYC3LOXD6KFGXOX37HAFW2HNV7WXVG2V7EUHLDZQC
CLIEHAE2PP7ZIGLLIMYCWM4FC54KBOAN5AILOLAZJ5S26GTJM4RQC
2X6FLALUQSY4GEF2YBXZVC5ZTOZSMS3IBO7BFTSKAA4TXWEV7EXAC
JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC
// map window (starts at 1) or message window (starts at 18)
// FIXME: This should be done more cleanly using the crawl_view settings
// Map window (starts at 1) or message window (starts at 18).
// FIXME: This should be done more cleanly using the
// crawl_view settings!
// crude hack:
// if the first monster is sleeping wake it
// (highlighting is an unnecessary complication)
// XXX: Crude hack (and doesn't really work either):
// If the first monster is sleeping wake it
// (highlighting is an unnecessary complication).
"<w>not</w> want Xom to grow bored with you. If you've "
"kept him amused he'll treat you like a plaything, "
"randomly helping and harming you for his own amusement.";
"absolutely not want this god to grow bored with you!\n"
"If you keep Xom amused he'll treat you like a plaything, "
"randomly helping and harming you for his own amusement; "
"otherwise he'll treat you like a disfavoured plaything.";
formatted_message_history(text.str(), MSGCH_TUTORIAL, 0,
_get_tutorial_cols());
text << "Your piety (divine favor) gradually decreases over time, and "
"if it runs out " << new_god_name << " will excommunicate you "
"and punish you. You can prevent this, and even gain "
"enough piety to get powers and divine gifts, by doing things "
"to please " << new_god_name << ". And don't panic: you "
"start out with a decent amount of piety, so any danger of "
"excommunication is far off.\n";
if (is_good_god(you.religion))
{
// For the good gods, piety grows over them.
text << "From now on, " << new_god_name << " will watch over you and "
"judge your behaviour. Thus, your actions will greatly "
"influence your piety (divine favour). If your piety runs out ";
}
else
{
text << "Your piety (divine favour) will gradually decrease over time, "
"and if it runs out ";
}
text << new_god_name << " will excommunicate you and punish you. "
"You can prevent this, however, and even gain enough piety to get "
"powers and divine gifts, by doing things to please "
<< new_god_name << ". But don't panic: you start out with a decent "
"amount of piety, so any danger of excommunication is far off.\n";
text.str("");
text << "\nYou can check your god's likes and dislikes, as well as your "
"current standing and divine abilites, at any time by typing "
"<w>^</w> "
#ifdef USE_TILE
"(alternatively press <w>Control</w> while "
"<w>right-clicking</w> on your avatar)"
#endif
".";
formatted_message_history(text.str(), MSGCH_TUTORIAL, 0,
_get_tutorial_cols());
"parentheses at the end of the \"Health\" line in the "
"stat area of the window). While you can wait it out, "
"you'll probably want to stop it as soon as possible by "
"drinking a potion of healing, since the longer you wait "
"the more your maximum HP will be reduced. Once you've "
"stopped rotting you can restore your maximum HP to normal "
"by drinking potions of healing and heal wounds while "
"fully healed.";
"parentheses).\n"
"While you can wait it out, you'll probably want to stop "
"rotting as soon as possible by drinking a potion of healing, "
"since the longer you wait the more your maximum HP will be "
"reduced. Once you've stopped rotting you can restore your "
"maximum HP to normal by drinking potions of healing and heal "
"wounds while fully healed.";
".\n\n"
"When resting up on the next (deeper) level it's wise "
"to retreat to an up staircase or hatch so you can "
"retreat to the previous level if a monster wanders "
"across you. Monsters can only follow you up if they're "
"standing right next to you, so if they're still at least "
"two squares away you can flee and safely rest on the "
"the previous level. They'll still be there when you "
"go back down, though, so you'd want to go back down a "
"different set of stairs so they can't get the jump on "
"you when you return.";
".\n\n";
text << "If retreating to another level, keep in mind that monsters "
"may follow you if they're standing right next to you when "
"you start climbing or descending the stairs. And even if "
" you'vemanaged to shake them off, they'll still be there when "
"you come back, though, so you'll want to use a different set "
"of stairs when you return.";
"to nothing). Either you repeatedly annoyed him, "
"you weren't doing things that pleased him often "
"enough, or some combination of the two. If you "
"can find an altar dedicated to " << old_god
<< " you can re-convert and all will be well, otherwise "
"you'll have to weather his displeasure until his "
"wrath is spent.";
"to nothing). Maybe you repeatedly annoyed him, "
"or maybe you weren't doing things that pleased him "
"often enough, or some combination of the two. If you "
"can find an altar dedicated to " << old_god;
}
text << "You just renounced your religion? Are you "
"<w>sure</w> about that? If you can find an "
"altar dedicated to " << old_god << " you can "
"re-convert and all will be well, otherwise you'll "
"have to weather his displeasure until his wrath is "
"spent.";
{
text << "If you decide that abandoning " << old_god << "wasn't "
"such a smart move after all, and you'd like to return "
"to your old faith you'll have to find an altar "
"dedicated to " << old_god << " where";
}
text << " you can re-convert and all will be well; otherwise "
"you'll have to weather this god's displeasure until their "
"divine wrath is spent.";
"converting to " << new_god << " (it's only safe to "
"convert between gods if both of them is among the "
"three good gods). Unfortunately, converting back to "
<< old_god << " will annoy " << new_god <<
", so you're stuck with having to suffer the wrath "
"of one god or another.";
"converting to " << new_god << "! (It's only safe to "
"convert between the three good gods.) Unfortunately, "
"converting back to " << old_god << " will annoy "
<< new_god << ", so you're stuck with having to suffer "
"the wrath of one god or another.";
}
text << "Uh-oh, you've wound up in the Abyss!. The Abyss is filled "
"with nasty monsters, you can't remember or map where you've "
"been, and you're probably going to die. If you want to "
"survive until you can find the exit (a flickering "
"<w>\\</w>), keep moving, don't fight any of the "
"monsters, and don't bother picking up any items on the "
"ground. If you're encumbered or overburdened then "
"lighten up your load, and if the monsters are closing in "
"use potions of speed to get away. And if you can, move "
text << "Uh-oh, you've wound up in the Abyss! The Abyss is a special "
"place where you cannot remember or map where you've been; it "
"is filled with nasty monsters, and you're probably going to "
"die.\n";
text << "You can increase your chances of survival until you can find "
"the exit (a flickering <w>\\</w>), keep moving, don't fight "
"any of the monsters, and don't bother picking up any items "
"on the ground. If you're encumbered or overburdened then "
"lighten up your load, and if the monsters are closing in, try "
"to use items of speed to get away. And where possible, move "
"then a miscast merely means the spell not working, along "
"with a harmless side effect. However, for spells with a "
"low success rate there's a chance of contaminating "
"yourself with magical energy, plus a chance of an "
"additional harmful side effect. Normally this isn't a "
"problem, since magical contamination bleeds off over time, "
"but if you're repeatedly contaminated too often in a short"
"amount of time you'll mutate and suffer from other ill "
"side effects.\n\n"
"then a miscast merely means the spell is not working, along "
"with a harmless side effect. However, for spells with a "
"low success rate there's a chance of contaminating yourself "
"with magical energy, plus a chance of an additional harmful "
"side effect. Normally this isn't a problem, since magical "
"contamination bleeds off over time, but if you're repeatedly "
"contaminated in a short amount of time you'll mutate or "
"suffer from other ill side effects.\n\n"
text << "The spell you just cast made you hungrier; you can see "
"how hungry spells make you by entering <w>z\?!</w>. The "
"amount of nutrition consumed increases with the level of "
"the spell and decreases according to your intelligence "
"stat multiplied by your Spellcasting skill; if your "
"intelligence and Spellcasting are high enough a spell "
"might not cost you any nutrition at all.";
text << "The spell you just cast made you hungrier; you can see how "
"hungry spells make you by entering <w>z\?!</w>. The amount of "
"nutrition consumed increases with the level of the spell and "
"decreases in dependence of your intelligence stat and your "
"Spellcasting skill. If both of these are high enough a spell "
"might even not cost you any nutrition at all.";
"you're glowing! You acquire magical contamination from "
"using some powerful magics, like invisibility, haste/speed "
"and potions of resistance. This normally isn't a problem, "
"since contamination slowly bleeds off on its own, but it"
"seems that you've contaminated yourself so many time is "
"such a short amount of time that you're in trouble. "
"Now that you're glowing the contamination is going to "
"mutate you, and possibly even damage you via magical "
"storms. Additionally, glowing is going to make you much "
"less stealthy.";
"you're glowing! You usually acquire magical contamination "
"from using some powerful magics, like invisibility, haste "
"or potions of resistance. This normally isn't a problem as "
"contamination slowly bleeds off on its own, but it seems that "
"you've accumulated so much contamination over a short amount "
"of time, that it can have nasty effects, such as mutate you "
"or deal direct damage. In addition, glowing is going to make "
"you much more noticeable.";
// Explains the most important commands necessary to use an item, and mentions
// special effects, etc.
// NOTE: For identified artefacts don't give all this information!
// (The screen is likely to overflow.) Artefacts need special information
// if they are evokable or grant resistances.
// In any case, check whether we still have enough space for the
// inscription prompt and answer.
ostr << "\nOn second look you've been training in <w>"
<< skill_name(best_wpskill)
<< "</w> for a while, so maybe you should "
"continue training that rather than <w>"
<< skill_name(curr_wpskill)
<< "</w>. (Type <w>m</w> to see the skill "
"management screen for the actual numbers.)";
long_text = true;
ostr << "\nOn second look you've been training in <w>"
<< skill_name(best_wpskill)
<< "</w> for a while, so maybe you should "
"continue training that rather than <w>"
<< skill_name(curr_wpskill)
<< "</w>. (Type <w>m</w> to see the skill "
"management screen for the actual numbers.)";
long_text = true;
if (item_known_cursed( item ) && wearable)
{
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.";
}
if (gives_resistance(item))
if (wearable)
ostr << "\n\nThis armour offers its wearer protection from "
"certain sources. For an overview of your resistances "
"(among other things) type <w>%</w>"
if (item_known_cursed( item ))
{
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.";
}
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>"
".";
}
if (is_artefact(item) && gives_ability(item))
{
ostr << "\nWhen worn, some types of armour (such as this one) "
"offer abilities that can be e<w>v</w>oked. ";
ostr << _tut_abilities();
".";
}
if (is_artefact(item) && gives_ability(item))
{
ostr << "\nWhen worn, some types of armour (such as this "
"one) offer abilities that can be e<w>v</w>oked. ";
ostr << _tut_abilities();
}
case DNGN_ORCISH_IDOL:
case DNGN_GRANITE_STATUE:
case DNGN_TRAP_MAGICAL:
case DNGN_TRAP_MECHANICAL:
case DNGN_TRAP_NATURAL:
case DNGN_STONE_STAIRS_DOWN_I:
case DNGN_STONE_STAIRS_DOWN_II:
case DNGN_STONE_STAIRS_DOWN_III:
case DNGN_STONE_STAIRS_UP_I:
case DNGN_STONE_STAIRS_UP_II:
case DNGN_STONE_STAIRS_UP_III:
case DNGN_ESCAPE_HATCH_DOWN:
case DNGN_ESCAPE_HATCH_UP:
return true;
default:
return false;
// So are statues, traps, and stairs.
case DNGN_ORCISH_IDOL:
case DNGN_GRANITE_STATUE:
case DNGN_TRAP_MAGICAL:
case DNGN_TRAP_MECHANICAL:
case DNGN_TRAP_NATURAL:
case DNGN_STONE_STAIRS_DOWN_I:
case DNGN_STONE_STAIRS_DOWN_II:
case DNGN_STONE_STAIRS_DOWN_III:
case DNGN_STONE_STAIRS_UP_I:
case DNGN_STONE_STAIRS_UP_II:
case DNGN_STONE_STAIRS_UP_III:
case DNGN_ESCAPE_HATCH_DOWN:
case DNGN_ESCAPE_HATCH_UP:
return (true);
default:
return (false);
ostr << "If "
<< god_name(you.religion)
<< " 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 "
<< god_name(you.religion)
<< "'s likes and dislikes at any time, as well as "
"your current standing and divine abilities.";
ostr << "If "
<< god_name(you.religion)
<< " likes to have certain items or corpses "
"sacrificed on altars, any appropriate item "
"<w>d</w>ropped on an altar during prayer, or "
"already lying on an altar when you start "
"<w>p</w>raying will be automatically "
"sacrificed to "
<< god_name(you.religion)
<< ".";
ostr << "dangerous, and you should stay out of it if you can. ";
if (!is_damaging_cloud(ctype, true))
{
ostr << "currently harmless, but that could change at some point. "
"Check the overview screen (<w>%%</w>) to view your "
" resistances.";
need_cloud = true;
}
else
{
ostr << "probably dangerous, and you should stay out of it if you "
"can. ";
}
"under the surface of the shallow water. Distance attacks "
"which only hit a single target may not hit submereged monsters "
"unless you use the <w>!</w> key to fire your ammo/spell/wand "
"after selecting the sumberged target.";
"under the surface of the shallow water. Other than non-submerged "
"monsters, a submerged monster will not be autotargeted when doing "
"a ranged attack while there are other, visible targets in sight. "
"Of course you can still target it manually if you wish to.";
// Hallelujah, we're home!
if (_is_safe_move(c.x, c.y))
next_travel_move = c;
return (true);
}
else if (!point_distance[dc.x][dc.y])
{
case MISC_DECK_OF_DUNGEONS: return "deck of dungeons";
case MISC_DECK_OF_SUMMONING: return "deck of summonings";
case MISC_DECK_OF_WONDERS: return "deck of wonders";
case MISC_DECK_OF_PUNISHMENT: return "deck of punishment";
case MISC_DECK_OF_WAR: return "deck of war";
case MISC_DECK_OF_CHANGES: return "deck of changes";
case MISC_DECK_OF_DEFENCE: return "deck of defence";
case MISC_DECK_OF_DUNGEONS: return "deck of dungeons";
case MISC_DECK_OF_SUMMONING: return "deck of summonings";
case MISC_DECK_OF_WONDERS: return "deck of wonders";
case MISC_DECK_OF_PUNISHMENT: return "deck of punishment";
case MISC_DECK_OF_WAR: return "deck of war";
case MISC_DECK_OF_CHANGES: return "deck of changes";
case MISC_DECK_OF_DEFENCE: return "deck of defence";
case MISC_CRYSTAL_BALL_OF_SEEING: return "crystal ball of seeing";
case MISC_BOX_OF_BEASTS: return "box of beasts";
case MISC_EMPTY_EBONY_CASKET: return "empty ebony casket";
case MISC_AIR_ELEMENTAL_FAN: return "air elemental fan";
case MISC_LAMP_OF_FIRE: return "lamp of fire";
case MISC_LANTERN_OF_SHADOWS: return "lantern of shadows";
case MISC_HORN_OF_GERYON: return "horn of Geryon";
case MISC_DISC_OF_STORMS: return "disc of storms";
case MISC_CRYSTAL_BALL_OF_SEEING: return "crystal ball of seeing";
case MISC_BOX_OF_BEASTS: return "box of beasts";
case MISC_EMPTY_EBONY_CASKET: return "empty ebony casket";
case MISC_AIR_ELEMENTAL_FAN: return "air elemental fan";
case MISC_LAMP_OF_FIRE: return "lamp of fire";
case MISC_LANTERN_OF_SHADOWS: return "lantern of shadows";
case MISC_HORN_OF_GERYON: return "horn of Geryon";
case MISC_DISC_OF_STORMS: return "disc of storms";
case MISC_BOTTLED_EFREET: return "bottled efreet";
case MISC_AIR_ELEMENTAL_FAN: return "gauzy fan";
case MISC_LAMP_OF_FIRE: return "blazing lamp";
case MISC_LANTERN_OF_SHADOWS: return "bone lantern";
case MISC_HORN_OF_GERYON: return "silver horn";
case MISC_DISC_OF_STORMS: return "grey disc";
case MISC_AIR_ELEMENTAL_FAN: return "gauzy fan";
case MISC_LAMP_OF_FIRE: return "blazing lamp";
case MISC_LANTERN_OF_SHADOWS: return "bone lantern";
case MISC_HORN_OF_GERYON: return "silver horn";
case MISC_DISC_OF_STORMS: return "grey disc";