fix #H4436 - polyself message sequencing bug

for digesting a swallowed critter.  The "you kill <critter>" message
was left implicit, but if hero gained a level, that made "welcome
to level N+1" look like it was issued out of sequence because it's
immediate and the "you totally digest <critter>" is delayed.  Giving
the you-kill-it message explicitly makes things be more verbose but
avoids having the new-level message seem out of order.
This commit is contained in:
PatR
2016-07-13 16:16:55 -07:00
parent ff29971453
commit 5713f92df1
2 changed files with 9 additions and 5 deletions
+2
View File
@@ -320,6 +320,8 @@ monsters can throw cockatrice eggs at hero, but there was no handling for eggs
when the missile hit an intervening monster when the missile hit an intervening monster
clarify that shape-shifted vampires revert to vampire form when petrified or clarify that shape-shifted vampires revert to vampire form when petrified or
digested; when back in 'V' form, they're vulnerable to such damage digested; when back in 'V' form, they're vulnerable to such damage
when poly'd into an engulfer which does digestion damage, a kill resulting in
a level gain gave "welcome to level N+1" before "you digest <victim>"
Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository
+7 -5
View File
@@ -1949,11 +1949,13 @@ register struct attack *mattk;
m_useup(mdef, otmp); m_useup(mdef, otmp);
newuhs(FALSE); newuhs(FALSE);
/* Message sequencing BUG: if you gain a level here, /* start_engulf() issues "you engulf <mdef>" above; this
* "welcome to level N+1" is given immediately and used to specify XKILL_NOMSG but we need "you kill <mdef>"
* then "you totally digest <foo>" is given later. in case we're also going to get "welcome to level N+1";
*/ "you totally digest <mdef>" will be coming soon (after
xkilled(mdef, XKILL_NOMSG | XKILL_NOCORPSE); several turns) but the level-gain message seems out of
order if the kill message is left implicit */
xkilled(mdef, XKILL_GIVEMSG | XKILL_NOCORPSE);
if (mdef->mhp > 0) { /* monster lifesaved */ if (mdef->mhp > 0) { /* monster lifesaved */
You("hurriedly regurgitate the sizzling in your %s.", You("hurriedly regurgitate the sizzling in your %s.",
body_part(STOMACH)); body_part(STOMACH));