for helm of opposite alignment. Discovered and described by vultur-cadens. The #adjust command can be used to split an object stack and if the shop price of the two halves are different, the new stack will have its obj->o_id modified to make the prices the same. That could be used to tip off the player as to what the low bits of the next o_id will be. Since no time passes, no intervening activity such as random creation of a new monster can take place, so the player could wish for something that depends on o_id with some degree of control. Matters mainly for helms of opposite alignment intended to be used by neutral characters since the player isn't supposed to be able to control that. (Other items like T-shirt slogan text and candy bar wrapper text had a similar issue but controlling those wouldn't have had any tangible difference on play.) The issue writeup suggested allowing the player to specify a helm's alignment during a wish. That would defeat the purpose of having o_id affect the helm's behavior in an arbitrary but repeatable way so is rejected. I implemented this fix before seeing a followup comment that suggests using a more sophisticated decision than 'obj->o_id % N' for the arbitrary effect. This just increments context.ident for the next obj->o_id or mon->m_id by 1 or 2 instead of always by 1 and should be adequate. It also has the side-effect that two consecutive wishes for helm of opposite alignment won't necessary give one for each of the two possible 'polarities', even with no intervening activity by monsters, reinforcing the lack of player control. Minor bonus fix: it moves the incrementing check for wrap-to-0 into a single place instead of replicating that half a dozen times. Ones that should have been there for shop billing and for objects loaded from bones files were missing. Fixes #596
118 KiB
118 KiB