[net.games.rogue] 3.6 Bug fix

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