more "<mon> appears in a cloud of smoke"

Now that the appear message isn't limited to summoning by demon,
seeing "the Angel of <foo> appears in a cloud of smoke" seems
strange.  Angels weren't covered by the vapor/dust/&c change for
elementals.  Make angels appear in a flash of light.
This commit is contained in:
PatR
2021-06-21 17:47:51 -07:00
parent fa7980c585
commit a9134fd8b9
3 changed files with 31 additions and 18 deletions

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 extern.h $NHDT-Date: 1624322668 2021/06/22 00:44:28 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.984 $ */
/* NetHack 3.7 extern.h $NHDT-Date: 1624322857 2021/06/22 00:47:37 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.985 $ */
/* Copyright (c) Steve Creps, 1988. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1502,7 +1502,7 @@ extern boolean big_little_match(int, int);
extern const char *locomotion(const struct permonst *, const char *);
extern const char *stagger(const struct permonst *, const char *);
extern const char *on_fire(struct permonst *, struct attack *);
extern const char *msummon_environ(struct permonst *);
extern const char *msummon_environ(struct permonst *, const char **);
extern const struct permonst *raceptr(struct monst *);
extern boolean olfaction(struct permonst *);
unsigned long cvt_adtyp_to_mseenres(uchar);

View File

@@ -1,10 +1,18 @@
/* NetHack 3.7 minion.c $NHDT-Date: 1624232728 2021/06/20 23:45:28 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.59 $ */
/* NetHack 3.7 minion.c $NHDT-Date: 1624322864 2021/06/22 00:47:44 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.60 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2008. */
/* NetHack may be freely redistributed. See license for details. */
#include "hack.h"
/* used to pick among the four basic elementals without worrying whether
they've been reordered (difficulty reassessment?) or any new ones have
been introduced (hybrid types added to 'E'-class?) */
static const int elementals[4] = {
PM_AIR_ELEMENTAL, PM_FIRE_ELEMENTAL,
PM_EARTH_ELEMENTAL, PM_WATER_ELEMENTAL
};
void
newemin(struct monst *mtmp)
{
@@ -49,10 +57,6 @@ monster_census(boolean spotted) /* seen|sensed vs all */
int
msummon(struct monst *mon)
{
static const int elementals[4] = {
PM_AIR_ELEMENTAL, PM_FIRE_ELEMENTAL,
PM_EARTH_ELEMENTAL, PM_WATER_ELEMENTAL
};
struct permonst *ptr;
int dtype = NON_PM, cnt = 0, result = 0, census;
aligntyp atyp;
@@ -119,13 +123,13 @@ msummon(struct monst *mon)
return 0;
/* sanity checks */
if (cnt > 1 && (mons[dtype].geno & G_UNIQ))
if (cnt > 1 && (mons[dtype].geno & G_UNIQ) != 0)
cnt = 1;
/*
* If this daemon is unique and being re-summoned (the only way we
* could get this far with an extinct dtype), try another.
*/
if (g.mvitals[dtype].mvflags & G_GONE) {
if ((g.mvitals[dtype].mvflags & G_GONE) != 0) {
dtype = ndemon(atyp);
if (dtype == NON_PM)
return 0;
@@ -147,13 +151,14 @@ msummon(struct monst *mon)
or peaceful but different alignment */
EMIN(mtmp)->renegade =
(atyp != u.ualign.type) ^ !mtmp->mpeaceful;
/* TODO: set templit at new monster's spot and in one spot
radius around it to match forthcoming "flash of light"
instead of ordinary "cloud of smoke" */
}
if (cnt == 1 && canseemon(mtmp)) {
const char *what = msummon_environ(mtmp->data), /* "smoke" */
*cloud = !strcmpi(what, "sparks") ? "shower"
: !strcmpi(what, "flame") ? "burst"
: "cloud";
const char *cloud = 0,
*what = msummon_environ(mtmp->data, &cloud);
pline("%s appears in a %s of %s!", Amonnam(mtmp),
cloud, what);
@@ -180,7 +185,7 @@ summon_minion(aligntyp alignment, boolean talk)
mnum = lminion();
break;
case A_NEUTRAL:
mnum = PM_AIR_ELEMENTAL + rn2(4);
mnum = elementals[rn2(SIZE(elementals))];
break;
case A_CHAOTIC:
case A_NONE:

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 mondata.c $NHDT-Date: 1624232729 2021/06/20 23:45:29 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.97 $ */
/* NetHack 3.7 mondata.c $NHDT-Date: 1624322866 2021/06/22 00:47:46 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.98 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2011. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1212,11 +1212,13 @@ on_fire(struct permonst *mptr, struct attack *mattk)
/* similar to on_fire(); creature is summoned in a cloud of <something> */
const char *
msummon_environ(struct permonst *mptr)
msummon_environ(struct permonst *mptr, const char **cloud)
{
const char *what;
int mndx = (mptr->mlet != S_ANGEL) ? monsndx(mptr) : PM_ANGEL;
switch (monsndx(mptr)) {
*cloud = "cloud"; /* default is "cloud of <something>" */
switch (mndx) {
case PM_WATER_DEMON:
case PM_AIR_ELEMENTAL:
case PM_WATER_ELEMENTAL:
@@ -1228,6 +1230,7 @@ msummon_environ(struct permonst *mptr)
what = "steam";
break;
case PM_ENERGY_VORTEX:
*cloud = "shower"; /* "shower of" instead of "cloud of" */
what = "sparks";
break;
case PM_EARTH_ELEMENTAL:
@@ -1235,8 +1238,13 @@ msummon_environ(struct permonst *mptr)
what = "dust";
break;
case PM_FIRE_ELEMENTAL:
*cloud = "burst"; /* "burst of" instead of "cloud of" */
what = "flame";
break;
case PM_ANGEL: /* actually any 'A'-class */
*cloud = "flash"; /* "flash of" instead of "cloud of" */
what = "light";
break;
default:
what = "smoke";
break;
@@ -1254,7 +1262,7 @@ msummon_environ(struct permonst *mptr)
* We're assuming all insects can smell at a distance too.
*/
boolean
olfaction(struct permonst* mdat)
olfaction(struct permonst *mdat)
{
if (is_golem(mdat)
|| mdat->mlet == S_EYE /* spheres */