Fix 1939901: Weapon listing not updated right away after being cursed.
Put the code to colour arbitrary substrings of a message according to the menu_colour settings into a function of its own, and use it for pick up and eating prompts (currently from floor only) as well as for the "Things that are here" listing. Could be overly spammy, thus needs testing. If all works well, we can remove the "msg =" settings in food_colouring.txt that currently don't do anything anyway, or reuse them for non-prompt messages like "You see here a green rat corpse."
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5436 c06c8d41-db1a-0410-9941-cceddc491573
OFH2B2UZBK43QLFQBZ54FOCFLFNE54BZVDNCEUGDTBCUGNVZULIQC
VT3WFNEYL2JRNSKHN2OEOGCEL4LK4PIY3RXJS5TDY6MDZFF23ELAC
QCIPZ52TOIKLA6O22P7USLEAYI4VAZRLGVXMAASSGEP37KN5PEVAC
PDOFPXD2X6VI23AHKCGQ5RVDBG74CNP2E3YOHKXLOARHHBXEK3HQC
4CK7LBQIQYKOEZ6B4YGRYDXV2ICEA3OHQHCXXVPNSMEKGPCHR52QC
77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
DDU4A3JGN5IUIPP5IASOODKPR2WBHSDSV4FITZ6HNXNSXXQACWAQC
NG53L53MSFQZAIVKHG54IEMXNJ33AYVPF2OZM4MMJFDKEJCGPBSAC
OR7VGWIBRR55M7HATPIORQMMB4YQ7EQXO2IWAFFFPEJ4VV3ASRRQC
ZQ62K2WXC4EJUO7VNJ3VHPGU2LAMSTKYSL62ENYB2CGW2BEI6KBAC
45EMD3KLQPMERNMIKU5G76H6556XOMIW352TSBP7VLWJX2YYGS7AC
VNIAJEGE3PYE6F6EAMCQDWMAS52EQTKJUPAFXK7ARCITZ326WTTQC
5CNYJQGEILRX2TAYBWMVECJ6D4OPV2CD6YPDIERS2SR77Z4LTZPAC
7YUGK5Q64KG5O7GJGTUBRRLHAHBCJ5YOE23YUPT6UBKUSB67CYAQC
YCL3W2PFE6ILTGBFODCSXNPDIA46KVSZP2TI7HDMYAOEJT65RIEAC
BFYHDL4EHSPKKC6EPKDRPESHYAA2WFKC6RXQIRRTSSTF3Z2QPVCAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
XKAJWK6MPHS3ZCZIPPLTIMOPF6AROGLRDDCS6EFE3IGE4AHT7MYQC
BDFIS53HAIHOCXQ5BE7WCO2MEOFCUQPFY4JGUWVLWY6JO3IFMEKQC
RREJL4WZKWFEMA62AC5G5UDTOXMW4UULIQXVA5RPFASPODMHQZ7AC
O6ZMFKDI3XO2SWPNEYHIPYFDWJR4TVDP5BAATK6LVCVETQID6E7AC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
MDAJYB6STTZPNHRQ2X66MMMSONMKXTESLHJSFPGN7H3D3TOVBAVAC
VEPHAIXR3GSPHBLOW5DWFFU4ULEMVWRQG4G5PKSKRA2I6RHYROUAC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
3D6NWJ44UYHLZMD3BOQIWXJUEGITAVCHK6Z2WWDQONVQC4HSBRXQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
VCG3BRIYRTNNWYC3LOXD6KFGXOX37HAFW2HNV7WXVG2V7EUHLDZQC
FLAGBNUNSIQNFDN53CDWABJRTTFWDL4PG34AI474ZKPXDEPYHOAQC
P33QUZKDQZ2XKFPFI4HP5A7KG76PTBFGB3ZSGMBN3X6JYOOMYLLQC
BJPPSWEN35BG4KP3XTXPDMAJ2GAUMHXKHCNALAZ4B4OS6B3KDSUQC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
A5YOVQMFZRMT6NK7YUQI632TWC3CFATXDNCSB7M33EEYB62SA3XAC
ZGUJWUFJ4NFFJ6PGXLFGQWCWBCZHPWGWI44NJHJEVPRG5L36PADQC
3UYAIGVJBYPSAUTDRTQXRXNFGKKSCYGIFZ3YRZJGPDKJEMOTQOUQC
AZ2RCXNVULJUSCBDBK3VARTUCTPEJXHTA7ALP73S4EXLJB6YYB5QC
5FBOE2QNRLKUNOP54CZD6LFAMM7LX6NNLHJRJHRDDIUTQ7J723DQC
CIPVRZGLOZHCERK6YPOBV3P2E4IAB4H6D5EHLRQE2O5E4P4VCBUAC
SHSIZVHSB4RPTLGMFJXUDVHF3FTEZZYCRIH4CBZP4MXOBR3HC4QAC
LCVUTR5N23C2AE3EXJUDTYQVURXN6XXGGOYR4ALIVRIUBTVLN5PAC
K2MLPJIAXXZRWEWZCNSGICCBNIU2WAAPT7SPIMOH7FLLTOB4QFRAC
QXD3HX6QQ37PW6HVKIIKGFLO2ACROLUGKK66KFX7ED6SO4FDXB2AC
U6Q43EFKHJIDBBWN6RUTOYRHHX4IT73OPBR4CWIOKUDGTCYQE5PAC
57E4T664CXRFPVW2BZBYI33UIHFS4PSEZURZYPSYSZK5DRLJJ5CQC
GBUB77EAYHOFY6GQ5IY3ZSBC7FSQFZZKYNBD5QMCQFIKFLYLWHOQC
BPSH3LUDUTXMK2QZKSMFDTBNDD6HPILMCBLZNMCRLZZQKPS5QOQQC
TV3ZC6WOZKSQQJQN26JIVKCHK6UK7WMDBYZDUYRWEAZ4JB4YVNAAC
FJ2URTFOTFNB5VZUQMFTO7MMQBBWSOPRY2RE3UG2ZFJYOXBIMC7QC
CIAIASCBKKV7VMYBL2CIFAYGFQTB6GIME4FSQGZNQGXO7FXQTA5AC
KQNIGKATHT4YSPJFPJGIGPD6VNR5B753SE2JN2LCXZZJNHCGY3DQC
SWT4O2TCOAQOVFA6WRA7MCU3KMTMJWFEMIHO64N4PWL5FNHDPADAC
7V4DCKFJCNBXFODMKJ6H3MCDUTSD4XVQ7D4D6XFCD4JNF4HCE4KAC
T7PHMSG47WP4MTKIGVBP4EAQRGXHMZPYSI3GT3DAEWKHUDFCH3QQC
74LQ7JXVLAFSHLI7LCBKFX47CNTYSKGUQSXNX5FCIUIGCC2JTR3QC
2W34FMSGJ2BZY7QQM6X6RTVRXXI2H72Z2MH75SU3SDL4FN4G74KAC
RZLMIEOHITWGYNVBHDVVWS24YQ5SD5HG3T3JCMIBCD2VA5TEPHCQC
M2HMYLYYXSP5XGX6MCI77IT6UW5K4YSEUJWHPQPYXVSW5L36BJ2AC
KAOE5HB3THUKVGFZRO5EZESHEB3Q34WUO5DFMLWIKOBF47LZTIYAC
3EUPIYJNWOMOQBP2Z5SGSMWK453BXJD6KL2WFTR3NM565MEBYASAC
TQLWCGVXVZ75H7MDBJD3DJDUFNW62WOAEDJUVKCHQTAXKBP47CSAC
PI5BATR2SER3RFE76IUGHM2AGXVFOUM3PLU7WC2K2Q2BA5K2E73QC
22RFWMSJGG26Z2MQEEXGKVTFSTLREHQIG46WYOTMDRKI5YVMRNVAC
AMAPVOFKH3YS5VCVOG2YNHXNDAZATMXFUL6ODZUIOF5OYYKBVKGAC
TCZNXMPFNAWJYUIBTUEOTT73KLB4CU5S6HBKTHRT6KCD4ZVGBGUQC
7EI4HMXZ7TAWZKFZG2SXHDAX3FWFBCZLUAKOALPRFF72FS7NKVBQC
VD4KDTGHVKCN35AWREYB4TEOUMCTW7SAUPAMTMF5ABC7VBHVKP4AC
U3KGUJJQWQORJIIFH3ADVNIEEX5HOX6KEOXO7DJSL7L3Z6GG3PAQC
BIZDHHK5LIO57S5AKHEPJFLWV5DAFKZIKYBGOUNGICSWTX7DCXKAC
QRD2M37AMG76CPGCALZQ3N2PZ3OZ3MFETMVAEHBJJVVH2BCPVGUAC
TOOHYAX73C5KPSWGHPCBWCUN62WMMO3BI5CWEEMGV3WBFZ5RIH5AC
mpr("In your confused state, you trip and fall down the stairs.");
std::string fall_where = "down the stairs";
if (stair_find == DNGN_ENTER_ABYSS
|| stair_find == DNGN_ENTER_PANDEMONIUM
|| stair_find == DNGN_TRANSIT_PANDEMONIUM
|| stair_find == DNGN_ENTER_PORTAL_VAULT)
{
fall_where = "through the gate";
}
mprf("In your confused state, you trip and fall %s.",
fall_where.c_str());
for ( unsigned int i = 0; i < items.size(); ++i )
strm << items[i]->name(DESC_NOCAP_A) << std::endl;
for (unsigned int i = 0; i < items.size(); ++i)
{
item_def it(*items[i]);
std::string name = get_menu_colour_prefix_tags(it, DESC_NOCAP_A);
strm << name << std::endl;
}
if ( !grid_destroys_items(my_grid)
&& !copy_item_to_grid( you.inv[item_dropped],
you.x_pos, you.y_pos, quant_drop, true ))
if (!grid_destroys_items(my_grid)
&& !copy_item_to_grid( you.inv[item_dropped],
you.x_pos, you.y_pos, quant_drop, true ))
const std::string get_menu_colour_prefix_tags(item_def &item,
description_level_type desc)
{
std::string cprf = menu_colour_item_prefix(item);
std::string colour = "";
std::string colour_off = "";
std::string item_name = item.name(desc);
int col = menu_colour(item_name, cprf, "pickup");
if (col != LIGHTGRAY)
colour = colour_to_str( col );
if (!colour.empty())
{
// Order is important here.
colour_off = "</" + colour + ">";
colour = "<" + colour + ">";
item_name = colour + item_name + colour_off;
}
return (item_name);
}
random = true;
if (dangerous)
{
// Xom loves it when you use a Wand of Random Effects and
// there is a dangerous monster nearby...
xom_is_stimulated(255);
}
}
// (highest possible range, and unresistable beam flavour).
if (!player_tracer(random ? ZAP_DEBUGGING_RAY : type_zapped,
2 * (you.skills[SK_EVOCATIONS] - 1), beam,
random ? 17 : 0))
// and unknown wands (highest possible range, and unresistable beam
// flavour). Don't use the tracer if firing at self.
if (!beam.aimed_at_feet
&& !player_tracer(!beam.effect_known ? ZAP_DEBUGGING_RAY
: type_zapped,
2 * (you.skills[SK_EVOCATIONS] - 1),
beam, !beam.effect_known ? 17 : 0))
// zapping() updates beam
if (dangerous && alreadyknown && wand.sub_type == WAND_RANDOM_EFFECTS)
{
// Xom loves it when you use a Wand of Random Effects and
// there is a dangerous monster nearby...
xom_is_stimulated(255);
}
// zapping() updates beam.
// Don't bother colouring if it's only for sacrificing.
std::string cprf = menu_colour_item_prefix(mitm[o]);
std::string colour = "";
std::string colour_off = "";
int col = menu_colour(corpse_name, cprf, "pickup");
if (col != LIGHTGRAY)
colour = colour_to_str( col );
if (!colour.empty())
{
// Order is important here.
colour_off = "</" + colour + ">";
colour = "<" + colour + ">";
corpse_name = colour + corpse_name + colour_off;
}
corpse_name = get_menu_colour_prefix_tags(mitm[o],
DESC_NOCAP_A);
// NOTE: Whenever zapping() is called with a randomized value for power,
// player_tracer should be called directly with the highest power possible
// respecting current skill, experience level etc.
// NOTE: Whenever zapping() is called with a randomized value for power
// (or effect), player_tracer should be called directly with the highest
// power possible respecting current skill, experience level etc.
// if there is a monster at this location, affect it
// submerged monsters aren't really there -- bwr
// If there is a monster at this location, affect it.
// Submerged monsters aren't really there. -- bwr