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); }