fix #Q295 - post-choking food side-effects

From a bug report, but
just received:  if you choked while eating a cockatrice egg and survived,
the turn-to-stone sequence wouldn't be initiated.  For such eggs, turning
to stone starts when the food is finished rather than when it's started,
and fpostfx() wasn't called for food that triggered choking so the egg
went away without actually being finished.  Fortune cookies, lumps of
royal jelly, and a few other things suffered from the same situation.
This commit is contained in:
nethack.rankin
2007-02-08 23:33:14 +00:00
parent 8c982b0e05
commit 1fe4018f3b
2 changed files with 18 additions and 1 deletions

View File

@@ -309,6 +309,8 @@ vomiting countdown actually triggered the final vomit code twice
rats aren't capable of vomiting
fireproof, non-rustable weapon would be revealed as fireproof by hitting a
rust-causing target; ditto for fixed crysknife
surviving choking while eating various foods (cockatrice egg, fortune cookie,
wolfsbane, others) didn't carry through to those foods' side-effects
Platform- and/or Interface-Specific Fixes

View File

@@ -1635,6 +1635,8 @@ STATIC_OVL void
start_eating(otmp) /* called as you start to eat */
register struct obj *otmp;
{
const char *old_nomovemsg, *save_nomovemsg;
#ifdef DEBUG
debugpline("start_eating: %lx (victual = %lx)", otmp, context.victual.piece);
debugpline("reqtime = %d", context.victual.reqtime);
@@ -1653,7 +1655,20 @@ start_eating(otmp) /* called as you start to eat */
}
}
if (bite()) return;
old_nomovemsg = nomovemsg;
if (bite()) {
/* survived choking, finish off food that's nearly done;
need this to handle cockatrice eggs, fortune cookies, etc */
if (++context.victual.usedtime >= context.victual.reqtime) {
/* don't want done_eating() to issue nomovemsg if it
is due to vomit() called by bite() */
save_nomovemsg = nomovemsg;
if (!old_nomovemsg) nomovemsg = 0;
done_eating(FALSE);
if (!old_nomovemsg) nomovemsg = save_nomovemsg;
}
return;
}
if (++context.victual.usedtime >= context.victual.reqtime) {
/* print "finish eating" message if they just resumed -dlc */