Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!uunet!husc6!cca!mirror!rayssd!brunix!nancy!rph From: rph@nancy (Richard Hughey) Newsgroups: comp.sources.bugs,rec.games.hack Subject: NetHack2.2 bug fixes Message-ID: <21271@brunix.UUCP> Date: Tue, 8-Dec-87 19:34:36 EST Article-I.D.: brunix.21271 Posted: Tue Dec 8 19:34:36 1987 Date-Received: Sun, 13-Dec-87 16:48:49 EST Sender: root@brunix.UUCP Reply-To: rph@brunix.UUCP (Richard Hughey) Organization: Brown University Computer Science Dept. Lines: 161 Xref: mnetor comp.sources.bugs:555 rec.games.hack:1891 Some bug fixes.... First, the dog bug in fight.c: attack() changed to work better. Second, with the expanded endgame, there were some dependencies on MAXLEVEL being 40 instead of being MAXLEVEL. These problems occur when a new shape for a chameleon is being selected. The code changes are to: mon.c: newcham(): modified so that second (mdat) arg = 0 has the routine pick a random shape based on current dungeon level. and to calls in: makemon.c:makemon(), monmove.c:dochug(), spell.c:docast(). The diff's are below. 'old' is the 2.2 distribution version. Many thanks to Mike Stephenson for putting it all together: it looks great! -- Richard ------------------------------------------------------------------------ *** oldmon.c Tue Dec 8 17:29:55 1987 --- mon.c Tue Dec 8 18:45:31 1987 *************** *** 679,684 **** --- 679,685 ---- } #endif + newcham(mtmp,mdat) /* make a chameleon look like a new monster */ /* returns 1 if the monster actually changed */ register struct monst *mtmp; *************** *** 685,691 **** register struct permonst *mdat; { register mhp, hpn, hpd; ! if(mdat == mtmp->data) return(0); /* still the same monster */ #ifndef NOWORM if(mtmp->wormno) wormdead(mtmp); /* throw tail away */ --- 686,700 ---- register struct permonst *mdat; { register mhp, hpn, hpd; ! #ifdef RPH ! /* mdat = 0 -> caller wants a random monster shape */ ! if (mdat == 0) { ! /* ie. minimum shape is mons[15], minimum random range */ ! /* is 3, and randomness tails off as you descend into the */ ! /* depths max shape is mons[CMNUM-1] */ ! mdat = &mons[CMNUM-1-rn2((CMNUM-17) - (CMNUM-20)*dlevel/MAXLEVEL)]; ! } ! #endif if(mdat == mtmp->data) return(0); /* still the same monster */ #ifndef NOWORM if(mtmp->wormno) wormdead(mtmp); /* throw tail away */ *** oldmakemon.c Tue Dec 8 17:29:48 1987 --- makemon.c Tue Dec 8 18:11:36 1987 *************** *** 40,46 **** boolean anything = (!ptr); int zlevel = dlevel; #ifdef BVH ! if(has_amulet()) zlevel = 40; #endif /* if a monster already exists at the position, return */ if(x != 0 || y != 0) if(m_at(x,y)) return((struct monst *) 0); --- 40,46 ---- boolean anything = (!ptr); int zlevel = dlevel; #ifdef BVH ! if(has_amulet()) zlevel = MAXLEVEL; #endif /* if a monster already exists at the position, return */ if(x != 0 || y != 0) if(m_at(x,y)) return((struct monst *) 0); *************** *** 137,148 **** --- 137,156 ---- mtmp->cham = 0; else { mtmp->cham = 1; + #ifndef RPH (void) newcham(mtmp, &mons[zlevel+14+rn2(CMNUM-14-zlevel)]); + #else + (void) newcham(mtmp,0); + #endif } #else mtmp->cham = 1; + #ifndef RPH (void) newcham(mtmp, &mons[zlevel+14+rn2(CMNUM-14-zlevel)]); + #else + (void) newcham(mtmp, 0); + #endif #endif } if(ptr->mlet == 'I' || ptr->mlet == ';') *** oldspell.c Tue Dec 8 18:10:04 1987 --- spell.c Tue Dec 8 18:11:35 1987 *************** *** 305,311 **** --- 305,315 ---- mtmp = makedog(); if(mtmp) { /* make it into something else */ + #ifndef RPH (void) newcham(mtmp, &mons[dlevel+14+rn2(CMNUM-14-dlevel)]); + #else + (void) newcham(mtmp,0); + #endif if(confused) mtmp->mtame = mtmp->mpeaceful = 0; } *** oldfight.c Tue Dec 8 19:13:07 1987 --- fight.c Tue Dec 8 19:12:28 1987 *************** *** 466,475 **** --- 466,484 ---- char *dname; /* added by Janet Walz (walz@mimsy) */ mtmp->mflee = 1; mtmp->mfleetim = rnd(6); + #ifndef RPH if (dname = NAME(mtmp)) pline("You stop to avoid hitting %s.",dname); else pline("You stop to avoid hitting your dog."); + #else + dname = NAME(mtmp); + if (dname == 0 || dname[0] == '\0') + pline("You stop to avoid hitting your dog."); + else + pline("You stop to avoid hitting %s.",dname); + #endif + return(TRUE); } if (flags.confirm && (mtmp->mpeaceful || mtmp->mtame) && ! Confusion *** oldmonmove.c Tue Dec 8 17:30:26 1987 --- monmove.c Tue Dec 8 18:11:35 1987 *************** *** 31,37 **** --- 31,41 ---- register tmp, nearby, scared, onscary; if(mtmp->cham && !rn2(6)) + #ifndef RPH (void) newcham(mtmp, &mons[dlevel+14+rn2(CMNUM-14-dlevel)]); + #else + (void) newcham(mtmp, 0); + #endif mdat = mtmp->data; if(mdat->mlevel < 0) panic("bad monster %c (%d)",mdat->mlet,mdat->mlevel); ------------------------------ Richard Hughey CSNET: rph%cs.brown.edu@relay.cs.net Brown University BITNET: rph@browncs (decvax, ihnp4, allegra)!brunix!rph