git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@8853 c06c8d41-db1a-0410-9941-cceddc491573
RIW55YSFKKTJLBTOJRVUBC7JOFUBOK7OBMISW4PBSVLYJHAAKPPQC
DQ2H3TUQ35R545I3PDVOQTS67TEWT4GTAWMWGTJ6GNB3ZPQO5QIQC
CWEZA2YKYA2NPXCDBT6GZQ4Q625BOXLRUC6WD3Z43UTHH5OHBYTAC
WGDWMNZFFDNRQS42TRZAB7Q3ZWCCVY2CTN642Z4YYPKCBQCUHDPQC
VGX2NJ7LQ6Q4AGAJMPZXFARQTQRLI4OYUXXPKWC6TDG4ADUEXLIQC
VJDLV4PF2ZJ46NERO4LZUX5JE2CD5XBOBQCYYPTFWTHLUEYDUOYAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
GF5VGZLKKWIATLVLTUJR4LVEQZAKR7CWMLNFMJXA67WLHP7JNUUAC
5XNQ3SSNBFXFNWA6DPM74W6FH65NX665P3DMH6YCWVFOPZTJSYCQC
S34LKQDIQJLIWVIPASOJBBZ6ZCXDHP5KPS7TRBZJSCDRVNCLK6UAC
SFWCESFCUEVKJ6ZQQX3Y5YTIQD5BC6MCVSLVZFRGRTU46BFLKKWAC
SCXTTP2FDNB2A7F4XXGXSSOEKZQ7ODDGN5YBCTZXGZ22CLCEH3WQC
Y5IKTUDW3HOMUJBEUKVTLM4KZTNX4KMPE544A5LFY2S2BKSQRNSQC
MM3NZ3ZNJW7FEDPYP55DNQOF3MOJG463VA3MMUSG2IKH4R2IBMJQC
TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC
NTJP7TBK7MKQJO6W5KZUEBEH2ACGNY3GRJJX6X7ZHVSMXAJEEQLAC
W63CCAP4YTMHQT35LMWGB7XPBXMFF7BLYCI3YRPCCQWFRTXVLTJAC
WSW74U3IOZ4Q47MHN57KCWZCSJ4U4MOJX4CCDOLUD2KOFEIQR4BQC
SZ2WVDRM5X23JFNNW6HTWNQ2DECTIXBU7EVOQRDISPZJNLJF2QBQC
3IU4ZBBJGAOQE2XYBIRS4EGCZBUTKT4Y3C6BZLLLB5POMQB4HCBAC
GP7DDCLYNLI6SDXJJ7MH6XHXS5FGFM4SNL2J7J5DGE2EJOETJPHAC
RA7RDZC5P4OYMR4MKTBO463YCREXENESV2VTMWKIT4G4SBJHFGLQC
FI6AL3IS7HK4G5ZHQMIZYGHT4NJMLVH66DMLIQTQG5VLU6ITVPWQC
YIIILIV4ZPRIPWWT4GL7YWSJCUVH6RJJLXV4XIHY6SF3H7Y3EAYAC
4EZVKDQA5GM3QDTNTCKEKGH4F6LGAYNLBT756PXODKZ2B7C4ZVHAC
UET576SVCGS2TXEDRTO7BUTOTLJ77MYHIVZJCDWGH2BAXYMKG6DAC
PZNRGNZPN4YLXL2UDMEUPE33AAZZ6Z2YPK6EQGYZL2PNTRWLCUNQC
3PBG6FJ6WGSR4UM3I7UQUYYCSYU3UBCKCIKYKUEEANIK72TUL4XAC
3YAWEKEQ7P2OL2X3H53DHI7IMAKH6GDQ7NE5GBNYN7O64L3NEDSAC
radius_iterator::radius_iterator( const coord_def& _center, int _radius,
bool _roguelike_metric, bool _require_los,
bool _exclude_center )
radius_iterator::radius_iterator(const coord_def& _center, int _radius,
bool _roguelike_metric, bool _require_los,
bool _exclude_center,
const env_show_grid* _losgrid)
if (require_los && !see_grid(location))
return (false);
if (require_los)
{
if (!losgrid && !see_grid(location))
return (false);
if (losgrid && !see_grid(*losgrid, center, location))
return (false);
}
int minx = c.x - 6;
int maxx = c.x + 7;
int miny = c.y - 6;
int maxy = c.y + 7;
int xinc = 1;
int yinc = 1;
// Use an alternate LOS grid, based on the caster's LOS.
env_show_grid losgrid;
if (caster->atype() != ACT_PLAYER)
losight(losgrid, grd, caster->pos(), true);
miny = c.y + 6;
maxy = c.y - 7;
yinc = -1;
}
if (caster != &you)
losight(losgrid, grd, c, true);
env_show_grid &los(caster == &you? env.no_trans_show : losgrid);
coord_def a;
for (a.x = minx; a.x != maxx; a.x += xinc)
{
for (a.y = miny; a.y != maxy; a.y += yinc)
// This will produce a message if the corpse you are butchering
// is raised.
if (animate_remains(*ri, CORPSE_BODY, beha, hitting, god,
actual, true) > 0)
if (!in_bounds(a) || !see_grid(los, c, a))
continue;
// Search all the items on the ground for a corpse. Only
// one of a stack will be raised.
for (stack_iterator si(a); si; ++si)
{
const bool was_butchering = is_being_butchered(*si, false);
if (animate_remains(a, CORPSE_BODY, beha, hitting, god,
actual, true) > 0)
{
number_raised++;
if (see_grid(a))
number_seen++;
if (was_butchering)
mpr("The corpse you are butchering rises to attack!");
break;
}
}
number_raised++;
if (see_grid(*ri))
number_seen++;
const int chunk = you.equip[EQ_WEAPON];
if (chunk != -1
&& is_valid_item(you.inv[chunk])
&& (you.inv[chunk].base_type == OBJ_CORPSES
|| (you.inv[chunk].base_type == OBJ_FOOD
&& you.inv[chunk].sub_type == FOOD_CHUNK)))
if (weapon
&& (weapon->base_type == OBJ_CORPSES
|| (weapon->base_type == OBJ_FOOD
&& weapon->sub_type == FOOD_CHUNK)))
}
void stop_butcher_delay()
{
if (current_delay_action() == DELAY_BUTCHER
|| current_delay_action() == DELAY_BOTTLE_BLOOD
|| current_delay_action() == DELAY_OFFER_CORPSE)
{
stop_delay();
}