Skip to content

Commit

Permalink
fix vision bug - moving a subset of boulders from a location
Browse files Browse the repository at this point in the history
     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.
  • Loading branch information
nethack.rankin committed Sep 4, 2005
1 parent e3f1716 commit d129f67
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 2 deletions.
2 changes: 2 additions & 0 deletions doc/fixes34.4
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 5 additions & 2 deletions src/mkobj.c
Original file line number Diff line number Diff line change
@@ -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. */

Expand Down Expand Up @@ -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 */
Expand Down Expand Up @@ -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);
}

Expand Down

0 comments on commit d129f67

Please sign in to comment.