Commit Graph

212 Commits

Author SHA1 Message Date
nethack.rankin
422bfa686e fix #H184 - rndmonnum plan B
From a bug report, the fallback selection criteria
(used when everything is extinct?) in rndmonnum() was excluding hell-only
monsters when outside of Gehennom, but failed to exclude never-in-hell ones
when inside.  [Some of the never-in-hell monsters are Angels, but the rest
are all cold based creatures.  That must date to when fire resistance was
required for the hero, which is no longer the case.  Should those cold
monsters retain their never-in-hell setting?]

     This also fixes a latent copy/paste bug in the unused mons[] definition
of Cerberus (it was the only unique monster which failed to specify G_NOGEN).
2006-08-24 04:50:45 +00:00
nethack.rankin
d78f81a7f3 discovering divine gifts
<Someone> says he reported this five years ago, but I don't think I ever
saw it.  Receiving an artifact as the result of #offer would add it into
the discoveries even if the hero was blind and never saw it.  It either
needed to have the dknown bit set, as if it had been seen, or else should
not be added to the list.  I've opted for the latter.
2006-08-22 03:31:32 +00:00
nethack.rankin
2e8c4b08d4 fix #H167 - entering monster filled level
When the hero arrives on a level and a monster at his destination can't
be relocated to make room for him, goto_level() would place the hero on top
of the monster.  From a bug report, who said that the
game panicked (without providing specifics, at least so far).  I wasn't able
to reproduce a panic but get a pair of impossible warnings and can confirm
that there is a monster on the same spot as the hero, which could easily
lead to strangeness depending upon what actions the monster attempts to
perform.  This fix causes a non-relocateable monster in that situation to
be moved to the migrating monsters list for later arrival back on that same
level.  That's inconsistant with the migrating monster arrival routine,
which kills off any monster it can't place; I'm not sure which action is
more reasonable, deferred arrival or outright removal.

     There are three or four dozen ``(void) rloc(mon)'' calls which don't
do anything special when rloc fails to move the monster.  Those need to be
reviewed and the ones where it's making a space for some other monster have
to do something about failure.  (Failed teleport attempts can simply leave
the monster in place, so most of those calls won't need any extra handling.)
2006-08-13 06:03:23 +00:00
nethack.rankin
f36c9d19fd mon vs mon attack message phrasing
From <Someone>:
  Pet picks up 8 spears.
  Pet wields 8 spears.
  Pet thrusts its spear at Foe.
The routine to handle a monster attacking the hero are already uses "mon
thrusts one of its spears" in this case, so make monster against monster
messages do the same.  Also, it's no longer necessary to save one monster
name before formatting another when using two monster names in the same
message, so switch to the more straightforward usage here.  (The Blind
check is needed in the mhitu case but not in the mhitm one, where it's
redundant because the caller has already verified that both monsters'
locations are visible, but I left it in.)
2006-08-08 05:08:23 +00:00
nethack.rankin
47327a3b99 fix #H166 - trapdoors on quest levels
From a bug report, it was possible
to fall from above the quest locate level to below it even though it has
nondiggable floors (hence no trapdoors or holes to pass through).  Since
the game can't verify that it is nondiggable (which could vary on a role
by role basis depending upon their quest descriptions) when it is not the
current level, restrict falling past it only when it hasn't been visited
yet.  Impose the same restriction for random level teleport.  This enforces
proper sequencing of the quest feedback, which was the more significant
thing that went wrong in the reported case (player finally got the full
locate level message on a return visit, when descending from above, after
having already cleared out that level on his way back up from falling).

     Once the locate level has been reached or passed, it is no longer a
barrier to falling or random teleport.  (When it is eventually visited,
there's no attempt to remember whether it allows holes, since that
information and the corresponding fall check would need to be extended to
every level in the dungeon.  Also, controlled teleport is still allowed to
bypass it even when it hasn't yet been visited, so the "enforces proper
sequencing" claim above is an exaggeration.)
2006-08-06 05:13:22 +00:00
nethack.rankin
9631e2b691 fix #H148 - applying a pickaxe doesn't respect pushweapon
From a bug report, applying a pick-axe will
wield it in place of the primary weapon but wouldn't update the alternate
weapon.  Make objects which become wielded when applied (pick, lamp, whip,
grappling hook, pole-arm) honor the pushweapon option (where the previously
wielded weapon becomes the alternate weapon without use of 'x' command) the
same as when explicitly wielded.  Old behavior matched the documentation,
but that seemed overly restrictive.
2006-07-15 03:25:08 +00:00
nethack.allison
230d150350 region memory
<Someone> wrote on Tuesday, July 27, 2004 at 06:46:15
> In the region.c function rest_regions allocates storage for the possible
> enter_msg and leave_msg strings. But the function free_region does not relese
> this storage.

Also ensures that some code that is currently ifdef'd out
makes copies of the strings into memory from alloc()
to ensure that no problems with free() result if the function
gets passed a literal string.
2006-07-03 14:21:21 +00:00
nethack.allison
2b8903cd7a <Someone> wrote:
> NetHack feedback form submitted by
> <email deleted> on Friday, June 30, 2006 at 17:31:12
> ---------------------------------------------------------------------------
>
> mailversion:1.35
>
> nhversion:3.4.3
>
> nhfrom:Our 3.4.3 source release, unmodified

> comments:
> telnet nethack.alt.org with the terminal set to 21 rows.
> Choose to pick a char, not accept pot luck, and game segfaults.
> (same happens from linux console)

I was able to reproduce something similar in win32 by setting
the console to 21 rows. As he stated, don't let the game pick you
character for you to reproduce the problem. As soon as I chose
Archeologist the problem occurred:

Where:
  In hack.c, weight_cap()
  	if (Levitation || Is_airlevel(&u.uz)    /* <email deleted> */
  #ifdef STEED
			|| (u.usteed && strongmonst(u.usteed->data))
  #endif
	)

Variables:
	carrcap	200
	u.usteed	0x00000000
	&u.uz	0x005e54aa
	youmonst.data	0x00000000

Examination of the preprocessor output of that section
of code reveals that
"Levitation" becomes:
    (u.uprops[47].intrinsic || u.uprops[47].extrinsic ||
	((youmonst.data)->mlet == 5))
so it is the is_floater(youmonst.data) causing the crash.

Call stack:
  weight_cap() line 2300 + 24 bytes
  inv_weight() line 2342 + 5 bytes
  calc_capacity(int 0) line 2354 + 5 bytes
  near_capacity() line 2365 + 7 bytes
  bot() line 607 + 5 bytes
  docorner(int 47, int 19) line 2378
  erase_menu_or_text(int 5, WinDesc * 0x00a22550, char 0) line 994 + 25     bytes
  tty_dismiss_nhwindow(int 5) line 1664 + 15 bytes
  tty_select_menu(int 5, int 1, mi * * 0x0006fc40) line 2248 + 9 bytes
  tty_player_selection() line 442 + 16 bytes
  pcmain(int 3, char * * 0x00a20eb0) line 457
  main(int 3, char * * 0x00a20eb0) line 91 + 13 bytes

This adds a check for a valid youmonst.data in
bot().
2006-07-01 18:44:18 +00:00
nethack.allison
54a27aa9e8 fixes34.4 catch up 2006-06-26 20:19:40 +00:00
nethack.rankin
c374583632 detected hidden monsters
From a bug report, attempting to attack
a hidden monster who is revealed by ongoing monster detection (blessed
potion or skilled spell) gave "wait!  there's a <monster> hiding there"
response and prevented the attack.  Make it behave the same as when the
hidden monster is revealed by telepathy; the monster comes out of hiding
and the hero's attack proceeds.
2006-06-22 05:03:48 +00:00
nethack.rankin
d25ede0819 golem life
When testing the spoteffects/drown hack I noticed that draining myself
with Stormbringer (toss up, get hit on head) while in iron golem form gave
messages about it drawing or draining life.  (I'm sure that this has come
up before....)  I've altered the artifact hit message rather than making
golems become resistant, although the opposite approach seems at least as
valid.  The drain life spell uses different wording and isn't affected.
2006-06-01 04:27:35 +00:00
nethack.rankin
4956ab8892 invocation vs being trapped
I can't find the report about this; I must have deleted it after
reading, or else recently reread something so old that I'm not going back
far enough now.  When you perform the invocation ritual to create the
stairs down to Moloch's Sanctum, any trap at your location gets deleted.
But if you were in a trapped state at the time then you got left in that
state.  Descending stairs doesn't check for traps so you wouldn't notice
unless you tried to move around on the same level first.  Then you'd get
"you're stuck in a pit/beartrap/web" even though it wasn't there anymore.
2006-05-30 04:07:34 +00:00
nethack.rankin
12586f6ee8 unseen monsters vs hiding hero
While testing the hiding vs traps patch, I became a mimic and hid.
  It gets stuck to you.
Huh?  Nothing was visible; nothing became visible (aside from the ']' at my
position changing back to 'm').  Display the invisible monster glyph when
an unseen monster bumps into you while you're hiding or mimicking gold.
That's usually handled by the hit and miss routines, but they aren't used
when you're just brought out of hiding instead of attacked.
2006-05-27 04:13:20 +00:00
nethack.rankin
a58f2c59eb fix #H108 - lost protection
Fix the problem From a bug report, where
giving a temple donation of the appropriate amount would fail to restore
protection previously stolen by gremlin attack iff the old protection amount
was big enough that the donation wouldn't have yielded a bonus in the normal
not-stolen case.  It shouldn't be checking the magnitude of u.ublessed at a
time when lack of the intrinsic renders that value inoperative.  After this
fix, the lost intrinsic will be granted and the old protection value will
be restored, same as happens when a prayer boon yields divine protection
(where no u.ublessed magnitude check is made) and as happened with donations
when the old protection was a more modest amount (magnitude test passed).
2006-05-27 01:58:22 +00:00
nethack.rankin
949d71e3e0 fix [part of] #H103 - misleading prompt when choosing role,&c
From a bug report, specifying role and race
along with invalid alignment for that role/race combination resulted in a
prompt of "pick the alignment of your chaotic human Valkyrie".  This fixes
that particular problem, but the role selection code is incomprehensible
and I don't have a lot of confidence about whether other combinations have
similar trouble.

     This also fixes an obvious typo in ok_align().  Unfortunately I can't
figure out what to do with the if-then-else block in root_plselection_prompt
which has identical code for its `then' and `else' halves (in the alignment
code that the new ok_align() test skips).
2006-05-25 05:43:49 +00:00
nethack.rankin
c67b9788fc fix #H104 - misnamed high priestess
When high priests have their affiliation suppressed to avoid giving
away which altar is which on the Astral level, the name formatting also
bypasses the code that converts "priest" into "priestess" for females.
(The bug report was about Moloch's high priestess; the occupant of the
Sanctum's temple gets similar handling to those on Astral.)

     Also a tidbit for a change made a couple of days ago.  Avoid using
"Manlobbi the invisible shopkeeper" or "Asidonhopo the newt" in the message
given when a shk refuses an attempt to be renamed via the 'C' command.
2006-05-25 03:44:34 +00:00
nethack.rankin
804864c723 renaming shopkeepers and priests
From a bug report, the 'C' command wasn't reporting that
"<shopkeeper> doesn't like being called names" even though the user's
supplied name was ineffective.  Same thing for temple priests and other
minion monsters; the name was accepted but didn't do anything.  Make such
monsters reject new names.
2006-05-23 04:09:23 +00:00
nethack.rankin
d736570d01 end of game shopkeeper messages
Fix something I accidentally broke nearly three years ago (post 3.4.2,
so the bug appeared in 3.4.3).  A misplaced closing parenthesis caused an
in-sight check to always fail, so the "<shk> looks at your corpse, shakes
his head, and sighs" message when game ends would never occur.  That
situation is extremely rare anyway; it only happens after some other shk
has taken the hero's possessions.
2006-05-21 04:00:08 +00:00
nethack.allison
d21d3d5ca8 elven boots
<email deleted> wrote:
> While levitating, I put on an unknown pair of boots.  They turned out to be
> elven boots.  I received the message, "You finish your dressing maneuver.  You
> walk very quietly."  Incidentally, I was hallucinating at the time.
>
> It seems to me that levitating individuals shouldn't be able to tell that they
> walk quietly.
2006-05-19 18:35:11 +00:00
nethack.rankin
a232123d8c Eyes of the Overworld grammar
Putting on the Eyes while blind causes sight to be regained, which in
turn causes xname() to set the dknown bit and start using the previously
unseen object's name.  But obj_is_pname() was being called before xname in
the "you are now wearing ..." message, while dknown was still clear.  So
obj_is_pname thought the name was being suppressed and returned false,
resulting in "an Eyes" instead of "the Eyes".  Fix is to call xname first.
2006-05-18 02:38:16 +00:00
nethack.allison
a6c608403b grammar bit
<Someone> wrote:
> You find an anti-magic field.
> Where do you want to jump?  (For instructions type a ?)
> You pass right over _a_ anti-magic field.
2006-05-17 20:15:46 +00:00
nethack.rankin
c220c858ba fixes typo
Pointed out by <Someone>.
2006-05-12 00:36:13 +00:00
nethack.rankin
a73d997034 water vs acid
Fix the bug From a bug report.alt.org server, where killing a monster by closing the
castle drawbridge resulted in a panic after the dead monster's possessions
were dropped into the moat and a potion of acid exploded in the process.
water_damage() deleted the object but had no way to tell flooreffects()
that it was gone, so flooreffects() couldn't tell its own caller not to
place and stack the object.  After that, a chunk of freed memory became
part of the floor objects chain and eventually triggered a panic which
tried to make a save file but whose reason didn't get logged properly.
2006-05-11 03:26:55 +00:00
nethack.allison
c0731a8809 #H85: create_object() bugs
From a bug report.c was first creating  a corpse
complete with revive timer if it was a troll, or without
a timer if it was a lizard or lichen corpse. Then it might
change the corpse type, leaving strange corpse
types that revived, or that lasted forever.
2006-05-09 01:31:55 +00:00
nethack.rankin
2d7b4cebf0 rumor consumption during level creation
I've forgotten who pointed this out recently, but the hero was having
wisdom exercized (if true rumor chosen) or abused (for false one) whenever
level creation made a random floor engraving which used a rumor for its text.
2006-05-06 05:08:27 +00:00
nethack.rankin
fb80305136 fixes entry for rumors fix 2006-05-06 04:57:10 +00:00
nethack.rankin
a506c32e8c fix #H79 - steed disintegration
From a bug report, a steed hit by disintegration
breath survived via life-saving, but the program was confused about whether
the hero could still ride and issued some impossible warnings.  The code
to disintegrate a monster's inventory didn't bother to unwear worn items as
it destroyed them, presumeably assuming that the monster was sure to die,
so steed was left with a flag bit set claiming it was saddled even though
the saddle was gone.  This fixes that, and the rider will end up being
dismounted as the saddle gets destroyed, regardless of whether the steed
ultimately survives.  [Since the steed is still present at the time of
dismounting, the hero will get bumped to some other location, possibly to
the next spot about to be hit by the same black dragon breath attack which
just vaporized the steed.  That's suboptimal, to put it mildly....]

     I couldn't test the circumstances of the original report.  Post-3.4.3,
ki-rin has been marked no-hands and is no longer capable of wearing armor
or amulets.  I looked to see whether any other potential steed could wear
an amulet of life-saving and couldn't find one.  But the original bug also
applied to conferred properties of special armor worn by non-steed monsters
too, so the fix was needed anyway.

     The branch and trunk patches are different.  For the trunk, I moved a
big chunk of code out of buzz() into a seperate routine.  That actual fix
is the same in both variants.
2006-04-18 05:26:00 +00:00
nethack.rankin
fc9c337e27 more munstone fixes
Move part of the recent "munstone fixes" patch to the branch code
since one of those fixes prevents accessing freed memory.  The part that
lets monsters eat tins of lizard meat or tins of acidic monsters in order
to get the same benefit as the corresponding corpse has been left out.
2006-04-18 03:41:05 +00:00
nethack.allison
b9db663de1 drum of earthquake - monster portion
<Someone> wrote:
> When applying a drum of earthquake, should you "fall into a chasm" if
> you're already at the bottom of a pit? (Likewise monsters.)

monster already in a pit won't "fall into a chasm" from drum of earthquake
2006-04-14 14:33:01 +00:00
nethack.allison
914c66b10a drum of earthquake - hero portion
<Someone> wrote:
> When applying a drum of earthquake, should you "fall into a chasm" if
> you're already at the bottom of a pit? (Likewise monsters.)

hero already in a pit won't "fall into a chasm" from drum of earthquake
2006-04-14 13:53:33 +00:00
nethack.allison
cc31b25634 don't reveal surface when Blind and levitating
<email deleted> wrote the following on April 10, 2006:
> When blind and levitating, you can produce a message - "You try to feel what
> is lying here on the ice. But you can't reach it!" - which reveals too much
> about the terrain below you.
2006-04-11 02:00:38 +00:00
nethack.rankin
f94b832fc9 shattering monster's weapon stack
Something I encountered while playing slash'em a while back, but
relevant to nethack:  "Its orcish spears shatter from the force of your
blow!".  I was using a two-handed weapon (at skilled or expert level) to
fight an invisible monster which was wielding a stack of multiple spears
(slash'em gives them out in groups of 3 for monsters' starting inventory).
After killing it, I found 2 orcish spears along with an invisible corpse
of somebody-or-other the Kobold King.  The message suggested that the
whole spear stack had been destroyed (and the weapon shattering code in
hmon_hitmon() clearly expects that to be the case), but only one of them
had actually gotten used up.

     I can't recall whether "shatter" was actually given as singular or
plural at the time; nethack handles that aspect correctly.  Only object
destruction needed tweaking.
2006-03-30 05:52:28 +00:00
nethack.allison
280823536c clear pits in temporary corridor
From a bug report, then leave the corridor (causing it to
> vanish), the pit will be embedded in rock instead of being removed.

clear any pits that the hero digs in the vault guard's temporary corridor
2006-03-26 03:52:46 +00:00
nethack.allison
3299e318ca digactualhole() bit
I'm pretty sure this check at_u should be included since x,y
can be passed to digactualhole().  The lack of any related
bug reports suggest that at_u is currently always
true for any code that calls digactualhole().
2006-03-19 23:13:11 +00:00
nethack.allison
b56187f1b9 cancelled nurse #chat
On May 17, 2005, <email deleted> wrote:
> Cancelled nurses shouldn't say "Relax, this won't
> hurt a bit."
2006-03-14 23:53:22 +00:00
nethack.rankin
e1ef0f1042 filling antholes
From a bug report:  when creating a
level, anthole rooms can be generated even when no ants are left, unlike
beehives which get suppressed once killer bees are gone.  Also, if some
ants are available but the type chosen for the current level isn't (in his
case, soldier ants had been genocided), the anthole was filled will random
monsters instead of picking another type of ant.  This fixes both issues.
Random monsters will only occur if the last type of ant gets used up while
filling an anthole that was started when some ants were available, same as
how monster generation for beehives and barracks works.
2006-03-09 05:39:38 +00:00
nethack.allison
3e8725ed95 magicbane grammar
I don't know for sure what all the possible values of hittee passed to
Mb_hit() are, but this checks to see if it matches the name of the
mdef monster and forces the word "is" if it does.
2006-03-06 04:11:36 +00:00
nethack.allison
8dec47ee60 make disappearing scroll trick trunk only 2006-02-26 00:40:13 +00:00
nethack.allison
8308afc75c disappearing scroll trick
<email deleted>
> * When you read a charging scroll, it "disappears", but when you are
> selecting the object to charge, the scroll itself remains in your
> inventory listing until you make your selection.
2006-02-25 00:43:39 +00:00
nethack.allison
a732a87ee2 tame hidden monster message
<email deleted> wrote:
> * Searching next to a tame hidden monster gives the message "You find a
> <kraken>." It should be "your <kraken>."

While I don't consider this a bug, the change seems appropriate.
2006-02-24 02:54:58 +00:00
nethack.rankin
d83513b471 leather spellbook revisited
Change the description of leather spellbook to leathery.  Eating it
does not violate vegan or vegetarian conduct.  [By shear coincidence, I got
``Blecch!  Rotten paper!'' for it while testing this.]
2006-02-23 05:10:21 +00:00
nethack.rankin
6bcfa8f88b [baby] long worms
Between the addition of worm body parts and the phrasing of engulfing/
digesting status, I remembered an oddity with the vanquished monster list:
it shows baby long worms right next to adult long worms; both were defined
as level 8 monsters.  It also turns out that babies dealt more damage per
attack than adults; that was counterintuitive, to put it mildly.  Boost
long worms from level 8 to 9; drop baby long worms from level 8 to 5, half
rounded up just like the relationship between baby and adult purple worms
(who are levels 8 and 15, respectively).  And increase the damage for adult
long worm attack (was 1d4, now 2d4); drop it for baby (was 1d6, now 1d4).
2006-02-21 06:32:53 +00:00
nethack.rankin
b6b522398d fix part of #H43 - probing feedback when engulfed
From a bug report, feedback of the form

Status of the fog cloud (neutral):  Level 2  HP 5(5)  AC 0, engulfed you.

sounds odd.  "Engulfing you" seems a little odd as well, since the engulf
has already taken place, but I think it works out better.  For symmetry,
replace "swallowed you" by "swallowing you".  But that one will never
occur, because all the animals with engulfing attacks will now yield the
more precise and much more significant "digesting you".

     The code formatting is strange.  Lining up the text parts works out
a lot better than attempting to fit the associated tests within the space
left after the large indentation being used.
2006-02-21 06:07:22 +00:00
nethack.allison
b6eff2405a leather spellbook
<Someone> wrote:
> * Eating a leather spellbook doesn't violate
> vegetarian conduct. I suggest you rename it to
> something else. (May I suggest "bark"?) Also, I refuse
> to consider "leather" to be a colour or texture.
> * While as a water nymph in water, seducing an unseen
> monster on dry land sometimes gives away its identity.
> * When submerged iron golem monsters residually
> "rust", and the rust damage kills them, it doesn't
> report their death.
> * Drum of Earthquake says "the entire dungeon shakes
> around you" even when you're in the Endgame or the
> Quest's top level.
> * Wishing for a statue of a guard, then destoning it,
> then chatting to it, makes it say "drop that gold"
> without context. This could probably be extended to
> other cases, too (like Croesus?)

This corrects only the first complaint in the list above.
2006-02-21 03:28:57 +00:00
nethack.allison
abb47e6fc6 frying water elementals
Subject: Some problems to report!
Date: Tue, 17 May 2005 07:01:40 -0700 (<email deleted>
<email deleted>

[...]
- When polymorphed into a water elemental, falling
into lava still says "you burn to a crisp."
[...]
2006-02-19 22:35:23 +00:00
nethack.allison
3ea07e2ef0 anatomy bits
Subject: Some problems to report!
Date: Tue, 17 May 2005 07:01:40 -0700 (<email deleted>
<email deleted>

Hi. I'm a sourcediver but not a source compiler.
I use the Mac carbon port under Mac OS X. But enough
about me; I noticed these things:

	Polyself/Anatomy Bugs:

- Mimics are amorphous, so they should have jelly
parts rather than animal parts.
- Piercers, trappers and lurkers above have animal
parts, including "head," but they are M1_NOHEAD.
- All elementals have vortex body parts. This should
only be the case for air elementals.
(Remember: stalkers, unlike the other elementals, have
heads.)
- Krakens ought to have tentacles, like jellyfish. ("A
gush of water hits the kraken's left fin!")
- Worms have snake body parts, but they shouldn't have
scales.
[...]

 This patch:
- adds worm_parts
- gives krakens tentacles
- ensures that stalkers have a head
2006-02-19 21:57:54 +00:00
cohrs
57c3fa60b7 C343-3 creation of the Ranger quest start level
Normal maze levels are initialized from x == 3 thru COLNO-1.  However,
levels that use the INIT_MAP spec go thru mkmap, which initializes the level
starting at x == 1.  This usually makes no difference, but does in the case
of levels that also use GEOMETRY:left.  This was the case with the Ranger
start level and caused the leftmost 2 locations to be room locations but
unreachable.  The Juiblex level actually had the same behavior, but this
was harmless because the MAP in that case was smaller.

Fix is to set the xstart=1 for levels with INIT_MAP and GEOMETRY:left.
The rest of sp_lev works just with this (when INIT_MAP was used, that is).
2006-02-12 01:45:54 +00:00
arromdee
3f493c2518 fireproof candles 2006-02-09 03:40:26 +00:00
cohrs
cf05c21190 not really a typo
revert to "persecuted", add a comment
2006-02-05 17:09:57 +00:00
cohrs
72d68851e2 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.
2006-02-05 00:58:13 +00:00