X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/b8487be54479a1ff66937082686d4db9f04f7627..6b6247c70321dce562f59e846efc5243996ee946:/hack/hack.dog.c

diff --git a/hack/hack.dog.c b/hack/hack.dog.c
index 06a23330..7537454b 100644
--- a/hack/hack.dog.c
+++ b/hack/hack.dog.c
@@ -1,32 +1,98 @@
+/*	$NetBSD: hack.dog.c,v 1.9 2008/01/28 06:55:41 dholland Exp $	*/
+
+/*
+ * Copyright (c) 1985, Stichting Centrum voor Wiskunde en Informatica,
+ * Amsterdam
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * - Neither the name of the Stichting Centrum voor Wiskunde en
+ * Informatica, nor the names of its contributors may be used to endorse or
+ * promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
 /*
- * Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985.
+ * Copyright (c) 1982 Jay Fenlason <hack@gnu.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
+ * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include <sys/cdefs.h>
 #ifndef lint
-static char rcsid[] = "$Id: hack.dog.c,v 1.2 1993/08/02 17:17:07 mycroft Exp $";
-#endif /* not lint */
+__RCSID("$NetBSD: hack.dog.c,v 1.9 2008/01/28 06:55:41 dholland Exp $");
+#endif				/* not lint */
 
-#include	"hack.h"
-#include	"hack.mfndpos.h"
-extern struct monst *makemon();
+#include "hack.h"
+#include "extern.h"
+#include "hack.mfndpos.h"
 #include "def.edog.h"
 #include "def.mkroom.h"
 
-struct permonst li_dog =
-	{ "little dog", 'd',2,18,6,1,6,sizeof(struct edog) };
-struct permonst dog =
-	{ "dog", 'd',4,16,5,1,6,sizeof(struct edog) };
-struct permonst la_dog =
-	{ "large dog", 'd',6,15,4,2,4,sizeof(struct edog) };
+const struct permonst li_dog =
+{"little dog", 'd', 2, 18, 6, 1, 6, sizeof(struct edog)};
+const struct permonst dog =
+{"dog", 'd', 4, 16, 5, 1, 6, sizeof(struct edog)};
+const struct permonst la_dog =
+{"large dog", 'd', 6, 15, 4, 2, 4, sizeof(struct edog)};
 
 
-makedog(){
-register struct monst *mtmp = makemon(&li_dog,u.ux,u.uy);
-	if(!mtmp) return; /* dogs were genocided */
+void
+makedog()
+{
+	struct monst   *mtmp = makemon(&li_dog, u.ux, u.uy);
+	if (!mtmp)
+		return;		/* dogs were genocided */
 	initedog(mtmp);
 }
 
-initedog(mtmp) register struct monst *mtmp; {
+void
+initedog(mtmp)
+	struct monst   *mtmp;
+{
 	mtmp->mtame = mtmp->mpeaceful = 1;
 	EDOG(mtmp)->hungrytime = 1000 + moves;
 	EDOG(mtmp)->eattime = 0;
@@ -37,19 +103,21 @@ initedog(mtmp) register struct monst *mtmp; {
 }
 
 /* attach the monsters that went down (or up) together with @ */
-struct monst *mydogs = 0;
-struct monst *fallen_down = 0;	/* monsters that fell through a trapdoor */
-	/* they will appear on the next level @ goes to, even if he goes up! */
+struct monst   *mydogs = 0;
+struct monst   *fallen_down = 0;/* monsters that fell through a trapdoor */
+/* they will appear on the next level @ goes to, even if he goes up! */
 
-losedogs(){
-register struct monst *mtmp;
-	while(mtmp = mydogs){
+void
+losedogs()
+{
+	struct monst   *mtmp;
+	while ((mtmp = mydogs) != NULL) {
 		mydogs = mtmp->nmon;
 		mtmp->nmon = fmon;
 		fmon = mtmp;
 		mnexto(mtmp);
 	}
-	while(mtmp = fallen_down){
+	while ((mtmp = fallen_down) != NULL) {
 		fallen_down = mtmp->nmon;
 		mtmp->nmon = fmon;
 		fmon = mtmp;
@@ -57,21 +125,27 @@ register struct monst *mtmp;
 	}
 }
 
-keepdogs(){
-register struct monst *mtmp;
-	for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
-	    if(dist(mtmp->mx,mtmp->my) < 3 && follower(mtmp)
-		&& !mtmp->msleep && !mtmp->mfroz) {
-		relmon(mtmp);
-		mtmp->nmon = mydogs;
-		mydogs = mtmp;
-		unpmon(mtmp);
-		keepdogs();	/* we destroyed the link, so use recursion */
-		return;		/* (admittedly somewhat primitive) */
-	}
+void
+keepdogs()
+{
+	struct monst   *mtmp;
+	for (mtmp = fmon; mtmp; mtmp = mtmp->nmon)
+		if (dist(mtmp->mx, mtmp->my) < 3 && follower(mtmp)
+		    && !mtmp->msleep && !mtmp->mfroz) {
+			relmon(mtmp);
+			mtmp->nmon = mydogs;
+			mydogs = mtmp;
+			unpmon(mtmp);
+			keepdogs();	/* we destroyed the link, so use
+					 * recursion */
+			return;	/* (admittedly somewhat primitive) */
+		}
 }
 
-fall_down(mtmp) register struct monst *mtmp; {
+void
+fall_down(mtmp)
+	struct monst   *mtmp;
+{
 	relmon(mtmp);
 	mtmp->nmon = fallen_down;
 	fallen_down = mtmp;
@@ -87,332 +161,367 @@ fall_down(mtmp) register struct monst *mtmp; {
 #define	APPORT	4
 #define	POISON	5
 #define	UNDEF	6
-dogfood(obj) register struct obj *obj; {
-	switch(obj->olet) {
+int
+dogfood(obj)
+	struct obj     *obj;
+{
+	switch (obj->olet) {
 	case FOOD_SYM:
-	    return(
-		(obj->otyp == TRIPE_RATION) ? DOGFOOD :
-		(obj->otyp < CARROT) ? ACCFOOD :
-		(obj->otyp < CORPSE) ? MANFOOD :
-		(poisonous(obj) || obj->age + 50 <= moves ||
-		    obj->otyp == DEAD_COCKATRICE)
+		return (
+			(obj->otyp == TRIPE_RATION) ? DOGFOOD :
+			(obj->otyp < CARROT) ? ACCFOOD :
+			(obj->otyp < CORPSE) ? MANFOOD :
+			(poisonous(obj) || obj->age + 50 <= moves ||
+			 obj->otyp == DEAD_COCKATRICE)
 			? POISON : CADAVER
-	    );
+			);
 	default:
-	    if(!obj->cursed) return(APPORT);
-	    /* fall into next case */
+		if (!obj->cursed)
+			return (APPORT);
+		/* fall into next case */
 	case BALL_SYM:
 	case CHAIN_SYM:
 	case ROCK_SYM:
-	    return(UNDEF);
+		return (UNDEF);
 	}
 }
 
 /* return 0 (no move), 1 (move) or 2 (dead) */
-dog_move(mtmp, after) register struct monst *mtmp; {
-register int nx,ny,omx,omy,appr,nearer,j;
-int udist,chi,i,whappr;
-register struct monst *mtmp2;
-register struct permonst *mdat = mtmp->data;
-register struct edog *edog = EDOG(mtmp);
-struct obj *obj;
-struct trap *trap;
-xchar cnt,chcnt,nix,niy;
-schar dogroom,uroom;
-xchar gx,gy,gtyp,otyp;	/* current goal */
-coord poss[9];
-int info[9];
+int
+dog_move(struct monst *mtmp, int after)
+{
+	int             nx, ny, omx, omy, appr, nearer, j;
+	int             udist, chi = 0, i, whappr;
+	struct monst   *mtmp2;
+	const struct permonst *mdat = mtmp->data;
+	struct edog    *edog = EDOG(mtmp);
+	struct obj     *obj;
+	struct trap    *trap;
+	xchar           cnt, chcnt, nix, niy;
+	schar           dogroom, uroom;
+	xchar           gx = 0, gy = 0, gtyp, otyp;	/* current goal */
+	coord           poss[9];
+	int             info[9];
 #define GDIST(x,y) ((x-gx)*(x-gx) + (y-gy)*(y-gy))
 #define DDIST(x,y) ((x-omx)*(x-omx) + (y-omy)*(y-omy))
 
-	if(moves <= edog->eattime) return(0);	/* dog is still eating */
+	if (moves <= edog->eattime)
+		return (0);	/* dog is still eating */
 	omx = mtmp->mx;
 	omy = mtmp->my;
 	whappr = (moves - EDOG(mtmp)->whistletime < 5);
-	if(moves > edog->hungrytime + 500 && !mtmp->mconf){
+	if (moves > edog->hungrytime + 500 && !mtmp->mconf) {
 		mtmp->mconf = 1;
 		mtmp->mhpmax /= 3;
-		if(mtmp->mhp > mtmp->mhpmax)
+		if (mtmp->mhp > mtmp->mhpmax)
 			mtmp->mhp = mtmp->mhpmax;
-		if(cansee(omx,omy))
+		if (cansee(omx, omy))
 			pline("%s is confused from hunger.", Monnam(mtmp));
-		else	pline("You feel worried about %s.", monnam(mtmp));
-	} else
-	if(moves > edog->hungrytime + 750 || mtmp->mhp < 1){
-		if(cansee(omx,omy))
+		else
+			pline("You feel worried about %s.", monnam(mtmp));
+	} else if (moves > edog->hungrytime + 750 || mtmp->mhp < 1) {
+		if (cansee(omx, omy))
 			pline("%s dies from hunger.", Monnam(mtmp));
 		else
-		pline("You have a sad feeling for a moment, then it passes.");
+			pline("You have a sad feeling for a moment, then it passes.");
 		mondied(mtmp);
-		return(2);
+		return (2);
 	}
-	dogroom = inroom(omx,omy);
-	uroom = inroom(u.ux,u.uy);
-	udist = dist(omx,omy);
+	dogroom = inroom(omx, omy);
+	uroom = inroom(u.ux, u.uy);
+	udist = dist(omx, omy);
 
 	/* maybe we tamed him while being swallowed --jgm */
-	if(!udist) return(0);
+	if (!udist)
+		return (0);
 
 	/* if we are carrying sth then we drop it (perhaps near @) */
 	/* Note: if apport == 1 then our behaviour is independent of udist */
-	if(mtmp->minvent){
-		if(!rn2(udist) || !rn2((int) edog->apport))
-		if(rn2(10) < edog->apport){
-			relobj(mtmp, (int) mtmp->minvis);
-			if(edog->apport > 1) edog->apport--;
-			edog->dropdist = udist;		/* hpscdi!jon */
-			edog->droptime = moves;
-		}
+	if (mtmp->minvent) {
+		if (!rn2(udist) || !rn2((int) edog->apport))
+			if ((unsigned) rn2(10) < edog->apport) {
+				relobj(mtmp, (int) mtmp->minvis);
+				if (edog->apport > 1)
+					edog->apport--;
+				edog->dropdist = udist;	/* hpscdi!jon */
+				edog->droptime = moves;
+			}
 	} else {
-		if(obj = o_at(omx,omy)) if(!index("0_", obj->olet)){
-		    if((otyp = dogfood(obj)) <= CADAVER){
-			nix = omx;
-			niy = omy;
-			goto eatobj;
-		    }
-		    if(obj->owt < 10*mtmp->data->mlevel)
-		    if(rn2(20) < edog->apport+3)
-		    if(rn2(udist) || !rn2((int) edog->apport)){
-			freeobj(obj);
-			unpobj(obj);
-			/* if(levl[omx][omy].scrsym == obj->olet)
-				newsym(omx,omy); */
-			mpickobj(mtmp,obj);
-		    }
-		}
+		if ((obj = o_at(omx, omy)) != NULL)
+			if (!strchr("0_", obj->olet)) {
+				if ((otyp = dogfood(obj)) <= CADAVER) {
+					nix = omx;
+					niy = omy;
+					goto eatobj;
+				}
+				if (obj->owt < 10 * mtmp->data->mlevel)
+					if ((unsigned) rn2(20) < edog->apport + 3)
+						if (rn2(udist) || !rn2((int) edog->apport)) {
+							freeobj(obj);
+							unpobj(obj);
+							/*
+							 * if(levl[omx][omy].s
+							 * crsym ==
+							 * obj->olet)
+							 * newsym(omx,omy);
+							 */
+							mpickobj(mtmp, obj);
+						}
+			}
 	}
 
 	/* first we look for food */
-	gtyp = UNDEF;	/* no goal as yet */
+	gtyp = UNDEF;		/* no goal as yet */
 #ifdef LINT
-	gx = gy = 0;	/* suppress 'used before set' message */
-#endif LINT
-	for(obj = fobj; obj; obj = obj->nobj) {
+	gx = gy = 0;		/* suppress 'used before set' message */
+#endif	/* LINT */
+	for (obj = fobj; obj; obj = obj->nobj) {
 		otyp = dogfood(obj);
-		if(otyp > gtyp || otyp == UNDEF) continue;
-		if(inroom(obj->ox,obj->oy) != dogroom) continue;
-		if(otyp < MANFOOD &&
-		 (dogroom >= 0 || DDIST(obj->ox,obj->oy) < 10)) {
-			if(otyp < gtyp || (otyp == gtyp &&
-				DDIST(obj->ox,obj->oy) < DDIST(gx,gy))){
+		if (otyp > gtyp || otyp == UNDEF)
+			continue;
+		if (inroom(obj->ox, obj->oy) != dogroom)
+			continue;
+		if (otyp < MANFOOD &&
+		    (dogroom >= 0 || DDIST(obj->ox, obj->oy) < 10)) {
+			if (otyp < gtyp || (otyp == gtyp &&
+				 DDIST(obj->ox, obj->oy) < DDIST(gx, gy))) {
 				gx = obj->ox;
 				gy = obj->oy;
 				gtyp = otyp;
 			}
-		} else
-		if(gtyp == UNDEF && dogroom >= 0 &&
-		   uroom == dogroom &&
-		   !mtmp->minvent && edog->apport > rn2(8)){
+		} else if (gtyp == UNDEF && dogroom >= 0 &&
+			   uroom == dogroom &&
+			   !mtmp->minvent && edog->apport > (unsigned)rn2(8)) {
 			gx = obj->ox;
 			gy = obj->oy;
 			gtyp = APPORT;
 		}
 	}
-	if(gtyp == UNDEF ||
-	  (gtyp != DOGFOOD && gtyp != APPORT && moves < edog->hungrytime)){
-		if(dogroom < 0 || dogroom == uroom){
+	if (gtyp == UNDEF ||
+	  (gtyp != DOGFOOD && gtyp != APPORT && moves < edog->hungrytime)) {
+		if (dogroom < 0 || dogroom == uroom) {
 			gx = u.ux;
 			gy = u.uy;
 #ifndef QUEST
 		} else {
-			int tmp = rooms[dogroom].fdoor;
-			    cnt = rooms[dogroom].doorct;
+			int             tmp = rooms[dogroom].fdoor;
+			cnt = rooms[dogroom].doorct;
 
 			gx = gy = FAR;	/* random, far away */
-			while(cnt--){
-			    if(dist(gx,gy) >
-				dist(doors[tmp].x, doors[tmp].y)){
+			while (cnt--) {
+				if (dist(gx, gy) >
+				    dist(doors[tmp].x, doors[tmp].y)) {
 					gx = doors[tmp].x;
 					gy = doors[tmp].y;
 				}
 				tmp++;
 			}
 			/* here gx == FAR e.g. when dog is in a vault */
-			if(gx == FAR || (gx == omx && gy == omy)){
+			if (gx == FAR || (gx == omx && gy == omy)) {
 				gx = u.ux;
 				gy = u.uy;
 			}
-#endif QUEST
+#endif	/* QUEST */
 		}
 		appr = (udist >= 9) ? 1 : (mtmp->mflee) ? -1 : 0;
-		if(after && udist <= 4 && gx == u.ux && gy == u.uy)
-			return(0);
-		if(udist > 1){
-			if(!IS_ROOM(levl[u.ux][u.uy].typ) || !rn2(4) ||
-			   whappr ||
-			   (mtmp->minvent && rn2((int) edog->apport)))
+		if (after && udist <= 4 && gx == u.ux && gy == u.uy)
+			return (0);
+		if (udist > 1) {
+			if (!IS_ROOM(levl[u.ux][u.uy].typ) || !rn2(4) ||
+			    whappr ||
+			    (mtmp->minvent && rn2((int) edog->apport)))
 				appr = 1;
 		}
 		/* if you have dog food he'll follow you more closely */
-		if(appr == 0){
+		if (appr == 0) {
 			obj = invent;
-			while(obj){
-				if(obj->otyp == TRIPE_RATION){
+			while (obj) {
+				if (obj->otyp == TRIPE_RATION) {
 					appr = 1;
 					break;
 				}
 				obj = obj->nobj;
 			}
 		}
-	} else	appr = 1;	/* gtyp != UNDEF */
-	if(mtmp->mconf) appr = 0;
+	} else
+		appr = 1;	/* gtyp != UNDEF */
+	if (mtmp->mconf)
+		appr = 0;
 
-	if(gx == u.ux && gy == u.uy && (dogroom != uroom || dogroom < 0)){
-	extern coord *gettrack();
-	register coord *cp;
-		cp = gettrack(omx,omy);
-		if(cp){
+	if (gx == u.ux && gy == u.uy && (dogroom != uroom || dogroom < 0)) {
+		coord          *cp;
+		cp = gettrack(omx, omy);
+		if (cp) {
 			gx = cp->x;
 			gy = cp->y;
 		}
 	}
-
 	nix = omx;
 	niy = omy;
-	cnt = mfndpos(mtmp,poss,info,ALLOW_M | ALLOW_TRAPS);
+	cnt = mfndpos(mtmp, poss, info, ALLOW_M | ALLOW_TRAPS);
 	chcnt = 0;
 	chi = -1;
-	for(i=0; i<cnt; i++){
+	for (i = 0; i < cnt; i++) {
 		nx = poss[i].x;
 		ny = poss[i].y;
-		if(info[i] & ALLOW_M){
-			mtmp2 = m_at(nx,ny);
-			if(mtmp2->data->mlevel >= mdat->mlevel+2 ||
-			  mtmp2->data->mlet == 'c')
+		if (info[i] & ALLOW_M) {
+			mtmp2 = m_at(nx, ny);
+			if (mtmp2 == NULL)
+				panic("error in dog_move");
+			if (mtmp2->data->mlevel >= mdat->mlevel + 2 ||
+			    mtmp2->data->mlet == 'c')
 				continue;
-			if(after) return(0); /* hit only once each move */
+			if (after)
+				return (0);	/* hit only once each move */
 
-			if(hitmm(mtmp, mtmp2) == 1 && rn2(4) &&
-			  mtmp2->mlstmv != moves &&
-			  hitmm(mtmp2,mtmp) == 2) return(2);
-			return(0);
+			if (hitmm(mtmp, mtmp2) == 1 && rn2(4) &&
+			    mtmp2->mlstmv != moves &&
+			    hitmm(mtmp2, mtmp) == 2)
+				return (2);
+			return (0);
 		}
-
 		/* dog avoids traps */
 		/* but perhaps we have to pass a trap in order to follow @ */
-		if((info[i] & ALLOW_TRAPS) && (trap = t_at(nx,ny))){
-			if(!trap->tseen && rn2(40)) continue;
-			if(rn2(10)) continue;
+		if ((info[i] & ALLOW_TRAPS) && (trap = t_at(nx, ny))) {
+			if (!trap->tseen && rn2(40))
+				continue;
+			if (rn2(10))
+				continue;
 		}
-
 		/* dog eschewes cursed objects */
 		/* but likes dog food */
 		obj = fobj;
-		while(obj){
-		    if(obj->ox != nx || obj->oy != ny)
-			goto nextobj;
-		    if(obj->cursed) goto nxti;
-		    if(obj->olet == FOOD_SYM &&
-			(otyp = dogfood(obj)) < MANFOOD &&
-			(otyp < ACCFOOD || edog->hungrytime <= moves)){
-			/* Note: our dog likes the food so much that he
-			might eat it even when it conceals a cursed object */
-			nix = nx;
-			niy = ny;
-			chi = i;
-		     eatobj:
-			edog->eattime =
-			    moves + obj->quan * objects[obj->otyp].oc_delay;
-			if(edog->hungrytime < moves)
-			    edog->hungrytime = moves;
-			edog->hungrytime +=
-			    5*obj->quan * objects[obj->otyp].nutrition;
-			mtmp->mconf = 0;
-			if(cansee(nix,niy))
-			    pline("%s ate %s.", Monnam(mtmp), doname(obj));
-			/* perhaps this was a reward */
-			if(otyp != CADAVER)
-			edog->apport += 200/(edog->dropdist+moves-edog->droptime);
-			delobj(obj);
-			goto newdogpos;
-		    }
-		nextobj:
-		    obj = obj->nobj;
+		while (obj) {
+			if (obj->ox != nx || obj->oy != ny)
+				goto nextobj;
+			if (obj->cursed)
+				goto nxti;
+			if (obj->olet == FOOD_SYM &&
+			    (otyp = dogfood(obj)) < MANFOOD &&
+			    (otyp < ACCFOOD || edog->hungrytime <= moves)) {
+				/*
+				 * Note: our dog likes the food so much that
+				 * he might eat it even when it conceals a
+				 * cursed object
+				 */
+				nix = nx;
+				niy = ny;
+				chi = i;
+		eatobj:
+				edog->eattime =
+					moves + obj->quan * objects[obj->otyp].oc_delay;
+				if (edog->hungrytime < moves)
+					edog->hungrytime = moves;
+				edog->hungrytime +=
+					5 * obj->quan * objects[obj->otyp].nutrition;
+				mtmp->mconf = 0;
+				if (cansee(nix, niy))
+					pline("%s ate %s.", Monnam(mtmp), doname(obj));
+				/* perhaps this was a reward */
+				if (otyp != CADAVER)
+					edog->apport += 200 / (edog->dropdist + moves - edog->droptime);
+				delobj(obj);
+				goto newdogpos;
+			}
+	nextobj:
+			obj = obj->nobj;
 		}
 
-		for(j=0; j<MTSZ && j<cnt-1; j++)
-			if(nx == mtmp->mtrack[j].x && ny == mtmp->mtrack[j].y)
-				if(rn2(4*(cnt-j))) goto nxti;
+		for (j = 0; j < MTSZ && j < cnt - 1; j++)
+			if (nx == mtmp->mtrack[j].x && ny == mtmp->mtrack[j].y)
+				if (rn2(4 * (cnt - j)))
+					goto nxti;
 
-/* Some stupid C compilers cannot compute the whole expression at once. */
-		nearer = GDIST(nx,ny);
-		nearer -= GDIST(nix,niy);
+		/*
+		 * Some stupid C compilers cannot compute the whole
+		 * expression at once.
+		 */
+		nearer = GDIST(nx, ny);
+		nearer -= GDIST(nix, niy);
 		nearer *= appr;
-		if((nearer == 0 && !rn2(++chcnt)) || nearer<0 ||
-			(nearer > 0 && !whappr &&
-				((omx == nix && omy == niy && !rn2(3))
-				|| !rn2(12))
-			)){
+		if ((nearer == 0 && !rn2(++chcnt)) || nearer < 0 ||
+		    (nearer > 0 && !whappr &&
+		     ((omx == nix && omy == niy && !rn2(3))
+		      || !rn2(12))
+		     )) {
 			nix = nx;
 			niy = ny;
-			if(nearer < 0) chcnt = 0;
+			if (nearer < 0)
+				chcnt = 0;
 			chi = i;
 		}
-	nxti:	;
+nxti:		;
 	}
 newdogpos:
-	if(nix != omx || niy != omy){
-		if(info[chi] & ALLOW_U){
-			(void) hitu(mtmp, d(mdat->damn, mdat->damd)+1);
-			return(0);
+	if (nix != omx || niy != omy) {
+		if (info[chi] & ALLOW_U) {
+			(void) hitu(mtmp, d(mdat->damn, mdat->damd) + 1);
+			return (0);
 		}
 		mtmp->mx = nix;
 		mtmp->my = niy;
-		for(j=MTSZ-1; j>0; j--) mtmp->mtrack[j] = mtmp->mtrack[j-1];
+		for (j = MTSZ - 1; j > 0; j--)
+			mtmp->mtrack[j] = mtmp->mtrack[j - 1];
 		mtmp->mtrack[0].x = omx;
 		mtmp->mtrack[0].y = omy;
 	}
-	if(mintrap(mtmp) == 2)	/* he died */
-		return(2);
+	if (mintrap(mtmp) == 2)	/* he died */
+		return (2);
 	pmon(mtmp);
-	return(1);
+	return (1);
 }
 
 /* return roomnumber or -1 */
-inroom(x,y) xchar x,y; {
+int
+inroom(x, y)
+	xchar           x, y;
+{
 #ifndef QUEST
-	register struct mkroom *croom = &rooms[0];
-	while(croom->hx >= 0){
-		if(croom->hx >= x-1 && croom->lx <= x+1 &&
-		   croom->hy >= y-1 && croom->ly <= y+1)
-			return(croom - rooms);
+	struct mkroom  *croom = &rooms[0];
+	while (croom->hx >= 0) {
+		if (croom->hx >= x - 1 && croom->lx <= x + 1 &&
+		    croom->hy >= y - 1 && croom->ly <= y + 1)
+			return (croom - rooms);
 		croom++;
 	}
-#endif QUEST
-	return(-1);	/* not in room or on door */
+#endif	/* QUEST */
+	return (-1);		/* not in room or on door */
 }
 
+int
 tamedog(mtmp, obj)
-register struct monst *mtmp;
-register struct obj *obj;
+	struct monst   *mtmp;
+	struct obj     *obj;
 {
-	register struct monst *mtmp2;
+	struct monst   *mtmp2;
 
-	if(flags.moonphase == FULL_MOON && night() && rn2(6))
-		return(0);
+	if (flags.moonphase == FULL_MOON && night() && rn2(6))
+		return (0);
 
 	/* If we cannot tame him, at least he's no longer afraid. */
 	mtmp->mflee = 0;
 	mtmp->mfleetim = 0;
-	if(mtmp->mtame || mtmp->mfroz ||
+	if (mtmp->mtame || mtmp->mfroz ||
 #ifndef NOWORM
-		mtmp->wormno ||
-#endif NOWORM
-		mtmp->isshk || mtmp->isgd || index(" &@12", mtmp->data->mlet))
-		return(0); /* no tame long worms? */
-	if(obj) {
-		if(dogfood(obj) >= MANFOOD) return(0);
-		if(cansee(mtmp->mx,mtmp->my)){
+	    mtmp->wormno ||
+#endif	/* NOWORM */
+	    mtmp->isshk || mtmp->isgd || strchr(" &@12", mtmp->data->mlet))
+		return (0);	/* no tame long worms? */
+	if (obj) {
+		if (dogfood(obj) >= MANFOOD)
+			return (0);
+		if (cansee(mtmp->mx, mtmp->my)) {
 			pline("%s devours the %s.", Monnam(mtmp),
-				objects[obj->otyp].oc_name);
+			      objects[obj->otyp].oc_name);
 		}
 		obfree(obj, (struct obj *) 0);
 	}
 	mtmp2 = newmonst(sizeof(struct edog) + mtmp->mnamelth);
 	*mtmp2 = *mtmp;
 	mtmp2->mxlth = sizeof(struct edog);
-	if(mtmp->mnamelth) (void) strcpy(NAME(mtmp2), NAME(mtmp));
+	if (mtmp->mnamelth)
+		(void) strcpy(NAME(mtmp2), NAME(mtmp));
 	initedog(mtmp2);
-	replmon(mtmp,mtmp2);
-	return(1);
+	replmon(mtmp, mtmp2);
+	return (1);
 }