While riding, your speed was calculated using the steeds speed only when
moving multi locations. So, if you were walking step by step, it would use
your speed instead. Changed this to use the steed's speed any time actual
movement occurs.
If you cast stone to flesh on a statue on a location containing a monster,
the statue would be turned into a corpse and the contents lost. This
didn't seem to be appropriate for the spell. Now the contents spill out.
<Someone> reported that a wand of cancellation would ignore Unchanging,
noting the case of cancelling yourself while polymorphed into a stone golem.
He thought the wand should win, killing the player. I felt otherwise,
since the case he specified passes the flag allow_cancel_kill == FALSE.
I saw no straight-forward way to insert the message earlier in the
sequence, so... I reasoned that you might not yet have a good grasp and
not be able to continue holding the object when reverting form. So, I made
this into a drop case and made the drop message a rare past tense message.
Past tense is still OK for the other drop cases.
While testing this, I noticed you'd keep stealing even after reverting
form. Added code to stop this. Finally, there was a missing MON_NOWEP
call in the stealing code, added it.
> > On Saturday, 6 Jul 2002, <Someone> wrote:
> > What's the rationale behind using "money" for what used to be
> > "gold" (as in "The hill orc picks up some money" or "You notice
> > you have no money!")? Has the zorkmid been devalued?
[...]
> At least let *leprechauns* pick up gold. Unlike orcs, they're not the
> kind to pick up just "money".
From the newsgroup a while back - special levels w/o a specific alignment
should inherit their alignment from the dungeon. Some places explicitly
checked the dungeon if the level alignment wasn't set, at least one did not.
<Someone> reported (in April) that eating cursed tripe, for example, did
not violate vegetarian conduct. This patch moves the various conduct
checks into common code that is executed before the rotten state of food is
determined.
Implement Pat's suggestion of setting the mavenge flag when a covetous
monster flees, since they may subsequently teleport back and attack even
if mflee is set.
<Someone> reported that dowaternymph and dowaterdemon did not print a message
when their G_GONE checks failed. Now they do. I wasn't feeling
imaginative, so the the dowaterdemon message is the same as for no snakes.
When !GOLDOBJ, player polymorphed to a rust monster that attempted to eat
gold in the inventory would fail to eat it, but the gold would be consumed
anyway. Under GOLDOBJ, a later check would work around the invalid prompt.
The seetrap() was done for trapdoors & holes independent of whether a
message was printed. Move the seetrap call into fall_through where
the message logic lives (Sokoban holes always activate).
Reported that player polymorphed into an exploding monster does not explode
when attacking thin air. Also noticed that if player is Unchanging, they
wouldn't die after exploding in the existing code. Set u.mh = -1 to ensure
they won't still be around after exploding.
based on a bugfix forwarded by <Someone>, check for closed doors and drop
the missle before it. I re-arranged the pre checks a bit so m_throw no
longer needs to trust the caller to ensure everything is OK beforehand.
Nethack crashes when you are riding a flying monster over a
pool/moat and some engulfing monster plucks you off your saddle.
After falling into the water you'll get the normal message
sequence (sink like rock ... phew, that was close; you also get
chance to teleport if you can). After the last message the game
will crash with a segmentation fault.
- reproducible; null pointer dereference in swallowed()
The crash results because dismount_steed() calls float_down(), which
calls drown(), which calls teleds(), which clears u.ustuck. So when
gulpmu calls swallowed after dismount_steed(), this line attempts to
derefernce a null pointer:
swallower = monsndx(u.ustuck->data);
This patch bypasses the float_down() in dismount steed() altogether.
That routine is meant to return the hero to the floor, and that
isn't appropriate if a purple worm just plucked you off the steed
anyway.
While this fixes the crash, a problem still exists. The
way swallowing works, the swallowing monster's location
switches to that of the hero. Since that location is
over water, the purple worm ends up drowning almost
immediately after you are swallowed, while you are
swallowed. The purple worm's death is not revealed
to you since the "The purple worm drowns." message is
conditional. This patch also adds a message when
the purple worm dies, but should this guaranteed
drowing take place?
<Someone> reported that dropping gold on an altar prints no message.
As a side effect, gnostic conduct was never affected, which seemed odd;
dropping other known objects would still affect your gnostic conduct.
While fixing this, I noticed a GOLDOBJ-related bug when dropping gold while
levitating.
Change "The corpses smell like it could be tainted! Eat it anyway?"
to be "The corpses smell like they could be tainted! Eat one anyway?"
when eating one of multiple stacked food objects.
save process, after the save file had already been written by
forcing execution of an interrupt handler at one of the
termination prompts. This resulted in "You were not healthy
enough to survive restoration" and worse.
This clears program_state.something_worth_saving immediately
after the save has been completed.
<email deleted>
Sent: Sunday, June 30, 2002 6:30 PM
Subject: Sparks from statue-axing
> First, the message given when your axe-handle vibrates is a little
> ambiguous; I'd be explicit and include the name of obj.
>
> More seriously, potions of oil catching light from the sparks are a) a
> great idea, but b) slightly broken. They catch light fine, but
> snuffing them produces a "del_light_source: not found"
> impossible(). (This probably means the same applies to being lit by
> fire_damage(), but that's rare enough this hasn't been caught before.)
>
> (Also, a)pplying a potion of oil to light one identifies its object
> type, so lighting one by this means probably ought to as well. And
> oughtn't it to be charged for if you don't own it, as light_cocktail()
> does?)
a frozen (possibly sleeping) monster cannot be grateful unless it wakes up.
From a bug report. The pit case can only happen if mfrozen is
non-zero, but other traps may leave msleeping set as well.
<Someone> reported this during 3.4.0 beta. If you are blind and levitating,
unseen monsters are shown as "I", just like when not levitating, but they
are never erased after they move, unlike not levitating. Display this
case correctly as well.
Reported to the mailing list on 5/23. To fix this, u.usteed cannot simply
be unset earlier, so I put a check for this special case into enlightenment().
<email deleted>
Sent: Thursday, June 13, 2002 12:03 PM
Subject: Beta 1 comments
>A minor thing, but it'd be nice if the "trapped" now in lookat()
>had a defsyms[trap_to_defsym(tt)].explanation to tell you _how_
>the monster's trapped.
<email deleted>
Sent: Thursday, June 13, 2002 12:03 PM
Subject: Beta 1 comments
> Headstone writing still uses the adjective "weird" when engraving with
> a wand of digging.
<email deleted>
Subject: Beta 1 comments
> Is "You swing your axe through thin air" the right message to give
> when you try to use it to chop through a statue or boulder? Relatedly,
> this line in dig() looks as if it needs updating to the new dig_typ
> indices:
Based on a report from <Someone>, avoid calling rn2(ml) when ml == 0.
Since level 0 monster always fail in their spells, just skip the whole
loop looking for a good spell.
The NOCWD_ASSUMPTIONS conditional code allows readonly
parts of NetHack to be separated from areas that require write-access.
This allows the recent panic log needed a prefix.
Make all the quest nemesis monsters resist stoning so their death messages
make sense. Some already did resist. Stoning seems like such a trivial
way to overcome a quest nemesis anyway. If it were to be allowed, multiple
death messages would be needed in the quests.
I'm surprised that no one has noticed this one yet. When
wielding two weapons, naming either of them caused two-weapon
combat mode to stop (unless the weapon already had another name
which was long enough to be overwritten by the new name without
allocating a replacement object).
From the newsgroup: creating Sting via naming didn't produce
intrinsic warning (orc detection) if it was already wielded at the
time. (Un- and re-wielding it sufficed as a workaround.)