zelgadis). Also added notes for getting penance, and small fix (patch 1786893 by dolorous).
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2047 c06c8d41-db1a-0410-9941-cceddc491573
UWMN4HLG6YA2YFQEVIVMDISD6APKEPIZXMMPMNUYCBQDSAUYSXPQC QYQKV4R47PTERXVFQNNWWQVICGSOMBHW6WM5TAZAKLIYOLLPUAJAC FLKXPXQ7SRFZPJPDM35D5CG6M52WP4SL32QNEZNSHGBNZYTKYGYAC BDFIS53HAIHOCXQ5BE7WCO2MEOFCUQPFY4JGUWVLWY6JO3IFMEKQC KYGKLJ3SYIIDSHRSFQUZCDHUIFU7D7EB6QIPIWGCWIAWZCLLUAIAC ANOEQTM6IGCBTESKKQ5PCBSDTZ7VGRCMDIOAFEH4R7DJHKWKDFAAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC LLKV4OYGEDB4GVJS5JVBZP5JQFW7VMPZ2CBRSITJ5XCFS3QNWIBQC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC SOGYI2OBNZHL6HZN3ZJR5ITQHTYITILKR4D4EZPKBO23UYZW3JQAC IIN7AVA6JYRBXH6ZYRR7BY7TV6PW7ANAQ2A3PD55FKBKKQFEEF2AC P52QVYEFQXNK6IXNN2EMZIBLOIHHGQ7LODWIGWPJLANGVIPQK5IAC XPCGZBHHSL6MB3ORMUJI64BAERU6AZTIY6RK56BBW7SNB3IK24IAC EIULXYQC3OPXDGTBRDOI7ITILQ22RGEGG6UFCGY2O5HD7SN5NUUQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC 74LQ7JXVLAFSHLI7LCBKFX47CNTYSKGUQSXNX5FCIUIGCC2JTR3QC 43ZTEB57FU7KE5EVMYWZONNVJBZCGF3JEAJZIY25LC4LGE65PG5QC R325RPUV26YH65VIJKYEFZ2XCVXQHO5N3ELPX6RNQ5TSI3JJNQGQC ZP2KE7A2LE7Z2S7AC45WE4CXDSEVDTWIMV2EM4IBUKXYJIDU6R7QC UDYVF65OZSNPANLHDI3ODBEGUAKAVZ4KH4OZFAKR2CQJPO4AXU6QC 45CWQUPQHKUFUJ4MVL5K3KCVCCKLY2Z7RZWZ53UT723RV5STPSRAC MRM4SLSXJTRYJPH2YYTAFTO2CAOXLP2OCMRNYRTIRRYOMWM7NMFAC CQ24AVAI6SW3AHTIDMLPSTRRBEU6FHRF5I5FD6G5QIYE6PO4BQMQC RVST2QHYJ757ZHK4AUJ5NGPDZ44AD6RVFVXYPKQIBJXZBDNUCHXQC XYJ5Y635KCRCTL2BFPP53NWQRK3NUHS6T3ARPIXV5A3CHWBW7VCQC bool i_feel_safe(bool announce)
bool mons_is_safe(const struct monsters *mon, bool want_move){bool is_safe = mons_friendly(mon) ||(Options.safe_zero_exp &&mons_class_flag( mon->type, M_NO_EXP_GAIN ));#ifdef CLUA_BINDINGSbool moving = ((!you.delay_queue.empty() &&is_run_delay(you.delay_queue.front().type) &&you.delay_queue.front().type != DELAY_REST) ||you.running < RMODE_NOT_RUNNING || want_move);int dist = grid_distance(you.x_pos, you.y_pos,mon->x, mon->y);bool result = is_safe;if (clua.callfn("ch_mon_is_safe", "Mbbd>b",mon, is_safe, moving, dist,&result))is_safe = result;#endifreturn is_safe;}bool i_feel_safe(bool announce, bool want_move)
-----------------------------------------------------------------------g_rr_monsters = { {}, {} }g_rr_monsters_moving = { {}, {} }function rr_add_monster(mons_table, s)local parts = crawl.split(s, ":")if #parts ~= 2 thenreturnendlocal regexp = parts[1]local dist = tonumber(parts[2])if dist == 0 thenreturnendtable.insert( mons_table[1], crawl.regex( regexp ) )table.insert( mons_table[2], dist )endfunction rr_add_monsters(key, value)local mons_tableif (key == "runrest_ignore_monster") thenmons_table = g_rr_monsterselseif (key == "runrest_ignore_monster_moving") thenmons_table = g_rr_monsters_movingelsereturnendlocal segs = crawl.split(value, ',')for _, s in ipairs(segs) dorr_add_monster(mons_table, s)endendfunction ch_mon_is_safe(mon, default_is_safe, moving, dist)if default_is_safe thenreturn trueendlocal mons_table-- If player is moving and the monster is in g_rr_monsters_moving,-- then we do the distance comparison without decreasing the-- distance value.if moving thenmons_table = g_rr_monsters_movingfor i = 1, #mons_table[1] dolocal m = mons_table[1][i]local min_dist = mons_table[2][i]if m:matches(mon.name) thenreturn min_dist <= distendendendmons_table = g_rr_monsters-- Reduce distance by 1 if moving, since the safety check is-- done *before* moving closer to the monsterif moving thendist = dist - 1endfor i = 1, #mons_table[1] dolocal m = mons_table[1][i]local min_dist = mons_table[2][i]if m:matches(mon.name) thenreturn min_dist <= distendendreturn falseendchk_lua_option.runrest_ignore_monster = rr_add_monsterschk_lua_option.runrest_ignore_monster_moving = rr_add_monsters
std::string text = get_monster_desc(mon, false);text += " comes into view.";print_formatted_paragraph(text, get_number_of_cols(), MSGCH_WARN);
// Only say "comes into view" if the monster wasn't in view// during the previous turn.if (testbits(mon->flags, MF_WAS_IN_VIEW)){switch(random2(4)){case 0:mprf(MSGCH_WARN, "%s's nearness makes you nervous.",mon->name(DESC_CAP_THE).c_str());break;case 1:mprf(MSGCH_WARN, "%s is too close now for your liking.",mon->name(DESC_CAP_THE).c_str());break;case 2:mprf(MSGCH_WARN, "You feel that %s is too close now for comfort.",mon->name(DESC_NOCAP_THE).c_str());break;default:mprf(MSGCH_WARN, "%s's presence makes you stop your activity.",mon->name(DESC_CAP_THE).c_str());break;}}else{std::string text = get_monster_desc(mon, false);text += " comes into view.";print_formatted_paragraph(text, get_number_of_cols(), MSGCH_WARN);}