As you explore, a halo of mapping tracks you. The halo includes a percentage of tiles within a distance of every seen tile; optimal play dictates seeing every tile, which just happens to be what autoexplore does. Added as random generation and to the demonspawn tier-2 list.
Signed-off-by: Darshan Shaligram <dshaligram@users.sourceforge.net>
XHKAHAVDZIGGXNA442YKWKCTSSIRFTXOIOFYLYEJAR36H7DLD2ZQC
I77NPV6TQD2M6HY6H6ODSKSL2TOONPK6PK2DRZSP6G5BKTOFA25AC
UFM4NF5VT5UMB2EODBBWHH5A6VWD67MBVSY352K5MNTJVNNHYFLQC
L2HE3KCNREOYBGUNAJPWJDFFVIM7VMLCCGU4DZPVENAPF23F2GSQC
BY5XD4MZ34JNBO4Y3QFE7DKUW5VYW3NXJGQWF3YHZDC35LLO7MHQC
HI6YISLKIYJEN7MMIQJ3PSHD4WWTZJ3LNIZ2POQ4NEZGQH4DIRPAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
GZMPIDNMBXZ4B2ZWKREHBPAVN53J6WRVY5W5KY52KEBHKU6IW4IQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
UJHVY3MHU23VJMYKIXCDSAIXF6HH6MWKT5H2KHSJTHJVU4DYWTFAC
AJJ6D6JRV6ZAZOAUHYUM2IQG42V6PBALOD4KEMNKSVVAOJXAUCPQC
NG53L53MSFQZAIVKHG54IEMXNJ33AYVPF2OZM4MMJFDKEJCGPBSAC
V25XPIUUPVMKRK663D33PWE3GFQR47XZAV642T2NYGRFWZR5LT6AC
SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC
MV5USMLTBKVRWBAD67UFJ2BS4Y5HEOMYASRSB44DS24BBMRP75RQC
MPMVK6J5UQUFJ75SNRSPIBBSRTH67ZPDZKPZUF3RZRFKSERS62AAC
UCEAWJ4I6AEFR64SSUFQSX6Q62JGLMJQ5BOO5MQSV3XIE7KAS6CQC
BK6MGPSEAEMU4URBAPKY3VTKK6JC6IZVN5CNOSN2UPTIOWQYEWLQC
LS5XCCGKQHSJQGWLWLGTP2F5OYWK4ND5AQQAGRN6H2HVBSXNCCZAC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
4LFTDJY3DK6S7C7SQLLML6UIZ42GZOWK2EIMZZSNEKBWSA3YNUZAC
X3B7EVFL3GJOEID2C42QJQIQBJS4YLA4R2HT4LXGDPIBKHGDDEHQC
6FBAIIDQLTXNSPYEEDV5ISD24S5F7PX2JOWEMXMS4LE53RC6T6EAC
CMNLYUECIMEZSOYG4KOSINOPER5OM7PPCGIHCM7LQVWEO77XFUYQC
static void _automap_from( int x, int y, int mutated )
{
if (mutated)
magic_mapping(8 * mutated, 5 * mutated, true, false,
true, coord_def(x,y));
}
void reautomap_level( )
{
int passive = player_mutation_level(MUT_PASSIVE_MAPPING);
for (int x = X_BOUND_1; x <= X_BOUND_2; ++x)
for (int y = Y_BOUND_1; y <= Y_BOUND_2; ++y)
if (env.map[x][y].flags & MAP_SEEN_FLAG)
_automap_from(x, y, passive);
}
}
}
// We logically associate a difficulty parameter with each tile on each level,
// to make deterministic magic mapping work. This function returns the
// difficulty parameters for each tile on the current level, whose difficulty
// is less than a certain amount.
//
// Random difficulties are used in the few cases where we want repeated maps
// to give different results; scrolls and cards, since they are a finite
// resource.
static const FixedArray<char, GXM, GYM>& _tile_difficulties(bool random)
{
// We will often be called with the same level parameter and cutoff, so
// cache this (DS with passive mapping autoexploring could be 5000 calls
// in a second or so).
static FixedArray<char, GXM, GYM> cache;
static int cache_seed = -1;
int seed = random ? -1 :
(static_cast<int>(you.where_are_you) << 8) + you.your_level - 1731813538;
if (seed == cache_seed && !random)
{
return cache;
for (radius_iterator ri(you.pos(), map_radius, true, false); ri; ++ri)
{
if (proportion < 100 && random2(100) >= proportion)
continue; // note that proportion can be over 100
const FixedArray<char, GXM, GYM>& difficulty =
_tile_difficulties(!deterministic);
{ MUT_PASSIVE_MAPPING, 3, 3, false, false,
{"You sense your immediate surroundings while exploring..",
"You sense your surroundings while exploring.",
"You sense a large area of your surroundings while exploring."},
{"You feel aware of your new surroundings.",
"You feel more aware of your new surroundings.",
"You feel even more aware of your new surroundings."},
{"You feel slightly disoriented.",
"You feel slightly disoriented.",
"You feel slightly disoriented."},
"passive mapping"
},