git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2559 c06c8d41-db1a-0410-9941-cceddc491573
AO3KHGKGSX2ZR24KJVIOTUY7EHYHMMI5W4HN3CAG4YGQHBOHLGDQC
XJUQANMY7JJTA3KDICDXEOBE22YQTMZQSDPP4PFBTTGJJDK4X5KAC
JT672SIJK4BOIUAGL2WQ6NR2NF4PSWP3BT6Q4HMNRF25UN6JQ2MAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
MSQI3TH6T62JAXQGLL52QZCWAMC372TGB6ZNNRDGUGMJKBNNV2VAC
ZJLJGSB2XSBQU42OFQMXL3EG4CXAQGOYAU6YTV2SAWZEJIPFH2CAC
KCHX2F3JFEWOZT3WMJVZAAQUU2QSZ5Q7RDCD7WUJ7VE65J52JFUQC
6QWZDCP5HGYLTJO3WWYJJGRRT7QFY6IG64TC7TUB553Z7GAA2HIQC
WLX2RQMMOMP2PYPAGJRM4VFD2WTLJTOAZZPPY3MV76FU2EGEJ54QC
FSD7GIK3YLZXWLEH37BU6KV3IUCFGXPQL6IZ7H65YWNRBEKDBX5AC
C22455VGUQOSUX2OORA32LROFQ7NNYDMD2ZDTTUZSAQLXK4AD6QAC
NCDWWDJQLAU5ORSAQGZKJJ5E22VTDGGPJMVVBWQFHQ2B3U3UFHDQC
KXUQB3WNWC5IFL6VFWADEPQMMU3VV3NDI5FLA666PGOEWFYUHCLQC
UZ6N6HOUPGVSPC5NQROEEDWMEGJA5XUWUY2AKH5QG65AZ25PVXDAC
PISXY4NKSKL5KDJWAHD7CTXWTQDH3NFWQSFAHUAI3VVATWKXRODQC
HZK3YN3SAISTDS5JI4COBYFG7YB4ABDVENXWZZEYLFA2LDI232VAC
ED62QWGKBPORWVKDFOQRKJXEIWZVNGR3O4KWQBDSRNPT36AYOQYAC
CUNNC574MESEMTTONZ6YB6CJ2S5P6VA3V7Z3OODESWAK37GYOBPAC
56C44YMFHZ62GXAAOLYSLLGBVGRWXB53W2VI37Q26ZECEK2XG5SQC
CREW3VTGN2BV622ZXHCPHUEZWBAGEQMNUELDLTHLEKG4VBXGMRPQC
4RFKVDJKTCRBZU6WPJ2E5OVI5IRPY3UTRPOBLC5QHY4CQJJTLZKQC
IVVTHLTTLOP5TSULXJWUSSXHOKYWVU3OWKYVK45A7RIB6V34MYQAC
KNBQ2Y4XXAJGSHC4FU2AHCRGLLHETYA2MU55TDSHV2TIMTOX3QZQC
W5WCC5J7PL6IXZ5LPSUWGY3IVQBCTK3FKOD5ADYRWWH2N425NEAAC
SCXU5KW3LWPSVVCOWSCZLDXHV7IUMCFTGIWZ2LFSBIUKAOBYHJBQC
RXSPAKO7FZKRJMEBCQ4W32DLZZP7CJHJSHRUOQ2GE7I3QSM7KYOQC
ZJU5Z2WDMI7HN4XJ3NVTVRHIZO2CGFUQ2FSKIRJVTQG47XHNCZFQC
3PY3L3A4QRW3Z5Y7SHO4TMVOOP2VNCO27X2MX4DTOP2SADLBQUOAC
7J3H7JY6AUO2UHNF6DAHDZI4O33JMTUUTYTPRM3CKNPUOF2RQOGAC
ITUTGFJ56GR7FWMC5Y7XKUJJ4Z35I6BMOHCPCW3W5MKDQGVOGM4AC
R5JKQLY5QE6UBG3RH3Y5ZRSX6H35CHYI2HYNDZF6ZHVRULUORXBQC
void fit_region_into_map_bounds(coord_def &pos, const coord_def &size)
{
ASSERT(size.x <= GXM && size.y <= GYM);
if (pos.x < X_BOUND_1)
pos.x = X_BOUND_1;
if (pos.y < Y_BOUND_1)
pos.y = Y_BOUND_1;
if (pos.x + size.x - 1 > X_BOUND_2)
pos.x = X_BOUND_2 - size.x + 1;
if (pos.y + size.y - 1 > Y_BOUND_2)
pos.y = Y_BOUND_2 - size.y + 1;
}
coord_def where = def.float_place();
// No further sanity checks.
startx = where.x;
starty = where.y;
if (map_bounds(place.pos))
{
start = place.pos - coord_def(width, height) / 2;
fit_region_into_map_bounds(start, coord_def(width, height));
}
else
start = def.float_place();
for (int y = place.y + place.height - 1; y >= place.y; --y)
for (int x = place.x + place.width - 1; x >= place.x; --x)
if (place.map.in_map(coord_def(x - place.x, y - place.y)))
for (int y = place.pos.y + place.size.y - 1; y >= place.pos.y; --y)
for (int x = place.pos.x + place.size.x - 1; x >= place.pos.x; --x)
if (place.map.in_map(coord_def(x - place.pos.x, y - place.pos.y)))
for (int y = place.y + place.height - 1; y >= place.y; --y)
for (int x = place.x + place.width - 1; x >= place.x; --x)
if (place.map.in_map(coord_def(x - place.x, y - place.y)))
for (int y = place.pos.y + place.size.y - 1; y >= place.pos.y; --y)
for (int x = place.pos.x + place.size.x - 1; x >= place.pos.x; --x)
if (place.map.in_map(coord_def(x - place.pos.x, y - place.pos.y)))
for (int y = place.y + 1; y < place.y + place.height - 1; ++y)
for (int x = place.x + 1; x < place.x + place.width - 1; ++x)
for (int y = place.pos.y + 1; y < place.pos.y + place.size.y - 1; ++y)
for (int x = place.pos.x + 1; x < place.pos.x + place.size.x - 1; ++x)
if (grid_needs_exit(place.x, y))
possible_exits.push_back( coord_def(place.x, y) );
if (grid_needs_exit(place.x + place.width - 1, y))
possible_exits.push_back( coord_def(place.x + place.width - 1, y) );
if (grid_needs_exit(place.pos.x, y))
possible_exits.push_back( coord_def(place.pos.x, y) );
if (grid_needs_exit(place.pos.x + place.size.x - 1, y))
possible_exits.push_back(
coord_def(place.pos.x + place.size.x - 1, y) );
if (grid_needs_exit(x, place.y))
possible_exits.push_back( coord_def(x, place.y) );
if (grid_needs_exit(x, place.y + place.height - 1))
if (grid_needs_exit(x, place.pos.y))
possible_exits.push_back( coord_def(x, place.pos.y) );
if (grid_needs_exit(x, place.pos.y + place.size.y - 1))
const int v1x = place.x;
const int v1y = place.y;
const int v2x = place.x + place.width - 1;
const int v2y = place.y + place.height - 1;
const int v1x = place.pos.x;
const int v1y = place.pos.y;
const int v2x = place.pos.x + place.size.x - 1;
const int v2y = place.pos.y + place.size.y - 1;
if (dgn_place_map(map, false, true))
const map_def *toplace = map_by_index(map);
coord_def where(-1, -1);
if ((toplace->orient == MAP_FLOAT || toplace->orient == MAP_NONE)
&& place_on_us)
{
where = you.pos();
}
if (dgn_place_map(map, false, true, where))