laman@sdcsvax.UUCP (07/09/83)
There is a bug in rogue 3.6. "fight.c" is the file with the bug in it. In the code where the nymph hits the player, there is a search through his pack. The if statement in the loop was hoping NOT to remove a ring that was worn, but the ISWEARING() call passes the WRONG argument! Consequently, the Nymph would remove a ring that was worn (It happened to me). Below is the offending code. : : : if (obj != cur_armor && obj != cur_weapon && is_magic(obj) && !ISWEARING(obj) && rnd(++nobj) == 0) : : : And here is the change. As you can see ISWEARING is expecting to be passed a ring type, not an arbitrary object. if (obj != cur_armor && obj != cur_weapon && is_magic(obj) && !((obj->o_type == RING) && ISWEARING(obj->o_which)) && rnd(++nobj) == 0) Happy rogueing! Mike Laman sdcsvax!laman