Store plname in save files (and restore it).
Move get_saved_games() functionality to files.c
Use moved get_saved_games() functionality in Qt windowport.
[also some non-enabled perminv code in Qt windowport]
WIN32: file naming
Allow single character variations in player names
to remain unique in file names by encoding rather
than substituting.
"plnam one", "plnam_one", and "plnam~one" at the
"Who are you?" prompt get unique filenames after this patch.
(From <Someone>)
> It's probably best to empty
> mswin_update_inventory() in win\win32\. If I
> remember correctly there is some code in there now
> which probably behaves badly if perm_invent is
> switched on
Implement a suggestion by <Someone> that turns spent in
"hungry" state exercise wisdom for monk characters; also make
turns spent in "satiated" state abuse it instead.
for now at least, until there is more time to look into it.
<email deleted>
> Yet more nitpicking about potions of oil being lit by sparks from axed
> statues, I'm afraid.
>
> Konosja's potions of oil catch light!
> "That will cost you 66 zorkmids (Yendorian Fuel Tax)."
> "That's in addition to the cost of Konosja's potions of oil themselves, of
> course."
> You snuff the lit potion.
>
> a) why is the Fuel Tax on (in this case) six potions the same as on one?
>
> b) if you a)pply-light a potion, it's just "in addition to the cost of
> the potion". Is Yname2() the right name-function for catch_lit() to
> be using? It's odd for Konosja to be talking about herself in the
> third person.
>
> c) Grammar on the snuffing message is wrong for multiple potions.
minetown guards outside the town proper
Pat forwarded a message from the newsgroup in March that the town guards
enforce rules even outside the town proper. Fix: On room-based town levels,
check if the location is in a room containing subrooms (roomno will often
have a subroom id instead). On the other levels (e.g. minetn-5), there are
no subrooms, so the whole level is fair game. Currently, this is valid.
If fancier towns are added in the future, more flags or use of regions may
be required to tell where the town border actually is. These checks are done
in a new in_town function.
B04010 - paper golems and fire traps
Paper golems take 100% damage in a fire trap. Straw is very flammable
unless tightly packed, but straw golems have a lot of surface area, so give
them 50% damage.
containers and objects in special level descriptions
On mazelike levels, containers had to be listed before their objects. But,
for roomfilled levels, containers had to be listed _after_ the objects. All
our current levels that use containers with objects are mazelike, so I
changed the room behavior, updating the comment in lev_comp.y to match.
Other items/monsters are still processed in reverse on roomfilled special
levels, but I think this is OK.
B04009 ftn msg when blind/!invis and gain see invis.
<Someone> writes:
Why do you "feel transparent" when you gain see invisible from a
fountain when blind and _not_ invisible? Transparency usually refers
to _being_ invisible.
B04009 ftn msg when blind/!invis and gain see invis.
<Someone> writes:
Why do you "feel transparent" when you gain see invisible from a
fountain when blind and _not_ invisible? Transparency usually refers
to _being_ invisible.
Good point. I think this may have been what was intended, but it's
been like this for quite a while.
<Someone> writes:
I can accept that losing gold into a fountain recharges it to make it
possible to find a gem in it in future (however weird that is). What
_does_ seem wrong is that receiving a warning about a Minetown
fountain prevents finding gems and gold there.
This does not fix a reported bug where you
can't attack a hidden creature that is
co-located with a boulder, but it might
assist the player in understanding what is
going on.
B04005 - leash and uncontrolled teleportation
<Someone> reported that after an uncontrolled teleport due to eating a
leprechaun, his leashed pet was still leashed until he took one more step.
The usual approach which included disallowing the teleport seemed wrong in
this case, so I put in an abbreviated version that does its checks but does
not disallow the teleport. The pet teleports with you in the same cases as
other teleports, but when it doesn't, the leash snaps loose.
dwarvish indecision
<Someone> (and later <Someone>) reported along with several other
things of a dwarf that stood in place and switched between his pick-axe and
broadsword on successive turns. Fixed by bringing the logic in the two
cases in line. The code now prefers to leave the hostile dwarf with a weapon.
R888 - panic while quaffing a potion of levitation
Now that the in_use flag is set for potions being quaffed, use the in_use
flag in general in destroy_item to avoid destroying the in use object, on
the assumption that the caller will call useup when finished. There are a
few places that set then unset in_use, but these don't currently result in
a call to destroy_item. The current_wand hack was not removed, since its
logic appears to allow destroy_item to still destroy the item.
B04004 - naming polymorph potions
Provide a chance for the player to name a polymorph potion if you dip
something into it and nothing happens.
Also fix several places in dipping and drinking potions where the HUP cheat
would allow you to use the potion a 2nd time, made more important since
the polymorph sequence includes what is currently a unique message.
When using a fountain or throne, getting a --More-- prompt
usually means that you're about to be told that it has just dried
up or vanished. But since that topology change didn't occur until
after the message, players could cheat by forcing SIGHUP instead
of answering the prompt; the resulting save file would retain the
original topology. So change the dungeon prior to telling the user
about it.
The `fixes' entry possibly belongs in the tty-specific category
but since the change is to core code I put it in the general section.
The spellcasting code stopped counting a spell class's skill
exercise once that reached expert, so the only way that it could
end up being flagged as having reached maximum in the #enhance
feedback would be if it had already received enough exercise to
reach the hypothetical level beyond expert while it was still at
skilled or less.
It also didn't count the exercise if you were restricted in
the spell class, but that wasn't necessary because becoming
unrestricted--which I don't think is even possible for spells at
present--resets the counter back to 0 to discard any exercise
achieved while ineligible.
Fix the problem [reported in the newsgroup and forwarded by <Someone>]
of blessed potions of gain level having the possibility of reducing
your experience points if you were already level 30. The random XP
value that averages "half way to next level" could be less than your
current experience if you had gotten to level 30 via such a blessed
potion or had drunk at least one of same since reaching that level.
This didn't really make any difference to game play since you weren't
losing any levels, HP, mana, or score, but it was visible to users who
enable the `showexp' option.
R919 - applying lances
Fixes 2 bugs:
1) an impossible() could occur if you applied a lance against a long worm
because the code uses thitmonst to do the hitting, but didn't set bhitpos,
which is required before calling thitmonst.
Add the missing assignment.
2) applying a lance would never mark a knight as a caitiff. Added a new
check_caitiff function and called it from the 2 existing checks and in
the lance code.
> The intention is, I believe, to cater for the situation where you, a
> chest, and a dungeon-trap are all on the same square; previously
> (C340-71), you wouldn't have been able to check the chest for traps
> because an #untrap in direction '.' would always have tried to disarm
> the dungeon trap. However, since you can't trap-check containers on
> adjacent squares, it'd wouldn't hurt if the question was dispensed
> with when you specify a direction that isn't your square.
>
> (Note that "you cannot deal with traps while trapped!", so there's
> still several situations when you can't trap-check a chest on a
> trap-square, even though you can loot it, until you've untrapped
> yourself; is this really consistent? Should the if(u.utrap) check
> be moved to the "case y:" branch of the switch?)
chain summoning
This adds a further throttle to chain summoning. Monsters can only summon
spellcasting nasties if the nasties are lower level than the summoner, which
makes infinite chains impossible (as long as the player figures out which
monster to kill first).
kicking and killing an unseen monster
<Someone> reported that kicking [unlike hitting] an unseen monster
to death would leave an "I" on the screen. This was due to a missing
DEADMONSTER check. I also noticed that code to avoid leaving an extra "I"
behind when a monster jumps of of the way was only half right, resulting in
an extra "I" anyway.
riding speed
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.
R853 - Items inside statues lost
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.
cancellation, polymorphed and unchanging
<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.
B01021 - Samurai quest doors
<Someone> wondered why there were no DOOR:nodoor specs for several doors in the
Samurai quest. I wasn't positive, but it seemed like these should have
been DOOR:closed, which is what I've added.
B01016 - misplaced "you steal" message after being blasted by an artifact
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".
special level alignments
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.
rotten food and veggie conduct
<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.
avoid some glitches with a handheld compiler I was trying out
src\muse.c(904) : error C2143: syntax error : missing ';' before '__try'
src\muse.c(904) : warning C4091: ' ' : ignored on left of 'int ' when no variable is declared
src\muse.c(904) : error C2059: syntax error : '='
src\muse.c(916) : error C2059: syntax error : '__try'
restore autodig behavior
autodig messages were broken due to a change in the dig_typ interface which
shifted all the values by 1, but not all callers of dig_typ got changed.
knights and covetous monsters
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.
B03002 - missing fountain messages
<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.
R972 - rust monster eating gold
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.
B03001 - trapdoors while blind and levitating
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).
R926 - polymorphed player does not explode at thin air
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.
cursed daggers thrown by monsters can go thru closed doors
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?
dropping gold on an altar
<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.
R975 - message for charging for items lost in a cursed magic bag
The loss message was not always printed due to testing the wrong variable
before printing the message.
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.
early directory validation
Allow early prefix directory validation to help prevent
failed games and lost save files due to incorrect config
file settings.
It was possible to terminate the win32 ports late in the user
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.
axing boulder/statue follow-up
<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?)
grateful frozen monsters
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.
cohrs [Sun, 30 Jun 2002 22:29:58 +0000 (22:29 +0000)]
feeling monsters while blind and levitating
<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.
cohrs [Sun, 30 Jun 2002 07:11:26 +0000 (07:11 +0000)]
final attributes say riding when you die while dismounting
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().
nethack.allison [Sun, 30 Jun 2002 01:10:54 +0000 (01:10 +0000)]
Guidebook synch with monexplain[]
<email deleted>
Sent: Thursday, June 13, 2002 12:03 PM
Subject: Beta 1 comments
> The description of Y monsters will be updated in the Guidebook
> 'monsters' option list to match mon_explain[], I assume? (Yes, yes,
> documentation :-)
nethack.allison [Sun, 30 Jun 2002 00:52:49 +0000 (00:52 +0000)]
lookat() trapped detail
<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.