git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6395 c06c8d41-db1a-0410-9941-cceddc491573
5DIBLX3RXK752JKG2BQQM76GYEOMQ5E2YKTLROH3QQGHCVLAGRJQC NOQKVEEIB7PQCONY57XJOPF4NJA6X6C3IE35UQSIUG2KXVAG72WAC 2PZXX7DNNOL5X3TF2ID22AGDHLHUHBPSAXQJR6EWG5YAXRJCAYWAC 6C6NQCTGRI7CG4OURJ5KFHV5C6LI7AD36GPIECL7KY2IWREYDQXAC R2DQBWKIW7YUJB5SOQ7J274JIYRVX4H3ISFRPAL5RG2RVVP4G2KAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC MDFQRJ6QZNFUBVSFWLXUJ6EBXOU47T3CVDI2XKBGNNRF4DXDKESQC RBAGQ2PB7V5YAM5KSHSZR2E3MLKDSRVM5XYGI2TIXP5QMVBOQHDQC NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC GPEJOT73KMACP33IPAKFR5ROGHCOIP22VXZMQNYTGLEA2OSZUM2AC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC XAFFD52IHN6FWFR2TT5F2KCUS7HAVCBI5CWTFMKPQG77GGTGAHLAC AVCMVFA3MKCXHO6H44UK5KJNIHTGQV7UA7GYXM26VI6TXXU5ZN6QC F7Q5PX44SLPANIZXCY67TG2W5JTRVJMHGQW54VJLGB4XRH7R6JBQC SQDS2YBPOYDDDCW3GGARBZ2HQIUHCQKL7SSHKFQWDENOL5YNNVNQC CG4TL4AKSN4J7CMATZFJ5N7PSDCQXLS3QYX7PZ3K67KMMBT675OQC RX6575DZOHRUXQUZH34YZGPZJF4STUPLBQDIVTINA2L6LVCKRIGQC JD3FMKAAAUQZSNPGFLVX7F5H5SWGUSYOFZU4X5W4XYNV6HUKDBKAC }static bool _valid_monster_location(const mgen_data &mg,const coord_def &mg_pos){const int htype = (mons_class_is_zombified(mg.cls) ? mg.base_type: mg.cls);dungeon_feature_type grid_wanted =habitat2grid(mons_habitat_by_type(htype));if (!in_bounds(mg_pos))return (false);// Occupied?if (mgrd(mg_pos) != NON_MONSTER || mg_pos == you.pos())return (false);// Is the monster happy where we want to put it?if (!grid_compatible(grid_wanted, grd(mg_pos), true))return (false);if (mg.behaviour != BEH_FRIENDLY && is_sanctuary(mg_pos.x, mg_pos.y))return (false);// Don't generate monsters on top of teleport traps.// (How did they get there?)int trap = trap_at_xy(mg_pos.x, mg_pos.y);if (trap >= 0){if (!_can_place_on_trap(mg.cls, env.trap[trap].type))return (false);}return (true);}static bool _valid_monster_location(mgen_data &mg){return _valid_monster_location(mg, mg.pos);
// Don't generate monsters on top of teleport traps.// (How did they get there?)int trap = trap_at_xy(mg.pos.x, mg.pos.y);if (trap >= 0){if (!_can_place_on_trap(mg.cls, env.trap[trap].type))continue;}
if (!in_bounds(fpos))continue;// Occupied?if (mgrd(fpos) != NON_MONSTER || fpos == you.pos())continue;if (!grid_compatible(grid_wanted, grd(fpos), true))continue;if (mg.behaviour != BEH_FRIENDLY && is_sanctuary(fpos.x, fpos.y))continue;// Don't generate monsters on top of teleport traps.// (How do they get there?)int trap = trap_at_xy(fpos.x, fpos.y);if (trap >= 0 && !_can_place_on_trap(mg.cls, env.trap[trap].type))continue;// Cool.. passes all tests.break;
if (_valid_monster_location(mg, fpos))break;