[net.sources.bugs] Mysterious monster digests you totally + fix.

huisjes@ark.UUCP (Michiel Huisjes) (11/23/85)

A mysterious monster digests you totally--more--
you die...--more--

This is what happened if you were swallowed by a Trapper, Lurker above or
Purple worm, which in fact was a chameleon.  As soon as the chameleon
transformed again, you died.

When you kill a chameleon, Hack would say to you that you killed the monster
it was pretending to be, as where is should say: You destroyed the chameleon.

The bug fixes are included.

-
			Michiel Huisjes.  (huisjes@ark.UUCP)
			{seismo|decvax|philabs}!mcvax!vu44!ark!huisjes

=== Cut here ====== Cut here ====== Cut here ====== Cut here ====== Cut here ===

*** hack.bug.mon.c	Sat Nov 23 10:56:03 1985
--- hack.mon.c	Sat Nov 23 10:46:51 1985
***************
*** 655,661
  #define	NEW_SCORING
  #endif lint
  	register int tmp,tmp2,nk,x,y;
! 	register struct permonst *mdat = mtmp->data;
  	extern long newuexp();
  
  	if(mtmp->cham) mdat = PM_CHAMELEON;

--- 655,661 -----
  #define	NEW_SCORING
  #endif lint
  	register int tmp,tmp2,nk,x,y;
! 	register struct permonst *mdat;
  	extern long newuexp();
  
  	if(mtmp->cham) mtmp->data = PM_CHAMELEON;
***************
*** 658,664
  	register struct permonst *mdat = mtmp->data;
  	extern long newuexp();
  
! 	if(mtmp->cham) mdat = PM_CHAMELEON;
  	if(Blind) pline("You destroy it!");
  	else {
  		pline("You destroy %s!",

--- 658,665 -----
  	register struct permonst *mdat;
  	extern long newuexp();
  
! 	if(mtmp->cham) mtmp->data = PM_CHAMELEON;
! 	mdat = mtmp->data;
  	if(Blind) pline("You destroy it!");
  	else {
  		pline("You destroy %s!",
***************
*** 786,791
  #ifndef NOWORM
  	if(mtmp->wormno) wormdead(mtmp);	/* throw tail away */
  #endif NOWORM
  	hpn = mtmp->mhp;
  	hpd = (mtmp->data->mlevel)*8;
  	if(!hpd) hpd = 4;

--- 787,802 -----
  #ifndef NOWORM
  	if(mtmp->wormno) wormdead(mtmp);	/* throw tail away */
  #endif NOWORM
+ 	if (u.ustuck == mtmp) {
+ 		if (u.uswallow) {
+ 			u.uswallow = 0;
+ 			u.uswldtim = 0;
+ 			mnexto (mtmp);
+ 			docrt ();
+ 			prme ();
+ 		}
+ 		u.ustuck = 0;
+ 	}
  	hpn = mtmp->mhp;
  	hpd = (mtmp->data->mlevel)*8;
  	if(!hpd) hpd = 4;