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 squares
if ((!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 squares
if ((!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 found
return 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 vaults
static bool _may_overwrite_feature(const dungeon_feature_type grid,
bool water_ok, bool rock_ok = true)
{
// floor, and closed/secret doors may always be overwritten
if (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 == true
if (grid == DNGN_DEEP_WATER || grid == DNGN_SHALLOW_WATER)
return (water_ok);
return (false);
}
// used for placement of rivers/lakes
static 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 rune
case 'O': // definite rune
case 'Z': // definite orb
case 'R':
case '$':
case '%':
case '*':
case '|':
case 'P': // possible rune
case 'O': // definite rune
case '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,