journey, use a random sample of level grids as a guesstimate of the explored portion of the level, and reduce chances for mostly explored levels.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@9565 c06c8d41-db1a-0410-9941-cceddc491573
V25XPIUUPVMKRK663D33PWE3GFQR47XZAV642T2NYGRFWZR5LT6AC
OSKFL6OBCHETGZ32XKFJREY35LHN33GUAVG5KWWM3TACS6Q4KYOQC
QEFW63ZHJEAR4GS5UBXDSLCET7QBV2SORJHWSO63ROO33QJMHGKAC
TPJYUAKSEZMCCCJANJ5EQ7F67QVTPFEOWBD7WYK33NLRN657Y5VQC
HCVH2CWL32UD66O6Z7ZYDUASWN3RF5TW6FSWURGMD7MELKB772FAC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
LEZWYG752CKY6URMLSQTOADDRAJ5NTT7KH7BC5ENGQ55GXKHQMWQC
G6WNKWA4GNUGNOH63AKXJQMQS2V4FGJ55CB4P2Z3MPSX3UPMVF6AC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
GP7RUHLNB4KISSZAENEYVNY3MB5YRCFRWRWYAROBZIQ5MR4DXB7QC
3NSJT3P2ZCTI3M4IKKL34KKEK7AFFBDWG5YB3OPR5COJWC2MYVJQC
377IO63NX2CXDYLKI2DUH5X6CKU7BJSPWIJYSCJXEAQTKFV53K5QC
XYQFJLTMLSU7LC7VODUJVN5F2P47STH2KVSP7Q3BSCUUDRHROW7QC
A54S2WRWNIV4Y4XB5JHR7NALLB55ZCX3Z5DSGBMAVGVY6I7KY2GAC
TYAUNNAVB4GEKXYSR447JXRDKRJJZHAVV7XLWGU7RXEP5JMJCQKAC
H2OHWQKMHL66CPVJGJL35RY7EIZB74SZTGOLDJDSCG5WVEVPIIUAC
PUY2VWZJ3G7HNCLIHZP5VGT2DAGHI436ETDJQTPEBFPRSEHOM2NQC
7DHFQM7MCCELAZL3YR53E263WMSQHQECCI5D7MCPQEF7B56IB2EAC
IBV5MNXWCCOWCI7DPVTPFEEMLX7QWP75EP6YQ3RA2WJOKWSGMPSQC
TRBDS4IKHBASW2CTAQ2YHMBMBMRB6QEBQ4ZE7GRSR3U2VJXA7TJQC
AMFTO4UE74UYQBU3R2EYUU6BJ7SC4O4NOAFICRTLMT3MIFRQ6AKAC
GZMPIDNMBXZ4B2ZWKREHBPAVN53J6WRVY5W5KY52KEBHKU6IW4IQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
FSD7GIK3YLZXWLEH37BU6KV3IUCFGXPQL6IZ7H65YWNRBEKDBX5AC
SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC
MV5USMLTBKVRWBAD67UFJ2BS4Y5HEOMYASRSB44DS24BBMRP75RQC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
S34LKQDIQJLIWVIPASOJBBZ6ZCXDHP5KPS7TRBZJSCDRVNCLK6UAC
JJULXW764V5C2HJKZNWQAEWB6QM5YZADD7ZCE35LYTBFEM6PMYCAC
KATZLWENEIQMKKWIV4ZLXJ5HFUW6SU5K4ZU6NENBOL4XAAVTDUKAC
BNZD2CICSMU33O4Y2CG7HHVB4P34MCRVZG4LA6TRZE5DGSI672JQC
RYT42Z6CED4KV5CCJ45CHZ3DQGLFMDCVH6CSQZNXOILULDG4MXVQC
NG53L53MSFQZAIVKHG54IEMXNJ33AYVPF2OZM4MMJFDKEJCGPBSAC
CA3UUPVVUCMU7V7AUUIG6LOPEQEQKNYRPCSKF7FECSCA6VCZYAAAC
6IY4YKTCKV4YYQKG7CUB6HNTGRUSP3BCZV2B6GEATTC4QN4TESNQC
KNO4TZR76DMOYJCF24PSVQW7FUZOTMOJTL7I7J74SM4IHOGDX6TAC
YCL3W2PFE6ILTGBFODCSXNPDIA46KVSZP2TI7HDMYAOEJT65RIEAC
FBSQWOO5V3GQG3RISR2VFCIJD5U3L7EWVLVJES6NJ4H7F24LWWFAC
HJFSUV6DXQVNWJCM73GEPKXGKFF4NRZ2Z35ZCXTYRSWL5WG34YMAC
RVST2QHYJ757ZHK4AUJ5NGPDZ44AD6RVFVXYPKQIBJXZBDNUCHXQC
// During tension, Xom may briefly forget about being bored.
if (_xom_is_bored() && x_chance_in_y(chance-1, 4))
// If Xom is bored the chances for Xom acting are reversed.
if (you.gift_timeout == 0 && x_chance_in_y(5-chance,5))
{
xom_acts(abs(you.piety - MAX_PIETY/2), tension);
return;
}
else if (you.gift_timeout <= 1 && x_chance_in_y(chance-1, 4))
you.gift_timeout += random2(chance*20);
// During tension, Xom may briefly forget about being bored.
const int interest = random2(chance*15);
if (interest > 0)
{
if (interest < 25)
simple_god_message(" is interested.");
else
simple_god_message(" is intrigued.");
you.gift_timeout += interest;
void xom_is_stimulated(int maxinterestingness, const std::string& message,
bool force_message)
// Picks 100 random grids from the level and checks whether they've been
// marked as seen (explored) or known (mapped). If seen_only is true
// grids only "seen" via magic mapping don't count.
// Returns the estimated percentage value of exploration.
static int _exploration_estimate(bool seen_only = false)
const char *message_array[6];
bool open = true;
if (grid_is_solid(grd(pos)) && grd(pos) != DNGN_CLOSED_DOOR)
{
open = false;
for (adjacent_iterator ai(pos); ai; ++ai)
{
if (map_bounds(*ai) && (!grid_is_opaque(grd(*ai))
|| grd(*ai) == DNGN_CLOSED_DOOR))
{
open = true;
break;
}
}
}
if (open)
total++;
}
while (total < 100 && tries < 1000);
for (int i = 0; i < 6; ++i)
message_array[i] = message.c_str();
#ifdef DEBUG_XOM
mprf(MSGCH_DIAGNOSTICS,
"exploration estimate (%s): %d out of %d grids seen",
seen_only ? "explored" : "mapped", seen, total);
#endif
// If we didn't get any qualifying grids, there are probably so few
// of them you've already seen them all.
if (total == 0)
return 100;
if (total < 100)
seen *= 100/total;
// This is not particularly exciting if the level is already fully
// explored (presumably cleared). If Xom is feeling nasty this
// is likelier to happen if the level is unexplored.
const int explored = _exploration_estimate(true);
if (nasty && explored >= 50 && coinflip()
|| explored >= 80 + random2(20))
{
done = false;
continue;
}
const bool wizard_map = map_radius == 1000 && you.wizard;
for ( radius_iterator ri(you.pos(), map_radius, true, false); ri; ++ri )
const bool wizard_map = (you.wizard && map_radius == 1000);
bool did_map = false;
for (radius_iterator ri(you.pos(), map_radius, true, false); ri; ++ri)
mprf("Your %s",
(temp_rand == 0) ? "ears itch!" :
(temp_rand == 1) ? "brain hurts!"
: "nose twitches suddenly!");
if (player_mutation_level(MUT_BEAK) || one_chance_in(3))
mpr("Your brain hurts!");
else if (you.species == SP_MUMMY || coinflip())
mpr("Your ears itch!");
else
mpr("Your nose twitches suddenly!");