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.");elsesimple_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_XOMmprf(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!");elsempr("Your nose twitches suddenly!");