water grids nearby if the player recently moved (or restarted a game) and if a non-adjacent monster tries to reach the player.
Remove now unneeded lua code (was used for the old pickup.lua) and make monsters switch away from ranged weapons when engaging you in melee. If a monster will still insist on hitting you with a sling it's a sure sign said sling is cursed (doesn't autoID, though).
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5755 c06c8d41-db1a-0410-9941-cceddc491573
NWUWP5QCMJ7ZZMLCVB74PW7HDEFB6ICEQHNDHCGG7UWDQNNLGVMQC TQ4JWVDZWJEI2GFQZSUFLKR6GTJQ6Z2QMGG44THBE4QM5UHD2T4QC EHP6PYCIPYQ3KF4JFGBTZXEUQHN3FVAH4NUWEOWDDNKGPYVOTOJQC EOMCPVNQLX3IMLC46EAO67DPBH5KEG2FQTPBLGU62HIRWA3UQ7XQC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC 75M6AVUSS3G5EJECJJRB67V5UYDOIV26FZNB2FFCMBZ33EK7FVIQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC ASLW3Z5PAVZSWJEMMMVZT226P44EKSAD47QS72JIFJESAI3RPN3AC VCG3BRIYRTNNWYC3LOXD6KFGXOX37HAFW2HNV7WXVG2V7EUHLDZQC NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC ZJLJGSB2XSBQU42OFQMXL3EG4CXAQGOYAU6YTV2SAWZEJIPFH2CAC 247OW5JFN34ZV3GRVHRE25AXLLISUBPOX5YRGUE64BCM2V7QNEHAC HIPFIMUOA7DFOFV3DQ55YZJVGNU2GNDYFUCB4MRPUR5DTYDO5YMAC SKV6JBDAWUWTFECFSQARSNA3DDPUFCR7N3T7D5J35NYTEDMXLP3QC RM2JXW3ATVYRYHF3NMG5ALGI64OJ7IP2F3MDUDPUT5TBKSSN4KVQC DS2GZKISEP2DM2VU6EJ525Q7W3WVOKJXG5PY2OY4VNFCLBHVVOTAC 7Y5HSDFKA5TPLS2TWTRFMQVX6UXUDHXU5MUMXQSDFAIY4THQ3BIQC F2ZJ55CL3T66DFM34BQWCJNHIT4XJFCGTWTA5KESV6NHWFLTGUYAC LH4OYDEWEON5QNUCM74R7MNBJDP7O4XRETY74ZMYSXUXYQV427PAC SXUKGEXMGRRN6UO2GJW4HSVU5TSUNUHIHBMMF7CAG7QMLKZYWTKQC PM65H4V4GNPVIJFUQW57DC3VDB7TRUUNXKVZONQKEFZSK3AXX5GQC 3V52MSSK7QX7FWLLUW63DTWCBAJEK674EFZLKP45FLZ5KZKVARHAC ISSEUTHG7EH3QTFLS23GXFIOQXCI5HJPJMK6GWNFMC6NDRD2H34QC WMHFDQKUDCUGM3R245LLVZ5NNEZSCXFDSTNMVS2O5EFUHHO7HU3AC CG4TL4AKSN4J7CMATZFJ5N7PSDCQXLS3QYX7PZ3K67KMMBT675OQC UH3CJQMQ3NPICXD34NTCTUZJWOCEF4P5XEGXFLLNDDFLZK7QPUBQC FSD7GIK3YLZXWLEH37BU6KV3IUCFGXPQL6IZ7H65YWNRBEKDBX5AC 74LQ7JXVLAFSHLI7LCBKFX47CNTYSKGUQSXNX5FCIUIGCC2JTR3QC QS3ZRS3E6KL3YJHPKYEWCWJYRBJSXD5OOYF6Y25HZVECGPJRDB5QC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC 4GYZYBY7FFORRNPIEFTV4ZM2C7Z6D2KTQOM537ZCC2YBXT2TNSHAC KX23OEQBBLMQHTFCA4TYYEGLHCETXVZCXALYR5U5RELKJMMB66SAC QUFPPRIIRXHUFEDH3EFES7CSHTA7GG2DAXTRHUAUQBYMSWK4BP6AC JK3HFJG76OOQHJMXJUSZRTR5CX5ZMS52LRVBLOR7E2NBI6PRSHHAC Z42PAEBKCSMEQ5ALBM25HERM3QDIUWMQTQODJOPRVOJAEGIWU3UAC M2HMYLYYXSP5XGX6MCI77IT6UW5K4YSEUJWHPQPYXVSW5L36BJ2AC JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC QRD2M37AMG76CPGCALZQ3N2PZ3OZ3MFETMVAEHBJJVVH2BCPVGUAC BIZDHHK5LIO57S5AKHEPJFLWV5DAFKZIKYBGOUNGICSWTX7DCXKAC EIJQB5HNBFGK6MQ7OOM6TC3BKONFXF3CIDM7HTL7VKE44ZM6ACJQC 77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC 43ZTEB57FU7KE5EVMYWZONNVJBZCGF3JEAJZIY25LC4LGE65PG5QC P25D567E2UEAQHNI7LAZPNY7KAI3J4OE77YKLWOIEEALC5RREJHAC YCL3W2PFE6ILTGBFODCSXNPDIA46KVSZP2TI7HDMYAOEJT65RIEAC W52PCSHX72WAMWKG6L4BPUBVMO6E72KYYBNKAA7554KNOTY6V7WQC const int xmarg =Options.scroll_margin_x + LOS_RADIUS <= viewhalfsz.x? Options.scroll_margin_x: viewhalfsz.x - LOS_RADIUS;const int ymarg =Options.scroll_margin_y + LOS_RADIUS <= viewhalfsz.y? Options.scroll_margin_y: viewhalfsz.y - LOS_RADIUS;
const int xmarg = Options.scroll_margin_x + LOS_RADIUS <= viewhalfsz.x? Options.scroll_margin_x: viewhalfsz.x - LOS_RADIUS;const int ymarg = Options.scroll_margin_y + LOS_RADIUS <= viewhalfsz.y? Options.scroll_margin_y: viewhalfsz.y - LOS_RADIUS;
// Check all grids in LoS and mark lava and/or water as seen if the// appropriate grids are encountered, so we later only need to do the// visibility check for monsters that can't pass a feature potentially in// the way. We don't care about shallow water as most monsters can safely// cross that, and fire elementals alone aren't really worth the extra// hassle. :)static void _check_lava_water_in_sight(){// Check the player's vision for lava or deep water,// to avoid unnecessary pathfinding later.you.lava_in_sight = you.water_in_sight = 0;coord_def gp;for (gp.y = (you.y_pos - 8); (gp.y <= you.y_pos + 8); gp.y++)for (gp.x = (you.x_pos - 8); (gp.x <= you.x_pos + 8); gp.x++){if (!in_bounds(gp))continue;const coord_def ep = gp - you.pos() + coord_def(9, 9);if (env.show(ep)){dungeon_feature_type feat = grd[gp.x][gp.y];if (feat == DNGN_LAVA){you.lava_in_sight = 1;if (you.water_in_sight > 0)break;}else if (feat == DNGN_DEEP_WATER){you.water_in_sight = 1;if (you.lava_in_sight > 0)break;}}}}
if (mons_flies(monster) != FL_NONE|| habitat != HT_LAND|| mons_amphibious(monster)){okmove = DNGN_MINMOVE;}
|| (grd(newpos) == DNGN_SECRET_DOOR&& (mons_intel(monster_index(monster)) == I_HIGH|| mons_intel(monster_index(monster)) == I_NORMAL)))
|| grd(newpos) == DNGN_SECRET_DOOR&& mons_intel(monster_index(monster)) >= I_NORMAL)
// Used to divide a given potion into one of four categories:// 0 : unknown potion// 1 : always beneficial// 2 : always bad// 3 : depends on species etc.static int l_item_potion_type(lua_State *ls){LUA_ITEM(item, 1);int val = 99;
if (item && item->base_type == OBJ_POTIONS){if (!item_type_known(*item)){val = 0;}else{switch(item->sub_type){// good potions:case POT_HEALING:case POT_HEAL_WOUNDS:case POT_SPEED:case POT_MIGHT:case POT_LEVITATION:case POT_INVISIBILITY:case POT_EXPERIENCE:case POT_MAGIC:case POT_RESTORE_ABILITIES:case POT_RESISTANCE:val = 1;break;// bad potions:case POT_POISON:case POT_STRONG_POISON:case POT_SLOWING:case POT_PARALYSIS:case POT_CONFUSION:case POT_DEGENERATION:case POT_DECAY:case POT_MUTATION:val = 2;break;// Need more refined handling:// for eating habitscase POT_BLOOD:case POT_BLOOD_COAGULATED:case POT_WATER:case POT_PORRIDGE:// for undeadcase POT_BERSERK_RAGE:case POT_GAIN_STRENGTH:case POT_GAIN_DEXTERITY:case POT_GAIN_INTELLIGENCE:case POT_CURE_MUTATION:default:val = 3;}}}lua_pushnumber(ls, val);return (1);}
static void _check_lava_water_in_sight(){// Check the player's vision for lava or deep water,// to avoid unnecessary pathfinding later.you.lava_in_sight = you.water_in_sight = false;coord_def gp;for (gp.y = (you.y_pos - 8); (gp.y <= you.y_pos + 8); gp.y++)for (gp.x = (you.x_pos - 8); (gp.x <= you.x_pos + 8); gp.x++){if (!in_bounds(gp))continue;
const coord_def ep = gp - you.pos() + coord_def(9, 9);if (env.show(ep)){dungeon_feature_type feat = grd[gp.x][gp.y];if (feat == DNGN_LAVA)you.lava_in_sight = true;else if (feat == DNGN_DEEP_WATER)you.water_in_sight = true;if (you.lava_in_sight && you.water_in_sight)break;}}}