still more "<mon> appears in a cloud of smoke"
For Angels who appear in a flash of light, temporarily light the spot where they arrive. If not previously visible, it will go back to dark and change the angel to the remembered, unseen monster glyph, usually before the player even notices. Add more monsters to msummon_environ() so that it has latent support for various light, fire, and lava creatures from mondata.h even though these extra ones, like previous vortices, don't get summoned by msummon().
This commit is contained in:
22
src/minion.c
22
src/minion.c
@@ -59,6 +59,7 @@ msummon(struct monst *mon)
|
||||
{
|
||||
struct permonst *ptr;
|
||||
int dtype = NON_PM, cnt = 0, result = 0, census;
|
||||
boolean xlight;
|
||||
aligntyp atyp;
|
||||
struct monst *mtmp;
|
||||
|
||||
@@ -138,6 +139,7 @@ msummon(struct monst *mon)
|
||||
/* some candidates can generate a group of monsters, so simple
|
||||
count of non-null makemon() result is not sufficient */
|
||||
census = monster_census(FALSE);
|
||||
xlight = FALSE;
|
||||
|
||||
while (cnt > 0) {
|
||||
mtmp = makemon(&mons[dtype], u.ux, u.uy, MM_EMIN);
|
||||
@@ -151,9 +153,16 @@ 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 (mtmp->data->mlet == S_ANGEL && !Blind) {
|
||||
/* for any 'A', 'cloud of smoke' will be 'flash of light';
|
||||
if more than one monster is being created, that message
|
||||
might be skipped for this monster but show 'mtmp' anyway */
|
||||
show_transient_light((struct obj *) 0, mtmp->mx, mtmp->my);
|
||||
xlight = TRUE;
|
||||
/* we don't do this for 'burst of flame' (fire elemental)
|
||||
because those monsters become their own light source */
|
||||
}
|
||||
|
||||
if (cnt == 1 && canseemon(mtmp)) {
|
||||
@@ -167,6 +176,13 @@ msummon(struct monst *mon)
|
||||
cnt--;
|
||||
}
|
||||
|
||||
if (xlight) {
|
||||
/* Note: if we forced --More-- here, the 'A's would be visible for
|
||||
long enough to be seen, but like with clairvoyance, some players
|
||||
would be annoyed at the disruption of having to acknowledge it */
|
||||
transient_light_cleanup();
|
||||
}
|
||||
|
||||
/* how many monsters exist now compared to before? */
|
||||
if (result)
|
||||
result = monster_census(FALSE) - census;
|
||||
|
||||
@@ -1215,7 +1215,9 @@ const char *
|
||||
msummon_environ(struct permonst *mptr, const char **cloud)
|
||||
{
|
||||
const char *what;
|
||||
int mndx = (mptr->mlet != S_ANGEL) ? monsndx(mptr) : PM_ANGEL;
|
||||
int mndx = ((mptr->mlet == S_ANGEL) ? PM_ANGEL
|
||||
: (mptr->mlet == S_LIGHT) ? PM_YELLOW_LIGHT
|
||||
: monsndx(mptr));
|
||||
|
||||
*cloud = "cloud"; /* default is "cloud of <something>" */
|
||||
switch (mndx) {
|
||||
@@ -1224,13 +1226,15 @@ msummon_environ(struct permonst *mptr, const char **cloud)
|
||||
case PM_WATER_ELEMENTAL:
|
||||
case PM_FOG_CLOUD:
|
||||
case PM_ICE_VORTEX:
|
||||
case PM_FREEZING_SPHERE:
|
||||
what = "vapor";
|
||||
break;
|
||||
case PM_STEAM_VORTEX:
|
||||
what = "steam";
|
||||
break;
|
||||
case PM_ENERGY_VORTEX:
|
||||
*cloud = "shower"; /* "shower of" instead of "cloud of" */
|
||||
case PM_SHOCKING_SPHERE:
|
||||
*cloud = "shower"; /* "shower of sparks" instead of "cloud of..." */
|
||||
what = "sparks";
|
||||
break;
|
||||
case PM_EARTH_ELEMENTAL:
|
||||
@@ -1238,11 +1242,15 @@ msummon_environ(struct permonst *mptr, const char **cloud)
|
||||
what = "dust";
|
||||
break;
|
||||
case PM_FIRE_ELEMENTAL:
|
||||
*cloud = "burst"; /* "burst of" instead of "cloud of" */
|
||||
case PM_FIRE_VORTEX:
|
||||
case PM_FLAMING_SPHERE:
|
||||
/*case PM_SALAMANDER:*/
|
||||
*cloud = "ball"; /* "ball of flame" instead of "cloud of..." */
|
||||
what = "flame";
|
||||
break;
|
||||
case PM_ANGEL: /* actually any 'A'-class */
|
||||
*cloud = "flash"; /* "flash of" instead of "cloud of" */
|
||||
case PM_YELLOW_LIGHT: /* any 'y'-class */
|
||||
*cloud = "flash"; /* "flash of light" instead of "cloud of..." */
|
||||
what = "light";
|
||||
break;
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user