finding "something" posing as a statue while Blind should map_invisible()
adding more candles than required to total 7 to a candelabrum which
already had between 1 and 6 gave an ungrammatical message
+give correct message when a spellcasting monster summons other monsters
Platform- and/or Interface-Specific Fixes
/* ### minion.c ### */
-E void FDECL(msummon, (struct monst *));
+E int FDECL(msummon, (struct monst *));
E void FDECL(summon_minion, (ALIGNTYP_P,BOOLEAN_P));
E int FDECL(demon_talk, (struct monst *));
E long FDECL(bribe, (struct monst *));
-/* SCCS Id: @(#)mhitu.c 3.4 2004/11/11 */
+/* SCCS Id: @(#)mhitu.c 3.4 2004/12/20 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
&& mtmp->data != &mons[PM_BALROG]
&& mtmp->data != &mons[PM_SUCCUBUS]
&& mtmp->data != &mons[PM_INCUBUS])
- if(!mtmp->mcan && !rn2(13)) msummon(mtmp);
+ if (!mtmp->mcan && !rn2(13)) (void)msummon(mtmp);
/* Special lycanthrope handling code */
if((mtmp->cham == CHAM_ORDINARY) && is_were(mdat) && !range2) {
-/* SCCS Id: @(#)minion.c 3.4 2003/01/09 */
+/* SCCS Id: @(#)minion.c 3.4 2004/12/20 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
#include "emin.h"
#include "epri.h"
-void
+int
msummon(mon) /* mon summons a monster */
struct monst *mon;
{
- register struct permonst *ptr;
- register int dtype = NON_PM, cnt = 0;
+ struct permonst *ptr;
+ int dtype = NON_PM, cnt = 0, result = 0;
aligntyp atyp;
struct monst *mtmp;
cnt = (!rn2(4) && !is_lord(&mons[dtype])) ? 2 : 1;
}
- if (dtype == NON_PM) return;
+ if (dtype == NON_PM) return 0;
/* sanity checks */
if (cnt > 1 && (mons[dtype].geno & G_UNIQ)) cnt = 1;
*/
if (mvitals[dtype].mvflags & G_GONE) {
dtype = ndemon(atyp);
- if (dtype == NON_PM) return;
+ if (dtype == NON_PM) return 0;
}
while (cnt > 0) {
mtmp = makemon(&mons[dtype], u.ux, u.uy, NO_MM_FLAGS);
- if (mtmp && (dtype == PM_ANGEL)) {
- /* alignment should match the summoner */
- EPRI(mtmp)->shralign = atyp;
+ if (mtmp) {
+ result++;
+ /* an angel's alignment should match the summoner */
+ if (dtype == PM_ANGEL) EPRI(mtmp)->shralign = atyp;
}
cnt--;
}
+ return result;
}
void
-/* SCCS Id: @(#)wizard.c 3.4 2003/02/18 */
+/* SCCS Id: @(#)wizard.c 3.4 2004/12/20 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
{
register struct monst *mtmp;
register int i, j, tmp;
- int castalign = (mcast ? mcast->data->maligntyp : -1);
+ int castalign = (mcast ? sgn(mcast->data->maligntyp) : -1);
coord bypos;
- int count=0;
+ int count;
if(!rn2(10) && Inhell) {
- msummon((struct monst *) 0); /* summons like WoY */
- count++;
+ count = msummon((struct monst *) 0); /* summons like WoY */
} else {
+ count = 0;
tmp = (u.ulevel > 3) ? u.ulevel/3 : 1; /* just in case -- rph */
/* if we don't have a casting monster, the nasties appear around you */
bypos.x = u.ux;
} else /* GENOD? */
mtmp = makemon((struct permonst *)0,
bypos.x, bypos.y, NO_MM_FLAGS);
- if(mtmp && (mtmp->data->maligntyp == 0 ||
- sgn(mtmp->data->maligntyp) == sgn(castalign)) ) {
+ if (mtmp) {
count++;
- break;
+ if (mtmp->data->maligntyp == 0 ||
+ sgn(mtmp->data->maligntyp) == castalign)
+ break;
}
}
}