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;
else
rangeRemaining += random2((pbolt.rangeMax - pbolt.range) + 1);
}
int rangeRemaining = pbolt.range;