Almost all ranges are now capped by LOS. There are still some things missing, most noticeably randomizing ranges for the range-1-to-2 spells (e.g. Flame Tongue.)
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6984 c06c8d41-db1a-0410-9941-cceddc491573
SUWIERONPDATHPDMZRYO6GYIXSW6XIS5V5MK5IV23DWQH2LL7VIAC K33CV7EYR37TTSEXQWQ6QPHSEUFO545AIPUZOA2C47QTUCUWFPAAC DVQMYOEH2UDXRU6254CIXZLCNPZD2ENZTBXXSHBDOHRIG6DZNRTQC IJ4GH6RYJYT4METQIJYT3IITJEHZ4IAF4WBPA5RH6RSYX4KHXMYAC PR2XIEELO6UJWT3EXDHWCJZGIZCCF3D6KF6LC67R6RWWAVNWEHWAC DDU4A3JGN5IUIPP5IASOODKPR2WBHSDSV4FITZ6HNXNSXXQACWAQC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC PFEJ4LMDNEKLMGRCMWQ7EIRVU4JMYGICI4G7X4WVWOROVXQCBZ7QC LMRRQE4ZXQYZPXVGBTDZP7LEIM6OGSSOOQ5FAOWXJCDCNCECX5VAC CHO4U5JC3RNTLXVIDXXJYZMOBZJ4VXW2GVJWDOTBRKK3AJ36LDLQC KHVK7HH7OIYOBZY52WQGGLC2O4SXTWQS2XAHNJZZ7JZ3QTOUTLNAC JI4NDSOXGGZ7QHXXFB3ZTHAKHABXYBZXPDGLUFV5SKYEOL5FT7JQC NQMXQ6OQVUSC7Y7F7IL252QW4A5JED224EECNHWAM4ZZYVNY745AC PMODADA7C3BWOFCPU37626DKMWENG6FAR5I6TOIQU5OBJBUJTSAQC 4NBPZKMZBKB3QYX4FFUAKDXQS43NJCBDLMHKDJFVXHQLX4MQDINAC UAGL2Y4K3WTSOQCYDPSRUIAYQV5OD5BXPNPWUDGVAB2WY7JHSGCQC 4QRLZDW4KBFG34B3MCG4375NHFR3WKWSLWQKRMQ3OE5R26WCZBBQC FNY62WM76UGY6IZQYRTRLSBLLUKUHL5N4CG5HQRSWTU2MYIXNJ5QC GSJA56E3ORVIBCBA6T6WU2HE4DCLJ6NZPW76O7L54N4CYPKLJOWQC RQR4PTMGQLTRWLYRU3KXIIDGND7FBORESJWMWFVD3WYU5SISZXAAC QCUMH3C7GXV7ZW444WT5SFAXQOJKJSE2YCQCEHMRYXCWF4QI7UMAC FLAGBNUNSIQNFDN53CDWABJRTTFWDL4PG34AI474ZKPXDEPYHOAQC KNXH6BRM7ZPQSR5KGNYPMOB6IWBCTHLFNB6HHQSNCPW7SPNGNPQAC SG76BPJKTQGDFNP5QFMAVR6H72FMMAYCECVGSWWSCLMAVQX7E3FQC NG53L53MSFQZAIVKHG54IEMXNJ33AYVPF2OZM4MMJFDKEJCGPBSAC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC EO4FXWNFJRHPOSDHWH2Y6QNUP7KB5ANLX43GA3TJLXR3QOOJZ7VQC KEANRIMF5CGFVZ2XJYNFPOAKLXOSOJUOVA73IWBWOG576265ERHAC Y2NYY7HWFZ2LQDK3ACSLGS37F2J2IJ5LRGCIMZYXLEOSVPD3A4DAC UW4XQAAAV3S2ZVBLMSK6VQG6AMYR6DRKXFP64HHBC6Z3QIUWPVXQC 6GT5JAWOIIL4SQ5MWIID6ZVO3KKQFWDQDZNVFHZ6DNK5QCBXJ4UAC FCZSQBKDNMJZRJS2LWQQWLUFGOXSKXDJZQIHC7L5S7HXCXQPOMMAC Y46M2XO74VYDTBTFFUUCI275UGELTXUXS4GEIBBXCY5USQKJ5O6AC UAJN2CFA2QHYDHW2UFAVPPHDQFCD54RKM6V2UC4AMEDJUBBLNWIQC ZBPS5ZTPF3DVTR5WET4XEFHYXU26CRHU2OHX3YO6PD4MTM2DUXAQC 3RNRFLMD2X4RUFTDVITLXAP377YB6F6YMQLL3DAXSUZDZBTWSLRQC 3EUPIYJNWOMOQBP2Z5SGSMWK453BXJD6KL2WFTR3NM565MEBYASAC RDZUMV3A5TREQHLPPJWDWVXBNIOWC3CQJJ35TYFBQQVQNTU7SPXQC TJRYL3NXPW5IUGEV3YOC7JYWEXCZDBFPLT4AUG4P227WVKVB72ZAC ABLV37FMURRJPEZV2VRKOUYAKEMLI7E6RA4PDAII2EJ5L7WBHKZQC 4PUWNQO7QMEWY3GSUHLBKMYOAI7ASYSRM32KDGTA7DLNDIGFAWFAC YMLVBQ6M27MECUVMU3BQP3WSGR7GW4XJMQIHLGHHWMVXHMMIXOYAC TZ643KHSE5CUPXFSQ7VYVOCM5MTQ7F4SENEYQX2RNFHGHLQVS3RQC VD4KDTGHVKCN35AWREYB4TEOUMCTW7SAUPAMTMF5ABC7VBHVKP4AC VCQYSNAWZZHOZMARWQ4AJBDNFSS7T7CZBQISSPZ2YIIK5PVAWPRQC SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC UZ5623MOLKBTGBSRBJ4OBOEI4IEZSPV3NCV2DRMUZ3CHHJQVHIIAC OFH2B2UZBK43QLFQBZ54FOCFLFNE54BZVDNCEUGDTBCUGNVZULIQC PI5BATR2SER3RFE76IUGHM2AGXVFOUM3PLU7WC2K2Q2BA5K2E73QC AS2IQQJNNCEQNXXKTGYHLB7RO3ZKCF4F7GK6FJH66BOOKDDRGNIQC TQLWCGVXVZ75H7MDBJD3DJDUFNW62WOAEDJUVKCHQTAXKBP47CSAC TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC int spell_range(spell_type spell, int pow, bool real_cast){const int minrange = _seekspell(spell)->min_range;const int maxrange = _seekspell(spell)->max_range;ASSERT(maxrange >= minrange);if (minrange == maxrange)return minrange;const int powercap = spell_power_cap(spell);if (powercap <= pow)return maxrange;// Round appropriately.return ((pow*(maxrange - minrange) + powercap/2) / powercap + minrange);}
}int _setup_evaporate_cast(){int rc = prompt_invent_item("Throw which potion?", MT_INVLIST, OBJ_POTIONS);if (prompt_failed(rc)){rc = -1;}else if (you.inv[rc].base_type != OBJ_POTIONS){mpr("This spell works only on potions!");rc = -1;}else{mprf(MSGCH_PROMPT, "Where do you want to aim %s?",you.inv[rc].name(DESC_NOCAP_YOUR).c_str());}return rc;
if (you.inv[potion].base_type != OBJ_POTIONS){mpr("This spell works only on potions!");return (SPRET_ABORT);}mprf(MSGCH_PROMPT, "Where do you want to aim %s?",you.inv[potion].name(DESC_NOCAP_YOUR).c_str());
if (potion == -1)return (false);else if (you.inv[potion].base_type != OBJ_POTIONS){mpr( "This spell works only on potions!" );canned_msg(MSG_SPELL_FIZZLES);return (false);}
ASSERT(you.inv[pot_idx].base_type == OBJ_POTIONS);item_def& potion = you.inv[pot_idx];
draw_ray_glyph(raycopy.pos(), MAGENTA, '*',MAGENTA | COLFLAG_REVERSE);
const bool in_range = (range < 0)|| grid_distance(raycopy.pos(), you.pos()) <= range;const int bcol = in_range ? MAGENTA : DARKGREY;draw_ray_glyph(raycopy.pos(), bcol, '*',bcol | COLFLAG_REVERSE);
pbolt.range = 6 + random2(5);if (pbolt.range > 9)pbolt.range = 9;
/* NEW (GDL):* Now handles all beamed/thrown items and spells, tracers, and their effects.* item is used for items actually thrown/launched** If item is NULL, there is no physical object being thrown that could* land on the ground.*/
rangeRemaining = pbolt.range;if (pbolt.rangeMax > pbolt.range){if (pbolt.is_tracer)rangeRemaining = pbolt.rangeMax;elserangeRemaining += random2((pbolt.rangeMax - pbolt.range) + 1);}
int rangeRemaining = pbolt.range;