settings: vault and highlight. Vault means a grid is part of a vault (set in dungeon.cc), and currently used to exempt vault grids when shifting labyrinths. Highlight is a meta flag currently only used to highlight labyrinth changes on the 'X' map in wizard mode, but I can think of a couple of other uses, mostly for debugging purposes.
Also replace a few for loops in the lab shift function with rectangle_iterators.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7414 c06c8d41-db1a-0410-9941-cceddc491573
J7GPW2YXLT6FGSKJ24FGQ24GTRZ6A2BDYM6CIXV4R6YBEHP6BGPAC
L4P7CLMZ46XNYJLUCGI2GBEQ7DUXRUTDQ5DIWJBLK4SQZBP5W74AC
WSW74U3IOZ4Q47MHN57KCWZCSJ4U4MOJX4CCDOLUD2KOFEIQR4BQC
GKHIWBXGW3NPOGCY6JUE5S7O5RB34R25Y6NQRNABYE2HZ2JJGKLAC
WEZLXS4OSKPX6ZFFZZKKEO4NKG2QC4AFANVC34IYNDAEDGWJJHLQC
ADNUOKDM2BLXCMGW6FOI3KYKDPIUUDJJXESMWDVSXXR5TZCGQ5YQC
5ONUB5WXLAKG2V4HGFHJQR6WWSBUZQ2DZOWIS73G7AVWWB6PBHXAC
D27U7RT2C77NEUBP6JCSQJ2DRCJVHOXUO2PFZ45VFYMEVMKI4TSAC
CGYTZT5QWIEGYKUOLOK7MFXSLJKLYRZONER5ZCDZO5XYWSLG475QC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
PL6I2CMSTHY5ZHWVMIQE5YTM5S5VPKBNZM6QJVHZSSKOJGIJ5W4AC
TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC
MJWFTUS66PTCNEYXEJA3CUJFXNWXIKDD6H3V24PW7HK64NSVOFSAC
SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC
XVFTIQ7MSVKQDMQ2HT3IY6FJOZFK4H6OFGTUAID5VGCA5BGVXYPAC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
PDOFPXD2X6VI23AHKCGQ5RVDBG74CNP2E3YOHKXLOARHHBXEK3HQC
WDQ3ST3BQ7BMW2IXQMSJVRG7GK2EG444JLKII24FB7IJ5YF5KT5QC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
RCLZVH5IZLUUJU3XDIW4GUDJ5G73DOI3EEMRKNMCNPSSEDBU5YFAC
PSCYVKJ7DGXAL3V5U4O6AJTRV6Q3N3SHQWAZ73VIPRTE4W64F2XAC
5XNQ3SSNBFXFNWA6DPM74W6FH65NX665P3DMH6YCWVFOPZTJSYCQC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
57E4T664CXRFPVW2BZBYI33UIHFS4PSEZURZYPSYSZK5DRLJJ5CQC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
WL3O4GOFGFEDGJ74LVMYJEIRSSZ3ZPIPY5FWAZJED3FPCTUV6NQQC
DK362IHKSDADMUPD35NOTKM4WESQM37KG2PNOJRV2FGELDWULYPQC
S34LKQDIQJLIWVIPASOJBBZ6ZCXDHP5KPS7TRBZJSCDRVNCLK6UAC
HLZJ4YXJ3RQTM6PLOXNVVHGOK2KO54S35NMAEQGM7PJW7ACISJYQC
TO43FWKHNIA5MVDOFXYHQODTLBQYEZKX5UIUGID57436UF7G2EXQC
VXSORUQOM2VZA4CAZDC6KPAY373NQIN3UT7CXQXTRCYXO2WM62DAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
AO3KHGKGSX2ZR24KJVIOTUY7EHYHMMI5W4HN3CAG4YGQHBOHLGDQC
NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC
MSQI3TH6T62JAXQGLL52QZCWAMC372TGB6ZNNRDGUGMJKBNNV2VAC
RWSXCNYUGDSMP2GKN22HROC5Q2GHSAVJJUDRT3Z53WU2DAI4IZOQC
U5SXLDAMIOCJJ3A3U6Y3HHSJI7WSZIM2SSXEPHJWBCB5KAXFM5XQC
SW3RLYFNRT3IJBK6LYKHKP2J2YDU7SXQWAJZX7U6S7ICYW43OMNQC
ED62QWGKBPORWVKDFOQRKJXEIWZVNGR3O4KWQBDSRNPT36AYOQYAC
JI4NDSOXGGZ7QHXXFB3ZTHAKHABXYBZXPDGLUFV5SKYEOL5FT7JQC
VHX7TPWGVWIT4UVQZ3XSFBRALNMHLEDMEBJC6HZ4HUH2JKI4VL6AC
WP5VP57D5BWKDAS7AA224OV2RX4O4BPTI2BLY7TS3T2O2PLUGXCQC
HIRKGUMNJPWKSVTR6TVBPD3MWNA63CEHCLCIPWEMGDFHVB3NPLDQC
OEISFRW2B7E4YRJSWXNXBH2IAJO4O3LHNYFPFD3MBY57LYVRHMZQC
QCUMH3C7GXV7ZW444WT5SFAXQOJKJSE2YCQCEHMRYXCWF4QI7UMAC
TPZWAV3USKO7RX4IGHLZKVPRN36K33PJPSZYL6FZMX4XBHTYOQYAC
V77IIRDTMZWKFEZEQIQNBMVELSSFTPV2ZWR2QIALU5Z7I3YZZBZAC
4FQAKUKUO6PCAZ3N4HUR5XL6E4VA5UQUZ3AEDGRBLVY7W2LMWI7QC
OONYLF4DAPLIYLBNNRW74IVT5BBTWI4XHQBXSNSPVRX3FTKJBTRAC
3UKFCWWS5BLFQWZRB5FUA46CE2XGX5VRCEWC3K3XH5RCGQK64N2AC
56C44YMFHZ62GXAAOLYSLLGBVGRWXB53W2VI37Q26ZECEK2XG5SQC
KCHX2F3JFEWOZT3WMJVZAAQUU2QSZ5Q7RDCD7WUJ7VE65J52JFUQC
W45PMU4HNPSAMMEBJ4XH4MTHLPVIASZT4FXTBPID5LFXKIMNUBKAC
CUNNC574MESEMTTONZ6YB6CJ2S5P6VA3V7Z3OODESWAK37GYOBPAC
// Fill a vector with wall grids that are potential targets for swapping
// against floor, i.e. are flanked by walls to two cardinal directions,
// and by floor on the two remaining sides.
std::vector<coord_def> targets;
for (int xi = c1.x; xi <= c2.x; xi++)
for (int yi = c1.y; yi <= c2.y; yi++)
// Fill a vector with wall grids that are potential targets for
// swapping against floor, i.e. are flanked by walls to two cardinal
// directions, and by floor on the two remaining sides.
for (rectangle_iterator ri(c1, c2); ri; ++ri)
if (_grid_is_flanked_by_walls(c) && _deadend_check_floor(c))
targets.push_back(c);
// Skip on grids inside vaults so as not to disrupt them.
if (testbits(env.map(*ri).property, FPROP_VAULT))
continue;
if (_grid_is_flanked_by_walls(*ri) && _deadend_check_floor(*ri))
targets.push_back(*ri);
const coord_def c(xi, yi);
if (!grid_is_wall(grd(c)) || igrd(c) == NON_ITEM)
mprf(MSGCH_DIAGNOSTICS,
"Need to move around some items at pos (%d, %d)...",
ri->x, ri->y);
}
// Search the eight possible directions in random order.
std::random_shuffle(dirs.begin(), dirs.end(), random2);
for (unsigned int i = 0; i < dirs.size(); i++)
{
const coord_def p = *ri + dirs[i];
if (!in_bounds(p))
mprf(MSGCH_DIAGNOSTICS,
"Need to move around some items at pos (%d, %d)...",
xi, yi);
}
// Search the eight possible directions in random order.
std::random_shuffle(dirs.begin(), dirs.end(), random2);
for (unsigned int i = 0; i < dirs.size(); i++)
{
const coord_def p = c + dirs[i];
if (!in_bounds(p))
continue;
if (_is_floor(grd(p)))
// Once a valid grid is found, move all items from the
// stack onto it.
int it = igrd(*ri);
while (it != NON_ITEM)
// Once a valid grid is found, move all items from the
// stack onto it.
int it = igrd(c);
while (it != NON_ITEM)
mitm[it].pos.x = p.x;
mitm[it].pos.y = p.y;
if (mitm[it].link == NON_ITEM)
mitm[it].pos.x = p.x;
mitm[it].pos.y = p.y;
if (mitm[it].link == NON_ITEM)
{
// Link to the stack on the target grid p,
// or NON_ITEM, if empty.
mitm[it].link = igrd(p);
break;
}
it = mitm[it].link;
// Link to the stack on the target grid p,
// or NON_ITEM, if empty.
mitm[it].link = igrd(p);
break;
for ( int i = 0; i < tries; ++i )
{
if (!one_chance_in(100))
continue;
for (int i = 0; i < tries; ++i)
{
if (!one_chance_in(100))
continue;
// Chance of cleaning adjacent squares.
for ( adjacent_iterator ai(where); ai; ++ai )
if (is_bloodcovered(*ai) && one_chance_in(5))
env.map(*ai).property = FPROP_NONE;
// Chance of cleaning adjacent squares.
for (adjacent_iterator ai(where); ai; ++ai)
if (is_bloodcovered(*ai) && one_chance_in(5))
env.map(*ai).property &= ~(FPROP_BLOODY);