diff --git a/src/minion.c b/src/minion.c index 907815ced..0b3a992b5 100644 --- a/src/minion.c +++ b/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; diff --git a/src/mondata.c b/src/mondata.c index 023469908..22af3b1fe 100644 --- a/src/mondata.c +++ b/src/mondata.c @@ -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 " */ 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: