Fix 1922815: blood potion assert. Implement 1828037: prompt before entering harmful clouds
And tidy up fountain handling, dried non-magic fountains may now also start flowing again.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3878 c06c8d41-db1a-0410-9941-cceddc491573
OEISFRW2B7E4YRJSWXNXBH2IAJO4O3LHNYFPFD3MBY57LYVRHMZQC
POETVWRYRKRTPDOAM6YLJRBAWF7QDCOUCK3JPQURB2Y4PJN7EE2QC
QUHEENPY2PYTEUS7C4R3CKE4FHSHGR2BIXB6EW676ESX3727PA3AC
U6ILMKBXTQZYT62IGD2CALYNU4VQGRSTHN6QBFBU7BVUBHWYOEQQC
QKGDOYIYKE6B36ION5O2DRW65DWWPZMYNWJVH7LJJ7FPGGM2MYAQC
LXLUKS5CKXBUSVV3QTZ4SM7NWSY6JFQEBHUBQW2VUEU5DOL3RRLAC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
UDYVF65OZSNPANLHDI3ODBEGUAKAVZ4KH4OZFAKR2CQJPO4AXU6QC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
SKV6JBDAWUWTFECFSQARSNA3DDPUFCR7N3T7D5J35NYTEDMXLP3QC
ILOED4VB4I6VPAUTR75ZWX6MXDYXB5DO2EDK2UH67O3HNKWV23RQC
AVCMVFA3MKCXHO6H44UK5KJNIHTGQV7UA7GYXM26VI6TXXU5ZN6QC
J7KCPTGASQNRAKVKQ5FCXZ75E75PK7I2BB6MFSI3COWU6HRKTWSAC
HIRKGUMNJPWKSVTR6TVBPD3MWNA63CEHCLCIPWEMGDFHVB3NPLDQC
OONYLF4DAPLIYLBNNRW74IVT5BBTWI4XHQBXSNSPVRX3FTKJBTRAC
MJWFTUS66PTCNEYXEJA3CUJFXNWXIKDD6H3V24PW7HK64NSVOFSAC
STQDS62PD6PCLYBAB7LPYTG47WMBJP3FIJL55UHC3XFDPGERC3UQC
const int cloud = env.cgrid[x][y];
if (cloud != EMPTY_CLOUD)
{
const cloud_type ctype = env.cloud[ cloud ].type;
// don't prompt if already in a cloud of the same type
if (is_damaging_cloud(ctype, false)
&& (env.cgrid[you.x_pos][you.y_pos] == EMPTY_CLOUD
|| ctype != env.cloud[ env.cgrid[you.x_pos][you.y_pos] ].type))
{
std::string prompt = make_stringf(
"Really step into that cloud of %s?",
cloud_name(ctype).c_str());
if (!yesno(prompt.c_str(), false, 'n'))
{
canned_msg(MSG_OK);
you.turn_is_over = false;
return (false);
}
}
}
}
static void _maybe_restart_fountain_flow(const int x, const int y, int tries)
{
while (0 < tries--)
{
if (!one_chance_in(100))
continue;
if (grd[x][y] > DNGN_SPARKLING_FOUNTAIN)
grd[x][y] = static_cast<dungeon_feature_type>(grd[x][y] - 1);
else // grid == DNGN_DRY_FOUNTAIN_I
grd[x][y] = DNGN_BLUE_FOUNTAIN;
// clean bloody floor
if (is_bloodcovered(x,y))
env.map[x][y].property = FPROP_NONE;
// chance of cleaning adjacent squares
for (int i = -1; i <= 1; i++)
for (int j =-1; j <= 1; j++)
{
if (is_bloodcovered(x+i,y+j)
&& one_chance_in(5))
{
env.map[x+i][y+j].property = FPROP_NONE;
}
}
}
for (int i=0; i<fountain_checks; i++)
{
if (one_chance_in(100))
{
if (grd[cx][cy] > DNGN_SPARKLING_FOUNTAIN)
grd[cx][cy] =
static_cast<dungeon_feature_type>(
grd[cx][cy] - 1);
// clean bloody floor
if (is_bloodcovered(cx,cy))
env.map[cx][cy].property = FPROP_NONE;
// chance of cleaning adjacent squares
for (int k=-1; k<=1; k++)
{
for (int l=-1; l<=1; l++)
if (is_bloodcovered(cx+k,cy+l)
&& one_chance_in(5))
{
env.map[cx+k][cy+l].property = FPROP_NONE;
}
}
}
}
_maybe_restart_fountain_flow(cx, cy, fountain_checks);