around dungeon level 7.
Rename ROCK_STAIRS to ESCAPE_HATCH, as well as the corresponding function, since I think that the escape hatches are such a cool concept that we won't be going back, and the current coding name is a bit confusing.
Clean up dungeon.cc. I'll probably have to add stuff into our new conventions file as I've been making up a lot of new rules in trying to make the code more readable. (Rules concerning nested brackets, and function indentation, etc.)
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3927 c06c8d41-db1a-0410-9941-cceddc491573
45EMD3KLQPMERNMIKU5G76H6556XOMIW352TSBP7VLWJX2YYGS7AC VMATCICB4F6UPNDTZ4AA6XT6JD33HG5T5Z33GLPPYEGI5HIJ6UBQC O4XZM4P4VW53I4TZMQWCQ7K4SOEL2YHKDWXWXCDPLZ6LJNKZDD4AC FZAQNANLZOQHX675KR5GE2ZAVNT4AWX4TWEUJXXEZMOXWQ5FDHOAC UHDT225XZQLYFE7S4LZECR5C2QSI6PNDTP2WWLCIGHAJ3YNFHPXQC NXLDJFG7FPL7ZADEBSY3DLDIBLZ7I4JV3NPRGFQYPF25BXWIK6CQC AF7VAKCSGEYCXRTITS2WAW7VTM3OEQOECMNXR6YMOQLBCVZZFAVQC 7Z37EO2GGM2DAS65DWEI5VVPRPXMGH6XHB6IADG3Q6KOITSV25MAC GRDCK5F6ZPTDLFOPBYBUELWHGSVA2RIHSSIGGSBQOAFV6TJLL5VQC E5JKWMBVQQGVSCAX4UOGHI6QW5RFOX6PJB77LHL3UI2NJ427BFFQC ZQ62K2WXC4EJUO7VNJ3VHPGU2LAMSTKYSL62ENYB2CGW2BEI6KBAC TPZWAV3USKO7RX4IGHLZKVPRN36K33PJPSZYL6FZMX4XBHTYOQYAC 77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC 2TECJQA3PK7OYSSTOWZSQFWMTATJRHHA6JV3IGRHFGS3R7U27RZAC R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC UZ6N6HOUPGVSPC5NQROEEDWMEGJA5XUWUY2AKH5QG65AZ25PVXDAC U3KGUJJQWQORJIIFH3ADVNIEEX5HOX6KEOXO7DJSL7L3Z6GG3PAQC ESWIM76FGJL4QFLSHU6AC4D74PT7OPLQ7ZCJYWLZS5UCBAJDXYHAC RC6L3CIBLJEH4GWRFD7UQNGI6PZT74FRUVOYHSAN2XCC74NZUASQC SCWXQW5H65OXUP2MEJ2MEEAVPSRJDT3RQGKYCMKVTORS2334PQSQC TFZ4TER7O2Z4FOGF2RCPEPYIHBTUA4LG3ECXLR7XGLCC6GO6OOTAC SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC 4SUUJM2DQUEWHDG3UKJUDZABLHFVF2CFUX5GVAWKT7BBBGR2ISTQC 25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC AVCMVFA3MKCXHO6H44UK5KJNIHTGQV7UA7GYXM26VI6TXXU5ZN6QC X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC WDEFQ6YABDQIGJXW5KT3OGR3EO6FZHXZELIRVIXQ4XDYTVOV5V6AC ILOED4VB4I6VPAUTR75ZWX6MXDYXB5DO2EDK2UH67O3HNKWV23RQC 475LL4U4ND6PTNV4XKC7WQAOJC7RF2VCCVX3DRILP2PKIBFYWE6QC 7KWDC7XFNMBLSUO2HISIROBINZBX5T67LJEEXTAORXW2YZ7VWFGAC F4WAQJD7KLOXHZOTOT6WG26PVIDHYNVS3AV6ZNXGAS7PDR4HBWQAC DLVXY6DBP65B3RGWW4PNBEBPBNHNM3LSRYD36F3XDARFY7SPSJYAC XVX7AVLLYZJIJUZA2LZ6T57PHULWPDRZOHELDF4JHZ35EMINFFZQC I2B33Z7NZGC33AMDSSK446AZZYWKPHWLAGULVHKKZU4MVB4BNJOAC AFE345BJ7IX2YYYX3I5I6RYLXNWJCFE4WMH6F5JMIR6X7WUP75CAC AUXHSGS4EFOPZ6TVZYWNVOUDO7NYKUKE3HBKGQQWTALSVFOE3HAAC TLA5UN6LZPXGKERI27EFY4HKIIU3VU5Y7ZU54WXL6ANBUV2VOTMQC SW3RLYFNRT3IJBK6LYKHKP2J2YDU7SXQWAJZX7U6S7ICYW43OMNQC PJ7HBIWAV3H23LXGZAAD2QYJ7HMOFOIR5ZJ4U2UTHI766LOTRRWQC Z6Q7JVMFQ32SC7FRGOB7CE7JS2HEOPAO3B2VLU3YR3UCUDZFIPFQC A5YOVQMFZRMT6NK7YUQI632TWC3CFATXDNCSB7M33EEYB62SA3XAC TLO257LZSB6ZO36STDUEWJBO2LETXFKTFGXELA6Y4BZBVAEIIINAC 2WRXQTGYDBLV46WRNVIUKGNA5QS563XZNNW3N2L6PVOCHIP2YGHQC 2G55UEHQ7554OPNSZVTUCZTWSHIFKGT56QEGSYFKCTX547I4AL3AC 2YSMM7QMFZOPD5NXAD2OAMDJEY5LOZO4NCYBC7UCQVANKINJRNBAC AO3KHGKGSX2ZR24KJVIOTUY7EHYHMMI5W4HN3CAG4YGQHBOHLGDQC C22455VGUQOSUX2OORA32LROFQ7NNYDMD2ZDTTUZSAQLXK4AD6QAC ZJLJGSB2XSBQU42OFQMXL3EG4CXAQGOYAU6YTV2SAWZEJIPFH2CAC 5UVDIVD4NSXA52U4QMQIVST3GSZJ2A2YZK3RUEXKPM43YVQ7LI5AC 3PY3L3A4QRW3Z5Y7SHO4TMVOOP2VNCO27X2MX4DTOP2SADLBQUOAC KCHX2F3JFEWOZT3WMJVZAAQUU2QSZ5Q7RDCD7WUJ7VE65J52JFUQC 3XZOL3FFQZITUJIGDD6B6V6ZYMBN524JKNN6ZPJAXEC7RY433I3QC AOLWOUIFBQDQTCMSVB7N7GAKFUY5J5LH7CJZAY3HEY3WEUSLADZAC TZ55IZNANEJO2WDTKYWVLY2W2VV6BR7WKIN7XLNISAMMFT6LG2WQC BTO5WE4OEK64DZQVNYLOESM74KKQNE7KSNMQVF5UDB26OBKP7ORQC YYHCM4CUN6G5PFWPGOYMDYX4P3SGNYUT5SZK5AUWUL2G7RULQJDAC HZK3YN3SAISTDS5JI4COBYFG7YB4ABDVENXWZZEYLFA2LDI232VAC SWE3F3BLKHYMJEJLXNFH3MR2E6VDEYXJ6DL7QLPP47BJEKEUCAMAC IIK2W5J4NQWD3BVXPJDUCTONSF2ENXPSZBWMZCBC25RCTNMKSK6AC JNB3PBPBJHDUHH47ZICB25QENPTMLYK7CXC5BXRVWZ3J3ZZPKCUAC IE3INS4WUXZOBVXB5VWRBYPVPXADD2U2W5H3TBTOYNWJ3EGRSGQQC KKROXTUPBNEXXEUUDJNADATK3BCQPSQWFZ6L4VTKBPTYXJLYUHDQC XY77S75KH5KV54MZVAPMUC64TVRE2QM2KVJAAGJGCIBGQEC5GUTQC 56C44YMFHZ62GXAAOLYSLLGBVGRWXB53W2VI37Q26ZECEK2XG5SQC ZJU5Z2WDMI7HN4XJ3NVTVRHIZO2CGFUQ2FSKIRJVTQG47XHNCZFQC FSD7GIK3YLZXWLEH37BU6KV3IUCFGXPQL6IZ7H65YWNRBEKDBX5AC CREW3VTGN2BV622ZXHCPHUEZWBAGEQMNUELDLTHLEKG4VBXGMRPQC 4RFKVDJKTCRBZU6WPJ2E5OVI5IRPY3UTRPOBLC5QHY4CQJJTLZKQC JT672SIJK4BOIUAGL2WQ6NR2NF4PSWP3BT6Q4HMNRF25UN6JQ2MAC LDGIQP4A5BWVFQWQ2MGZRM5OY45ZXNNARH4WZPLUTBJVS4CVHISQC L4RYVF46EQKMVOEADGRG4WMPVTQ6NNFGYMU4SHAH6XJIKWVHT77QC MSQI3TH6T62JAXQGLL52QZCWAMC372TGB6ZNNRDGUGMJKBNNV2VAC KNBQ2Y4XXAJGSHC4FU2AHCRGLLHETYA2MU55TDSHV2TIMTOX3QZQC OY7KHQPESOUHPBXRZ2JSNUKPAC7DCDY73TAUHCSJG5V6TPAHBVYQC 7J3H7JY6AUO2UHNF6DAHDZI4O33JMTUUTYTPRM3CKNPUOF2RQOGAC A3CO4KBFTFU3ZSHWRY2OPPX3MMTFV7OUCZGL7Q4Y2FU7JO4AP7MAC W5WCC5J7PL6IXZ5LPSUWGY3IVQBCTK3FKOD5ADYRWWH2N425NEAAC EH4VJW3I5Y4V6DT3YMLNDA3NW2DEAV4LRE4T5IEXAVB4WB3JJMGAC APGCKU4AFOV7Z7XIEO5A27H4IFUGDU227I3Z7OIRROYSLOFFBJ5AC WMHFDQKUDCUGM3R245LLVZ5NNEZSCXFDSTNMVS2O5EFUHHO7HU3AC 3C2VE43SHCSBY4LTRTFYFLIPRWFUN6DXU6D34QVWDQTSNRBUFG7AC ILN2K6ASDZSMEHOPJ22IZLZJUO6DDGZTKAKXM3YXG6JZZHJNLX4AC OYTCBRC7LE44EUVRZVYTOOVKQWJ6P6YE3FXTOGUTNKEMLNWPHKSQC NTFA3ZSJFTVLTTKI6ONJE33PGGDW36IVGWMO6GXRA4ZG57TOWNFAC JDM27QE4HR52AYFSQE763BFF57ANOTF5MXKMO377PP5EXMN7SAOAC UH3CJQMQ3NPICXD34NTCTUZJWOCEF4P5XEGXFLLNDDFLZK7QPUBQC KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC 34C4U6EQWERY75GZJKUCM5KVGU2OUICETS5LGZF6RMKMZT4R5SQAC 7YSKYUNV34XIWRTJUHJV4QMQRTXXYDIXM5AZSPSDPAYDW4B4PU6QC NDTQUANX3GZ6HZP5FONYNJUYPD3R2P6SGRC3ICKJ7ZWF3KO23LTAC 7Y5HSDFKA5TPLS2TWTRFMQVX6UXUDHXU5MUMXQSDFAIY4THQ3BIQC QZERCVTY5BISIKSDH6WUXGZPIBAF4KUCGSZEEGMGBCORNUXT4HXAC R5JKQLY5QE6UBG3RH3Y5ZRSX6H35CHYI2HYNDZF6ZHVRULUORXBQC ITUTGFJ56GR7FWMC5Y7XKUJJ4Z35I6BMOHCPCW3W5MKDQGVOGM4AC SYTQFVPZKDRTGKBV7SQFULQKY4V7NBBCEBQF2KF5LZEP2VVYNUFQC XCEZ7OA2INNPSYNAB5U6JB7XNDAD5BKU26YLFPPZ3SEESFZKADQAC 7UQJTYJTHTDW55ZUKG4TINZTNALGPK5CB7UB7PJ2Y2SKQ5XOYP5AC 4PBRMB7TK2TXL7VSDKMUQMT4QFK3SGRU4TUVMEM7V2VS7KKKILAQC BW3XFNOS6LDAQLHOZ6RXARCMKCY5JVLVDSXDSSAX4DSYM3FANQBAC X5OHFTHRXTI5KHFIYFJ6DB3W5MY3JUJKNTL4HF37MKABYNCOBOZAC R6XS2HO5QX2FJUGL5UQQRNETKCMYWTUFPHPPS5SYWK3OQA4UDUQQC return (feature == DNGN_SHALLOW_WATER || feature == DNGN_CLOSED_DOOR? 2 :grid_is_trap(feature) ? 3 : 1);
if (feature == DNGN_SHALLOW_WATER || feature == DNGN_CLOSED_DOOR)return 2;else if (grid_is_trap(feature))return 3;return 1;
"stone_stairs_down_iii", "rock_stairs_down", "stone_stairs_up_i","stone_stairs_up_ii", "stone_stairs_up_iii", "rock_stairs_up", "",
"stone_stairs_down_iii", "escape_hatch_down", "stone_stairs_up_i","stone_stairs_up_ii", "stone_stairs_up_iii", "escape_hatch_up", "",
static void dgn_fill_zone(const coord_def &c, int zone, point_record &prec,bool (*passable)(const coord_def &) = dgn_square_is_passable)
static void dgn_fill_zone( const coord_def &c, int zone, point_record &prec,bool (*passable)(const coord_def &)= dgn_square_is_passable)
} while ( grd[x][y] != DNGN_FLOOR );grd[x][y] =static_cast<dungeon_feature_type>(DNGN_STONE_STAIRS_DOWN_I + i );
}while ( grd[x][y] != DNGN_FLOOR );grd[x][y]= static_cast<dungeon_feature_type>(DNGN_STONE_STAIRS_DOWN_I + i);
} while ( grd[x][y] != DNGN_FLOOR );grd[x][y] =static_cast<dungeon_feature_type>(DNGN_STONE_STAIRS_UP_I + i);
}while ( grd[x][y] != DNGN_FLOOR );grd[x][y]= static_cast<dungeon_feature_type>(DNGN_STONE_STAIRS_UP_I + i);
static bool _shaft_is_in_corridor(int x, int y){// first check horizontal neighbouring squaresif ((!inside_level_bounds(x-1, y) || grd[x-1][y] < DNGN_SHALLOW_WATER)&& (!inside_level_bounds(x+1, y) || grd[x+1][y] < DNGN_SHALLOW_WATER)){return true;}// now check vertical neighbouring squaresif ((!inside_level_bounds(x, y-1) || grd[x][y-1] < DNGN_SHALLOW_WATER)&& (!inside_level_bounds(x, y+1) || grd[x][y+1] < DNGN_SHALLOW_WATER)){return true;}// no corridor foundreturn false;}
if (trap_type == TRAP_SHAFT && level_number <= 7){// Disallow shaft construction in corridors!if ( _shaft_is_in_corridor(env.trap[i].x, env.trap[i].y) ){// choose again!trap_type = random_trap_for_place(level_number);// If we get shaft a second time, turn it into an alarm trap.if (trap_type == TRAP_SHAFT)trap_type = TRAP_ALARM;}}
static void fill_monster_pit( spec_room &sr,FixedVector<pit_mons_def, MAX_PIT_MONSTERS> &pit_list,int density, int lord_type, int lordx, int lordy )
static void fill_monster_pit( spec_room &sr, FixedVector<pit_mons_def,MAX_PIT_MONSTERS> &pit_list, int density,int lord_type, int lordx, int lordy )
// used for placement of vaultsstatic bool _may_overwrite_feature(const dungeon_feature_type grid,bool water_ok, bool rock_ok = true){// floor, and closed/secret doors may always be overwrittenif (grid == DNGN_FLOOR|| grid == DNGN_CLOSED_DOOR || grid == DNGN_SECRET_DOOR){return (true);}if (grid == DNGN_ROCK_WALL)return (rock_ok);// watery grids may be overwritten if water_ok == trueif (grid == DNGN_DEEP_WATER || grid == DNGN_SHALLOW_WATER)return (water_ok);return (false);}// used for placement of rivers/lakesstatic bool _may_overwrite_pos(const int i, const int j){const dungeon_feature_type grid = grd[i][j];// Don't overwrite any stairs or branch entrances.if (grid >= DNGN_ENTER_SHOP && grid <= DNGN_EXIT_PORTAL_VAULT|| grid == DNGN_EXIT_HELL){return (false);}
if ((dfeat != DNGN_FLOOR&& dfeat != DNGN_ROCK_WALL&& dfeat != DNGN_CLOSED_DOOR&& dfeat != DNGN_SECRET_DOOR&& (!water_ok|| (dfeat != DNGN_DEEP_WATER&& dfeat != DNGN_SHALLOW_WATER)))|| igrd[vx][vy] != NON_ITEM|| mgrd[vx][vy] != NON_MONSTER){
// Don't overwrite features other than floor, rock wall, doors,// nor water, if !water_ok.if (_may_overwrite_feature(dfeat, water_ok))return (false);// Don't overwrite items or monsters, either!if (igrd[vx][vy] != NON_ITEM || mgrd[vx][vy] != NON_MONSTER)
if (grd[vx][vy] == DNGN_FLOOR|| grd[vx][vy] == DNGN_CLOSED_DOOR|| grd[vx][vy] == DNGN_SECRET_DOOR|| (water_ok&& (grd[vx][vy] == DNGN_SHALLOW_WATER ||grd[vx][vy] == DNGN_DEEP_WATER)))
// Overwrite floor, doors or water, but not rock walls.if (_may_overwrite_feature(grd[vx][vy], water_ok, false))
join_the_dots_rigorous(myroom.random_edge_point(),rom[which_room - 1].random_edge_point(),MMT_VAULT );
join_the_dots_rigorous( myroom.random_edge_point(),rom[which_room - 1].random_edge_point(),MMT_VAULT );
static void dig_vault_loose(vault_placement &place,std::vector<coord_def> &targets)
static void dig_vault_loose( vault_placement &place,std::vector<coord_def> &targets )
did_map =build_minivaults(you.your_level, map, generating_level, clobber,make_no_exits, where);
{did_map = build_minivaults(you.your_level, map, generating_level,clobber, make_no_exits, where);}
const dungeon_feature_type stair =static_cast<dungeon_feature_type>(j + ((i == 0) ? DNGN_STONE_STAIRS_DOWN_I: DNGN_STONE_STAIRS_UP_I));
const dungeon_feature_type stair= static_cast<dungeon_feature_type>(j + ((i == 0) ? DNGN_STONE_STAIRS_DOWN_I: DNGN_STONE_STAIRS_UP_I));
const int item_made =items( spec.allow_uniques, spec.base_type, spec.sub_type, true,item_level, spec.race, 0, spec.ego );
const int item_made= items( spec.allow_uniques, spec.base_type, spec.sub_type, true,item_level, spec.race, 0, spec.ego );
const bool placed =place_monster( mindex, mid, monster_level,m_generate_awake ? BEH_WANDER : BEH_SLEEP,MHITNOT, true, vx, vy, false,PROX_ANYWHERE, mspec.monnum);
const bool placed= place_monster( mindex, mid, monster_level,m_generate_awake ? BEH_WANDER : BEH_SLEEP,MHITNOT, true, vx, vy, false,PROX_ANYWHERE, mspec.monnum);
static bool dgn_place_monster(const vault_placement &place,mons_spec &mspec,int monster_level,int vx, int vy)
static bool dgn_place_monster( const vault_placement &place, mons_spec &mspec,int monster_level, int vx, int vy)
const bool generate_awake =mspec.generate_awake || place.map.has_tag("generate_awake");return dgn_place_monster(mspec, monster_level, vx, vy,generate_awake);
const bool generate_awake= mspec.generate_awake || place.map.has_tag("generate_awake");return dgn_place_monster(mspec, monster_level, vx, vy, generate_awake);
static bool dgn_place_one_monster(const vault_placement &place,mons_list &mons,int monster_level,int vx, int vy)
static bool dgn_place_one_monster( const vault_placement &place,mons_list &mons, int monster_level,int vx, int vy)
const trap_type trap =f.trap == TRAP_INDEPTH? random_trap_for_place(level_number): static_cast<trap_type>(f.trap);
const trap_type trap= (f.trap == TRAP_INDEPTH) ? random_trap_for_place(level_number): static_cast<trap_type>(f.trap);
case 'R':case '$':case '%':case '*':case '|':case 'P': // possible runecase 'O': // definite runecase 'Z': // definite orb
case 'R':case '$':case '%':case '*':case '|':case 'P': // possible runecase 'O': // definite runecase 'Z': // definite orb
which_depth = ((vgrid == '|'|| vgrid == 'P'|| vgrid == 'O'|| vgrid == 'Z') ? MAKE_GOOD_ITEM :(vgrid == '*') ? 5 + (level_number * 2): level_number);
which_depth = level_number;if (vgrid == '|' || vgrid == 'P' || vgrid == 'O' || vgrid == 'Z')which_depth = MAKE_GOOD_ITEM;else if (vgrid == '*')which_depth = 5 + (level_number * 2);
monster_level = ((vgrid == '8') ? (4 + (level_number * 2)) :(vgrid == '9') ? (5 + level_number) : level_number);
monster_level = level_number;if (vgrid == '8')monster_level = 4 + (level_number * 2);else if (vgrid == '9')monster_level = 5 + level_number;
static void replace_area(int sx, int sy, int ex, int ey, dungeon_feature_type replace,dungeon_feature_type feature, unsigned mapmask)
static void replace_area( int sx, int sy, int ex, int ey,dungeon_feature_type replace,dungeon_feature_type feature, unsigned mapmask)
static bool join_the_dots(const coord_def &from,const coord_def &to,unsigned mapmask,bool early_exit)
static bool join_the_dots( const coord_def &from, const coord_def &to,unsigned mapmask, bool early_exit)
place_specific_stair(static_cast<dungeon_feature_type>(j + ((i==0) ? DNGN_STONE_STAIRS_DOWN_I: DNGN_STONE_STAIRS_UP_I) ) );
place_specific_stair( static_cast<dungeon_feature_type>(j + ((i==0) ? DNGN_STONE_STAIRS_DOWN_I: DNGN_STONE_STAIRS_UP_I)) );
place_specific_stair(static_cast<dungeon_feature_type>(j + ((i==0) ? DNGN_STONE_STAIRS_DOWN_I: DNGN_STONE_STAIRS_UP_I) ) );
place_specific_stair( static_cast<dungeon_feature_type>(j + ((i==0) ? DNGN_STONE_STAIRS_DOWN_I: DNGN_STONE_STAIRS_UP_I)) );
(temp_rand == 1 || temp_rand == 10) ? OBJ_ARMOUR :(temp_rand == 2) ? OBJ_MISSILES :(temp_rand == 3) ? OBJ_WANDS :(temp_rand == 4) ? OBJ_MISCELLANY :(temp_rand == 5) ? OBJ_SCROLLS :(temp_rand == 6) ? OBJ_JEWELLERY :(temp_rand == 7) ? OBJ_BOOKS/* (temp_rand == 8) */ : OBJ_STAVES);
(temp_rand == 1 || temp_rand == 10) ? OBJ_ARMOUR :(temp_rand == 2) ? OBJ_MISSILES :(temp_rand == 3) ? OBJ_WANDS :(temp_rand == 4) ? OBJ_MISCELLANY :(temp_rand == 5) ? OBJ_SCROLLS :(temp_rand == 6) ? OBJ_JEWELLERY :(temp_rand == 7) ? OBJ_BOOKS/* (temp_rand == 8) */ : OBJ_STAVES);
dgn_region lab =dgn_region::absolute( LABYRINTH_BORDER,LABYRINTH_BORDER,GXM - LABYRINTH_BORDER - 1,GYM - LABYRINTH_BORDER - 1 );
dgn_region lab = dgn_region::absolute( LABYRINTH_BORDER,LABYRINTH_BORDER,GXM - LABYRINTH_BORDER - 1,GYM - LABYRINTH_BORDER - 1 );
if ((grd[x-1][y] == DNGN_CLOSED_DOOR && is_wall(x-1,y-1) && is_wall(x-1,y+1))|| (grd[x+1][y] == DNGN_CLOSED_DOOR && is_wall(x+1,y-1) && is_wall(x+1,y+1))|| (grd[x][y-1] == DNGN_CLOSED_DOOR && is_wall(x-1,y-1) && is_wall(x+1,y-1))|| (grd[x][y+1] == DNGN_CLOSED_DOOR && is_wall(x-1,y+1) && is_wall(x+1,y+1)))
if (grd[x-1][y] == DNGN_CLOSED_DOOR && is_wall(x-1,y-1) && is_wall(x-1,y+1)|| grd[x+1][y] == DNGN_CLOSED_DOOR && is_wall(x+1,y-1) && is_wall(x+1,y+1)|| grd[x][y-1] == DNGN_CLOSED_DOOR && is_wall(x-1,y-1) && is_wall(x+1,y-1)|| grd[x][y+1] == DNGN_CLOSED_DOOR && is_wall(x-1,y+1) && is_wall(x+1,y+1))
place_specific_stair(static_cast<dungeon_feature_type>(j + ((i==0) ? DNGN_STONE_STAIRS_DOWN_I: DNGN_STONE_STAIRS_UP_I) ) );
place_specific_stair( static_cast<dungeon_feature_type>(j + ((i == 0) ? DNGN_STONE_STAIRS_DOWN_I: DNGN_STONE_STAIRS_UP_I)) );
place_specific_stair(static_cast<dungeon_feature_type>(j + ((i==0) ? DNGN_STONE_STAIRS_DOWN_I: DNGN_STONE_STAIRS_UP_I)));
place_specific_stair( static_cast<dungeon_feature_type>(j + ((i==0) ? DNGN_STONE_STAIRS_DOWN_I: DNGN_STONE_STAIRS_UP_I)) );
if (!one_chance_in(200)&& (grd[i][j] < DNGN_ENTER_SHOP|| grd[i][j] > DNGN_EXIT_PORTAL_VAULT)&& grd[i][j] != DNGN_EXIT_HELL // just to be safe&& mgrd[i][j] == NON_MONSTER&& igrd[i][j] == NON_ITEM)
if (!one_chance_in(200) && _may_overwrite_pos(i, j))
if (!one_chance_in(200)&& (grd[i][j] < DNGN_ENTER_SHOP|| grd[i][j] > DNGN_EXIT_PORTAL_VAULT)&& grd[i][j] != DNGN_EXIT_HELL // just to be safe&& mgrd[i][j] == NON_MONSTER&& igrd[i][j] == NON_ITEM){
if (!one_chance_in(200) && _may_overwrite_pos(i,j))
if (stair_to_find <= DNGN_ROCK_STAIRS_DOWN )good_stair =(looking_at >= DNGN_STONE_STAIRS_DOWN_I) &&(looking_at <= DNGN_ROCK_STAIRS_DOWN);
if (stair_to_find <= DNGN_ESCAPE_HATCH_DOWN ){good_stair = (looking_at >= DNGN_STONE_STAIRS_DOWN_I &&looking_at <= DNGN_ESCAPE_HATCH_DOWN);}
return random2(size.x + size.y) < size.x?coord_def( pos.x + random2(size.x),coinflip()? pos.y : pos.y + size.y - 1 ):coord_def( coinflip()? pos.x : pos.x + size.x - 1,pos.y + random2(size.y) );
return random2(size.x + size.y) < size.x ?coord_def( pos.x + random2(size.x),coinflip()? pos.y : pos.y + size.y - 1 ): coord_def( coinflip()? pos.x : pos.x + size.x - 1,pos.y + random2(size.y) );
stone_stairs_down_iii, rock_stairs_down, stone_stairs_up_i,stone_stairs_up_ii, stone_stairs_up_iii, rock_stairs_up, enter_dis,
stone_stairs_down_iii, escape_hatch_down, stone_stairs_up_i,stone_stairs_up_ii, stone_stairs_up_iii, escape_hatch_up, enter_dis,