fix #2236 - bag of holding weight

From a bug report, the weight of a non-cursed bag
of holding would be off by 1 when the weight of contents was a multiple
of 2 (for uncursed) or of 4 (for blessed), since the round off handling
added 1 when it shouldn't in those cases.  Mainly noticeable when empty;
the extra 1 unit made it be twice as heavy as it should have been.

     Probably never noticed in actual play.  He has implemented a patch
which shows weights as part of an object's formatted description, making
this stand out.  Supposedly the Vulture's Eye interface also added a
patch like that a farily long time ago; I wonder why nobody using it ever
noticed.  (Maybe the weight was suppressed for bags of holding there?)
This commit is contained in:
nethack.rankin
2011-04-09 00:30:59 +00:00
parent 6df18e20be
commit 3e44a5fcdc
3 changed files with 6 additions and 9 deletions

View File

@@ -1169,20 +1169,16 @@ register struct obj *obj;
* Bag status Weight of contents
* ---------- ------------------
* cursed 2x
* blessed x/4 + 1
* otherwise x/2 + 1
* blessed x/4 [rounded up: (x+3)/4]
* otherwise x/2 [rounded up: (x+1)/2]
*
* The macro DELTA_CWT in pickup.c also implements these
* weight equations.
*
* Note: The above checks are performed in the given order.
* this means that if an object is both blessed and
* cursed (not supposed to happen), it will be treated
* as cursed.
*/
if (obj->otyp == BAG_OF_HOLDING)
cwt = obj->cursed ? (cwt * 2) :
(1 + (cwt / (obj->blessed ? 4 : 2)));
obj->blessed ? ((cwt + 3) / 4) :
((cwt + 1) / 2);
return wt + cwt;
}