#define MM_IGNOREWATER 0x00008 /* ignore water when positioning */
#define MM_ADJACENTOK \
0x00010 /* it is acceptable to use adjacent coordinates */
-#define MM_ANGRY 0x00020 /* monster is created angry */
+#define MM_ANGRY 0x00020 /* monster is created angry */
#define MM_NONAME 0x00040 /* monster is not christened */
-#define MM_EGD 0x00100 /* add egd structure */
-#define MM_EPRI 0x00200 /* add epri structure */
-#define MM_ESHK 0x00400 /* add eshk structure */
-#define MM_EMIN 0x00800 /* add emin structure */
-#define MM_EDOG 0x01000 /* add edog structure */
+#define MM_EGD 0x00100 /* add egd structure */
+#define MM_EPRI 0x00200 /* add epri structure */
+#define MM_ESHK 0x00400 /* add eshk structure */
+#define MM_EMIN 0x00800 /* add emin structure */
+#define MM_EDOG 0x01000 /* add edog structure */
+#define MM_ASLEEP 0x02000 /* monsters should be generated asleep */
/* flags for make_corpse() and mkcorpstat() */
#define CORPSTAT_NONE 0x00
STATIC_DCL int FDECL(align_shift, (struct permonst *));
STATIC_DCL boolean FDECL(mk_gen_ok, (int, int, int));
STATIC_DCL boolean FDECL(wrong_elem_type, (struct permonst *));
-STATIC_DCL void FDECL(m_initgrp, (struct monst *, int, int, int));
+STATIC_DCL void FDECL(m_initgrp, (struct monst *, int, int, int, int));
STATIC_DCL void FDECL(m_initthrow, (struct monst *, int, int));
STATIC_DCL void FDECL(m_initweap, (struct monst *));
STATIC_DCL void FDECL(m_initinv, (struct monst *));
STATIC_DCL boolean FDECL(makemon_rnd_goodpos, (struct monst *,
unsigned, coord *));
-#define m_initsgrp(mtmp, x, y) m_initgrp(mtmp, x, y, 3)
-#define m_initlgrp(mtmp, x, y) m_initgrp(mtmp, x, y, 10)
+#define m_initsgrp(mtmp, x, y, mmf) m_initgrp(mtmp, x, y, 3, mmf)
+#define m_initlgrp(mtmp, x, y, mmf) m_initgrp(mtmp, x, y, 10, mmf)
#define toostrong(monindx, lev) (mons[monindx].difficulty > lev)
#define tooweak(monindx, lev) (mons[monindx].difficulty < lev)
/* make a group just like mtmp */
STATIC_OVL void
-m_initgrp(mtmp, x, y, n)
-register struct monst *mtmp;
-register int x, y, n;
+m_initgrp(mtmp, x, y, n, mmflags)
+struct monst *mtmp;
+int x, y, n, mmflags;
{
coord mm;
register int cnt = rnd(n);
if (enexto(&mm, mm.x, mm.y, mtmp->data)) {
mon = makemon(mtmp->data, mm.x, mm.y, NO_MM_FLAGS);
if (mon) {
+ if (mmflags & MM_ASLEEP)
+ mon->msleeping = 1;
mon->mpeaceful = FALSE;
mon->mavenge = 0;
set_malign(mon);
newemin(mtmp);
if (mmflags & MM_EDOG)
newedog(mtmp);
-
+ if (mmflags & MM_ASLEEP)
+ mtmp->msleeping = 1;
mtmp->nmon = fmon;
fmon = mtmp;
mtmp->m_id = context.ident++;
set_malign(mtmp); /* having finished peaceful changes */
if (anymon) {
if ((ptr->geno & G_SGROUP) && rn2(2)) {
- m_initsgrp(mtmp, mtmp->mx, mtmp->my);
+ m_initsgrp(mtmp, mtmp->mx, mtmp->my, mmflags);
} else if (ptr->geno & G_LGROUP) {
if (rn2(3))
- m_initlgrp(mtmp, mtmp->mx, mtmp->my);
+ m_initlgrp(mtmp, mtmp->mx, mtmp->my, mmflags);
else
- m_initsgrp(mtmp, mtmp->mx, mtmp->my);
+ m_initsgrp(mtmp, mtmp->mx, mtmp->my, mmflags);
}
}