You now get messages like "The seven-headed hydra bites."
and "You slice the 12-headed hydra."
FR 1963606: Take a note when you pick up a rune (or the Orb!) for the first time.
There are a couple of other files I changed, but I can't remember any big stuff, so it was probably just cleanup.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5029 c06c8d41-db1a-0410-9941-cceddc491573
KEANRIMF5CGFVZ2XJYNFPOAKLXOSOJUOVA73IWBWOG576265ERHAC LNCIVPGKO36VUODC5HDGIVJM4BSK5ONC3ANMZKDLWLYJGROEZWCQC MI3QIGA6VDUMXL7NO3Q2NWCJN5FGX5CDMDYLEKOMD6SALHEINW5QC MLF7O6GXUABY244PDOX3KYGEMIBCJW2Y42GVP4LRW2L5KVD3UF7AC GPEJOT73KMACP33IPAKFR5ROGHCOIP22VXZMQNYTGLEA2OSZUM2AC WJSOXPDCW52YN2ZG6L5J2LS65CDVS626L33MJWEX3FBSLOFVXFPAC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC ILOED4VB4I6VPAUTR75ZWX6MXDYXB5DO2EDK2UH67O3HNKWV23RQC RC6L3CIBLJEH4GWRFD7UQNGI6PZT74FRUVOYHSAN2XCC74NZUASQC LLKV4OYGEDB4GVJS5JVBZP5JQFW7VMPZ2CBRSITJ5XCFS3QNWIBQC LDBTCT5WIPLJPZWXS2RUQ26QKISCUUTLO77M464WOE6VSYSNPKYAC TAHSTXR7ROOMDFUSBUU4ZAIEWQLAS5CIRCTARLD4Q2BGNLSL7E5QC TJISAZK5RWKXIIC5UTQNY4KT3UX3ASGBUQQNWZ7ZDULPRYFRZXQQC SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC AVCMVFA3MKCXHO6H44UK5KJNIHTGQV7UA7GYXM26VI6TXXU5ZN6QC QUHEENPY2PYTEUS7C4R3CKE4FHSHGR2BIXB6EW676ESX3727PA3AC JAYS2VMYWPH2YKIDWEXW2NOK4ATTIXTGZTXUVDDIQGCXLB5W4OUQC VJDLV4PF2ZJ46NERO4LZUX5JE2CD5XBOBQCYYPTFWTHLUEYDUOYAC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC OEISFRW2B7E4YRJSWXNXBH2IAJO4O3LHNYFPFD3MBY57LYVRHMZQC X7X6JKZXOCG6NVLZLGNCQDFFXW4H3S77BVAJ5LS7ZHZ4GQVLMOMAC S2LIBA2CLTZ6ZU66AUZ2CCNLCDOBSGWQGTZ6HFAFP2XSWAALGLSQC 25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC XI7U6RL6MFTH6SZQMLO4XFWGXGIFJBCRT6ZFCJFR2B2MGRSKDDCAC RM2JXW3ATVYRYHF3NMG5ALGI64OJ7IP2F3MDUDPUT5TBKSSN4KVQC CAHE52HL2ZGRJPBYZ3DS4BVKUD2XC7N3SG25TGG7JGHGJDST4P3QC O4DT3BQQ3XYPL6PQ72G6VPBAVHXZMEOLONFXNHXFMBXBVOYMB6VQC FLKXPXQ7SRFZPJPDM35D5CG6M52WP4SL32QNEZNSHGBNZYTKYGYAC JW2KRJHES33W7UTWZ6NDO4TLMK4EFU4HKZXBWR2UJOMPCCOTR4CQC 77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC ARVJY7XPMCHI4IAQMD2VUWTAXQLCRNVSM2MK3YT4S4WHQYFTLEMAC 74LQ7JXVLAFSHLI7LCBKFX47CNTYSKGUQSXNX5FCIUIGCC2JTR3QC 34RCM6RXIWHZMYXNGFQKLKQIAJ6QISIQ3D5HMK4HZNLVX66BSUBAC UWMN4HLG6YA2YFQEVIVMDISD6APKEPIZXMMPMNUYCBQDSAUYSXPQC EIULXYQC3OPXDGTBRDOI7ITILQ22RGEGG6UFCGY2O5HD7SN5NUUQC IVVTHLTTLOP5TSULXJWUSSXHOKYWVU3OWKYVK45A7RIB6V34MYQAC XIXBLWIVUPWM3P6XQIB7CS45JOOIYE6OBYYYERCFAYYO4VOWOYUQC SUQ7J6V6BDWG6G6KBGPQ6HYKBMJDM6VKN7ODHVU6YCPRWNEOZCJQC 7V4DCKFJCNBXFODMKJ6H3MCDUTSD4XVQ7D4D6XFCD4JNF4HCE4KAC DDU4A3JGN5IUIPP5IASOODKPR2WBHSDSV4FITZ6HNXNSXXQACWAQC 43ZTEB57FU7KE5EVMYWZONNVJBZCGF3JEAJZIY25LC4LGE65PG5QC PADV7V2SZDQMQICKJ5DZPQMFF26JXPNM5XEHTWD3BSHPTAAXXJKQC X2FMEN4E345XD26Z2X7JMJ7VGHOGCGIELMHQRE2ITLVNQACP3NOQC KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC TV3ZC6WOZKSQQJQN26JIVKCHK6UK7WMDBYZDUYRWEAZ4JB4YVNAAC ZK5H5YBD3R7H3KKNKSJYE65TUEPPWIWUJLU567FKSZYQYIW6ZVFAC WF2DSJGR6PKLGQSXEFF4ZW4EZZFGMHXPXWUYAKYBPFJH6KJKAANQC UZ5623MOLKBTGBSRBJ4OBOEI4IEZSPV3NCV2DRMUZ3CHHJQVHIIAC NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC IE3INS4WUXZOBVXB5VWRBYPVPXADD2U2W5H3TBTOYNWJ3EGRSGQQC 4NBPZKMZBKB3QYX4FFUAKDXQS43NJCBDLMHKDJFVXHQLX4MQDINAC QDTVLBRGHDTRUVT7I3O72K6TMOYAUSAJBZUHGOEFU2RKJNUPWZSQC W7KGGF2VUXLD6YH55EPIRQ5SF5VKVKT33P6RNKCFCVQ4QXOLQE7AC AUXVWXWIFSTWFA6VZXN2FMG7FQEKRZVV6MD32VQQ7J2RKCXHAVGAC 67WH6I2XIMRRL26UM4FJJJZEMJIDPW5Q77FFNZGKWGTWS7GTCJ6QC A3MLQ7PZMDW5YGEKMX6YOKMJQE7CZPULZ4SWAFKAQIKWI5XXYG7AC XVX7AVLLYZJIJUZA2LZ6T57PHULWPDRZOHELDF4JHZ35EMINFFZQC 5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC FJ2URTFOTFNB5VZUQMFTO7MMQBBWSOPRY2RE3UG2ZFJYOXBIMC7QC VXSORUQOM2VZA4CAZDC6KPAY373NQIN3UT7CXQXTRCYXO2WM62DAC OR7VGWIBRR55M7HATPIORQMMB4YQ7EQXO2IWAFFFPEJ4VV3ASRRQC W5VEC2PBIM5DMU5233HOWAZUEPTGWJRZZIA3H35YYQQW6BTP6XUAC EFWEYIB2R3DPD3JWIPU6LS6SFLPMYN7J7X4GBZR7DJWKHJ3UELSAC LJK4ZQATLSB4MKZG3ARZX5V6RFGTN3NLCN6GTCUGJQKU26SOXMUAC 6ME4TYV7ITXCAUMNVB27LRRHB72J2FVVZMJNS34IMAN57R37AE2QC QYQKV4R47PTERXVFQNNWWQVICGSOMBHW6WM5TAZAKLIYOLLPUAJAC GL7TJGUGV4JPLZCDWH6QVST4RYW7UJV6IP7UAEWEKNBWJO2H2ZHAC GRH4XPIYHDOXXF3R3QPMZTFHGLO2OJAZS4FLNBBXG3DHTQQM7RDQC JDM27QE4HR52AYFSQE763BFF57ANOTF5MXKMO377PP5EXMN7SAOAC CWPA3Q5BG7KTTY6GX7CCS26PWC4UHJ47PUCMJX5BOJIP3FSTP2BQC YCL3W2PFE6ILTGBFODCSXNPDIA46KVSZP2TI7HDMYAOEJT65RIEAC WXSNNK2RXP3DQFAEQGQUZJHFWXJC7ZKG2WURZGL566UDM4YXFSWQC LAMIVDKY7LO5ONX5Z273ZCCEA5UBENOJD5VWNE4AK2EXGFED6BFQC VRFQK6S2TXOFFO5K5HRDXPR7QEKKAZAVCASSIJVPWQ4GE26UOGTQC PAYI4UTJCR3XZSFOX5L35EURHRXQ6STO4Z7AQ3525QPNL3QYLNBAC 22QSFI3GQEJGETOKQHXI6JHR5VQV7GUC76VCLZCFYECSTSUIDRBQC W2KRIXSCRJPS6WDIYTHVF5IRMF3V5DWECRAWUPVTB7VZ6A2BLD4QC ZIFFVCQ72K35WGIUMZYN3KOXIUXF2CNXWKG6ZWEZ6LT3NSF3XOQAC VCG3BRIYRTNNWYC3LOXD6KFGXOX37HAFW2HNV7WXVG2V7EUHLDZQC GOPBXMJ7EKKPDSDXCANWW6ARWGNLOQ5DK7WI4UPD7K2GCDSK2HXAC 32TNF7QPH765BC6VP4KVA4R2REGP6VI7CJ7QW2OOGP66Y7CUNQWQC NXVPOFYKJFWQWKVPQUMWH2Y2KJEZX44BUOBFJ4JD4KFGPEGYHG4QC 5B5DP5S6A6LQMKZYVLQAEMHQZWFWYDHPCKQGRNSCNNYIBQYZ6BIQC JJH7VX2LLBZPDKG24SQREWQLX6I6RYNWFECHRZVK7PT5KPQ4MAMAC M47QBURKKRV2JFK6U7GQNVWK7RUTBVPBJ5FHURC55SKQSXAUFSBAC YH23OR26YDA6C5K74QRWHROMTPGRNZHTHE4HJGPC3JVNAJ62CHGAC 65CM2EZCAFFBWLAYZ7ALBV3BQKNZCYOHYIFY46KU7BZL3LHV36JAC 4MPLCIJZL4YNUWK2RTKNE6N4UWNBMO5WDRKW737ENVE3RKV5LCRAC LW4N5EHKL776DURXZMAM6JEW3JPWWX5BSNP7TCZHTLCDOQTTGFCAC HSRRNAU5UAYC6B6IQWGJPFROMZBTJICPCH6DJVZDHDTAGOQ6IOYAC YFACWAHJI6DAZDNCI7C4NSSPYFRAKORZTXUFX6PRM6JQ7GCQKHGAC 7U7IZUR2C7UALYI4Y3SHBYGTHYVQM6JI4PXDFXUFL3T3L6JBSC6AC 2YZN7CPQFZMSMFMVCE2FATR52SVDE3OZHTS7F7QCKJIZUA4WX2AQC 6LQRCVJKIKB2HM33QCHYLVM3UCWGIJTJPCWLDUFSFP3YCCQTSCEAC WNQLH6VJ5DIPNQJUSUQBEKGNOZYCVWU5BYP4W6WQZBRMSR7GLUUQC YC3DFUPDLGXVGGW7IQ57YCMKASBANVE22IRDIDZXAC2KOMRZC5ZAC SCZCQPNBQG2GXZ76LCEYOMB4QMZGI6YV7LJEC7ZVBUG27KLO564AC 3ZNI2YMHYXRVEONY5CGWXSRMFSLOATZMKU7H6HRY3CC2W6OZAM7QC 6TEISZD7HYSSL24EOKIBNURU66KGSQX7B7SNAHBP4DQSAOTGH2MQC FXLBM7PB5FCPMKZNI3NSVDAEM26MAQU5RG55BEBL3LRN7QMPLWTAC DBGS3HXMW24VO5GBITT3UI2ZNIISUXUHAEAYUI52QPUT7IO46ITQC IHIJSWVOONSTA2WCHKW3YKBLETUQECFVBVLMET5SGQZ4C6U3GCUQC 7NDXS36TE7QVXTXJWMYSVG5UHCCLPIO4VL6NXFGTDK3ZNKE3A2IAC ACDPN464TK2LKLHSDN3YVRHAPF7WLSLLU3UHIYEXKFDEZPEU3XSQC return (grid == DNGN_DEEP_WATER || grid == DNGN_SHALLOW_WATER ||grid == DNGN_LAVA || is_trap(x, y) || is_monster_blocked(x, y));
return (grid == DNGN_DEEP_WATER || grid == DNGN_SHALLOW_WATER|| grid == DNGN_LAVA || is_trap(x, y) || is_monster_blocked(x, y));
return airborne() &&(permanent_flight() ||// Boots of levitation keep you with DUR_LEVITATION >= 2 at// all times. This is so that you can evoke stop-levitation// in order to actually cancel levitation (by setting// DUR_LEVITATION to 1.) Note that antimagic() won't do this.(player_equip_ego_type( EQ_BOOTS, SPARM_LEVITATION ) &&you.duration[DUR_LEVITATION] > 1));
// Boots of levitation keep you with DUR_LEVITATION >= 2 at// all times. This is so that you can evoke stop-levitation// in order to actually cancel levitation (by setting// DUR_LEVITATION to 1.) Note that antimagic() won't do this.return (airborne()&& (permanent_flight()|| player_equip_ego_type( EQ_BOOTS, SPARM_LEVITATION )&& you.duration[DUR_LEVITATION] > 1));
for ( unsigned int i = 0; i < Options.note_skill_levels.size(); ++i )if ( level == Options.note_skill_levels[i] )
for (unsigned int i = 0; i < Options.note_skill_levels.size(); ++i)if (level == Options.note_skill_levels[i])
return (hp > 0 && Options.note_hp_percent &&hp <= (maxhp * Options.note_hp_percent) / 100);
return (hp > 0 && Options.note_hp_percent&& hp <= (maxhp * Options.note_hp_percent) / 100);
if ( lev == dungeon_branch_depth(branch) ||(branch == BRANCH_MAIN_DUNGEON && (lev % 5) == 0) ||(branch != BRANCH_MAIN_DUNGEON && lev == 1) )
if (lev == _dungeon_branch_depth(branch)|| branch == BRANCH_MAIN_DUNGEON && (lev % 5) == 0|| branch != BRANCH_MAIN_DUNGEON && lev == 1){
/* Is a note worth taking?This function assumes that game state has not changed sincethe note was taken, e.g. you.* is valid.*/static bool is_noteworthy( const Note& note )
// Is a note worth taking?// This function assumes that game state has not changed since// the note was taken, e.g. you.* is valid.static bool _is_noteworthy( const Note& note )
if ( note.type == NOTE_XP_LEVEL_CHANGE ||note.type == NOTE_GET_GOD ||note.type == NOTE_GOD_GIFT ||note.type == NOTE_GET_MUTATION ||note.type == NOTE_LOSE_MUTATION ||note.type == NOTE_GET_ITEM ||note.type == NOTE_ID_ITEM ||note.type == NOTE_SEEN_MONSTER ||note.type == NOTE_KILL_MONSTER ||note.type == NOTE_POLY_MONSTER ||note.type == NOTE_USER_NOTE ||note.type == NOTE_MESSAGE ||note.type == NOTE_LOSE_GOD ||note.type == NOTE_PENANCE ||note.type == NOTE_MOLLIFY_GOD ||note.type == NOTE_DEATH )
if (note.type == NOTE_XP_LEVEL_CHANGE|| note.type == NOTE_GET_GOD|| note.type == NOTE_GOD_GIFT|| note.type == NOTE_GET_MUTATION|| note.type == NOTE_LOSE_MUTATION|| note.type == NOTE_GET_ITEM|| note.type == NOTE_ID_ITEM|| note.type == NOTE_SEEN_MONSTER|| note.type == NOTE_KILL_MONSTER|| note.type == NOTE_POLY_MONSTER|| note.type == NOTE_USER_NOTE|| note.type == NOTE_MESSAGE|| note.type == NOTE_FOUND_ORB_OR_RUNE|| note.type == NOTE_LOSE_GOD|| note.type == NOTE_PENANCE|| note.type == NOTE_MOLLIFY_GOD|| note.type == NOTE_DEATH){
if ( note.type == NOTE_MP_CHANGE ||note.type == NOTE_MAXHP_CHANGE ||note.type == NOTE_MAXMP_CHANGE )
if (note.type == NOTE_MP_CHANGE|| note.type == NOTE_MAXHP_CHANGE|| note.type == NOTE_MAXMP_CHANGE){
if ( Options.note_all_skill_levels )return true;if ( is_noteworthy_skill_level(note.second) )return true;if ( Options.note_skill_max && is_highest_skill(note.first) )
if (Options.note_all_skill_levels|| _is_noteworthy_skill_level(note.second)|| Options.note_skill_max && _is_highest_skill(note.first)){
/* not if we have a recent warning */if ( (note.turn - rnote.turn < 5) &&/* unless we've lost half our HP since then */(note.first * 2 >= rnote.first) )
// Not if we have a recent warning// unless we've lost half our HP since then.if (note.turn - rnote.turn < 5&& note.first * 2 >= rnote.first){
const char* ordinals[5] = { "first", "second", "third", "fourth","fifth" };if ( number < 1)
const char* ordinals[5] = { "first", "second", "third", "fourth", "fifth" };if (number < 1)
// accuracy is halved if the dragon is attacking a target that's// wielding a weapon of dragon slaying (which makes the// dragon/draconian avoid looking at the foe).if ((mons_genus(monster->type) == MONS_DRAGON|| mons_genus(monster->type) == MONS_DRACONIAN))
// Accuracy is lowered by one quarter if the dragon is attacking a// a target thatis wielding a weapon of dragon slaying (which// makes the dragon/draconian avoid looking at the foe).// FIXME: This effect is not yet implemented for player draconians// or characters in dragon form breathing at monsters wielding a// weapon with this brand.if (mons_genus(monster->type) == MONS_DRAGON|| mons_genus(monster->type) == MONS_DRACONIAN)
break;case MONS_HYDRA:if (mon.number < 1 || desc == DESC_PLAIN || desc == DESC_DBNAME)break;if (mon.number < 11){result += (mon.number == 1) ? "one" :(mon.number == 2) ? "two" :(mon.number == 3) ? "three" :(mon.number == 4) ? "four" :(mon.number == 5) ? "five" :(mon.number == 6) ? "six" :(mon.number == 7) ? "seven" :(mon.number == 8) ? "eight" :(mon.number == 9) ? "nine": "ten";}else{snprintf(info, INFO_SIZE, "%d", mon.number);result += info;}result += "-headed ";
for ( int srx = you.x_pos - max_dist; srx <= you.x_pos + max_dist; ++srx ){for ( int sry=you.y_pos - max_dist; sry<=you.y_pos + max_dist; ++sry )
for (int srx = you.x_pos - max_dist; srx <= you.x_pos + max_dist; ++srx)for (int sry = you.y_pos - max_dist; sry <= you.y_pos + max_dist; ++sry)
// XXX: Not strictly correct if we add any other monster with a// variable number of attacks.if (mon->has_hydra_multi_attack())mprf(MSGCH_EXAMINE, "It has %d head%s.", mon->number,(mon->number > 1? "s" : ""));
static void adjust_spells(void);static void adjust_ability(void);static void list_wizard_commands();#ifdef OBSOLETE_COMMAND_HELPstatic const char *command_string( int i );#endif
static void _adjust_spells(void);static void _adjust_ability(void);static void _list_wizard_commands();
static void show_keyhelp_menu(const std::vector<formatted_string> &lines,bool with_manual, bool easy_exit = false,int hotkey = 0)
static void _show_keyhelp_menu(const std::vector<formatted_string> &lines,bool with_manual, bool easy_exit = false,int hotkey = 0)