myers@uwmacc.UUCP (Latitudinarian Lobster) (06/05/85)
I've hacked hack so that dogs will avoid spots with a dead cockatrice and
will also refuse to pick one up if the dog happens to be there for some
reason (like tripe). The following context diff also contains a couple
older fixes.
*** hack.dog.c.old Fri Apr 26 13:51:29 1985
--- hack.dog.c Tue Jun 4 19:04:45 1985
***************
*** 142,147
dogroom = inroom(omx,omy);
uroom = inroom(u.ux,u.uy);
udist = dist(omx,omy);
/* if we are carrying sth then we drop it (perhaps near @) */
/* Note: if apport == 1 then our behaviour is independent of udist */
--- 142,148 -----
dogroom = inroom(omx,omy);
uroom = inroom(u.ux,u.uy);
udist = dist(omx,omy);
+ if (udist == 0) return(0); /* aeb */
/* if we are carrying sth then we drop it (perhaps near @) */
/* Note: if apport == 1 then our behaviour is independent of udist */
***************
*** 150,155
if(rn2(10) < edog->apport){
relobj(mtmp, (int) mtmp->minvis);
if(edog->apport > 1) edog->apport--;
}
} else {
if(obj = o_at(omx,omy)) if(!index("0_", obj->olet)){
--- 151,158 -----
if(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))
***************
*** 152,158
if(edog->apport > 1) edog->apport--;
}
} else {
! if(obj = o_at(omx,omy)) if(!index("0_", obj->olet)){
if((otyp = dogfood(obj)) <= CADAVER){
nix = omx;
niy = omy;
--- 155,162 -----
edog->droptime = moves;
}
} else {
! if(obj = o_at(omx,omy))
! if(!index("0_", obj->olet) && !(obj->otyp == DEAD_COCKATRICE)){
if((otyp = dogfood(obj)) <= CADAVER){
nix = omx;
niy = omy;
***************
*** 283,289
if(rn2(10)) continue;
}
! /* dog eschewes cursed objects */
/* but likes dog food */
obj = fobj;
while(obj){
--- 287,293 -----
if(rn2(10)) continue;
}
! /* dog eschewes cursed objects and dead cockatrices */
/* but likes dog food */
obj = fobj;
while(obj){
***************
*** 289,295
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)){
--- 293,299 -----
while(obj){
if(obj->ox != nx || obj->oy != ny)
goto nextobj;
! if( (obj->cursed) || (obj->otyp == DEAD_COCKATRICE) ) goto nxti;
if(obj->olet == FOOD_SYM &&
(otyp = dogfood(obj)) < MANFOOD &&
(otyp < ACCFOOD || edog->hungrytime <= moves)){