nethack.rankin [Thu, 9 Feb 2006 06:12:00 +0000 (06:12 +0000)]
partial fix for #H38 - hallucination of personal names (trunk only)
This fixes the monnam() family of functions so that hallucinated
personal names, such as Barney, won't be prefixed by "the". It uses the
same hack as is used for shopkeeper names: single character prefix on
names which warrant some handling other than the default. rndmonnam()
strips that off, so unmodified callers (which is almost all of them...)
retain the same behavior has before.
There are several capitalized names that I have no idea whether need
to be treated as personal names:
Evil Iggy - name, or type of monster named after someone?
Totoro - no clue
Invid - ditto
Vorlon - just guessing that it's a species rather than an individual.
I couldn't remember whether Godzilla was baby Godzilla's mother or father,
so I went with female there. So far, no callers of rndmonnam() care about
gender so it doesn't make any difference. Because of that, I didn't look
though the non-capitalized names to see whether any should be all male or
all female and need one of the other prefix codes.
I've added "were-rabbit" from the Wallace & Gromit movie. The recent
ads for its DVD release reminded me that I was going to add that back when
the movie first came out. I haven't seen it but the creature name fits.
I also fixed Smokey Bear. Smokey the Bear is a common misspelling;
I thought we had fixed that ages ago, back when people still had some clue
as to who in the world he was.
nethack.rankin [Tue, 7 Feb 2006 05:35:29 +0000 (05:35 +0000)]
wildmiss refinement (trunk only)
> This makes monsters marginally smarter--independent of their defined
> intelligence levels--by skipping their remaining attacks when the first
> turns out to be targetted at nothing. The exception is for monsters with
> both melee and spell attacks; they'll keep going in case they end up
> choosing a spell which doesn't need a target location. (It's rather
> ironic that the most intelligent monsters are the ones who'll foolishly
> continue swinging at thin air. This could be improved by forcing then to
> skip ahead to their spell attack.)
This implements the improvement for spellcasters. After they make
a wildmiss, they'll skip any further physical attacks but eventually try
their spell. (Titans have multiple physical attacks followed by a spell;
other high-end monsters probably do too.)
nethack.rankin [Tue, 7 Feb 2006 05:20:16 +0000 (05:20 +0000)]
`spestudied' manipulation again (trunk only)
Refine last week's change dealing with polymorphing spellbooks: when
a spellbook has faded to blank after multiple readings, randomize its
spestudied value so that it doesn't always polymorph into another blank
book on the first subsequent transformation attempt.
cohrs [Sun, 5 Feb 2006 03:29:45 +0000 (03:29 +0000)]
inappropriate polyself spit attacks
Submitted by <Someone> 12/3/05. player poly'd as guardian naga produced a
different attack than a real guardian naga. The fix causes an algorithm
similar to that used in spitmnu to be used in dospit.
cohrs [Sun, 5 Feb 2006 00:58:13 +0000 (00:58 +0000)]
M164: finding saved games in QT nethack start
Only 5 months old. The Unix code to find saved games, currently only enabled
for Qt use, fails to use fqname and SAVEPREFIX, so it doesn't find saved
games when prefixes are in effect.
cohrs [Sat, 4 Feb 2006 23:51:26 +0000 (23:51 +0000)]
Xorns in stone outside Sokobon and other special levels
First reported 12/13/2003, I think, but my archives contain more recent reports
too. Special level specs like NON_PASSWALL and NON_DIGGABLE only apply
to the map sections for which they are specified. So, on special levels of
Sokobon, the large surrounding area is stone, but have no special flags set.
So, it was possible to teleport a Xorn and have it appear in this outer area.
Addressed this by checking the perimeter of the map(s) and if all are
nondiggable and nonpassable, propagate this to the surrounding stone.
This appears to be the intent on such levels, so there is no need to
force the affected special levels to explicitly specify this.
cohrs [Sat, 4 Feb 2006 20:34:26 +0000 (20:34 +0000)]
gender and size of leaders and nemeses
Combo fix based on several reports and additional research.
In quest.txt and/or data.base, the Grand Master, Arch Priest, Ixoth, Master
Kaen, Nalzok, Scorpius, and the Master Assassin are all referred to as male
via reference: his or him. Ideally, there would be a way to parameterize
this in the quest.txt, but I don't see a clear way to do that at this time.
For the time being at least, set the M2_MALE flag for these monsters.
The Dark One was referred to via "his" once in the quest.txt. This case
I was able to modify the offending text rather than forcing a gender.
Orion and Norn are referred to as a giant in data.base but their size did
not correspond. I left the symbol as S_HUMAN although perhaps it should
be S_GIANT. Finally, Orion, the Norn, Cyclops and Lord Surtur, as
giant-types, should be able to tear webs.
nethack.rankin [Sat, 4 Feb 2006 06:11:44 +0000 (06:11 +0000)]
`spestudied' manipulation for polymorphed spellbooks (trunk only)
From a bug report... some
special case handling for polymorph of spellbooks never worked as intended.
It's possible to polymorph a spellbook, use it to learn a new spell, and
then repeat as many times as you like unless/until you run out of polymorph
magic or the small chance of "object shuddering" causes it to be destroyed.
Polymorph was incrementing the book's ``number of times read'' field with
the intent that it would fade to blank after being read 3 times (which
turns out to the 4 times since the check is actually for re-reading 3 times
after the first). That didn't work because the spestudied field was ignored
when learning a new spell, only checked when relearning a known spell.
Now it will be checked when learning a new spell, and also the book
tweaking during polymorph is slightly more elaborate. If you happen to
get a blank book during the item selection, it will have a read counter
of 0 and can be re-polymorphed into something readable. But if you get
some other book, its read counter will be set to one greater than than the
original book's (same as before). And then the counter will be checked
to see if it has gone over the limit, in which case the book will be made
blank and its counter will be reset to a random value. Re-polymorphing
that blank book again has 1/4 chance apiece among the following cases
book gets blanked again; goto step 1...
book is non-blank but too faint to read; reading attempt will fail
book can be read normally and then re-read once
book can be read normally and then re-read twice
which is more inline with the intent of the original special case code.
It's actually slightly nastier since you'll occasionally get a book for a
spell you don't know yet but then not be able to learn it from that book.
nethack.rankin [Sat, 4 Feb 2006 04:06:16 +0000 (04:06 +0000)]
fix #Q251 - reading engravings while asleep
From a bug report, floating down onto an engraving
due to levitation timeout would yield "You read: <engraving text>" even if
you were asleep at the time. Random teleport while asleep could produce a
similar result. The problem was actually a little bigger: you'd also get
"You see <object> here" if there was an object instead of or in addition to
an engraving.
nethack.rankin [Thu, 2 Feb 2006 07:20:08 +0000 (07:20 +0000)]
monsters with multiple attacks missing wildly (trunk only)
Reduce verbosity for monsters with multiple attacks who "swing wildly
at you and miss" or "miss your displaced image" due to their confusion or
your invisibility or displacement. It's aggravating to sit through that
three times for claw/claw/bite or swing/swing/kick when those longer
descriptions of why such missing happened guarantee multiple --More--
prompts. (Can't simply use Norep() to deal with this because wildmiss()
varies its messages.)
This makes monsters marginally smarter--independent of their defined
intelligence levels--by skipping their remaining attacks when the first
turns out to be targetted at nothing. The exception is for monsters with
both melee and spell attacks; they'll keep going in case they end up
choosing a spell which doesn't need a target location. (It's rather ironic
that the most intelligent monsters are the ones who'll foolishly continue
swinging at thin air. This could be improved by forcing then to skip ahead
to their spell attack.) Exploding monsters aren't affected because they
don't have multiple attacks. Offhand I can't think of any other situation
where a wild miss on the first of N attacks could still yield a successful
result on any of the other N-1 actions.
Monsters attempting ranged attacks who get multiple shots (due to
multiple weapon attacks per turn rather than to multi-shot volley during
a single attack) will end up conserving ammo when they stop after seeing
that the first shot didn't find a target. Note that trying to attack you
but accidentally attacking some other target isn't affected since that
doesn't yield the wild miss outcome. Intelligent monsters probably ought
to recognize that their attack against you ended up hitting someone else
and refrain from repeating that mistake N-1 more times. Whether feedback
from that ought to carry over to their next turn is not so clear cut.
nethack.rankin [Thu, 2 Feb 2006 06:15:13 +0000 (06:15 +0000)]
zapping unseen wands (trunk only)
Noticed recently when a user reported that an unseen monster zapping
an unseen wand caused wand of striking to become discovered. [That was
because the zap also hit a door and the code for the latter didn't check
whether the wand had been seen, and it got fixed a couple of weeks ago.]
When the player zaps wands while the hero is blinded, it was discovering
(for the cases where the effect can be observed without sight) the wand
even though the wand's description was unknown (showed in inventory as
"a wand"). This replaces the calls to makeknown() in zap.c with calls to
new learnwand(), which checks whether the wand description is known; you
no longer discover something you've never seen. Reverse effect has also
been added: if the type of wand has been discovered earlier, zapping an
unseen wand (another of the same type, picked up when blind and zapped
while still blind) will now mark it as seen (to show up in inventory as
"a wand of <whatever>" instead of just a "a wand"). The latter aspect
really ought to be independent of prior discovery, but we currently have
no way to record "we know what this particular item does even though we
don't know what type of item it is yet". [If we add that, it would be
applicable to potions (when operating on stacks) and rings too.]
Minor change: zapping yourself with wand of opening or spell of
knock will remove attached ball&chain rather than give a "chain quivers"
message. Explicitly zapping the chain already did that; if the unlocking
magic works on the chain connected to your leg then it really should also
work on your leg connected to the chain. Zapping unlocking at yourself
probably should also scan inventory to check for carrying locked chests,
but I didn't add that. (If added, then locking magic will need to be
augmented likewise.)
This also fixes <Someone>'s recent complaint: zapping an unknown
wand of teleportation at yourself didn't make it become discovered.
Now it will be, under the same circumstances as when you're riding: if
teleport control causes you to be prompted for destination, or if random
destination moves you more than jumping distance away from your original
position. (The Stunned exception to teleport control, which was missing
in zap_steed, perhaps ought to be moved into the macro definition of
Teleport_control itself so that all code always handles it consistently.)
nethack.rankin [Sun, 29 Jan 2006 04:32:04 +0000 (04:32 +0000)]
fix #H30 - rn2(0) from off by 1 bug in special level door creation
From a bug report, the placement
of random doors by the code that loads special levels would attempt to
evaluate rn2(0) and either get a divide by zero crash (normal build) or an
impossible warning (DEBUG enabled when compiing rnd.c, done automatically
when BETA is defined). The problem was only noticable for random door in
a 1x1 room; none of our distributed levels specify such a thing so regular
users won't have encountered this bug. It's a one line fix.
Altar placement in temples also had a quirk of a similar nature. It
wouldn't trigger rn2(0) problems but would always place the altar to left
of mid-point in rooms with even width and above the center point in ones
with even height. Now the placement is randomized so that sometimes it'll
be to the right and/or below mid-point in such cases.
This also simplifies a couple other instances of similar expressions
that I spotted.
nethack.rankin [Sat, 28 Jan 2006 06:46:19 +0000 (06:46 +0000)]
reduce temple verbosity (trunk only)
Cut down on the excessive verbosity generated when entering a temple.
The first time you enter a particular temple (or more accurately, the
temple attended by a particular priest), you still get the three message
sequence
The <priest of foo> intones:
Pilgrim, you enter a sacred place!
You have a strange forbidding feeling...
or
You experience a strange sense of peace.
except that the last one doesn't say "strange" any more. On subsequent
visits to the same temple, you usually won't get the first introductory
message any more, often won't get the second entry one, and sometimes
won't even get the final one, depending upon how much time has elapsed
since the previous entry. The old verbosity could really be infuriating
when attempting to lug corpses to the altar before they spoil. Even
though the messages don't affect the passage of time, it always felt as
if they were slowing you down. And even when you weren't in any hurry,
it required at least one and often 2 or even 3 responses to --More--
depending upon the length of the deity's name and whether some other
message was also delivered on the same turn (fairly common in minetown).
Saving and restoring, or leaving the level and returning, resets
the priest's memory of when the messages were last given, so the next
entry after that behaves similar to the very first. This was initially
intended for cleanup prior to saving bones data, but it seemed reasonable
to have it apply to the current game too. Unattended temples now also
have a 25% chance of not giving any message when entering. That one is
random rather than based on the passage of time since last entry; there's
no priest available to track the latter data.
cohrs [Tue, 24 Jan 2006 07:17:41 +0000 (07:17 +0000)]
knight quest message bit
I noticed this a while back while inspecting an unrelated report.
It seems to me the breath of a dragon is more like broiling than baking
and thought the message wasn't consistent with this.
nethack.allison [Sat, 14 Jan 2006 17:02:22 +0000 (17:02 +0000)]
wiz_identify change (trunk only)
This patch alters wiz_identify so that it displays an
inventory menu with all items shown identified
without actually identifying them.
You can just press ^I (or whatever the wiz_identify command
is) a second time, while the menu is displayed to actually identify
them (tested with TTY menus only).
nethack.rankin [Thu, 12 Jan 2006 06:24:23 +0000 (06:24 +0000)]
priest/minion bits (trunk only)
Cleanup up a couple of priest and minion allocation/conversion bits.
Also, restrict minion naming so that "guardian <foo>" is only applied when
<foo> is an Angel. (That restores old behavior from before a change I made
last October; it prevents the guardian Angel from being recognized while
hallucinating. It probably affects slash'em too, where they have tame
minions besides the astral level's guardian Angel.)
nethack.rankin [Thu, 12 Jan 2006 06:06:33 +0000 (06:06 +0000)]
mextra.h comments (trunk only)
Add an introductory comment for each type of extension. Also move
ANGRY/NOTANGRY shopkeeper macros from old eshk.h out of the common header
and into shk.c so that their use doesn't end up spreading into other code.
Not fixed: entry #9 in the block comment at the top is truncated
mid-sentence.
nethack.allison [Thu, 12 Jan 2006 03:23:05 +0000 (03:23 +0000)]
tin details (trunk only)
Reveal more tin details at end of game disclosure.
b - an uncursed carrot
c - an uncursed tin of broiled kobold meat
d - an uncursed tin of stir fried fox meat
e - 4 uncursed tripe rations
f - 4 uncursed food rations
g - an uncursed cream pie
n - 4 uncursed tins of spinach
o - 3 uncursed tins of pureed newt meat
p - an uncursed homemade tin of fox meat
Note that in the case of homemade and rotten
it sounded better to have the term before the
word tin, rather than after:
homemade tins of newt meat
rather than:
tins of homemade newt meat
The wishing code should probably be
changed to reflect this so people can wish for
a "homemade tin of newt". As it stands, they must
wish for a "tin of homemade newt" which differs
from the final display. That is not included.
nethack.rankin [Sun, 8 Jan 2006 06:37:22 +0000 (06:37 +0000)]
another mextra bit (trunk only)
Replace the fixes entry with one which mentions the magic word "panic".
That'll make it easier to find in the future when looking back for the
nasiest bugs (which I seem to end up doing periodically).
nethack.rankin [Sun, 8 Jan 2006 06:19:42 +0000 (06:19 +0000)]
mextra tweaks (trunk only)
Add new_mname/free_mname functions to make monster name handling be
more like the other extended data and to hide mextra details a bit more.
Add some casts where int and unsigned are being intermixed. Simplify
christen_monst(); it ought to be changed to have type `void' but I wanted
to avoid modifying another ten or so files.
nethack.allison [Fri, 6 Jan 2006 05:46:03 +0000 (05:46 +0000)]
mextra changes
Note: The CVS repository was tagged with NETHACK_PRE_MEXTRA
prior to application of this patch to allow easy withdrawal if necessary.
Adds a new mextra structure type that has a set
of pointers to various types of monster structures
including:
mname, egd, epri, eshk, emin, edog
Replaces the mextra bits in the monst structure
with a single pointer called mtmp->mextra of type
(struct mextra *).
The pointer can be null if there are no additional
structures attached. The mextra structure is not
adjacent to the monst structure.
Reduces the in-memory footprint of the monst that
has no other structures attached, at the cost
of adding 6 extra long ints per monster to
the save file
The new mextra structure has the mextra fields
independent of each other, not overlapping as was
the case with previous NetHack versions.
This patch doesn't do anything to capitalize on
that difference however.
Consolidates vault.h, epri.h, eshk.h, emin.h and edog.h
into mextra.h
Adds a macro for checking for whether a monster has
a name:
has_name(monst)
This fixes the magic trap panic
expels() -> spoteffects() -> dotrap() ->
domagictrap() -> tamedog()
because the monst no longer varies in size so no
replacement is required.
nethack.rankin [Thu, 5 Jan 2006 03:50:08 +0000 (03:50 +0000)]
fix #H12 - unseen wand of striking becoming known
From a bug report: while hero
was blinded, monster zapped him with a not-yet-discovered wand of striking
and the wand type became discovered. The report was slightly off; the
described case is already handled correctly. However, if the zap happened
to hit a door, the wand would incorrectly be made known even when not seen.
nethack.rankin [Tue, 3 Jan 2006 05:28:13 +0000 (05:28 +0000)]
fix #H11 - forcing lock with mattock
From a bug report: dwarvish mattock was
subject to breaking when attempting to force a lock, because it is treated
as a bladed weapon. So is pick-axe; they're both defined as blunt (WHACK
attack mode), but the definition of is_blade() erroneously includes them
since P_PICK_AXE falls between P_DAGGER and P_SABER. That skill should be
renumbered, but I haven't investigated what else might happen when that's
done so this fix uses a special case instead.
I noticed that there was an unnecessary old check for rubber hose;
it's excluded along with whip by the skill > P_LANCE test. When fixing
that up, I realized that the obscure feature of forcing via statue was
broken; it always failed the skill < P_DAGGER test. Also, I took away the
exception for aklys; even though designed as a throwing weapon, it is used
as a club. I wasn't sure about the exception for flail; it is perfectly
capable of bashing things but the code apparently excludes it for use as
a prying implement. Switching its check to P_FLAIL catches grappling hook
along with it.
nethack.rankin [Sat, 31 Dec 2005 06:19:04 +0000 (06:19 +0000)]
genociding mindflayers
When looking at name_to_mon() to teach it how to cope with possessive
suffices, I discovered that it already knows how. But while looking at
it, I remembered a newsgroup complaint from a while back by someone who
accidentally committed suicide by attempting to genocide "master mindflayers"
(when he meant "master mind flayers"). name_to_mon() didn't recognize that
misspelling but it did match "master" as a role title. Unfortunately for
the player, his character was a monk; the game allowed him to genocide his
own role and he died. That's kind of harsh for such a likely misspelling.
(I don't think a monk is very likely to ever use "master thief" as a mistake
for "master of thieves", but catch that one too just in case. Conversely,
recognize "master of assassins" as an alternate for "master assassin".)
Also, wishing for "the <something>" strips off "the" and finds (or not)
<something>, but genociding didn't. You could specify "a wolf" to wipe out
all wolves, but "the wolf" yielded "such creatures don't exist", and ^G had
similar unfriendly behavior. This extends name_to_mon() to handle it.
nethack.rankin [Fri, 30 Dec 2005 06:08:20 +0000 (06:08 +0000)]
corpse_xname overhaul (trunk only)
Extend the capabilities of corpse_xname() so that various callers can
be simplified. It can how handle an article prefix, effectively turning it
into corpse_doname() (not quite; still need doname() to see a count when
quantity is more than one, or to see bless/curse state). It can also handle
inclusion of adjectives like "partly eaten" or "bite-covered". For unique
monsters those come out in the form
the Chromatic Dragon's partly eaten corpse
instead of the old
partly eaten Chromatic Dragon corpse
[so wishing probably needs to be taught about potentially finding a monster
name before assorted adjectives such as blessed; also, name_to_mon() needs
to learn how to cope with the possessive suffix].
A sizeable chunk of this patch deals with consolidating some of the
redundant "petrified by a cockatrice corpse" handling. It may be possible
to consolidate all remaining instances together since they're quite similar,
but I didn't think about that until just now and I want to get this patch
over with.
nethack.rankin [Tue, 27 Dec 2005 03:45:27 +0000 (03:45 +0000)]
you summoned it!
From a bug report, "You have summoned it!" (when human
sacrifice brings a demon which you can't see) is poorly worded, to put it
mildly. I'm sure there are plenty of other places where "it" seems odd,
but this one is now fixed....
nethack.rankin [Fri, 23 Dec 2005 04:35:24 +0000 (04:35 +0000)]
diagonal blockage exceptions
From a bug report, amorphous creatures can fit underneath
closed doors but could still be considered too big to fit through diagonal
gaps. Let them and several other shapeless or flexibly shaped critters
squeeze through provided that they pass the not-carrying-too-much check.
nethack.rankin [Fri, 23 Dec 2005 02:51:06 +0000 (02:51 +0000)]
fix #H4 - remote recognition of Astral Plane high priests
From a bug report: the Call command's
prompt is careful not to include "of <deity>" when asking what name to give
a high priest on the Astral level, but the resulting rejection message of
"the <unique monster> doesn't like to be called names" did not, resulting
in feedback of "the high priest of <deity>" and giving away which temple it
is from afar.
nethack.rankin [Sat, 17 Dec 2005 05:01:27 +0000 (05:01 +0000)]
"can't reach from steed" message bits
These should have been included with a "#dipping from steed" patch
three years ago. I don't know whether I missed them outright, neglected
to cut diffs at the time, or just forgot to apply the diffs to my cvs
directory prior to committing the rest of that patch.
nethack.rankin [Thu, 15 Dec 2005 07:07:25 +0000 (07:07 +0000)]
gold theft while mounted (trunk only)
From a bug report, "The leprechuan quickly snatches some
gold from between your feet!" doesn't make much sense when you're riding.
Fix started out simple, but "between" isn't right if you're above the floor,
and "rear hooves" for horse or "rear claws" for dragon didn't sound right
for steed (or poly'd hero), so it got a little more complex. Complicated
even more due to requiring two copies; ick.
A minor side-effect of this change is that somewhat naughty sounding
"The leprechaun quickly snatches some gold from between your rear regions!"
won't occur anymore. :-}
nethack.rankin [Thu, 15 Dec 2005 05:33:15 +0000 (05:33 +0000)]
shopkeeper names when hallucinating (trunk only)
A bug report complained that Izchak is identifiable when the hero is
hallucinating. That's true but it wasn't particular to him; all shop
transactions were giving accurate shk name regardless of hallucination.
This is a quick fix that avoids changing shk message handling: pick some
shk name at random each time one is used. I didn't intend for it to also
force Izchak to use the general chat response instead of his set of special
messages, but that ends up happening due to randomized name not matching
his, so you really can't recognize him when hallucinating anymore.
The almost never seen names now have a chance to come into play....
nethack.rankin [Thu, 15 Dec 2005 04:20:23 +0000 (04:20 +0000)]
levitation timeout
Forwarded from the newsgroup by Michael: giving a count before '.' to
rest many turns wouldn't be interrupted by having levitation end (despite
autopickup taking place at the time, which is what the thread is about but
not all that relevant to this particular issue). Stopping counted activity
is easy, so that's all I've done. Stopping a timed occupation would be a
lot harder due to message sequencing; I'm not going to attempt it.
nethack.rankin [Thu, 15 Dec 2005 03:48:09 +0000 (03:48 +0000)]
redundant includes
Remove several duplicate includes I discovered while reconciling the
vms Makefile. All of these are already being brought in via hack.h so don't
need to be explicitly included after it.
nethack.rankin [Thu, 15 Dec 2005 03:39:20 +0000 (03:39 +0000)]
vms Makefile (trunk only)
I couldn't find the original depend.awk (which started out on vms) and
didn't feel like attempting to recreate it, so did this the old fashioned
way (grep,&c of src/*.c). I think that all of the various Makefiles need
one or more of these changes. Adding context.h to the hack.h dependencies
and emin.h to monst.{o|obj} are the most significant ones.
nethack.rankin [Sun, 11 Dec 2005 03:09:05 +0000 (03:09 +0000)]
in_lava_effects (trunk only)
The in_lava_effects flag should never be saved and restored; putting
it into the context struct was a mistake. Move it to the iflags struct
(where the branch code already has it). I haven't bumped the EDITLEVEL
setting. Save and bones files from more that a few days ago were breifly
invalid but should be viable again. Save and bones files from the past
couple of days are now no good; sorry about that.
nethack.rankin [Sat, 10 Dec 2005 05:39:24 +0000 (05:39 +0000)]
killer_xname changes (trunk only)
Have killer_xname() handle corpses properly and also avoid having it
use user-supplied fruit names as per <Someone>'s suggestion. Also make
a start at eliminating the umpteen inconsitent checks for whether a monster
type (like "Oracle") ought to be prefixed by "the ".
I used a stub which looped over all object types, all artifacts, and
corpses of all monster types to print the output of killer_xname() for each
one; its prefix choice among {[no article], a, an, the} looked right.
nethack.rankin [Thu, 8 Dec 2005 05:45:43 +0000 (05:45 +0000)]
fix object lost panic (trunc only)
While testing some killer_xname() changes, I noticed that it was
feasible to avoid having some gear destroyed by causing a hangup after
getting the destruction message. And while testing the fix for that, I
stumbled across a panic situation (not caused by my changes). If you
survive entering lava while wearing water walking boots (and aren't fire
resistant yourself, and don't have enough hit points to survive 6d6
damage, and your boots aren't fireproofed...), having those boots be
destroyed will dump you back into the same lava recursively (lava_effects
-> Boots_off -> spoteffects -> lava_effects). And if you survive that
(wizard/explore mode or life-saving), there will be a panic when finishing
deletion of the boots (useupall) because the recursive call will have
already done it (since they aren't worn anymore when inner call handles
them, no additional recursion gets triggered and object deletion happens).
Some of the other stuff I was working on is mixed in here because
this is the configuration I ended up using to test the panic fix.
Several Makefiles are missing the dependency for context.h (post-3.4.3
revision). If yours is, then you'll need to force a full rebuild after
applying this or you'll end up with havoc. (Mine was, but I noticed that
the expected full build wasn't happening and interrupted it to fix that.)
nethack.rankin [Tue, 6 Dec 2005 04:48:27 +0000 (04:48 +0000)]
terminate eating if pet falls asleep or becomes paralyzed (trunk only)
From a bug report: sleeping pet could
be shown as "eating" by stethoscope. Fixing that is a one-liner since all
(or should be all; sleeping gas trap wasn't utilizing it) cases of monster
being forced into sleep go through one routine. That wasn't the situation
for paralysis, but now it is. Paralyzed pets won't continue eating either.
nethack.rankin [Tue, 6 Dec 2005 03:19:33 +0000 (03:19 +0000)]
drawbridge feedback
From a bug report: playing mastermind
with the castle drawbridge yields a sequence of "you hear tumblers click and
gears turn" messages when the notes are partly right, but no sound when all
notes are right and you succeed in opening the bridge. Blinded hero won't
know that it has opened and could reasonably expect to have heard 5 gears
turning. This gives a general gears turning message (for any bridge changed
by any means, not just castle's tune) when it opens or closes out of view of
the hero. So, you get a message about seeing it open when that is the case,
or about hearing gears if you can hear but not see, or no feedback if you
can't see it or hear it (You_hear() is a no-op when you're deaf).
Also, scatter some iron chains when a drawbridge gets destroyed. Iron
chain seems to be the only really suitable item available for bridge debris.
nethack.rankin [Sun, 4 Dec 2005 05:03:52 +0000 (05:03 +0000)]
spheres vs objects
Another one from <email deleted>: freezing spheres have the NOTAKE
attribute but flaming and shocking spheres don't. That means that tame
critters of the latter two types will pick up and drop things. I only saw
it happen with single gold pieces in my limited testing; I guess they're
really weak.
This one sounds sort of familiar; I think it might have been reported
before. The fix is so trivial I don't know why it didn't happen.
nethack.rankin [Sun, 4 Dec 2005 04:12:45 +0000 (04:12 +0000)]
demon graft
From a bug report, bribeable demons will demand money when
hero has fainted from lack of food and hero can pay while unconscious. I
decided to just borrow from vault guard behavior and have the hero regain
consciousness. It turns out that reset_faint() has been broken since a
long ago (before my time...) change to nomul() [nomul(0) is a no-op while
fainted since multi is negative then]. Now fixed; both bribe-demanding
demons and vault guards will cause fainted hero to wake up when they arrive.
If hero can't move for some reason other than fainting, demons will skip
the bribe demand and immediately become hostile (vault guard in that case
goes away after saying that he'll return). There is no deafness handling;
perhaps the bribe demand is accompanied by sufficient pantomiming for the
hero to figure it out? ;-)
Also fix an unintended potential alignment hit against the player if
bribeable demon is killed after becoming hostile due to misjudging displaced
hero's location.
nethack.rankin [Sun, 4 Dec 2005 03:05:18 +0000 (03:05 +0000)]
quest message tweaks
From a list of bugs sent by <email deleted>, the initial message for
the knight quest included the phrase "looking closer" which isn't suitable
if the hero is blind at the time. Also, one samurai guardian message used
"ninja" (assassin, more or less) where it ought to have been using "ronin"
(samurai without any master, a disgrace).
The archeologist and tourist quests' initial messages had similar
blindness problems with "look". (There are still at least 3 other places
which use "appear"; I've left those alone.)
nethack.rankin [Sat, 3 Dec 2005 04:46:48 +0000 (04:46 +0000)]
killer reason tweaks
A couple of items pointed out by <Someone>: the killer reason
when hit by mis-return of thrown Mjollnir would vary depending upon whether
it was fully identified, unlike several other death-by-missile cases which
force the object to be described as if fully ID'd. Also, the killer reason
when death is caused by kicking an object would give way too much detail
about the object if it was ID'd. Fix both by switching to killer_xname().
Now "killed by a war hammer named Mjollnir" becomes "killed by Mjollnir"
(same as when already ID'd), and "killed by kicking 5 cursed poisoned -1
orcish arrows" becomes "killed by kicking orcish arrows" whether ID'd or not.
[Trunk only] question? Should being hit by returning Mjollnir really
be receiving half-physical-damage reduction when hero has that attribute?
It ignores the fact that Mjollnir is also dishing out lightning damage.
Are other artifact hits ignoring such things too?
nethack.rankin [Sat, 3 Dec 2005 03:16:25 +0000 (03:16 +0000)]
fix #Q241 - swallowing Medusa (trunk only)
From a bug report, eating Medusa's corpse is fatal
but devouring her whole (purple worm or poly'd hero) was not. Now it will
be. Also, being killed by swallowing a cockatrice or a Rider could have
disclosed "you went without food" if you hadn't eaten anything else prior.
This fixes that too, although it might be a little silly if it happens to
a monk since he'll feel guilty (for non-vegetarian diet) right as he dies.
nethack.rankin [Thu, 1 Dec 2005 04:19:15 +0000 (04:19 +0000)]
grammar bit: fatal cockatrice corpse theft (trunk only)
From a bug report, stealing a cockatrice corpse
from a monster while polymorphed into a nymph and not wearing any gloves,
the cause of death ended up being "petrified by cockatrice corpse". It would
also have said the same thing if a stack of multiple corpses was involved.
This fixes both cases, and also hypothetical unique monsters with petrifying
touch. (Last bit tested by temporarily adding Medusa to touch_petrifies().)
nethack.rankin [Tue, 29 Nov 2005 02:28:52 +0000 (02:28 +0000)]
fix #Q235 - rubbing against known touchstones
Allow rubbing any object against any touchstone even when the latter
is known so only gems make sense. Also, propagate an earlier fix which
allowed rubbing gold against known touchstones to the branch (it had been
trunk only).
nethack.rankin [Sun, 27 Nov 2005 04:04:20 +0000 (04:04 +0000)]
number_pad:3,4,-1 (trunk only)
I left out the Guidebook updates when I checked in the number_pad
changes yesterday. I no longer have any way to preview either format but
at least LaTeX doesn't give any warnings about the TeX one. I suspect that
the list of valid settings is going to be too wide; it will likely need to
become an actual item list or table to make the descriptions wrap sensibly.
doc/Guidebook.txt hasn't been updated in a long time. Can someone
generate an up-to-date copy and check it in?
nethack.rankin [Sat, 26 Nov 2005 02:32:49 +0000 (02:32 +0000)]
number_pad:3,4,-1 (trunk only)
Add support requested by a user for number_pad:3 to use a phone-style
keypad layout where 1,2,3 are on the top row and 7,8,9 on the bottom,
opposite of the adding machine layout adopted by computer keyboards. Also
number_pad:4 combines that with the number_pad:2 hack to give different
behavior for the 5 key (also meta-5 and meta-0). And number_pad:-1 is a
rather absurd way to support German keyboards which have y and z keys
swapped, avoiding the need to add a new option for that. With it, z moves
upper-left and y zaps wands, with corresponding swap of the upper case,
control, and meta variations of those two letters. (There is a "German
keyboard patch" for this floating around the net, but it implements a
compile time configuration setting which results in hard-coded behavior
for those keys. This implementation lets it be toggled on or off at will.)
There's more here, intended to ultimately simplify rhack() quite a
bit. Most of that isn't finished yet. However, the part that is done
should produce same run-time behavior as before. I hope....
iflags.num_pad and iflags.num_pad_mode should now be viewed as opaque
items used for communicating dynamically updated option settings to the
core only. Ports and/or interfaces which feel inclined to peek at them
should switch to Cmd.num_pad,&c instead. (I've made that switch for a
couple of places which would have stopped compiling due to sdir and ndir
going away, and for vms+tty where I could directly test the change(s),
possibly plus one or two places which got heldover over from my earlier
attempt that did try to update all of them. Ports which haven't made the
change yet ought to continue to work as-is though.)
Eventually ports/interfaces which implement alternate ways to invoke
commands (pull down menus or extra keyboard buttons or whatever) should be
able to scan Cmd.commands[] to figure out which input characters trigger
which nethack functions. The ones that currently use hardcoded key lists
will probably need to migrate before any dynamic key binding functionality
gets implemented. (Which may never happen; it's definitely not on my own
to-do list.) Cmd.serialno is intended to be the way for them figure out
when the commands have been changed (which right now only happens when 'O'
is used to alter the number_pad setting); perhaps a new interface callback
would be better suited for communicating this.
It may be necessary to rearrange header inclusion so that func_tab.h
gets included before flag.h (and/or struct cmd gets moved from the latter
to the former--but then func_tab.h would be needed in a bunch of places
which don't currently use it) to support some pre-ANSI compilers. And the
command initialization might need to be moved to somewhere earlier than
init_options() at some point if port/interface initialization starts caring
about it.
nethack.rankin [Sat, 19 Nov 2005 04:38:42 +0000 (04:38 +0000)]
wishing bit (trunk only)
The code let you wish for trapped containers in wizard mode and tried
not to let you do so in normal mode. But it handled the trapped attribute
by overloading the poisoned one, so wishing for a "poisoned chest" would
produce a trapped chest in any mode. This fixes that by removing the
overloading. You can wish for a trapped box/chest (or tin) in wizard mode
and you can now also explicitly wish for an untrapped one in any mode.
Asking for trapped in normal mode--most likely hoping to seed a dangerous
bones file--just negates any preceding "untrapped" handled earlier within
the same wish, and specifying "poisoned" for a container no longer has any
effect.
nethack.rankin [Thu, 17 Nov 2005 04:51:13 +0000 (04:51 +0000)]
magically detecting chest traps (trunk only)
(Nothing to do with the recent suggestion that the search command be
extended to find traps on adjacent containers.) When a crystal ball or
confused/cursed gold detection performed trap detection, it found trapped
chests on the floor but not any which were buried or carried by the hero
or by monsters. This fixes that.
Still needs fixing? The message "your toes stop itching" when the
only trap on the level is at the hero's current location is pretty strange
if that trap happens to be carried rather than stood over, but I don't
know what to change it to. I guess it's always been strange if there was
a ceiling trap rather than a floor trap involved.
nethack.rankin [Thu, 17 Nov 2005 03:51:16 +0000 (03:51 +0000)]
fix #Q227 - cancelling items in shop entrance (trunk only)
From a bug report: cancelling objects
in a shop doorway or one step inside would cause the shopkeeper to brand you
a thief. The relevant code is trying to handle the case where you're inside
one shop and zap a wand or spell from there into another one; it didn't cope
with being in the neutral area of a single shop.
nethack.rankin [Tue, 15 Nov 2005 04:50:06 +0000 (04:50 +0000)]
yet more artifact name handling (trunk only)
The fix to prevent naming an unknown gray stone "the Heart of Ahriman"
from revealing whether the object was a luckstone was inadequate to prevent
using the same trick with "the Mitre of Holiness" to determine if an unknown
helmet was a helm of brilliance. (I don't know whether whoever figured out
the first one has realized the second yet; no one had mentioned it in the
newsgroup the last time I looked.) To get this right we need to check for
objects sharing the same set of shuffled descriptions in addition to testing
whether they have identical descriptions. Doing that meant reorganizing how
object shuffling is done, but it produces the same behavior as before.
nethack.rankin [Sun, 13 Nov 2005 05:55:32 +0000 (05:55 +0000)]
X11 typo
From a bug report: fix a typo for mouse
position handling in set_button_values(). I have no way to test this,
nor can I tell whether it could have ever impacted anyone. The old code
clearly had a mistake and the fix is obvious.
nethack.rankin [Sun, 13 Nov 2005 04:43:50 +0000 (04:43 +0000)]
more luck stone ID (trunk only)
Refine yesterday's change in how attempting to assign an artifact's
name to some object works: only check object descriptions for undiscovered
object types. Once you know that a particular gray stone is a flint stone,
you could name it "the Heart of Ahriman" as before the previous change.
Conversely, once you learn luck stones, you could give that name to any
other unknown gray stone. This restores the ability of a player to name
his elven broadsword such that some unsuspecting other player might find
"a runed broadsword named Stormbringer" in a bones file.
nethack.rankin [Sun, 13 Nov 2005 03:20:20 +0000 (03:20 +0000)]
gas spore explosions while hallucinating (trunk only)
From a bug report: when hallucinating,
messages for affected monsters and/or hero referred to "the gas spore's
explosion" instead of supplying random monster names. This is a little bit
tricky; since it can be displayed multiple times for one explosion, it needs
to be constructed on the fly in explode(). (Caller couldn't have handled
this anyway since it's using the value for killed-by reason which mustn't
be distorted by hallucination.)
nethack.rankin [Sat, 12 Nov 2005 05:30:11 +0000 (05:30 +0000)]
plug luckstone identification hole (trunk only)
From the newsgroup: when you pick up a gray stone, you can determine
whether it is a luckstone by attempting to name it "the Heart of Ahriman".
Your "fingers slip" if it is, they don't if it isn't. That's way too
cheesy for my tastes. This patch will make the finger slipping occur for
any item that has the same description rather than just for the exact type.
Now you won't be able to name any type of gray stone "the Heart of Ahriman"
(nor an elven broadsword "Stormbringer"; however, assuming that you manage
to acquire a non-artifact runesword, you can still uselessly name it
"Orcrist" if you want).
From a bug report: when a guard who's
leading the character out of a vault comes across gold (from mineralize()
usually, but a player could deliberately seed the area in xorn form), the
message "the guard calms down and picks up the gold" was given even though
the guard wasn't angry. Pick up such gold as soon as temporary corridor
reaches it so that on his next move the guard won't mistakenly think that
the hero has just dropped it.
nethack.rankin [Sun, 6 Nov 2005 06:10:32 +0000 (06:10 +0000)]
more container flags (trunk only)
cknown and lknown flags for containers are now checked when deciding
whether an item is fully identified, and they're set when identification
takes place. (You'll learn how many items are inside even if you haven't
looked to see what they are yet. This means that an inventory listing of
unpaid items will reveal the contents after you've used enouch magic to ID
an unpaid container.) Also, set those flags for any container in initial
inventory; rogues should know that sack starts out empty.
nethack.rankin [Thu, 3 Nov 2005 06:15:59 +0000 (06:15 +0000)]
container status bits (trunk only)
Couple of post-3.4.3 things: using ':' to view the contents when
looting or applying a container wasn't setting its cknown flag (contents
known); probing a container wasn't setting lknown flag (lock state known).
nethack.rankin [Thu, 3 Nov 2005 04:54:55 +0000 (04:54 +0000)]
minions/Angels (trunk only)
Angels used the epri extension even though they're never priests,
presumeably because they're sometimes flagged as "renegade". Since the
only priests ever flagged as renegade are roaming minions rather than
temple priests, move the renegade flag to the emin extension and switch
Angels over to that. Summoned Angels will now always have the isminion
flag set.
Makefiles need updating: monst.{c,o} now depends upon emin.h.
nethack.rankin [Wed, 2 Nov 2005 02:35:31 +0000 (02:35 +0000)]
chest trap bit
From a bug report, the "you stagger"
message when a trapped chest releases a cloud of gas shouldn't include the
inaccurate phrase "and your vision blurs" if hallucination is blocked by
Grayswandir. Suppress it in that case.
nethack.rankin [Sat, 29 Oct 2005 04:07:21 +0000 (04:07 +0000)]
fix #Q211 - inappropriate vault feedback
From a bug report, you'd get the message
"the corridor disappears" whenever a vault guard was killed, even if the
temporary vault corridor was already gone due to leaving its vicinity. This
fix seems to work ok, but I don't pretend to understand how the convoluted
vault code actually works.
nethack.rankin [Tue, 25 Oct 2005 01:47:03 +0000 (01:47 +0000)]
makeplural/makesingular support for foo-at-bar (trunk only)
Suggested by Janet, after inhaling paint fumes. Unlike mother-in-law,
which is an entry in the hallucinating monsters list and would be pluralized
if chosen as a tin description, I think the rank title man-at-arms will only
ever go through plural/singular handling if used as a fruit name. But since
the man/men part was already implemented for pluralization, adding the -at-
part is trivial. Also adds men/man singularization for the general case
where -at- isn't involved.
nethack.rankin [Sat, 22 Oct 2005 06:38:41 +0000 (06:38 +0000)]
fix M203 - grammar for tin of hallucinated "mother-in-law" (trunk only)
From a bug report, (is that name just
a coincidence, or is it our Matt?), "this tin smells like mother-in-laws"
should be "this tin smells like mothers-in-law". That led to a small can
of worms when I tried experimenting with mother-in-law as the named fruit.
Naming your fruit "pomegranates" would result in "pomegranateses" if you had
more than one. These changes are mostly just band-aids for that; I think
the proper solution is to singularize the user's value when fruit name is
being assigned. Force it into lower case at the same time, then some other
special casing could be eliminated. There's no particular reason to keep
"grapes" and "grape" as separate entries, nor "matzot" and "MATZOT" either.
One of the non foo-in-bar changes prevents "grapefruit" from getting
a false match against named fruit "grape". (Are there any legitimate cases
where trailing text should be ignored? I couldn't think of any.) Another
results in a wish for "kumquats"--when fruit name "kumquat" exists--yielding
two instead of a random amount, the way that specifying plural works with
other sorts of objects. And if you're strange enough to name your fruit
"kumquats" in the first place, asking for "kumquat" will produce exacly one.
This patch applies cleanly to 3.4.4 but I don't think it's been tested
adequately enough to be included there.
nethack.rankin [Thu, 20 Oct 2005 03:58:46 +0000 (03:58 +0000)]
more monster key use
Let monsters use lock picks and credit cards in addition to keys for
opening doors. And the earlier code to have pets hang on to a key didn't
work as intended. It worked fine if the key was the only object carried,
but the monsters' item dropping code didn't give any special handling to
keys so they'd be dropped too if the pet carried another droppable item.
This eliminates second set of checks for handling some items specially--
dropping now uses the same routine as is used when pet movement decides
whether there's anything to drop.
Also, a couple more door message tweaks. "You see a door open" seems
strange when you watch your pet do the opening. Previously fixed for the
"unlock and open" case, this does the same for opening already unlocked
doors and for giants smashing down doors--it now gives a more specific
message when you see a monster perform the action.
Possible change in play balance: pets capable of picking up the
rogue's Master Key of Thievery or tourist's Platinum Yendorian Express
Card will keep one of them. So a player might accidentally lose one by
leaving it on the floor in a pet's path, or more significantly, the Card
will yield a means of giving magic resistance to a monster who can't wear
a cloak or dragon scales. It's neutral and the most interesting high-end
pets are lawful (hence won't pick it up), so that probably won't have much
impact.
nethack.rankin [Tue, 11 Oct 2005 04:30:24 +0000 (04:30 +0000)]
SC343-9 followup (trunk only)
monst->cham usage bit. CHAM_ORDINARY probably ought to be discarded
and replaced by NON_PM; then mons[0] wouldn't be ineligible to become a
shapechanger. (Not that we want giant ants to mutate on the fly, but in
case someone ever inserts something interesting in front of them.)
nethack.rankin [Tue, 11 Oct 2005 04:22:18 +0000 (04:22 +0000)]
key use by pets
Spotted when fixing the Rogue level digging/phasing bug: pet movement
was setting up the wrong flag for pets who happened to be carrying a key.
This wasn't particularly noticeable because they tended to drop keys right
after picking them up. And apparently the checks elsewhere in movement
prevented that wrong flag from having any effect; once I changed it so that
pets would hang on to keys, I never saw them break a door down with one.
Now they'll keep keys, similar to unicorn horns and pick-axes, and use them
properly. The door unlocking message needed a tweak because it assumed
that the opener was on the far side trying to reach you and looked quite
odd when you could see the action taking place.
I've put this into the fixes file as a new feature rather than a fix.
nethack.rankin [Tue, 11 Oct 2005 03:47:27 +0000 (03:47 +0000)]
fix C343-3 / #U793, tame h and U don't dig on Rogue level
From a bug report, 2003: a
pet who normally would dig could pass through walls and solid rock on the
Rogue level without leaving a tunnel in its wake. Monsters are explicitly
prohibited from digging on the Rogue level, but pet movement ignored that
and specified that locations accessible via digging were valid destinations;
actual movement bypassed the digging step so it acted like passthru.