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:
12
src/mkobj.c
12
src/mkobj.c
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user