fix vision bug - moving a subset of boulders from a location

From a bug report.  Pushing one
boulder from a location which had more than one would open up line of sight
at that spot as if all boulders there were gone.
This commit is contained in:
nethack.rankin
2005-09-04 03:06:20 +00:00
parent e3f1716da9
commit d129f6760e
2 changed files with 7 additions and 2 deletions

View File

@@ -143,6 +143,8 @@ fix grammar for graveyard sounds when polymorphed
avoid divide by zero crash if Luck drops below -1 while a prayer is in progress
make hero inflicted with lycanthropy immune to level drain just like monsters
describe locomotion method accurately when flyers traverse ladders or holes
when there were multiple boulders at a location, moving one of them sometimes
resulted in line-of-sight anomalies
Platform- and/or Interface-Specific Fixes

View File

@@ -1,4 +1,4 @@
/* SCCS Id: @(#)mkobj.c 3.5 2005/03/26 */
/* SCCS Id: @(#)mkobj.c 3.5 2005/09/03 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1198,6 +1198,7 @@ int x, y;
panic("place_object: obj not free");
obj_no_longer_held(otmp);
/* (could bypass this vision update if there is already a boulder here) */
if (otmp->otyp == BOULDER) block_point(x,y); /* vision */
/* obj goes under boulders */
@@ -1349,9 +1350,11 @@ register struct obj *otmp;
if (otmp->where != OBJ_FLOOR)
panic("remove_object: obj not on floor");
if (otmp->otyp == BOULDER) unblock_point(x,y); /* vision */
extract_nexthere(otmp, &level.objects[x][y]);
extract_nobj(otmp, &fobj);
/* update vision iff this was the only boulder at its spot */
if (otmp->otyp == BOULDER && !sobj_at(BOULDER, x, y))
unblock_point(x,y); /* vision */
if (otmp->timed) obj_timer_checks(otmp,x,y,0);
}