the border (so they're not cut off anymore). Also add a new feature type DNGN_OPEN_SEA that is an impassible feature only intended for the Shoals border. Will need special handling for confusion, I guess. I've also tweaked the level generation, so Shoals vaults don't need to be connected anymore (the algorithm just adds superfluous floor corridors), but I still get loads of corridors on the bottom level - frustratingly enough only inside the map border, and they (usually) don't even contain any stairs or other features. It's maddening!
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10213 c06c8d41-db1a-0410-9941-cceddc491573
MPMVK6J5UQUFJ75SNRSPIBBSRTH67ZPDZKPZUF3RZRFKSERS62AAC
THRKXPFHTIZPBVQZXDH7BN63DV3HCCWCB3VBHQFEBJSQTHDDYXLAC
R73CYAV6MK6DT6QU6APLJVXINUFEGOOFHDCLPKD2I7FJ2VGDCNRAC
A4FBEPVX7W4H4R7AMJEGONTJC5N7SC2E3S3CV7RZYS2SAONUQBHQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
V25XPIUUPVMKRK663D33PWE3GFQR47XZAV642T2NYGRFWZR5LT6AC
MV5USMLTBKVRWBAD67UFJ2BS4Y5HEOMYASRSB44DS24BBMRP75RQC
SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC
LTX72QGIPNUGWQN5ULPOMFCOPZTK7472DQY4AYX5WM3WHSUVXI5QC
75M6AVUSS3G5EJECJJRB67V5UYDOIV26FZNB2FFCMBZ33EK7FVIQC
AUXVWXWIFSTWFA6VZXN2FMG7FQEKRZVV6MD32VQQ7J2RKCXHAVGAC
5BYWI6JJMVTQLCOMPHQNSFC2HW5LYGYFBHBIOU7D4T4B2AIUZV4AC
LDBTCT5WIPLJPZWXS2RUQ26QKISCUUTLO77M464WOE6VSYSNPKYAC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
NXIVXEHVXS22UDSQL4KZQ4VHK3XTW7DAGA5LLL3EXY5MHPIUXL7AC
Q3B3UVMYEVC4YJUPYVSNTR4DJH4E6J4JJDHZNT5LNOCHCPPMEMXAC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
J7GPW2YXLT6FGSKJ24FGQ24GTRZ6A2BDYM6CIXV4R6YBEHP6BGPAC
5XNQ3SSNBFXFNWA6DPM74W6FH65NX665P3DMH6YCWVFOPZTJSYCQC
IHV7JHD4E67NEGLZEO3FPQGJPJF3IAV6QV5A63FPG4SU2VRFV47QC
VJDLV4PF2ZJ46NERO4LZUX5JE2CD5XBOBQCYYPTFWTHLUEYDUOYAC
22ZPAVDZLX4R66AODFVA56HH4T3XU62UUON6LYZG3GGTXCTD3YVAC
QKV56RZTWOX64VLWW52R2DEUM3HGGZNLRAJ2ZV2BHW5K422OPNJQC
LDWVYZF4CGEO6NTBTHSHSAVLEPKZS2NY5RYXN64UOYGJW5FQ523AC
627CM2ZOKVBMPVPBYGWBWWPT2FBMVRRH2VDGPT6Z5XCVJ5R4YQWQC
22YVHM74WBJNJE4PA5CBEUTDWM6FAGGGILI26A4LXAURX55TNRKAC
W45PMU4HNPSAMMEBJ4XH4MTHLPVIASZT4FXTBPID5LFXKIMNUBKAC
2WRXQTGYDBLV46WRNVIUKGNA5QS563XZNNW3N2L6PVOCHIP2YGHQC
B7MSPF6X2RLGWN4M6ZZF3WSOPKGYPTTD7LIJVST7DXN27DG6JHNAC
ZJLJGSB2XSBQU42OFQMXL3EG4CXAQGOYAU6YTV2SAWZEJIPFH2CAC
KLE4PF466VJJ56WVBMTFDS3B4KHVV5VNSKJT6DQN6BRH5NLSPNOQC
E5JKWMBVQQGVSCAX4UOGHI6QW5RFOX6PJB77LHL3UI2NJ427BFFQC
NLJQ6T7MS45B3BP7QUC6QKTKTEHL6Y6GYRQPBJIUB65EF5N5XGTAC
NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC
FQDZEDPB7ATGGA5QFFGOLGTPGNY6LMU7KQU7RMTRY2RUOQSCGQ2AC
3UKFCWWS5BLFQWZRB5FUA46CE2XGX5VRCEWC3K3XH5RCGQK64N2AC
3XZOL3FFQZITUJIGDD6B6V6ZYMBN524JKNN6ZPJAXEC7RY433I3QC
JRTQYLX2MPF4LAIM3VRTWWOMRHTUSWLNXHTJMQZ62UCOPWFOEQFQC
2YSMM7QMFZOPD5NXAD2OAMDJEY5LOZO4NCYBC7UCQVANKINJRNBAC
UZ6N6HOUPGVSPC5NQROEEDWMEGJA5XUWUY2AKH5QG65AZ25PVXDAC
TLA5UN6LZPXGKERI27EFY4HKIIU3VU5Y7ZU54WXL6ANBUV2VOTMQC
AOLWOUIFBQDQTCMSVB7N7GAKFUY5J5LH7CJZAY3HEY3WEUSLADZAC
45EMD3KLQPMERNMIKU5G76H6556XOMIW352TSBP7VLWJX2YYGS7AC
TZ55IZNANEJO2WDTKYWVLY2W2VV6BR7WKIN7XLNISAMMFT6LG2WQC
BTO5WE4OEK64DZQVNYLOESM74KKQNE7KSNMQVF5UDB26OBKP7ORQC
PRG7UT7G56GT4W3FQ3KG5JRPGMKKJBFDLVHDLYFQK6IZW25JQLBQC
YYHCM4CUN6G5PFWPGOYMDYX4P3SGNYUT5SZK5AUWUL2G7RULQJDAC
FIYBXLWALQINNQTHG2KNDUUTAQAZRDDLXW2XOVSKDKBADJ3XCJ4AC
UEI5JAVCMN7Y2SACTEZPZSNFJWOJTC55G24Q6LKQCT4XNDH5ZQIAC
KKNUX66ORZWWQH4ARKCHPHNDOYCI65STE3A27LKA3FWUKIX7MAXQC
YMKHC3DZYD4GAQRPZHOZ6RPPNX7ZIEMHBZJ4OKF7HJEHO4SQR7LAC
OMAUFQNBWGX4FDABHQCVPGDYRVKMDASGQJVRH7AOPPEMHAP2LQSQC
HZK3YN3SAISTDS5JI4COBYFG7YB4ABDVENXWZZEYLFA2LDI232VAC
VTJOYDSSNQZOK23N65C64NUGDTGPL6QZWGCALRQHQDQXAPYBRKMAC
ANBVGN4RZOMY5LI4QSHOV2477FN55H353ZYLSVCPTXC7AWWSQZBAC
KSCU43RIVSEIHTN6BRAKXENI66L3IRDZQHUBT5VS4NJBBCQQPHUQC
34C4U6EQWERY75GZJKUCM5KVGU2OUICETS5LGZF6RMKMZT4R5SQAC
ZVK4J5HTKFNOOIVCI62ZWEYGXEE5TYJ65DLYYZAZWTADFSXE62ZAC
MSQI3TH6T62JAXQGLL52QZCWAMC372TGB6ZNNRDGUGMJKBNNV2VAC
7J3H7JY6AUO2UHNF6DAHDZI4O33JMTUUTYTPRM3CKNPUOF2RQOGAC
KCHX2F3JFEWOZT3WMJVZAAQUU2QSZ5Q7RDCD7WUJ7VE65J52JFUQC
OY7KHQPESOUHPBXRZ2JSNUKPAC7DCDY73TAUHCSJG5V6TPAHBVYQC
XPTDBTPHD5CIPPOHIPMI7HBOTQIGGJPYKDOJCHWG2ZTI7SLUHTEAC
3X2MBNOJZ24SJT2NIBQTLDOXHM3RTYRKZFZZY3MHZQGTLGTRAKUAC
26HVORSNY267C3BZQ4RZD5NINMTJPDOAXBVPJX5HWMTOEINNBY3QC
ASLW3Z5PAVZSWJEMMMVZT226P44EKSAD47QS72JIFJESAI3RPN3AC
HXIETRYLTZYNJR4QHS5ZN4ZZR76SLRIXTEJQQJGI33XMXHO6MNBAC
MFONX2CQ4V7HA5NSD6P5NDDBXYDSKIOCYUKRZXJ4ZER2OKJWT2HQC
LJK4ZQATLSB4MKZG3ARZX5V6RFGTN3NLCN6GTCUGJQKU26SOXMUAC
TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC
C3OUSRCHDUOJ6ELVDX6YWMQQVXDJLNEXTXWCDDAYWTKNPFPNSONAC
CHFE5WXJ3TY3K2PL3U5FXCQMQUWXGJH3XZ4JFLREUDXQIRSGZ2TQC
JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC
YCL3W2PFE6ILTGBFODCSXNPDIA46KVSZP2TI7HDMYAOEJT65RIEAC
if (map_radius > 50 && map_radius != 1000)
map_radius = 50;
else if (map_radius < 5)
map_radius = 5;
const bool wizard_map = (you.wizard && map_radius == 1000);
if (!wizard_map)
{
if (map_radius > 50)
map_radius = 50;
else if (map_radius < 5)
map_radius = 5;
}
topleft.set( x_border_dist, y_border_dist );
bottomright.set( GXM - x_border_dist - 1, GYM - y_border_dist - 1 );
topleft.set(x_border_dist, y_border_dist);
bottomright.set(GXM - x_border_dist - 1, GYM - y_border_dist - 1);
// Stairs must exist by this point. Some items and monsters
// already exist.
// Stairs must exist by this point (except in Shoals where they are
// yet to be placed). Some items and monsters already exist.
// change pre-rock to rock, and pre-floor to floor
_replace_area(0,0,GXM-1,GYM-1, DNGN_BUILDER_SPECIAL_WALL, DNGN_ROCK_WALL);
_replace_area(0,0,GXM-1,GYM-1, DNGN_BUILDER_SPECIAL_FLOOR, DNGN_FLOOR);
// Change pre-rock to rock, and pre-floor to floor.
_replace_area(0, 0, GXM-1, GYM-1, DNGN_BUILDER_SPECIAL_WALL,
DNGN_ROCK_WALL);
_replace_area(0, 0, GXM-1, GYM-1, DNGN_BUILDER_SPECIAL_FLOOR, DNGN_FLOOR);
for (int i = std::max(x-a,margin); i < std::min(x+a,GXM-margin); ++i)
for (int j = std::max(y-b,margin); j < std::min(y+b, GYM-margin); ++j)
for (int i = std::max(x-a, margin); i < std::min(x+a, GXM-margin); ++i)
for (int j = std::max(y-b, margin); j < std::min(y+b, GYM-margin); ++j)
bool centre_ok;
// Make sure an island fits into the map without getting
// cut off on the edges, i.e. leave margin + radius space
// at each side.
const int rnd_x_size = GXM - 2*(margin+a) - 1;
const int rnd_y_size = GYM - 2*(margin+b) - 1;
ASSERT(rnd_x_size > 0);
ASSERT(rnd_y_size > 0);
bool centre_ok = false;
int tries = 1000;
int xb = random2(GXM - 2 * margin - 10) + margin + 2;
int yb = random2(GYM - 2 * margin - 10) + margin + 2;
int xb = margin + 2 + random2(GXM - 2 * margin - xsize - 2);
int yb = margin + 2 + random2(GYM - 2 * margin - ysize - 2);
_replace_area(bx1,by1,bx2,by1,DNGN_FLOOR,wall_type);
_replace_area(bx1,by2,bx2,by2,DNGN_FLOOR,wall_type);
_replace_area(bx1, by1, bx2, by1, DNGN_FLOOR, wall_type);
_replace_area(bx1, by2, bx2, by2, DNGN_FLOOR, wall_type);
_replace_area(bx1,by1+1,bx1,by2-1,DNGN_FLOOR,wall_type);
_replace_area(bx2,by1+1,bx2,by2-1,DNGN_FLOOR,wall_type);
_replace_area(bx1, by1+1, bx1, by2-1, DNGN_FLOOR, wall_type);
_replace_area(bx2, by1+1, bx2, by2-1, DNGN_FLOOR, wall_type);
monsters& mon = menv[you.mesmerised_by[i]];
int olddist = grid_distance(you.pos(), mon.pos());
int newdist = grid_distance(targ, mon.pos());
monsters& mon = menv[you.mesmerised_by[i]];
int olddist = grid_distance(you.pos(), mon.pos());
int newdist = grid_distance(targ, mon.pos());
if (olddist < newdist)
{
beholder = &mon;
break;
}
if (olddist < newdist)
{
beholder = &mon;
break;
}
mprf( MSGCH_DIAGNOSTICS, "Number of monsters present: %d", j);
mprf( MSGCH_DIAGNOSTICS, "Number of clouds present: %d", env.cloud_no);
mprf(MSGCH_DIAGNOSTICS, "Number of monsters present: %d", j);
mprf(MSGCH_DIAGNOSTICS, "Number of clouds present: %d", env.cloud_no);