monsters within the (circular) halo, and then keeps the duration of that backlight from running out. You currently lose it if you go under penance. Also, there are no visual effects yet, other than the usual backlight effects.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3669 c06c8d41-db1a-0410-9941-cceddc491573
JDZCDMUCQ7VENYVLB62KQWUIRGABID37OKATOKCBUPCDL7W75NPAC
JJHOTW7LDUJ6DLUG2DTFWASCAFPGD2WBW7MHBSECJZU7PTJYWQDQC
S7KC3IFKCUNBO3XO4TV3KEQEIDZWSRJSKXY65DPONKMG54VHU3UQC
KOBNLIHIAHSV6IPA3R4HI2KB5HY5XIIJQPJ2GBETYB5AK73NAKJQC
L4DV5O3UTY456Y6YFXELHEWEFLB6ZUCENZ3AKYJZLGRRGUVHT5QAC
DK362IHKSDADMUPD35NOTKM4WESQM37KG2PNOJRV2FGELDWULYPQC
CGYTZT5QWIEGYKUOLOK7MFXSLJKLYRZONER5ZCDZO5XYWSLG475QC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
P52QVYEFQXNK6IXNN2EMZIBLOIHHGQ7LODWIGWPJLANGVIPQK5IAC
PEXHYCLRKDG2PVOJ3DDCMUZUK2HTSPU5WKH4MODFL4FTBQRQTY5QC
TN2D3PHU7VSGUND2BDIC2F4U6O2HFSV3JXLF7HMYYMY7GZXM6IFAC
IR6KD4I2DWCXMZ6ANWMHCHCBN35S4FELVAAC36MLAQ3XL6SY6ILAC
KHHAE5ZK7ITEZVMMUKYROKECLE2RU5ZU5OQ4Z4XSRQXE2R65O67AC
UFKLHUYL7WAQ3CI3D42T4C6KBGAUR63DSQAUQTTZG7GJMXSCVJWAC
L5CVPV5IUBSO4EE3WK4O6SQGIMIEPSMQONFBWEVGJBR2HATLPZIAC
CQ24AVAI6SW3AHTIDMLPSTRRBEU6FHRF5I5FD6G5QIYE6PO4BQMQC
A3QXTQ5RKIGDWIKA7JHIGIHQE5EVGO6WNNWF6XY2VZNP67JESDHQC
NVD2HSEW2ONWNYDDCTOMZZOUP6NG4DCXI4LNYYIY4BQEBDMJQK5AC
WTUFDJICW653ERO6FH63XYGOZQRVY3DVLPIPFN4BMA4NJH5UD3LAC
V4DWL5WBO2JCODVS5QQNWXDH4DAYZN3D5V3UDCHM2KKOMADOTEDQC
KKEPQAZMWQFWPQ4P4KT5PWG2YFPG7H4JHL5K7USVHQ3Y6L4NWURQC
DDU4A3JGN5IUIPP5IASOODKPR2WBHSDSV4FITZ6HNXNSXXQACWAQC
X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC
RCPQNIRPR3NQXEMVLBAQW6657UJFIP43N54UJVEZHJH22OH4UQIQC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC
I2B33Z7NZGC33AMDSSK446AZZYWKPHWLAGULVHKKZU4MVB4BNJOAC
6GT5JAWOIIL4SQ5MWIID6ZVO3KKQFWDQDZNVFHZ6DNK5QCBXJ4UAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
if (!inside_level_bounds(posx, posy))
continue;
int dist = distance(posx, posy, you.x_pos, you.y_pos);
if (dist > radius*radius)
continue;
int dist = mons_inside_circle(posx, posy, radius);
}
int halo_radius()
{
if (you.religion == GOD_SHINING_ONE && you.piety >= piety_breakpoint(0)
&& !you.penance[GOD_SHINING_ONE])
{
return you.piety / 20;
}
else
return 0;
}
void manage_halo()
{
int radius = halo_radius();
if (radius == 0)
return;
int monster = -1;
if (!you.duration[DUR_BACKLIGHT])
you.duration[DUR_BACKLIGHT] = 1;
for (int x=-radius; x<=radius; x++)
for (int y=-radius; y<=radius; y++)
{
int posx = you.x_pos + x;
int posy = you.y_pos + y;
// affect all monsters inside the halo
if (mons_inside_halo(posx, posy))
{
monster = mgrd[posx][posy];
monsters *mon = &menv[monster];
if (!mon->has_ench(ENCH_BACKLIGHT))
mon->add_ench(ENCH_BACKLIGHT);
}
}
}
bool mons_inside_halo(int posx, int posy)
{
return (mons_inside_circle(posx, posy, halo_radius()) != -1);
// bonuses now once more effective
if (god == GOD_BEOGH && you.religion == GOD_BEOGH)
you.redraw_armour_class = true;
// When you gain piety of more than 160, you get another chance
// to make hostile holy beings neutral.
if (is_good_god(you.religion))
moral_beings_attitude_change();
}
// Is there a monster in a circle with the given radius, centered on the
// player's position? If so, return the distance to it. Otherwise,
// return -1.
int mons_inside_circle(int posx, int posy, int radius)
{
if (!inside_level_bounds(posx, posy))
return -1;
int dist = distance(posx, posy, you.x_pos, you.y_pos);
if (dist > radius*radius)
return -1;
if (mgrd[posx][posy] != NON_MONSTER)
return dist;
return -1;