]> granicus.if.org Git - nethack/log
nethack
17 years agoSunsword vs shades, take II (trunk only)
nethack.rankin [Thu, 10 May 2007 03:03:46 +0000 (03:03 +0000)]
Sunsword vs shades, take II (trunk only)

     From the newsgroup:  Sunsword is ineffective against shades.  It
gets a special bonus of double damage vs undead, but since it's not made
of silver it was only doing 1 point of damage against shades.  Make the
bonus-vs-undead attribute override the silver-required criterion.  (No
comparable handling for flimsy weapons against thick-skinned critters
this time.)

17 years agoSunsword vs shades _reversal_
nethack.rankin [Thu, 10 May 2007 02:20:22 +0000 (02:20 +0000)]
Sunsword vs shades _reversal_

     Reverse the previous patch.  It made other artifacts like Fire Brand
also do full damage against shades, which wasn't inteded.  Back to the
drawing board....

17 years agoSunsword vs shades
nethack.rankin [Thu, 10 May 2007 02:14:10 +0000 (02:14 +0000)]
Sunsword vs shades

     From the newsgroup:  Sunsword is ineffective against shades.  It
gets a special bonus of double damage vs undead, but since it's not made
of silver it was only doing 1 point of damage against shades.  Make the
bonus-vs-undead attribute override the silver-required criterion.  (If
there's ever a whip or other flimsy weapon which gets a bonus against
some type(s) of thick-skinned monster, its attack will override the skin
thickness in similar fashion.)

17 years agof-iring without ammo refinement
nethack.rankin [Tue, 8 May 2007 03:45:53 +0000 (03:45 +0000)]
f-iring without ammo refinement

     A change a couple of weeks ago to have player's chosen ammo be auto-
quivered when using the 'f' command while quiver is empty was excluding
objects with quantity 1.  That was on the basis that it was in the process
of being thrown so there was no point in putting it into the quiver slot
first.  But if it was a boomerang, or Mjollnir under suitable conditions,
there was a chance for it to be available for another throw, so there is
a point to quivering it.  Also, player can hit ESC at the direction prompt
and end up not throwing it after all.  So, put even quantity 1 items into
the quiver when 'f' command is used with empty quiver.

17 years agobreaking empty wands
nethack.rankin [Tue, 8 May 2007 02:02:22 +0000 (02:02 +0000)]
breaking empty wands

     I found a copy of a news posting from 1996 which suggested that
using a[pply] to break a wand which has 0 charges should have a chance of
wresting out one extra charge, like zapping.  That way the player can't
destroy spent wands with impunity, and it makes the two wand actions be
more consistent.  Also, it's trivial to implement.  :-)

17 years agolast? singular/plural update (trunk only)
nethack.rankin [Tue, 8 May 2007 02:01:08 +0000 (02:01 +0000)]
last? singular/plural update (trunk only)

     Move some common code from makeplural & makeingular into a separate
routine.  Also, add ``candelabrum <-> candelabra''.  Wizard mode wishing
for "candelabra" now works; "Candelabra of Invocation" does not--not due
to case but because the " of " isn't preceded by 's' in the plural form.

17 years agochatting with grunting monsters
nethack.rankin [Sun, 6 May 2007 00:57:49 +0000 (00:57 +0000)]
chatting with grunting monsters

     From the newsgroup:  attempting to #chat to a gnome elicited "the
gnome grunts" (because gnomes have MS_ORC sound, and MS_ORC is just a
synonym for MS_GRUNT) even when the hero was a gnome.  This patch makes
MS_ORC (orcs, gnomes, kobolds, a couple of named demons) or MS_GRUNT
(ogres, ettins, trolls, gargoyles) behave as MS_HUMANOID when the hero
has same race.  That by itself wasn't quite enough; hostile MS_HUMANOID
monsters other than fake players wouldn't respond, so this gives those
a generic message (threatening the hero).  In a somewhat similar case,
peaceful MS_CUSS monsters wouldn't respond; now they say something too.

17 years agoenlightenment for Half_xxx_damage (trunk only)
nethack.rankin [Sat, 5 May 2007 22:44:51 +0000 (22:44 +0000)]
enlightenment for Half_xxx_damage (trunk only)

     Include Half_physical_damage and Half_spell_damage in enlightenment
feedback and end-of-game disclosure.

17 years agozhitu thinko (trunk only)
nethack.rankin [Sat, 5 May 2007 21:41:54 +0000 (21:41 +0000)]
zhitu thinko (trunk only)

     Spotted by Janet:  in the ``using #monster to breath[e] at self''
patch I accidentally reversed the Half_spell_damage adjustment (to breath
only from non-breath attacks only, not by doubling instead of halving
damage :-).  Changing it to include zaps by the hero is intentional.

17 years agousing #monster to breath at self (trunk only)
nethack.rankin [Sat, 5 May 2007 04:32:19 +0000 (04:32 +0000)]
using #monster to breath at self (trunk only)

     When testing the monster-breath-at-self patch I noticed that trying
to cure green slime by having hero breathe at self didn't work.  The code
was calling buzz() with arguments that produced an attack directed against
the hero's location, but there was a chance for it to miss outright and
when it didn't, reflection would block it.  This makes breathing at
yourself with `#monster' comparable to zapping a wand or casting a spell
at yourself:  it always hits.

17 years agogreen slime vs fire breathers (trunk only)
nethack.rankin [Sat, 5 May 2007 04:10:32 +0000 (04:10 +0000)]
green slime vs fire breathers (trunk only)

     Extend defense against being turned into slime to monsters who can
breathe fire.  Other attack types which dish out fire damage didn't seem
suitable for this.

17 years agomakeplural typo (trunk only)
nethack.rankin [Sat, 5 May 2007 02:23:22 +0000 (02:23 +0000)]
makeplural typo (trunk only)

     I misspelled piranha.

17 years agomakeplural/makesingular overhaul redux (trunk only)
nethack.rankin [Sat, 5 May 2007 01:31:47 +0000 (01:31 +0000)]
makeplural/makesingular overhaul redux (trunk only)

     Move some of the singular<->plural transformations from code to data.
Also fixes one more missed singularization:  lurkers above.  A big chunk
of this is just a bit of minor reorganization:  moving otense() & vtense()
next to makeplural(), and moving the wishable subranges array from between
makeplural & makesingular to in front of the wishing code.

     I was going to redo makeplural to use the same style as makesingular
(switch from ``len >= N && !strcmpi(buf, spot-(N-1))'', with spot pointing
at final character, over to ``BSTRCMPI(bp, p-N)'' which tests p-N against
bp as the bounds check and has p pointing to the string's terinating '\0')
but have decided not to tackle that.

17 years agomore plural/singular (trunk only)
nethack.rankin [Thu, 3 May 2007 01:17:46 +0000 (01:17 +0000)]
more plural/singular (trunk only)

     Extend makeplural/makesingular case-insensitivity to vtense() and to
wizard mode wishing for dungeon features.  And the previous set of fixes
missed one:  makesingular("zombies") was producing "zomby".  Plus a bit of
groundwork for a likely second overhaul of makeplural/makesingular.

17 years agomakeplural & makesingular overhaul (trunk only)
nethack.rankin [Tue, 1 May 2007 03:59:32 +0000 (03:59 +0000)]
makeplural & makesingular overhaul (trunk only)

     I stumbled across a copy of an old newsgroup bug report which
complained that wishing for "Gauntlets of Power" didn't work.  I thought
that this was something which had already been fixed, but when I tried it
out, I discovered that you still couldn't wish for that.  It was failing
because case-sensitive makesinglar() didn't recognize that "Gauntlets"
needs special handling.  After the unwanted transformation, the case-
insensitive object matching would fail to find "gauntlet of power".

     Removing case-sensitivity for special cases like "boots" and "gloves"
would have fixed that, but this patch goes further and removes case-
sensitivity entirely for both makesingular and makeplural.  Words which
get their endings modified work when the input is upper or mixed case.
Any modified letters retain the case of the original, so the reason for
case-sensitivity--user specified fruits that aren't lower case--is covered.

     Some makeplural fixes:  the plural for dingo is dingoes (dictionary
says "-es", not "-s") and for roshi is roshi (just guessing here; most of
the Japanese names use same spelling for singular and plural, but we were
producing roshis).  Several words which makesingular leaves in plural form
(boots, gloves, &c) are now recognized by makeplural (avoiding gloveses).

     It also fixes a bunch of incorrect singularizations of plural monster
names:  foxes, *wolves, lynxes, fungi/humunculi/succubi, mumakil, wumpuses,
baluchitheria, Aleaxes, *elves, erinyes, djinn, priestesses, & valkyries.
Some non-monsters that makeplural handles correctly were also not being
singularized right:  feet, hooves, lice/mice, algae, children, nemeses.

17 years agoexplode() while engulfed (trunk only)
nethack.rankin [Mon, 30 Apr 2007 04:56:37 +0000 (04:56 +0000)]
explode() while engulfed (trunk only)

     For an explosion caused by the player while the hero is engulfed,
skip adjacent monsters.  Also, don't give "you hear a blast" when an
unseen explosion is caused by a scroll of fire (explosion is always unseen
when hero is engulfed, regardless of explosion's cause).  [Offhand I'm
not sure whether something other than the player can trigger an explosion
while the hero is engulfed.]  Lastly, round up instead of down when a
monster takes half damage, so that non-zero can't be reduced to zero.

17 years agomore data.base
nethack.rankin [Mon, 30 Apr 2007 03:32:42 +0000 (03:32 +0000)]
more data.base

Reformat a couple of older movie dialog entries to match the newer ones.

17 years agocombat, potion, archeologist data.base entries
nethack.rankin [Mon, 30 Apr 2007 03:01:22 +0000 (03:01 +0000)]
combat, potion, archeologist data.base entries

     Add second quotes for archeologist and potion, plus a silly new entry
for combat.

17 years agomonsters defending against slime (trunk only)
nethack.rankin [Mon, 30 Apr 2007 02:47:11 +0000 (02:47 +0000)]
monsters defending against slime (trunk only)

     Like their use of lizard corpses to defeat being turned into stone,
let monsters use wands of fire, fire horns, and scrolls of fire to try to
defeat being turned into slime.  If the scroll is read while confused, it
won't succeed.  Otherwise, monsters who don't resist fire will take some
damage in the process and might end up killing themselves (although with
the testing I've gone I've yet to see that happen--I guess that means
that handling for dying-in-the-process hasn't been adequately tested...).

     So far, they don't know how to jump onto adjacent fire traps, nor
will fire breathing monsters breath at themselves.  I don't know whether
I'll get around to tackling either of those.

17 years agoslime groundwork
nethack.rankin [Mon, 30 Apr 2007 02:18:03 +0000 (02:18 +0000)]
slime groundwork

     New macro slimeproof() to decide whether something is susceptible
to turning into green slime.  Most of this is just making use of existing
cached permonst values in damageum() and mdamagem() and shouldn't affect
anything.  I wanted to avoid mixing that in with the actual slime changes
which are coming.

17 years agopile_limit option - movement feedback "there are objects here" (trunk only)
nethack.rankin [Fri, 27 Apr 2007 02:05:28 +0000 (02:05 +0000)]
pile_limit option - movement feedback "there are objects here" (trunk only)

     Something that pops up in the newsgroup periodically, with <Someone>
inevitably pointing out the bit of code that the user needs to tweak,
about control of feedback when hero is walking across floor objects.
Implement new option ``pile_limit'' which allows user to set the point
at which the game switches from listing the objects to giving "there are
several/many objects here".  Default is 5, same as previous hard-coded
value (1 object gets listed via pline, 2..4 are listed in a corner popup,
5 or more objects yields a pline message instead).  Setting pile_limit
to 0 means no limit, so objects will always be listed regardless of pile
size.  Setting it to 1 effectively forces no listing since any non-empty
pile size is always at least that big, so can produce "there is an object
here" even though that's no briefer than a pline() to show one object.

17 years agofix #285 - feeling cockatrice corpse while blind (trunk only)
nethack.rankin [Thu, 26 Apr 2007 02:19:25 +0000 (02:19 +0000)]
fix #285 - feeling cockatrice corpse while blind (trunk only)

     From a bug report:  moving while blind
and gloveless onto spot containing a cockatrice corpse is fatal if there
are fewer than 5 items there, but harmless when you get the "there are
several/many objects here" result for 5 or more.  I thought that this was
something which had already been changed, but it wasn't.  Run a touch
check on the whole pile of objects even when no object-by-object feedback
is being given.

     Trunk only because it's using the trunk version of corpse_xname().

17 years agocorpse_xname tweak (trunk only)
nethack.rankin [Thu, 26 Apr 2007 02:13:17 +0000 (02:13 +0000)]
corpse_xname tweak (trunk only)

     Noticed while testing a patch for touching cockatrice corpses;
corpse_xname(,, CXN_ARTICLE) would produce "a cockatrice corpses" when the
object stack quantity was greater than 1.  (This applies to the post-3.4.3
expansion of corpse_xname() in the trunk code, so no fixes entry.)

17 years agocarry_count
nethack.rankin [Thu, 26 Apr 2007 00:51:23 +0000 (00:51 +0000)]
carry_count

     Simplify the GOLDOBJ/!GOLDOBJ handling in carry_count().  Aside from
the initial gold amount, the conditional code was all duplicated.

17 years agom_useupall
nethack.rankin [Sun, 22 Apr 2007 02:42:35 +0000 (02:42 +0000)]
m_useupall

     While updating discard_minvent I noticed that m_useupall is using
the wrong routine to get rid of a monster's weapon.  It probably doesn't
matter since I don't think monsters can use up items they're wielding or
wield items they could use up.

17 years agodiscard_minvent
nethack.rankin [Sun, 22 Apr 2007 02:38:47 +0000 (02:38 +0000)]
discard_minvent

     Genociding * to clear a level in wizard mode, or paying off a
shopkeeper to dismiss kops in any mode, could trigger the recently added
warning about deleting worn items in obfree().  mongone -> discard_minvent
wasn't bothering to unwear/unwield monster gear before deletion.

17 years agofix #H285 - hiders not hiding while hero is on another level (trunk only)
nethack.rankin [Sun, 22 Apr 2007 01:01:22 +0000 (01:01 +0000)]
fix #H285 - hiders not hiding while hero is on another level (trunk only)

     From a bug report, mimics
which were exposed at the time the hero leaves a level remain unhidden
upon return no matter how long the hero is away.  It was actually expected
behavior since the old level is stuck in stasis and hiders only hide when
it's their turn to move, but it was noticeably odd.  This makes unhidden
hiders attempt to hide when hero returns to a previous level or enters a
bones level.  I reorganized the monster handling in getlev() because the
relevant part was taking place before floor objects got restored, so
hidesunder() monsters had nothing to hide under at the time.

17 years agofix #H291 - rogue backstab anomaly (trunk only)
nethack.rankin [Sat, 21 Apr 2007 03:32:26 +0000 (03:32 +0000)]
fix #H291 - rogue backstab anomaly (trunk only)

     From a bug report:  rogue's backstab bonus
(extra damage when foe is fleeing) doesn't apply when dual-wielding but
does apply to thrown weapons--unless both conditions apply.  Having it
apply to throwing is too powerful.  Elbereth makes it trivial to get
monsters to flee and a rogue with expert dagger skill can throw up to 4
of those at a time, so a level 30 rogue could get rnd(30) bonus 4 times
in a single attack.  This makes the backstab bonus only applicable to
melee and polearm attacks.

17 years agof-iring without ammo
nethack.rankin [Sat, 21 Apr 2007 02:43:32 +0000 (02:43 +0000)]
f-iring without ammo

     There was a suggestion in the newsgroup that if you use the 'f'
command when your quiver is empty, that whatever missile you supply to the
"what do you want to throw?" prompt be automatically put into the quiver.
This implements that, and separates most of the common code from dothrow()
and dofire() into a separate routine.  A post-3.4.3 change to dothrow() to
require hands for throwing wasn't propagated to dofire().  With the common
routine, they're much less likely to get out of sync like that.

     This is going into the branch as well as the trunk because the hands
checking mismatch was added there too.

17 years agorandom initial drawbridge state (trunk only)
nethack.rankin [Sat, 21 Apr 2007 01:54:56 +0000 (01:54 +0000)]
random initial drawbridge state (trunk only)

     Suggested by <Someone>:  in the special level compiler, support
"random" in addition to "open" and "closed" for a drawbridge's inital
state.  Drawbridge shares code with door, so the necessary parsing was
already present.  This just treats random as valid for drawbridge instead
of explicitly rejecting it, and makes the special level loader process it.

     He also suggested that the two drawbridges on the bottom level of
the Valk's quest be changed from open to random, but this patch doesn't
go that far.  I think it's a good idea, but since the player can't use a
musicial instrument on those bridges, this has more impact on game play
than it might at first seem.  I don't really want to see Valkyries be
required to use magic for occasions where both bridges start out closed.

17 years agos_suffix bit
nethack.rankin [Fri, 20 Apr 2007 02:26:36 +0000 (02:26 +0000)]
s_suffix bit

     Add support for "your" as possessive form of "you" in s_suffix().

17 years agolife-saving bits (trunk only)
nethack.rankin [Fri, 20 Apr 2007 02:23:33 +0000 (02:23 +0000)]
life-saving bits (trunk only)

     A couple of things noticed when looking at the death-by-brainlessness
code.  The 3.4.3 code ran a loop while life-saving was keeping the hero
alive, which would work if someone added other sources of life-saving than
the amulet but not if they added some form which didn't get used up when
it kicked in.  Post-3.4.3, the dev code eliminated the loop but was no
longer guarding against additional forms of life-saving.  This attempts to
clear the relevant field once any form of life-saving takes effect (for
brainlessness).  It's not perfect since someone could change `Lifesaved'
to look at something other than the hero's properties, but at least it
still avoids the risk of getting stuck in a loop if someone makes a really
bad customization.

     Also, make life-saving use min(2*level,10) instead of flat 10 for
amulet or 8*level for explore/wizard survival when it saves someone whose
max HP have been clobbered somehow.  Other places assume that 1 HP per
level is the lowest the hero will have; saved-life gives a modest bit more.

     Lastly, some post-3.4.3 code to make ghosts/shades immune to brain
sucking was using mon_nam() to start a sentence; Monnam() is needed there.

17 years agocharging rings
nethack.rankin [Fri, 20 Apr 2007 01:43:42 +0000 (01:43 +0000)]
charging rings

     Reported--more or less--by <email deleted>:
chargeable rings don't show up as likely candidates in the "what do you
want to charge?" prompt.  They're supposed to be there once the type has
been discovered but it was using the wrong field so basing that on whether
the player had assigned a name to the type instead.  (Picking a chargeable
ring's letter even though it wasn't listed did work correctly though.)

17 years agolosing saddle while riding
nethack.rankin [Tue, 17 Apr 2007 03:43:17 +0000 (03:43 +0000)]
losing saddle while riding

     Noticed while looking at something else:  zapping a wand of opening
or spell of knock downwards while riding causes your steed's saddle to
fall off, which in turn causes the hero to fall and take some damage.
If that damage was fatal, the saddle would be left worn in bones data.
This reorganizes mdrop_obj() to defer until last the part that ultimately
makes the hero fall off, and changes bhitm() to call that instead of
handling saddle removal inline, also gives new saddle-off feedback there.

17 years agofix water handling in the #H260 lava fix
nethack.rankin [Tue, 17 Apr 2007 03:13:08 +0000 (03:13 +0000)]
fix water handling in the #H260 lava fix

     The patch made a month ago to handle remaining at a lava or pool
location without moving had a problem with being in pools of water.  It
was yielding "But you don't drown.  You touch bottom." if you had magical
breathing and took actions other than moves.  I think it's fixed now.

[New bug, or rather newly noticed old bug:  slowly sinking while being
stuck in lava doesn't notice if you lose fire resistance and ought to be
burned up immediately.  Also, fully sinking into lava doesn't appear to
burn up equipment--unless it's done in the bones handling--the way that
falling directly in without fire resistance does.]

17 years agomsummon,nasty result counts (trunk only)
nethack.rankin [Mon, 16 Apr 2007 03:58:30 +0000 (03:58 +0000)]
msummon,nasty result counts (trunk only)

     Reported in Dec'04 by <email deleted>, the
monster spell "summon nasties" could mistakenly give a message of "a
monster appears" instead of "monsters appear" when more that one monster
gets summoned.  Some of the candidate monsters for nasty() can produce a
group from makemon(), as can ones for msummon() which nasty() sometimes
calls in Gehennom.  Compare the number of monsters before and after the
creation attempt(s) instead of assuming makemon() creates one at a time.

     I don't know whether other routines face the same mis-count issue,
but I suspect there may be several.

17 years agoMUSE of green slime, anti-stoning tins (trunk only)
nethack.rankin [Mon, 16 Apr 2007 03:04:54 +0000 (03:04 +0000)]
MUSE of green slime, anti-stoning tins (trunk only)

     Reported in Dec'04 by <email deleted>,
salamanders are capable of using items and of eating green slime corpses
without being transformed into slime, but would not pick up nor eat such
corpses to recover from being turned into stone.  Now they will.  Also,
monsters who are able to open tins (mainly via carrying a dagger or knife)
will pick up tins of lizard and of acidic monsters in order to use those
to be cured from stoning.  The latter is already covered by this new
feature entry in fixes35.0 which previously applied only to nymphs:
"some monsters can eat tins in addition to corpses to cure some ailments".

17 years agokicker kicking
nethack.rankin [Mon, 16 Apr 2007 03:03:08 +0000 (03:03 +0000)]
kicker kicking

     Reported in Dec'04 by <email deleted>, an
unpoly'd hero or a hero poly'd into monster form which lacks a kick
attack both get bonus from rings of increase damage when kicking, but
a hero poly'd into monster form which has a kick attack did not.

17 years agolast #U1233 - doppelganger shapes (trunk only)
nethack.rankin [Sat, 14 Apr 2007 02:38:56 +0000 (02:38 +0000)]
last #U1233 - doppelganger shapes (trunk only)

     My last fix from the Dec'04 report sent by <email deleted>.  Many of its remaining observations/complaints are
about things which aren't bugs.  This implements the suggestion that
doppelgangers should take on humanoid form, although it doesn't take away
the 1/7 chance for pick_nasty() and it can still fall back to arbitrary
shapes when it doesn't pick a humanoid within 5 tries.  This also allows
doppelgangers to take on the shape of the various quest guardian monsters
[mostly the quest leaders' attendants, although there is at least one
extra foe (ninja)].  It excludes the quest guardian for the player's own
role, and I don't think there are any cases where it can yield unexpected
quest guardian behavior.

     This also allows specifying monster class (via description or letter)
when #monpolycontrol asks for type of monster to give to a polymorphing/
shapechanging monster.

17 years agomore #U1233 - taming feedback (trunk only)
nethack.rankin [Thu, 12 Apr 2007 05:31:25 +0000 (05:31 +0000)]
more #U1233 - taming feedback (trunk only)

     One of the complaints included in the Dec'04 report from <email deleted> was that spell of charm monster doesn't give
any feedback.  This makes that spell, and scroll of taming, always give a
message.  And the scroll will become discovered if a visible or sensed
monster gets converted from hostile or peaceful to tame, or from hostile
to peaceful.

     Scroll of taming/spell of charm monster didn't hit steed when hero
is mounted; now it does.  I don't know whether that matters though.  You
can saddle a non-tame monster, but you can't ride one even in wizard mode.
However, I'm not sure whether a tame steed you're already riding can
become untame, let alone if it can do so without throwing you.  If latter
is possible then re-taming while still mounted has now become feasible.

17 years ago^G (trunk only)
nethack.rankin [Tue, 10 Apr 2007 04:24:17 +0000 (04:24 +0000)]
^G (trunk only)

     Change controlled monster creation to support specifying monster
by class name in addition to by class letter and the usual type name.

17 years agomore #U1233 - specifying mon class instead type for polyself (trunk only)
nethack.rankin [Tue, 10 Apr 2007 03:39:52 +0000 (03:39 +0000)]
more #U1233 - specifying mon class instead type for polyself (trunk only)

     Another item from the Dec'04 report sent in by <email deleted>.  When prompted for a type of monster to polymorph
into, giving a monster class description like "dog or other canine" (or
single letter like 'd'), triggered "I've never heard of such monsters".
Instead of adjusting the message, this chooses a member from the class.

     I put this into the fixes file as a new feature.

17 years agogenocide bit (trunk only)
nethack.rankin [Tue, 10 Apr 2007 02:27:22 +0000 (02:27 +0000)]
genocide bit (trunk only)

     Simplify a recent change.

17 years agofixes typo (trunk only)
nethack.rankin [Sun, 8 Apr 2007 04:40:12 +0000 (04:40 +0000)]
fixes typo (trunk only)

17 years agoname_to_monclass (trunk only)
nethack.rankin [Sun, 8 Apr 2007 04:35:19 +0000 (04:35 +0000)]
name_to_monclass (trunk only)

     Move the code for determining monster class from user's input string
out of do_class_genocide() and into new routine name_to_monclass().  I'm
planning to use it when name_to_mon fails to match anything for controlled
polymorph (not ready for prime time yet).

     Also, avoid getting stuck in a loop if hangup occurs while prompting
player for class of monster to genocide.  ESC, whether deliberate or fake
input after hangup, will now be the same as specifying "none", throwing
away the genocide opportunity.

17 years agofix #U1233 - controlled polymorph by hero with lycanthropy (trunk only)
nethack.rankin [Sun, 8 Apr 2007 01:51:57 +0000 (01:51 +0000)]
fix #U1233 - controlled polymorph by hero with lycanthropy (trunk only)

     <email deleted> reported a long list
of inconsistencies and suggestions.  This attempts to address the ones
about werecritters and vampires.

> Polymorphed player does not get werecreature changes. (intentional?)
> Player in were form does not turn into werehuman form, ever.  (Previous
> bugged behavior was that player turned into a plain human)
> Player afflicted with a were cannot polymorph into werecreature or
> werehuman form.

     The first guess is right; being polymorphed blocks lycanthropy state
changes.  The second is not a bug either; hero is either a <werecritter>
when in beast form or a <role> when in human form, never human werecritter
monster.  The last one feels more like a bug though; it happened because
all lycanthrope monster entries are marked NOPOLY.  This patch extends
an earlier post-3.4.3 change to allow player with polymorph control to
explicitly specify werecritter when in role form or human werecritter when
in beast form to toggle shape.  It also allows closely related monsters
to toggle from role to beast (ie, "giant rat" yields wererat).

> Vampire or Werecreature changing form may change sex.

     Now the three semi-controlled changes--becoming a dragon due to armor,
toggling were form, and vampire into various critters--are prevented from
having the 10% chance of sex change kick in.  For monsters, lycanthropy
didn't apply (sex never toggles) and vampire shifting is now covered but
turning into a dragon due to scales/mail remains susceptible to sex change.

     Also, post-3.4.3 code made polymorphing into a vampire enable the
#monster command but neglected to tell the player.

17 years agofix #H174 - ice effects on corpses are miscalculated
nethack.rankin [Thu, 5 Apr 2007 02:47:43 +0000 (02:47 +0000)]
fix #H174 - ice effects on corpses are miscalculated

     Reported in August by <email deleted>, the code that handles
slower rotting for corpses on top of or buried under ice is misusing its
ROT_ICE_ADJUSTMENT factor such that a value other than the current 2 would
produce incorrect results.  Instead of multiplying by 1/N it needs to use
(N-1)/N, which happens to be the same when N is 2.  In a second message he
asked about why putting a corpse on ice starts out by subtracting from its
age to make it older, and it took me a while to decide that that is correct
behavior.

     No effect on game play since ROT_ICE_ADJUSTMENT remains set to 2.

17 years agoice timeout (trunk only)
nethack.rankin [Wed, 4 Apr 2007 02:31:14 +0000 (02:31 +0000)]
ice timeout (trunk only)

      Zapping cold at an ice location which has a melt timer would set
new timeout to a random value which could actually cause that ice to melt
sooner.  Make sure the new value is always at least as big as the old one.
Also, MAX_ICE_TIMEOUT wasn't actually the maximum ice timeout; now it
is--if the generated value is higher, omit the timer so that that ice is
permanent.  No fixes35.0 entries necessary; this is post-3.4.3 code.

17 years agofix #Q431 - water elemental caught in beartrap (trunk only)
nethack.rankin [Tue, 3 Apr 2007 05:11:44 +0000 (05:11 +0000)]
fix #Q431 - water elemental caught in beartrap (trunk only)

     Reported two months ago by <email deleted>,
having a water elemental become trapped in a bear trap seems pretty
strange.  Fixed by marking water elementals as M1_UNSOLID (like air and
fire elementals), which has a side-effect of making them immune to webs
as well.  Tweaked some unused digging code which checks unsolid(), added
unsolid() to the types allowed to bar through iron bars, and brought the
check for whether a monster is willing to enter a bear trap location up
to date.  That code also needed an update to reflect the change made to
anti-magic traps last year.  Lastly, there was another report which
suggested that being hit by a bear trap should dish out some damage
(along with a suggestion that wand of opening should work to escape such
traps, which has already been done).  This makes bear trap do 2d4 damage
(on entry, not when trying to pull out after becoming stuck).

17 years agoBARGETHROUGH tweaks (trunk only)
nethack.rankin [Tue, 3 Apr 2007 03:46:14 +0000 (03:46 +0000)]
BARGETHROUGH tweaks (trunk only)

     Prevent monster with barge-through capability--currently only the
astral Riders--from swapping places with another monster which has that
same capability.  Otherwise, if the target one moves after the barger,
it might just repeat the maneuver, undoing the first swap.  If there's
no room to move anywhere else--maybe they've barged through a crowd into
a narrow spot--they could get stuck swapping and re-swapping every turn.

     I've also allowed swapping with baby long worms and with adult ones
which lack a tail.  When testing that, something strange happened and
the displacer was drawn on the map as a long worm tail.  mdisplacem()'s
place_worm_seg() must have been responsible, but I don't understand how
the bit of code involved could kick in for a worm without tail segments.
I've reorganized mdisplacem() to avoid this occurrence, I hope....

     Also, barge-through swapping with a mimic exposes it as a mimic;
swapping with an eating pet causes the meal to end.  No fixes entries;
this is post-3.4.3 code.

17 years agofix #H165 - sokoban "flaw" (trunk only)
nethack.rankin [Tue, 3 Apr 2007 03:20:27 +0000 (03:20 +0000)]
fix #H165 - sokoban "flaw" (trunk only)

     Back in <email deleted> complained
that randomly generated giants in Sokoban would drop boulders when killed,
interfering with the puzzle solution.  He suggested that giants either
be disallowed or be generated without inventory in that dungeon branch.
This doesn't go that far; it just rejects giants on the first pass during
random monster selection, making them much less likely to appear there
but still allowing them if giant is chosen two times in a row.  (Existing
boulders aren't an issue here; giants can't pick them up in Sokoban.)

17 years ago2007
nethack.allison [Sun, 1 Apr 2007 06:39:50 +0000 (06:39 +0000)]
2007

17 years agooption order
nethack.rankin [Sun, 1 Apr 2007 04:33:50 +0000 (04:33 +0000)]
option order

     From a bug report, the `splash_screen' boolean
option was out of alphabetical order.

17 years agocouple of comments
nethack.rankin [Sun, 1 Apr 2007 04:23:47 +0000 (04:23 +0000)]
couple of comments

17 years agostone-to-flesh vs golem statues and figurines
nethack.rankin [Sun, 1 Apr 2007 03:36:30 +0000 (03:36 +0000)]
stone-to-flesh vs golem statues and figurines

     Back port the trunk fix that prevents stone-to-flesh on self when
wielding a figurine from leaving stale worn object pointer and eventually
triggering a panic or crash.  Branch only except for fixes34.4 update.

17 years agostone-to-flesh vs golem statues and figurines (trunk only)
nethack.rankin [Sun, 1 Apr 2007 03:32:53 +0000 (03:32 +0000)]
stone-to-flesh vs golem statues and figurines (trunk only)

     Back in <email deleted> in #U1216
suggested that statues of stone golems which are hit by stone-to-flesh
spell should leave flesh golem corpses instead of meatballs.  But they
should actually have revived as flesh golems.  Stone-to-flesh revival of
golem statues and golem figurines didn't work as intended because golems
other than flesh or leather were considered to be vegan/vegatarian, which
caused them to produce meat rather than living monsters.  Also, S-to-F of
a leather golem statue worked as intended and created a flesh golem, but
S-to-F of a leather golem firugine created a leather golem out of stone
object.  This fixes it so that any type of golem statue or golem figurine
revives as a flesh golem.

     Two other bugs noticed and fixed:  (1) S-to-F cast on self while a
figurine of a non-veggy monster was "worn" in one of the three weapon
slots triggered an "extract_nobj: object lost" panic similar to several
similar cases which were recently fixed (that was 3.4.3; for development
code, it gave "obfree: deleting worn obj" warning instead).  (2) S-to-F
activating a shop-owned figurine didn't charge for it.

17 years agorevived unicorn horns (trunk only)
nethack.rankin [Sun, 1 Apr 2007 01:20:57 +0000 (01:20 +0000)]
revived unicorn horns (trunk only)

     Back in Nov'04, <Someone> pointed out that even with only 5%
chance for dropping a horn upon the death of a unicorn which has been
revived from corpse, it's still possible to produce a nearly unlimited
number of them for polypile fodder.  This bumps the chance for a horn up
to 50%, but flags the horn as coming from a revived corpse and makes such
horns be treated by polymoprh as if they're non-magic (which practically
guarantees that they'll poly into mundane tools instead of magic ones).

17 years agofix #H261 - bias in Bresenham's algorithm in walk_path
nethack.rankin [Thu, 29 Mar 2007 04:03:35 +0000 (04:03 +0000)]
fix #H261 - bias in Bresenham's algorithm in walk_path

     From a bug report, walk_path() was
favoring orthogonal steps at beginning of the path and diagonal ones at
end, when intermixing diagonal and orthoganal produced a more accurate
representation of the real path.  Only mattered for long distance jumps
3x2 or 3x1 steps away; hurtling always moves in a straight line and short
(2x1 knight) jumps aren't affected by the patch supplied with the report.

17 years agofix #H172 - inconsistent damage calculation for negative AC
nethack.rankin [Tue, 27 Mar 2007 04:30:01 +0000 (04:30 +0000)]
fix #H172 - inconsistent damage calculation for negative AC

     Reported last August by <email deleted>:  the code
that decided whether hero poly'd into a pudding would be split when being
hit by an iron weapon always reduced damage by u.uac if armor class is
negative, whereas the normal amount is -rnd(-u.uac).  So player pudding
with good armor always got maximum reduction.  Probably had little actual
effect on game play; puddings can't wear armor so would need to be using
rings and/or spell of protection and/or have eaten rings of protection
while in some previous metallivoric form in order to get good enough AC
for this to matter.

17 years agokicking shop food to tame dog (trunk only)
nethack.rankin [Tue, 27 Mar 2007 03:35:31 +0000 (03:35 +0000)]
kicking shop food to tame dog (trunk only)

     From a bug report, kicking unpaid
food in a shop at a tameable monster resulting in taming the monster
without charging for the used-up food.  This forces kicked objects that
are owned by shops to be put on the shop bill and flagged as unpaid, which
is normally reserved for carried items but makes kicked ones behave like
thrown ones.  (If they land inside the shop without breaking, they're
removed from the bill.)  So kicking food to make a pet now results in the
item being moved from the shop's unpaid bill to its used-up bill, same as
for thrown food.  Although the latter kept billing consistent, it lacked
shop billing feedback; this fixes that too.

17 years agokicking vs throwing vs polearms (trunk only)
nethack.rankin [Sun, 25 Mar 2007 05:31:13 +0000 (05:31 +0000)]
kicking vs throwing vs polearms (trunk only)

     Wielding a bow while kicking arrows gave a shooting bonus.  Also,
From a bug report:  applying a
polearm to hit at range never caused a pudding to split because the attack
gets treated as throwing.  Likewise, confuse monster effect (hands glowing
red) didn't kick in for applied polearms.

17 years agofixes bit for poly'd quest leader
nethack.rankin [Sat, 24 Mar 2007 05:19:54 +0000 (05:19 +0000)]
fixes bit for poly'd quest leader

17 years agopolymorphed quest leader
nethack.rankin [Sat, 24 Mar 2007 04:45:24 +0000 (04:45 +0000)]
polymorphed quest leader

     From the newsgroup:  player chatted with leader and was ejected for
not being high enough level, then when he came back later there was no
leader to be found, but there was a polymorph trap on quest home level.
This makes quest leaders and nemesis be aware of all trap types--rather
than just having leaders be aware of magic portals--so they'll be able to
avoid polymorph traps.  It also makes chatting with a polymorphed leader
work as long as the new form is able to speak (use same criteria as with
poly'd shopkeepers:  can't be in a form that's limited to animal sounds).

17 years agomore object deletion bookkeeping
nethack.rankin [Sat, 24 Mar 2007 03:57:50 +0000 (03:57 +0000)]
more object deletion bookkeeping

     Monster breaking out of armor triggered the object-still-worn warning
that was added to object deletion a couple of days ago.  Update m_useupall()
to clear owornmask.

17 years agoobject deletion bookkeeping
nethack.rankin [Thu, 22 Mar 2007 04:23:55 +0000 (04:23 +0000)]
object deletion bookkeeping

     After the apply-wielded-pie-to-blind-self (quite a while back) and
quivered-candle-burns-out (a week or two ago) bugs where object deletion
left dangling worn-object pointers, add a general check to try to catch
such things at the time of deletion.  Also, clear thrownobj and kickobj
pointers at the time corresponding object is deleted.  (This doesn't add
any checks for them becoming null during process of throwing or kicking,
where I'm not sure that the possibility of missile going away is being
adequately tracked).

17 years agoH206 - passive fire damage affecting weapons (trunk only)
cohrs [Tue, 20 Mar 2007 20:08:09 +0000 (20:08 +0000)]
H206 - passive fire damage affecting weapons (trunk only)
<email deleted> reported back on 8/31/06 that elven weapons were not
affected when he poked a fire elemental with them.  This is true, but
moreover, there was no code to have passive fire to affect attackers.
Now erode_obj() supports all the same damage types as rust_dmg(), and added
the connecting code to allow passive fire attacks do something.
There probably should be macros for the damage types used by rust_dmg
and erode_obj, and possibly these functions should be combined, but they
are slightly different and dealing with that requires more thought.

17 years agogcc compilation bit, missing type
cohrs [Tue, 20 Mar 2007 19:21:38 +0000 (19:21 +0000)]
gcc compilation bit, missing type

17 years agoworn gear after polymorph alignment change [2 of 2] (trunk only)
nethack.rankin [Tue, 20 Mar 2007 04:38:29 +0000 (04:38 +0000)]
worn gear after polymorph alignment change [2 of 2] (trunk only)

     Extend rotouch_equipment() to cover all items in use, worn/carried/
invoked in addition to wielded.  Done when you change alignment, change
shape, or catch lycanthropy.  No-longer-touchable items inflict modest
damage; worn/wielded ones will be unworn/unwielded.  For the shape change
and lycanthropy cases, unwieled weapons are also dropped.  Other unworn
stuff stays in inventory, as do weapons for the alignment change case.

     It ought to force off gloves if worn silver--or hypothetical
artifact--ring has become untouchable and gets unworn.  Instead it just
curses the gloves, if necessary, so that there's some plausibility to
having the ring come off.

17 years agoworn gear after polymorph alignment change [1 of 2] (trunk only)
nethack.rankin [Tue, 20 Mar 2007 03:58:27 +0000 (03:58 +0000)]
worn gear after polymorph alignment change [1 of 2] (trunk only)

     Make polymorphing or changing alignment perform a touch check (as is
done when catching lycanthropy) on wielded weapon(s) to see whether the
hero can still use them in his new form.  Part [2 of 2] will update
retouch_equipment() to check all items in use rather than just weapon(s).
(A comment or two in part 1 already refers to expected behavior of part 2.)

17 years agokicking coins bit (trunk only)
nethack.rankin [Tue, 20 Mar 2007 02:47:06 +0000 (02:47 +0000)]
kicking coins bit (trunk only)

     While looking into the ``NH343 bug - tamed a dog in a shop by kicking
food without being charged'' report (it's reproducible with current code),
I spotted a problem with some post-3.4.3 code.  Ancient compilers can't
handle initializers on auto arrays; this was probably meant to be static in
the first place.

17 years agostill more silver - untouchable objects (trunk only)
nethack.rankin [Sun, 18 Mar 2007 04:23:42 +0000 (04:23 +0000)]
still more silver - untouchable objects (trunk only)

     When retouch_object() prevents hero to wielding or wearing a silver
object, dish out some damage.  Do the same for <foo>bane if hero is a <foo>.

17 years agomore silver vs lycanthropy (trunk only)
nethack.rankin [Sun, 18 Mar 2007 03:43:10 +0000 (03:43 +0000)]
more silver vs lycanthropy (trunk only)

     I had intended to put the Hate_silver patch into the branch as well
as the trunk, but hit too much nonmatching context.  When switching it to
be trunk only, I neglected to put the fixes entry into the proper file.

17 years agosilver vs lycanthropy (trunk only)
nethack.rankin [Sun, 18 Mar 2007 03:26:43 +0000 (03:26 +0000)]
silver vs lycanthropy (trunk only)

     Monster werecritters are vulnerable to silver when in human form as
well as when in beast form, but hero inflicted with lycanthropy was only
vulnerable while in beast form.  Add pseudo-property Hate_silver to handle
that correctly.  Also, add silver vulnerability to enlightenment feedback.
Lastly, hero vulnerable to silver had Con abused if hit by silver missile
but not when hit hand-to-hand; add an exercise() call to the latter.

17 years agomore artifact name formatting
nethack.rankin [Sun, 18 Mar 2007 02:46:58 +0000 (02:46 +0000)]
more artifact name formatting

     killer_xname() was adversely affected by yesterday's change to
obj_is_pname() that required artifacts to be fully identified in order to
use just their name.

17 years agonon-monster kick target
nethack.rankin [Sun, 18 Mar 2007 02:14:59 +0000 (02:14 +0000)]
non-monster kick target

     My "kicking off edge of map" patch on 2007/01/27 had a typo/braino
which caused messages--including death reason--which intended to say
"kicking <an object>" end up using "kicking something weird" instead.

17 years agoartifact name formatting
nethack.rankin [Sat, 17 Mar 2007 01:50:45 +0000 (01:50 +0000)]
artifact name formatting

     Many (most?) non-weapon artifacts show up in inventory and messages
as "the <foo> of <bar>" even when their underlying object type hasn't been
discovered yet.  For types which don't use the `known' bit, obj->known is
forced to 1; obj_is_pname() checked that but not the oc_name_known flag
for the type.  So you'd see things like "the Heart of Ahriman" instead of
"a luckstone named <the H of A>" or "a gray stone named <the H of A>" even
though it hadn't been identified yet, unintentionally hiding the artifact's
object type from the player.

17 years agofigurine/familiar starting inventory
nethack.rankin [Fri, 16 Mar 2007 03:09:52 +0000 (03:09 +0000)]
figurine/familiar starting inventory

     While testing the figurine timer patch, I observed
The goblin wields a crude dagger.
You see a goblin drop out of your pack!

Rather than try to get the sequencing right, just prevent monsters made
by figurine activation or by the create familiar spell start without any
inventory.  This will have a side effect of making wishes for a blessed
figurine of an archon be less powerful, because the subsequent pet A won't
come equipped with a shield of reflection and an artifact--or at least
rustproof--long sword anymore.

17 years agomore #H267 - cursed figurine auto-activation
nethack.rankin [Fri, 16 Mar 2007 02:40:21 +0000 (02:40 +0000)]
more #H267 - cursed figurine auto-activation

     Figurine activation timer had the same problem as burning objects:
it didn't clear up worn object pointers when destroying the object.

17 years agofix #H267 - wielded object burning up panic/crash
nethack.rankin [Fri, 16 Mar 2007 01:56:43 +0000 (01:56 +0000)]
fix #H267 - wielded object burning up panic/crash

     From a bug report:  having a lit
candle or potion of oil be wielded or "worn" as alternate weapon or quiver
at the time it finished burning up would leave a stale worn object pointer
which could trigger a panic or crash.  Need to call useup() instead of
obj_extract_self()+obfree() for objects in inventory, similar to the way
hatching eggs are handled.

17 years agofix #H265 - applying wielded towel fails with odd message
nethack.rankin [Thu, 15 Mar 2007 06:04:08 +0000 (06:04 +0000)]
fix #H265 - applying wielded towel fails with odd message

     From a bug report:  attempting to apply
a towel which is currently "worn" in the weapon, alternate weapon, or
quiver slot fails with "you cannot use it while you're wearing it".  The
message sounds odd when the towel is wielded, and there's no reason why
you shouldn't be able to use it when it's in any of those weapon slots.
Compare it with current blindfold rather than checking its owornmask.

17 years agore-do the #H260 lava fix
nethack.rankin [Thu, 15 Mar 2007 05:24:45 +0000 (05:24 +0000)]
re-do the #H260 lava fix

     Instead of duplicating the bits of spoteffects() which are relevant
to pools of water and lava when standing still, split spoteffects in two
in order to call the relevant half directly.

17 years agoH264 - FreeBSD compilation bit
cohrs [Thu, 15 Mar 2007 04:20:12 +0000 (04:20 +0000)]
H264 - FreeBSD compilation bit
I cannot currently verify this myself, but it seems likely to be correct.

17 years agofix #H260 - escaping lava let you stay there indefinitely
nethack.rankin [Tue, 13 Mar 2007 03:13:09 +0000 (03:13 +0000)]
fix #H260 - escaping lava let you stay there indefinitely

     <email deleted>, escaping from being stuck
by lava via jumping--or simply walking--got you out of the lava while being
at the same location.  You could then stay there for as long as you liked
without falling back in.  This makes a lava and water check on turns where
time passes but hero hasn't moved, performing a subset of spoteffects().
I think the water case only matters when using wizard mode to wish for a
pool or moat, which gets created at hero's feet without making him fall in
(unlike wishing for lava, where hero does immediately fall in).

17 years agoheld artifacts evading your grasp (trunk only)
nethack.rankin [Sat, 10 Mar 2007 05:54:17 +0000 (05:54 +0000)]
held artifacts evading your grasp (trunk only)

     From a bug report, trying
to invoke a wielded artifact after changing alignment resulted in "the
<artifact> evades your grasp" but it remained wielded, contradicting the
message.  This adjusts the message in touch_artifact() if the object is
already in inventory, and adds retouch_object() to handle cases where
failing to be able to touch ought to force unwearing/unwielding.

17 years agofix #H254 - stethocoping mimics (trunk only)
nethack.rankin [Thu, 8 Mar 2007 05:42:15 +0000 (05:42 +0000)]
fix #H254 - stethocoping mimics (trunk only)

     From a bug report, applying a stetoscope to
a mimic which was hiding would report that mimic's stats but not bring it
out of hiding, unlike the behavior for other types of hiding monsters.

17 years agomore score file processing
nethack.rankin [Thu, 8 Mar 2007 03:14:20 +0000 (03:14 +0000)]
more score file processing

     Reduce the amount of stack space needed for the new local variables in
readentry() by about half, from 3.5K to a bit over 1.75K.  Also, reorganize
writeentry(), mostly hiding NO_SCAN_BRACK handling from the actual output.

17 years agofix #Q101 - score file bullet proofing
nethack.rankin [Tue, 6 Mar 2007 03:33:49 +0000 (03:33 +0000)]
fix #Q101 - score file bullet proofing

     Guard against buffer overflows when reading in score entries, in case
`record' has become corrupted or been maliciously modified.  This addresses
the part of "#Q101: Security bug in nethack 3.4.3" that we have control
over.  A Gentoo bug tracking discussion pointed out to us by <email deleted>, describes how that particular Linux
distribution makes users be members of the games group, allowing them to
modify files in nethack's playground directory when it has been set up in
the usual ``setgid games'' manner, thus making score processing in that
environment be vulnerable to buffer overrun exploits.

17 years agotruncating string copy
nethack.rankin [Tue, 6 Mar 2007 03:00:05 +0000 (03:00 +0000)]
truncating string copy

     The majority of our calls to strncpy are in the form
  (void) strncpy(dst, src, n);
  dst[n] = '\0';
so add a new routine, copynchars, which does that.  A few calls care
about strncpy's return value and at least one relies on it only copying a
substring without also terminating the output, but most don't care about
either and none seem to care that `n' ought to have type size_t instead of
int.  The new routine matches our usage better, but I haven't gone through
to change the existing strncpy calls.

18 years agorevised ascension bonus (trunk only)
nethack.rankin [Sun, 4 Mar 2007 02:18:59 +0000 (02:18 +0000)]
revised ascension bonus (trunk only)

     Part of the final score is doubled for ascension.  Some players use
helm of opposite alignment in order to offer and ascend at the first astral
altar they reach.  This limits the score doubling to ascending with your
original alignment intact, penalizing (for the subset of players who care
about score) alignment manipulation.  Converting to a second alignment and
then using a helm of opposite alignment to switch back and offer to hero's
original deity yields a smaller bonus (one-and-a-half instead of doubling).
Offering to either of the other deities (either via permanent conversion
or temporarily switching via helm or both) gets no score bonus.

18 years agopets accompanying ascension or dungeon escape
nethack.rankin [Sat, 3 Mar 2007 06:20:14 +0000 (06:20 +0000)]
pets accompanying ascension or dungeon escape

     There was a report recently about "<pet> is still eating" coming out
on the console at end of game for player using X11 or Qt.  That happened
because the end-of-game pet handling takes place after the message window
has been closed.  It won't happen with the dev code any more because eating
no longer prevents pets from accompanying on final ascent or escape.  But
a pet carrying the Amulet should still fail to tag along and yield similar
result.  However, levl_follower() was changed (probably by me...) to have
pets not attempt to follow when they carried the Amulet, rendering code
in keepdogs()--which reported them as being confused--unreachable.  This
reverts levl_follower() to have Amulet-carrying monsters other than the
Wizard try to accompany the hero during level changes (and keepdogs still
prevents them from succeeding).  It also reorganizes keepdogs() a bit,
giving trapped followers an extra chance to escape from their trap and
preventing those who fail that chance from tagging along (previously,
non-pets ignored being trapped).

     After doing that, I got tty to behave similarly to the X11/Qt report:
a message behaved strangely.  In my case, it was delivered between a pair
of clearings of the screen and only visible by using terminal emulator's
scrolling buffer.  I think there's a wait_synch() missing somewhere, but
haven't tried to figure out where.  Instead, this makes the end-of-game
call to keepdogs() take place sooner, while pline() still works normally.

18 years agodecl.{c,h} bookkeeping tidbit
nethack.rankin [Sat, 3 Mar 2007 05:07:53 +0000 (05:07 +0000)]
decl.{c,h} bookkeeping tidbit

     Move the declaration of `current_wand' to where the other struct obj
pointers are, after decl.h's `#include "obj.h"'.

18 years ago questpgr followup
nethack.rankin [Sat, 3 Mar 2007 04:56:33 +0000 (04:56 +0000)]
 questpgr followup

18 years agoquestpgr support for special level arrival messages (trunk only)
nethack.rankin [Sat, 3 Mar 2007 04:51:47 +0000 (04:51 +0000)]
questpgr support for special level arrival messages (trunk only)

     Suggested by <email deleted>.  The level compiler allows
MESSAGE directives to provide text given upon initial entry to particular
levels.  Modify the code that delivers them to support quest pager text
substitution.  It could also be tweaked to support deliver-by-popup-window
in addition to deliver-by-pline, but I didn't go that far.

     He also suggested revising the message for the Plane of Air, but it
seems ok to me.  Instead, I've changed the message for the Astral Plane to
announce that it holds "the High Temple of <your deity>" rather than the
quite lame "the High Temples of the aligned gods".

18 years agoshop bones
nethack.rankin [Fri, 2 Mar 2007 03:28:25 +0000 (03:28 +0000)]
shop bones

     Dying at a shop doorway, or at the free spot one step in, while not
owing the shopkeeper anything would yield "<shk> gratefully inherites all
your possessions" but leave those possesions where the next hero could
just pick them up for free.  Move them all the way inside the shop, as
happens when the hero dies while owing the shk.  Also, if hero has gold
left after shopkeeper takes any payment owed, force it to go into shk's
inventory instead of having it end up in the pile of other stuff.

     finish_paybill() duplicated much of drop_upon_death(), but not the
two-weapon hack to avoid curse() causing hero's secondary weapon to be
dropped while in the midst of removing it from inventory (but unlike the
old 3.4.1 panic for that, this one just triggered a warning about nonzero
worn mask).  It also lacked the named fruit fixup, whatever that does.
Make finish_paybill() call drop_upon_death() instead of copying it.

18 years agohangup revisited (trunk only)
nethack.rankin [Thu, 1 Mar 2007 03:33:12 +0000 (03:33 +0000)]
hangup revisited (trunk only)

     More SAFER_HANGUP tweaking.  Delay its kicking in until main command
loop has been reached, and shut if off again once program is terminating.

18 years agowizard mode wishing - moat & traps
nethack.rankin [Tue, 27 Feb 2007 04:59:25 +0000 (04:59 +0000)]
wizard mode wishing - moat & traps

     When wishing for terrain, allow type "moat" as well as "pool".  And
when wishing for a trap, verify that trap creation succeeded instead of
always reporting that the requested type was made.

18 years agoexploding potion of acid left in bones
nethack.rankin [Sat, 24 Feb 2007 05:45:34 +0000 (05:45 +0000)]
exploding potion of acid left in bones

     Noticed while looking at the dipping code:  #dip at a pool location
gives the chance to dip into the pool, and dipping a potion of acid into
such causes the acid to explode, causing damage and posibly killing the
hero.  Use-up handling was being done after the dip had finished, so the
potion would remain in final inventory during disclosure and end up in
the resulting bones file if there was one.

18 years agomind flayer vs ghost (trunk only)
nethack.rankin [Sat, 24 Feb 2007 04:59:43 +0000 (04:59 +0000)]
mind flayer vs ghost (trunk only)

     There's newsgroup discussion about a mind flayer sucking the brains
of a ghost, plus speculation that the fix for C343-121 has already taken
care of it.  I agree with them that ghost's brains are too insubstantial
to be hit by brainsuck damage from mind flayers' tentacles.  C343-121 is
vague enough to cover this; the corresponding fixes entry was more specific
and is augmented here.

18 years agosaved game memory initialization (dev only)
cohrs [Fri, 23 Feb 2007 03:44:50 +0000 (03:44 +0000)]
saved game memory initialization (dev only)
Qt windowport crashed on startup because a couple alloc() calls in files.c
were not zero'ing out the memory afterward.  This resulted in uninit'd
memory access if there were no saved games.  This bug is in new dev code.

18 years agofix #H248 - 'speed monster' zap message not always necessary
nethack.rankin [Fri, 23 Feb 2007 03:13:37 +0000 (03:13 +0000)]
fix #H248 - 'speed monster' zap message not always necessary

     From a bug report:  zapping wand
of speed monster (or slow monster) at an immobile monster would give the
usual '<mon> is moving faster" (or slower) message even though the monster
couldn't move at all.  This fixes that for monsters who can never move
and also for monsters who are temporarily paralyzed or asleep, although I
wonder whether speed change magic ought to also snap the latter out of it.