RGM7NKVVYCZ653RAS5NFFI6ZJ46WL2CUOK2TY7ESRVXJX2ENQCMAC
QSE263YD32L7KR3FDLZ6E54AIVMC52C5AQSZPHRNURLZ26I6MJEQC
G7DNYFW745Q567EF3TPR2FCQ4ATPN236ON7X5TLYC7TEPZW3BAFAC
TK2DI6PDNMQWV3WGYEFTRNITLFJ6YXSEMKRDP3FIFGS4W4LSPSMQC
FIYBXLWALQINNQTHG2KNDUUTAQAZRDDLXW2XOVSKDKBADJ3XCJ4AC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
5DIBLX3RXK752JKG2BQQM76GYEOMQ5E2YKTLROH3QQGHCVLAGRJQC
O3HPZYTEN566YZRQ27OKFJOEOKZOJX3YOTDVYAKTO6T2H2IUNRFAC
MHI3OM6VJY6LZUD577O22XREHPOPMWDVR3UT2JWGFDAKD7SO6Y3QC
JFDTUUUT6AKIGPBKGYFC7HZKGQUZOMG7EUWU4QYKSDVXXPQBBFHAC
QW73U22SVPKFZ367CURWGZCUJZIG73MRKWE2EBRG535N4UUYKMNAC
TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC
R2DQBWKIW7YUJB5SOQ7J274JIYRVX4H3ISFRPAL5RG2RVVP4G2KAC
NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC
static bool _valid_monster_location(const mgen_data &mg,
const coord_def &mg_pos)
static bool _valid_monster_generation_location(
const mgen_data &mg,
const coord_def &mg_pos)
const int montype = (mons_class_is_zombified(mg.cls) ? mg.base_type
: mg.cls);
const dungeon_feature_type feat_preferred =
habitat2grid(mons_class_primary_habitat(montype));
const dungeon_feature_type feat_nonpreferred =
habitat2grid(mons_class_secondary_habitat(montype));
if (!in_bounds(mg_pos))
return (false);
// Occupied?
if (actor_at(mg_pos))
if (!in_bounds(mg_pos) || actor_at(mg_pos))
// Is the monster happy where we want to put it?
if (!feat_compatible(feat_preferred, grd(mg_pos))
&& (feat_nonpreferred == feat_preferred
|| !feat_compatible(feat_nonpreferred, grd(mg_pos))))
const int montype = (mons_class_is_zombified(mg.cls) ? mg.base_type
: mg.cls);
if (!monster_habitable_grid(montype, grd(mg_pos),
mons_class_flies(montype), false)
|| (mg.behaviour != BEH_FRIENDLY && is_sanctuary(mg_pos)))