complain about it. Eventually turn this into an ASSERT when all code that makes this assumption is caught and fixed.
If beam.chose_ray is true and source is still the default then change source to ray.pos()
Fix Banishment and Dig having range -1.
Sanity check spell definitions at startup in init_spell_descs()
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7996 c06c8d41-db1a-0410-9941-cceddc491573
BTHEX36BHZOAGTT5SNO6OPWDAZJQSUUNDXSJ77FBEFZE3NGJ7CAQC
2I5XEYRJKLUS7MO42MCR6KT2URGFQ3YDKTNTIBNKVKLX5LMG6CEQC
N7CKO4LATD44HNNA6747FY7M4BA4UKTMSJRL7KXONYADP5VMHROAC
SNSU5AMDAZNG55NQ4JDHU2YBK62MXPIE2QTSYS7PGV7Y2N3VJBFQC
PR2XIEELO6UJWT3EXDHWCJZGIZCCF3D6KF6LC67R6RWWAVNWEHWAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
SUWIERONPDATHPDMZRYO6GYIXSW6XIS5V5MK5IV23DWQH2LL7VIAC
ZEFGFQHN6J2S6EIPX7EPDG22C5YXTI6DMKQHHRCLWN5MQC44KY3AC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
FLAGBNUNSIQNFDN53CDWABJRTTFWDL4PG34AI474ZKPXDEPYHOAQC
UADYVV3UD5ERJTZZJGY4EUQ4NJ2JSBG7YYUJ75ZRBIXRQXQKOJPAC
ZFRNNC6KLYRMKAQSRUIFAJR5LAOTKAULQB2D4ABIZKGZHGOA2XGQC
spell_list[spelldata[i].id] = i;
{
spell_desc &data = spelldata[i];
#if DEBUG
if (data.id < SPELL_NO_SPELL || data.id >= NUM_SPELLS)
end(1, false, "spell #%d has invalid id %d", i, data.id);
if (data.title == NULL || strlen(data.title) == 0)
end(1, false, "spell #%d, id %d has no name", i, data.id);
if (data.level < 1 || data.level > 9)
end(1, false, "spell '%s' has invalid level %d",
data.title, data.level);
if (data.min_range > data.max_range)
end(1, false, "spell '%s' has min_range larger than max_range",
data.title);
if (data.flags & SPFLAG_TARGETING_MASK)
{
if (data.min_range <= -1 || data.max_range <= 0)
end(1, false, "targeted/directed spell '%s' has invalid range",
data.title);
}
#endif
spell_list[data.id] = i;
}
if (chose_ray)
{
ASSERT(in_bounds(ray.pos()));
if (source == coord_def())
source = ray.pos();
}
if (range == -1)
{
#if DEBUG
if (is_tracer)
{
mpr("Tracer with range == -1, skipping.", MSGCH_ERROR);
return;
}
std::string item_name = item ? item->name(DESC_PLAIN, false, true)
: "none";
std::string source_name = "unknown";
if (beam_source == NON_MONSTER && source == you.pos())
{
source_name = "player";
}
else if (!invalid_monster_index(beam_source))
source_name = menv[beam_source].name(DESC_PLAIN, true);
mprf(MSGCH_ERROR, "beam '%s' (source '%s', item '%s') has range -1; "
"setting to LOS_RADIUS",
name.c_str(), source_name.c_str(), item_name.c_str());
#endif
range = LOS_RADIUS;
}
ASSERT(!name.empty() || is_tracer);
ASSERT(in_bounds(source));