Commit Graph

3509 Commits

Author SHA1 Message Date
PatR
bf14b81ede looking at hidden monsters followup
The new code wasn't handling the Wizard mimicking another monster
correctly for probing.
2016-02-16 17:58:15 -08:00
PatR
f132a12a07 looking at hidden monsters
Sometimes you can see a hidden monster without bringing it out of
hiding (wand of probing, blessed potion of monster detection) but
look_at wasn't mentioning the fact that the monster was hidden and
probing described mimics accurately but lumped all hiders together
as "concealed".  Describe all hidden monsters more consistently.
2016-02-16 17:36:51 -08:00
PatR
f5a39c0596 fix for 'R' on armor ignoring 'T's restrictions
Reported directly to devteam, the 'R' command would let you take off
a suit from under a cloak or a shirt from under a suit and/or a cloak,
and it didn't require any extra turns.  'T' doesn't allow either of
those.  ('A' lets you take off a suit from under a cloak, adding in
extra turns to implicitly take the cloak off and put it back on,
but doesn't allow the same for shirt.)

'R' also let you attempt to take off embedded dragon scales if you
were wearing 2 or more accessories (or just 1 with paranoid_confirm
set for takeoff/remove), which triggered impossible "select_off:
<scales object> (embedded in skin)???".
2016-02-16 16:06:02 -08:00
nhmall
640267f53a fix for / command to find names like "Hachi" via screen
Changes to be committed:
	modified:   doc/fixes36.1
	modified:   src/pager.c

fix bug bz54; this bug had no web ID

Report:
    For /, asking via cursor can't find special named entries like "Hachi"
    because the entry for the monster type like "dog" gets used instead.

Change:
    Instead of "More info?", when applicable it will now do:
    More info about "hachi"? [yn] (n) n
    More info about "little dog"? [yn] (n)
2016-02-14 22:23:59 -05:00
nhmall
592ae69726 another Deaf bit
Changes to be committed:
	modified:   src/engrave.c
2016-02-14 18:13:08 -05:00
nhmall
85582590ab Warning and adjacent hiders
Changes to be committed:
	modified:   include/extern.h
	modified:   src/allmain.c
	modified:   src/detect.c
	modified:   src/display.c

Bug bz22 (no corresponding web id) reported quite some time ago.

Reported:
    Warning stays on when a "lurker above" is co-located with a
    boulder, even when you are adjacent to the spot.  Even though
    you see the warning symbol and not the boulder, an attempt
    to move in that  direction tries to move the boulder, rather
    than attack the creature you know to be there.  What's more,
    you can get the
    "You hear a  monster on the other side of the boulder..."
    preventing anything from happening if there is a monster on
    the other side of the spot.  The player doesn't necessarily
    even know there is a boulder there at the time (because
    warning trumps the boulder display) so it can all be somewhat
    confusing.

Change:
    - Split off a section of the search0() code for monsters into
      a separately callable function, arbitrarily named mfind0(),
      which takes a special arg for this particular scenario.
    - If you have Warning and you get adjacent to an unseen hider
      such as a lurker above with the Warning glyph still displayed,
      a specific search is carried out for the obviously present monster.
    - The boulder concerns in the original report should become moot
      after this.
2016-02-14 17:45:20 -05:00
PatR
bcb9780fe7 fix #H4245 - dipping prompt
Bad punctuation for the "dip <obj> into fountain" and "dip <obj> into
pool" prompts.
2016-02-13 15:54:21 -08:00
nhmall
57a71bc13d grammar bit 2016-02-13 17:48:34 -05:00
nhmall
5bb3e01424 improve Deaf messaging for minetown watch and shops
Changes to be committed:
	modified:   doc/fixes36.1
	modified:   src/fountain.c
	modified:   src/monmove.c
	modified:   src/shk.c

Fix for H4242, bz352
2016-02-13 17:29:15 -05:00
PatR
5fb2e25f3d src lint
Another OS upgrade (OSX 10.6.8 -> 10.8.5) with different toolset,
another change in compiler behavior.  Earlier 'gcc -Wwrite-strings'
didn't complain about passing string literals as 'char *' paremeters
if there was no prototype in scope.  This one found one or two of
those in options.c and several in makedefs.c (fix coming soon in a
separate commit...).  This adds some missing prototypes and reorders
the existing ones to match their order within the file.  There were
also several functions which were declared static in their advance
declarations but not in the definitions, which can be confusing when
reading the source.
2016-02-13 01:59:51 -08:00
David Cohrs
25130e394c fix H2766 - jumping while punished could leave ball in wrong place
Affected both intrinsic and spell-based jumping.
hurtle_step now drags the ball.
2016-02-10 13:47:43 -08:00
PatR
67c8971253 wc_tiled_map
Force a screen redraw if the tiled_map option is toggled via the 'O'
command.  The X11 interface switches map modes even without this, but
conceptually it's something that must be done when the option setting
is changed.
2016-02-08 17:03:24 -08:00
PatR
1ae5297a93 glob weight recalc
weight() didn't know how to calculate a glob's weight.  When one glob
absorbs another, that isn't used, but when the hero eats part of a
glob, it is, and the result was incorrect.
2016-02-05 15:46:24 -08:00
Pasi Kallinen
fe006b9c0a Add CHECK_PLNAME to sysconf
Setting CHECK_PLNAME to 1 makes WIZARDS, EXPLORERS, and SHELLERS
check the player name instead of the user's login name.

This is mostly useful for public servers which have external
login system and don't create user accounts for players.
2016-02-05 20:39:17 +02:00
Pasi Kallinen
0ca477486d Unify putting a saddle on steed 2016-02-05 17:23:22 +02:00
Pasi Kallinen
00935a11c8 Allow wizmode creating saddled and invisible monsters 2016-02-05 16:58:13 +02:00
PatR
d7ae4a3e9d tsurugi vs puddings
Another one from 4.5 years ago:  the Tsurugi of Muramasa ought to
be able to split puddings in keeping with its special attack effect
of slicing things in two.  The suggestion was more extreme:  always
split instead of kill.  This generalizes the less extreme version;
METAL weapons (scalpel and tsurugi) can now split puddings like IRON
weapons do even though their user faces no risk of having the weapon
become rusty.  Sam's quest artifact receives no special treatment.

Bashing puddings with wielded iron-tipped projectiles was splitting
them.  This prevents that (and also for metal-tipped ya).
2016-02-05 01:25:12 -08:00
PatR
3c4152f52a spell skils for role-specific special spell
Every role has a specific spell that they having an easier time
casting.  Samurai's special spell is clairvoyance but samurai is
restricted in divination spells.  Requested about 4.5 years ago:
allow samurai to achieve basic skill in divination.

Similar for barbarian, special spell is haste self but escape spells
are restricted.  All the other roles can already get at least basic
in their special spell's category.

There were several choices:
1) leave things as they are;
2) give those two roles different special spells;
3) allow them to reach basic in the spell category of the existing
   special spell;
4) #2 for one of those roles, #3 for the other.

I went with #3.  To compensate, reduce attack spell skill limit from
skilled to basic for both.  (#4 might be better, since the reason to
want divination enhanced is most likely identify and magic mapping,
not interest in clairvoyance.)
2016-02-05 00:25:39 -08:00
PatR
ca3ccdd5ab lint cleanup to pacify gcc
I upgraded from OSX 10.5.8 via 10.6.3 to 10.6.8, plus Xcode to whatever
version was on the 10.6 dvd, and ended up with a more recent version of
gcc that is configured to use 64 bit longs and 64 bit pointers (by
default; presumably that can be changed if necessary).  It triggered
several warnings about converting int to pointer of different size or
vice versa even when explicit casts were in use, and a couple of other
things.
2016-02-03 23:39:24 -08:00
David Cohrs
d01e45a6cc vortexes and unsolid monsters need not avoid webs
Based on a bug report from beta testers in 2010. mintrap()
already had partial checks for this (now fire vortex also burns
a web, as per suggestion in the bug report) but mfndpos()
lacked checks so mintrap() code was almost never exercised.
2016-02-03 11:50:03 -08:00
PatR
6591f8beb1 fix #H4094 - shopkeeper "it" message
Most shop messages use shkname() to give the shopkeeper's accurate
name (or hallucinatory substitute) even if he or she can't be seen.
stolen_value() was using mon_nam(), which calls shkname() if the
monster is a shopkeeper who can be seen, but produces "it" when not
seen.  Change it to use shkname() like the rest of the shop routines.
Also, replace Monnam() (quite a few instances) with new Shknam() to
do the same duty when the name is at the start of a sentence.

There was also a very obscure bug where if you could see two
shopkeepers at the same time, you could probe the map one spot at
a time with repeated use of the 'p' command to locate monsters in
general and other shopkeepers in particular.  Very tedious and not
very useful, but now fixed.
2016-02-02 23:44:58 -08:00
PatR
1c9f538424 formatting bit for alloc.c 2016-02-01 17:28:52 -08:00
Pasi Kallinen
89809bf71e Very tiny typofix 2016-02-01 13:43:43 +02:00
PatR
54325de339 fix bz16 - book becoming cursed while being read
Attempting to read a cursed spellbook fails with a nasty effect.  But
a non-cursed book can become cursed while being read (malignant aura
after Wizard has been killed).  Assuming no interruption for other
reasons, the read would finish, the spell be learned, and then the
nasty effect would be given.  This changes things so that if the book
being read becomes cursed and the hero notices (book's bknown flag is
set), the read-in-progress will be interrupted.  Resuming will take
the attempting-to-read-a-cursed-book path.  Unfortunately, if the
hero doesn't notice, the old behavior still applies.  Maybe the new
behavior should happen even if bknown isn't set (but then player
won't be told why the interruption occurred).
2016-01-31 18:22:31 -08:00
PatR
68b7693d98 crash fix
After the recent shopkeeper fix, I wanted to find out what happens if
you turn to stone in the spot inside the shop door.  It didn't go too
well--a change of mine from three weeks ago caused a crash due to
passing a null pointer to strcmp().  Death from being turned to stone
or from starvation when there was no while-helpless reason (probably
not possible for starving) triggered it.  This fixes that.

As far as the test goes, the shopkeeper takes your inventory and moves
it all the way into the shop, and a statue of the petrified hero is
left without contents in the spot in front of the door.  That shk was
awfully quick....

Post-3.6.0 bug, so no fixes entry.
2016-01-29 17:14:42 -08:00
Pasi Kallinen
d591ebaa46 Fix bz58: Inheritance dispute between shk and risen undead
Prevent shopkeeper from "gratefully inheriting all your possessions"
when your corpse rises as undead.
2016-01-29 16:59:27 +02:00
PatR
b606aea919 more globs... much more globs
Fix a bunch of glob bugs, probably introduce one or two new ones.
2016-01-29 02:07:09 -08:00
David Cohrs
288ac4b07c avoid crash for long lines in nethackrc
read_config_file() has used a buffer of size (4 * BUFSZ) since 3.4.x
so parse_config_line() needs a buffer of the same size to avoid
buffer overrun. Allows my old .nethackrc to work again.
2016-01-28 18:40:59 -08:00
PatR
b632247a74 revisit #H4083 - glob ID and merging
Globs on the floor used different criteria (anything goes) than globs
in inventory (mostly requiring same ownership when in shops and same
curse/bless state--other stuff generally isn't applicable) when
deciding whether two globs should merge.  That was okay as long as
the globs on the floor were from being left behind when a pudding or
ooze was killed, but not if the player had picked some up, dipped
them in holy or unholy water, and dropped them again.  This changes
things so that globs on the floor use the same criteria as globs in
inventory when deciding whether to coallesce.

Also, my earlier fix was modifying globs in the mergeable() test (to
make bknown and rknown match) rather than during actual merge, which
would be a problem if the merger didn't take place for some reason.
2016-01-28 18:13:25 -08:00
PatR
09ebe44ae9 fix #4206 - feedback for pet's weapon
The report that a tame Archon got two "<pet>'s long sword is not
affected" messages thought there was some duplication error when a
flaming sphere exploded, which was incorrect.  Since an Archon has
two weapon attacks, getting that message twice just meant that both
attacks hit.  However, the player has only 1/6 chance to suffering
passive fire damage to weapon, where monster-on-monster or monster-
on-polyd-hero was inflicting that for every successful hit, so
there was a bug here after all.  Give monsters the same 1/6 chance.
Also, add even more verbosity to that message--now that it won't be
delivered so often--to mention what didn't affect the item.

While investigating this, I noticed that hitting a steam vortex
with a flammable weapon was doing fire damage to that weapon.  Fire
damage in the steam vortex definition makes some sense in that it
allows fire resistance to give protection, but dishing out actual
fire damage makes no sense and is now prevented for passive counter-
effects.
2016-01-27 17:51:02 -08:00
PatR
90c4898c9a fix 2nd part of #H4188 - monst fleeing up on lvl 1
The code to handle monsters fleeing up the upstairs on level 1 was
expecting those stairs to be normal upstairs but they are actually
sstairs like the ones down into the mines.  So monsters fled to the
Plane of Earth instead of escaping the dungeon as intended.
2016-01-26 19:25:21 -08:00
PatR
9085dc2d7e fix #4189 - burning glob of green slime
When destroy_item() or destroy_mitem() burned up a glob of green slime,
they had the message index and damage amount reversed.  This could give
a nonsense message ("the glob of green slime freezes and shatters") or
go out of array bounds and wreak havoc.  Even if the message index had
been correct, fatal damage would have produced an incorrect cause of
death since it would have used a potion or scroll string.

Now globs will boil and explode like potions, and damage will be
proportional to the size (weight) of the glob, which seems to be the
original intent.
2016-01-26 18:32:17 -08:00
PatR
149139a25d prompting for #dip
I noticed that my paniclog had a "Query truncated" entry from testing
the post-3.6.0 changes to #dip prompting.  For
"What do you want to dip <the object> into? [xyz or ?*] "
the use of safe_qbuf() didn't account for getobj() appending the list
of choices, so wasn't ensuring that the formatted object name combined
with the other text couldn't overflow QBUFSZ.

I had a more elaborate fix than this that still used safe_qbuf(), but
the extra complexity just wasn't worth it.  This potentially truncates
the formatted object description more severely than necessary but is
simple enough to be comprehensible.

No fixes36.1 entry.  This is updating a post-3.6.0 revision.
2016-01-26 17:32:05 -08:00
PatR
489445da02 fix part of #H2343 - youmonst.movement vs poly
From a July 2011 report listing multiple movement anomalies, fix one
of the easier ones.  If you polymorph from a fast from into a slow
one, pending movement points can let the slow form get in some moves
it shouldn't.

I've deliberately avoided adjusting pending movement when you change
into a faster form, which will get it's own movement boost on the
next turn.
2016-01-25 18:18:35 -08:00
PatR
5a9e00d0dd mind flayer's damage
From a followup to #H2247, April 2011...  Physical damage from a mind
flayer attack was inflicted in the AD_DRIN case for hitmu(), then
being inflicted again in the common code after the switch statement.
The new comment explaining the reason for non-standard damage is just
a guess.
2016-01-24 16:23:33 -08:00
PatR
49cbcdb137 fix #4191 - flags.verbose vs level change messages
Suppress the "you climb/fly up the stairs/ladder" message if the
'verbose' option is off (unless punishment is going to augment the
message by "with great effort").
2016-01-23 20:16:37 -08:00
PatR
853efee661 fix #H4205 - take-off of covered items
Bug report subject was "menu interface things" but this isn't related
to menus, just getobj().  Make the requested change to not list worn
suit as a likely candidate for T (and R) if a worn cloak is going to
prevent it from being removed.  (Suit can still be picked, but the
take-off operation for it will be refused, same as when it was being
listed as a candidate.)

In discussion about the request, there was a separate suggestion that
cloaks shouldn't interfere with removing things underneath since
they're generally sleeveless.  I haven't done that; I think it is
better to keep the layering as it is.

The bug report also asked for the likely candidates when writing with
a magic marker to exclude non-blank scrolls and books.  That has been
implemented already (post-3.6.0).
2016-01-23 19:38:28 -08:00
PatR
45ba0addf2 another vampire shape-shifting bit
Chameleon impersonating a vampire and vampire subject to protection
from shape changers weren't the only ways to have a vampire monster
which isn't a vampshifter.  One-shot polymorph could produce that too.
2016-01-23 19:15:38 -08:00
PatR
e619e5f66e formatting for 'O' commmand menu
For !menu_tab_sep, the boolean options were formatted with a different
width than the compound and 'other' options when the menu for 'O' was
active.  Use the same format string for all of them, consider them all
when constructing it, and construct it just once instead of every time.
2016-01-23 16:16:36 -08:00
PatR
a21894cc39 tipped ice box corpses
Reported directly to devteam, with patch:  tipping corpses out of an
ice box wasn't restarting their rot timers, producing corpses that
would last indefinitely.
2016-01-23 15:23:45 -08:00
PatR
7e86003367 tty role selection - 'random' default
Instead of just using 'random' as the default choice if the user hits
<return> when picking role, race, gender, or alignment, flag it as
pre-selected in the menu so that it can be seen to be the default.

Someday somebody is going to have to fix up the interaction between
PICK_ONE menu and pre-selected choice....
2016-01-22 18:09:05 -08:00
karnov
93f7df6848 Added anagrams for new team members 2016-01-21 21:38:35 -05:00
PatR
885de116e1 fix #H4204 - shapeshifter taking vampire form
When a chameleon/doppelganger/sandestin took vampire or vampire lord
shape, it stopped taking on new shapes.  Vampire shapeshifting was
being applied to all vampires rather than just to is_vampshifter().
When is_vampshifter() is false, the vampire is some other shapeshifter
or Protection_from_shape_changers is in effect, so vampire shifting
doesn't apply.

While testing, I noticed that vampires/lords only turned into bats/
wolves during initial creation.  They did turn into fog clouds in
order to pass closed doors but the other alternate forms were ignored.
That's fixed too.
2016-01-21 02:12:47 -08:00
PatR
2e2b54e548 overriding message suppression, revisited
This is more robust than the previous hack.  The issue of whether to
use it in other places is still unexplored.  Ultimately it's the user's
fault if overzealous message suppression hides something important.
[For an eerie game, try 'MSGTYPE=hide .'.]
2016-01-19 18:16:13 -08:00
PatR
0544b998de fix #H4028 - ':' sometimes doesn't work
User had
MSGTTYPE=norep "You see here"
and complained that once the message had been given while walking
over an object, using ':' to intentionally look at something would
end up doing nothing if its feedback was a repeat of "You see here".

Trying to classify which actions should deliberately override
no-repeat (or no-show) will be an ordeal.  This fixes the case for
the ':' command where the user obviously expects feedback.  I think
it could be done better but am settling for something quick and easy.
2016-01-19 07:13:18 -08:00
PatR
ea35773192 more getpos() help
Explain the what-is response types in the help provided when typing '?'
during getpos operation.
2016-01-19 02:19:33 -08:00
PatR
83a4234292 whatis_coord - rename 'getpos_coord' option
Rename the option for adding coordinates to autodescribe feedback for
the '/' and ';' commands from 'getpos_coord' to 'whatis_coord', after
the '/' command that uses it instead of after the internal routine
that implements it.  The 'whatis' name was only in dat/hh as far as I
could find, so this changes it to 'what-is' and also updates dat/help
and the Guidebook to mention the name too.

Add a 'screen' choice to the option to show coordinates as row,column
rather than x,y or compass direction(s).  Revise the /m, /M, /o, /O
operations of 'what-is' to honor the whatis_coord option (mostly; a
value of 'none' gets overridden by 'map' to force coordinates).

Also, update the description of the functionality of the '/' command
in the Guidebook.  The .mn version is tested, the .tex one isn't.
2016-01-18 19:27:53 -08:00
PatR
8cd65daf39 Death misquotes 2016-01-17 15:05:34 -08:00
PatR
350dcf067b tribute streamlining
Chatting with Death doesn't always deliver a tribute Death Quote but
when it does, it wasn't giving each of them once before reusing them
even though they should have been treated the same as passage
selections from a novel.  I'm still not sure why it wasn't working
as intended, but after some revision to the tribute parsing code, now
it is.  If you #chat with Death enough times to get 20 tribute quotes,
you will see each of the 20 quotes once (in random order), then
further chatting will give them again (in different random order).
2016-01-16 17:36:48 -08:00
Pasi Kallinen
04bc048073 Limit aggravate to inside or outside of the Wizard's tower
There have been several comments on IRC how the Wizard is a very
light sleeper now; aggravate cast by monsters makes him wake up
and come out of the tower.  So, lets limit aggravate to either
outside or inside of the tower, depending on which side the player is.
2016-01-16 09:45:12 +02:00