From: nethack.rankin Date: Sun, 4 Sep 2005 03:06:20 +0000 (+0000) Subject: fix vision bug - moving a subset of boulders from a location X-Git-Tag: MOVE2GIT~1240 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d129f6760e7c9b2f897d9e08ea7b34b2439f94bb;p=nethack 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. --- diff --git a/doc/fixes34.4 b/doc/fixes34.4 index 7aeaf9c85..90a1a3bae 100644 --- a/doc/fixes34.4 +++ b/doc/fixes34.4 @@ -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 diff --git a/src/mkobj.c b/src/mkobj.c index 9c1be2b58..df05ce12c 100644 --- a/src/mkobj.c +++ b/src/mkobj.c @@ -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); }