]> granicus.if.org Git - nethack/log
nethack
6 years ago-ansi -pedantic can't come after -std=c++11
Ray Chason [Thu, 24 May 2018 03:38:11 +0000 (23:38 -0400)]
-ansi -pedantic can't come after -std=c++11

6 years agoQt on Win32: changes needed for Win32
Ray Chason [Thu, 24 May 2018 03:20:47 +0000 (23:20 -0400)]
Qt on Win32: changes needed for Win32

* Fix an include directory
* Use strchr instead of index
* play_usersound conflicts with another function

6 years agoQt on Win32: add stub for Qt window_procs
Ray Chason [Thu, 24 May 2018 03:20:21 +0000 (23:20 -0400)]
Qt on Win32: add stub for Qt window_procs

6 years agoQt on Win32: resolve conflict over boolean type
Ray Chason [Thu, 24 May 2018 03:19:54 +0000 (23:19 -0400)]
Qt on Win32: resolve conflict over boolean type

6 years agoIgnore Win32 build products
Ray Chason [Thu, 24 May 2018 03:19:35 +0000 (23:19 -0400)]
Ignore Win32 build products

6 years agoAdd build configuration for Qt 4 and 5
Ray Chason [Thu, 24 May 2018 03:18:55 +0000 (23:18 -0400)]
Add build configuration for Qt 4 and 5

6 years agoWin32: delete the o directory only if it exists
Ray Chason [Thu, 24 May 2018 03:16:12 +0000 (23:16 -0400)]
Win32: delete the o directory only if it exists

6 years agoAdd -lgdi32 to conlibs, needed to link
Ray Chason [Thu, 24 May 2018 03:15:22 +0000 (23:15 -0400)]
Add -lgdi32 to conlibs, needed to link

6 years agoLinux and Mac: ignore .moc files created in src
Ray Chason [Thu, 24 May 2018 03:14:14 +0000 (23:14 -0400)]
Linux and Mac: ignore .moc files created in src

6 years agoAdd build products to make spotless
Ray Chason [Thu, 24 May 2018 03:12:28 +0000 (23:12 -0400)]
Add build products to make spotless

Win32 Makefile.gcc now cleans up all build products except the binary
directory.

6 years agoNew hints file for Qt 5 on Mac OS X
Ray Chason [Thu, 24 May 2018 03:02:06 +0000 (23:02 -0400)]
New hints file for Qt 5 on Mac OS X

6 years agoQt4: Fix compile warning
Pasi Kallinen [Mon, 10 Sep 2018 18:09:58 +0000 (21:09 +0300)]
Qt4: Fix compile warning

6 years agoQt4 moc is moc-qt4
Pasi Kallinen [Mon, 10 Sep 2018 18:06:34 +0000 (21:06 +0300)]
Qt4 moc is moc-qt4

At least on my Debian, the Qt4 MOC is now called moc-qt4,
when it used to be just moc - probably due to Qt5 being moc-qt5

6 years agoProvide Qt 5 configuration on Linux
Ray Chason [Thu, 24 May 2018 02:59:47 +0000 (22:59 -0400)]
Provide Qt 5 configuration on Linux

* CXX specifies -std=gnu++11
* WINQT5LIB variable added
* Hints file can specify CXX and MOC

6 years agowin32 gui bits
nhmall [Sat, 8 Sep 2018 12:54:35 +0000 (08:54 -0400)]
win32 gui bits

fix an index out-of-bounds
status hitpoint bar behavior at zero hp to match tty

6 years agoweb spinning
PatR [Sat, 8 Sep 2018 01:12:03 +0000 (18:12 -0700)]
web spinning

This started as some formatting cleanup but I've added a couple of
additional terrain features which can act as web support (stairs up
and ladder up).

The message "<Spider> spins a web" was given if you could detect or
sense <spider> rather than see it.  I've changed that to only happen
if you see the new web appear rather than the critter spinning it
(it only becomes an unseen trap if you don't watch it appear).

After spinning a web, a spider can't spin another one until 4d4 moves
have elapsed.  That seems suitable when the spider can be seen but
isn't really adequate throttling when the spider is far away--it can
end up spinning a lot of webs by the time you get to its vicinity.
Perhaps it shouldn't be able to spin a new web if there is already
one with N steps of its location?

6 years agoSpiders will occasionally spin webs
Pasi Kallinen [Fri, 7 Sep 2018 17:26:14 +0000 (20:26 +0300)]
Spiders will occasionally spin webs

Idea and code inspired by aosdict

6 years agoarg type mismatch
PatR [Thu, 6 Sep 2018 23:28:42 +0000 (16:28 -0700)]
arg type mismatch

This was right in 3.4.3 but got changed way back in 2004.
No effect on play and unlikely to be complained about by any
compiler.

6 years agohilite_status type 'up' or 'down' vs strings
PatR [Thu, 6 Sep 2018 12:26:21 +0000 (05:26 -0700)]
hilite_status type 'up' or 'down' vs strings

The temporary highlight types 'goes-up' and 'goes-down' aren't useful
for the three string status fields (title, dungeon-level, alignment)
since the string values might go up when the underlying value goes up
or might go down instead (and similarly for down, down, up).  The code
involved can compare strings but the values are effectively arbitrary
so the comparison is only really useful for same vs changed.  This
treats types 'up' and 'down' for strings as 'changed' when coming from
config file and no longer offers them as choices when using 'O'.

Config file parsing perhaps ought to treat them as errors instead.

6 years agohitpointbar bit for prior commit
nhmall [Thu, 6 Sep 2018 00:47:16 +0000 (20:47 -0400)]
hitpointbar bit for prior commit

6 years agostop tty hitpointbar from jumping to 100% health at zero hit points
nhmall [Thu, 6 Sep 2018 00:21:59 +0000 (20:21 -0400)]
stop tty hitpointbar from jumping to 100% health at zero hit points

6 years agoanother mswproc bit - remove enum values from comments
nhmall [Mon, 3 Sep 2018 12:52:16 +0000 (08:52 -0400)]
another mswproc bit - remove enum values from comments

6 years agomswproc.c bit
nhmall [Mon, 3 Sep 2018 12:49:47 +0000 (08:49 -0400)]
mswproc.c bit

6 years agostatus_update distinguish new BL_RESET from BL_FLUSH
nhmall [Mon, 3 Sep 2018 12:18:18 +0000 (08:18 -0400)]
status_update distinguish new BL_RESET from BL_FLUSH

This adds BL_RESET to status_update to send a flag to a window
port that every field should be updated because something has
happened in the core to make current values shown to be
untrustworthy or potentially obliterated.

That is now distinguished from BL_FLUSH, which now has no
bearing on whether every field needs to be redone, and instead
can be used by a window port indicator that it is time to render
any buffered status field changes to the display.

tty port now sets WC2_FLUSH_STATUS indicator for BL_FLUSH support
and now does one rendering per bot() call, instead of up to 22.

Side note: The tty hitpoint bar code was relying on the old
behavior of redrawing everything upon BL_FLUSH apparently, so it
initially had some color change lag issues, corrected by marking
BL_STATUS as dirty (in need of updating) in tty_status_update()
whenever BL_HP was marked as dirty.

6 years agoensure BL_FLUSH always sent when context.botlx is set
nhmall [Sun, 2 Sep 2018 22:26:42 +0000 (18:26 -0400)]
ensure BL_FLUSH always sent when context.botlx is set

ensure BL_FLUSH always gets sent down to the window port whenever bot() is
called with context.botlx set so that status updates work as
expected after full screen clear after a level change

Fixes #107

6 years agotransformation message when you apply a figurine
nhmall [Sun, 2 Sep 2018 22:20:40 +0000 (18:20 -0400)]
transformation message when you apply a figurine

make the transformation message of a deliberate apply of a figurine seem
a bit less definite when blind. Put 'I' unseen monster marker at the spot
you expect it to be.

6 years agoRevert "transformation message when you apply a figurine"
nhmall [Sun, 2 Sep 2018 22:11:03 +0000 (18:11 -0400)]
Revert "transformation message when you apply a figurine"

This reverts commit e2b187f2f1e38987ece327f43ae6500ce5cd5567.

6 years agoRevert "ensure BL_FLUSH always gets sent down to the window port whenever bot() is"
nhmall [Sun, 2 Sep 2018 22:10:40 +0000 (18:10 -0400)]
Revert "ensure BL_FLUSH always gets sent down to the window port whenever bot() is"

This reverts commit ee4c12b2388981926577d8095c314ab3490aff93.

6 years agoensure BL_FLUSH always gets sent down to the window port whenever bot() is
nhmall [Sun, 2 Sep 2018 22:05:16 +0000 (18:05 -0400)]
ensure BL_FLUSH always gets sent down to the window port whenever bot() is
called with context.botlx set so that status updates work as
expected after full screen clear after a level change

Fixes #107

6 years agotransformation message when you apply a figurine
nhmall [Sun, 2 Sep 2018 21:54:00 +0000 (17:54 -0400)]
transformation message when you apply a figurine

make transformation message of a deliberate apply of a figurine seem a bit
less definite when blind. Put 'I' unseen monster marker at the spot you
expect it to be.

6 years agoquiet a new visual studio compiler complaint from recent code change
nhmall [Sat, 1 Sep 2018 19:07:19 +0000 (15:07 -0400)]
quiet a new visual studio compiler complaint from recent code change

..\src\hack.c(2553): warning C4113: 'int (__cdecl *)()' differs in parameter lists from 'int (__cdecl *)(void)'

6 years agoMerge branch 'NetHack-3.6.2-beta01' of https://rodney.nethack.org:20040/git/NHsource...
nhmall [Sat, 1 Sep 2018 18:54:36 +0000 (14:54 -0400)]
Merge branch 'NetHack-3.6.2-beta01' of https://rodney.nethack.org:20040/git/NHsource into NetHack-3.6.2-beta01

6 years agoreports on windows of partial status lines after level change
nhmall [Sat, 1 Sep 2018 18:52:47 +0000 (14:52 -0400)]
reports on windows of partial status lines after level change

tty: turn off an optimization that is the suspected cause of Windows reported
partial status lines following level changes. It was turned on for
        non-unix platforms only

6 years agoSplit pickup checks out of dopickup
Pasi Kallinen [Sat, 1 Sep 2018 17:45:51 +0000 (20:45 +0300)]
Split pickup checks out of dopickup

6 years agoFix pickup awful hack
Pasi Kallinen [Sat, 1 Sep 2018 16:42:23 +0000 (19:42 +0300)]
Fix pickup awful hack

If pickup has been bound to some other key than ',', the awful hack
did not work correctly. Testing, I couldn't notice the difference,
but probably just not doing the right thing...

6 years agoadjust wizidentify title and prompt
nhmall [Sat, 1 Sep 2018 15:16:08 +0000 (11:16 -0400)]
adjust wizidentify title and prompt

6 years agowizidentify suppress unnecessary prompt; allow individual items for perm ID
nhmall [Sat, 1 Sep 2018 14:43:26 +0000 (10:43 -0400)]
wizidentify suppress unnecessary prompt; allow individual items for perm ID

Don't display the selection to identify all items if there are none.

Complete an item marked ToDo in cmd.c: allow selection of one or more
particular items to permanently identify rather than just all or nothing.

6 years agoGuidebook update
PatR [Thu, 30 Aug 2018 22:42:06 +0000 (15:42 -0700)]
Guidebook update

I noticed that the description of ^O still referred to the 3.6.0
behavior (either #wizwhere or #overview depending upon play mode)
rather than the 3.6.1 behavior (unconditional #overview).

While updating that I changed a bunch of "Wizard-mode" references
to "Debug mode" which is the proper end-user name.

I slightly expanded the descriptions of #wizdetect, #wizgenesis,
\#wizintrinsic, WIZKIT, and Debug mode, and removed at least one
out of date reference to debug mode being a conditional feature.

And for most of the stuff I was looking at, I changed the nroff
source to honor the roff guideline of having each sentence start
on its own line (and also the latex source to use those same line
breaks even though they don't need it).

Not done:  a lot of quoted single characters use 'c' instead of `c'
(pair of ticks rather than back-tick and normal tick).  One form
or the other should be changed so that they're all consistent.
I'm pretty this was mentioned the last time it was formatted for
the web site.

Guidebook.mn has been tested, Guidebook.tex has not.

6 years agoUse DEADMONSTER instead of checking mhp
Pasi Kallinen [Thu, 30 Aug 2018 17:05:18 +0000 (20:05 +0300)]
Use DEADMONSTER instead of checking mhp

6 years agofix wiz identify bugs
PatR [Thu, 30 Aug 2018 02:19:49 +0000 (19:19 -0700)]
fix wiz identify bugs

Fixes #124

Fix github pull request #124 which was also reported directly (but not
through the contact form so #Hxxx number).  Using ^I or #wizidentify
displays inventory with everything ID'd for that command only and adds
a menu entry "_ - use '^I' to identify" that can be chosen to make
those ID's persistent.  Picking underscore would work but picking the
alternate '^I' wouldn't work if the platform had unsigned characters
for plain 'char'.  Switch the return value from magic number -1 to
magic number ^I which isn't a valid inventory letter and isn't subject
to sign conversion.  Casting -1 to '(char) -1' would have worked too
despite some confusion expressed in discussion of the pull request.

If ^I has been bound to some other command and #wizidentify hasn't
been bound to any keystroke, temporary ID didn't disclose any extra
information (ie, acted like ordinary inventory display) and the extra
menu entry to make temporary ID become persistent wasn't available.
This fixes that too.

6 years agoDocument windowcolors option
Pasi Kallinen [Wed, 29 Aug 2018 16:39:30 +0000 (19:39 +0300)]
Document windowcolors option

6 years agoSplit string parsing and monster creation out of create_particular
Pasi Kallinen [Tue, 28 Aug 2018 16:52:15 +0000 (19:52 +0300)]
Split string parsing and monster creation out of create_particular

6 years agoFix monsters not wielding digging implements
Pasi Kallinen [Tue, 28 Aug 2018 14:41:18 +0000 (17:41 +0300)]
Fix monsters not wielding digging implements

My change to unify the pet and monster digging weapon choosing
made monsters not actually wield the chosen weapon, even though
they could still dig as if they did. Pets behaved properly.

Also add an explicit check for IS_STWALL so they won't keep
switching away from their current weapon until needed.

6 years agofix #H7354 - incorrect material
PatR [Tue, 28 Aug 2018 02:13:54 +0000 (19:13 -0700)]
fix #H7354 - incorrect material

for parchment and vellum spellbooks.  Parchment and vellum are made
from animal skin rather than from plants, so classifying spellbooks
with those descriptions as paper is inaccurate.  Changing them to be
made out of leather has a couple of side-effects:  eating them while
polymorphed will break vegetarian conduct and polymorphing them might
result in a leather golem rather than a paper one.

I left "leathery spell book" as paper since that directly refers to
the cover.  The composition shouldn't be changed--the pages of such
a book are still made out of paper--but the effect of eating one
possibly should.  (That description originally was "leather" and got
changed.  I don't remember the details and assumed it was due to odd
wishing behavior, but there's a commented-out routine in eat.c which
suggests it was related to eating instead.  Anyway, "leathery" is
still non-leather.)

6 years agoMake it clear when a leprechaun dodges your attack
Pasi Kallinen [Sun, 26 Aug 2018 15:43:22 +0000 (18:43 +0300)]
Make it clear when a leprechaun dodges your attack

It was not obvious what was happening when a leprechaun dodged
your attack. Add a message to explicitly spell it out.
Code by aosdict.

6 years agoHallu YAFM for stumbling onto an undetected monster
Pasi Kallinen [Sun, 26 Aug 2018 14:54:47 +0000 (17:54 +0300)]
Hallu YAFM for stumbling onto an undetected monster

Pokemon reference. Based on an idea by aosdict.

6 years agoMake wish prompts not remember the input
Pasi Kallinen [Sun, 26 Aug 2018 09:15:42 +0000 (12:15 +0300)]
Make wish prompts not remember the input

With EDIT_GETLIN, the wish prompt remembered the previous input,
but this isn't actually useful.

6 years agoanother fix fox "killed, while helpless"
PatR [Fri, 24 Aug 2018 01:01:00 +0000 (18:01 -0700)]
another fix fox "killed, while helpless"

Augmented death reason with appended "while <helpless-reason>" was
broken in 3.6.0 and got fixed shortly after release (too late to
prevent high-score files from being corrupted).  Then within a
couple of weeks it got broken again, and doesn't work in 3.6.1
either (but in this case, it is omitted instead of being cloned
to all following score entries).  The problem is in both record
and logfile, but not xlogfile, so we could create a fix up routine
that would use the last to repair record (and perhaps logfile).
But having two fixup routines would probably lead to confusion.

The problem this time was bad logic in the fix for
|alter name of monster causing hero's death if name contains
|    characters that could cause confusion when using record,
|    logfile, or xlogfile later
killerformat() was going out of bounds of the input string and
using up all of 'siz' so that there was never room to append the
", while helpless" suffix.

6 years agoshop damage repair
PatR [Thu, 23 Aug 2018 00:41:54 +0000 (17:41 -0700)]
shop damage repair

Fixes #121

Fix githib issue #121 - shopkeepers don't charge for consecutive
acts of vandalism on the same square.  pay_for_damage() keys its
action on the 'when' field of the damage structure, and when a
second type of damage gets added to existing damage, that wasn't
being updated.  Both bits of damage (broken door or dug wall plus
trap created at same spot) get repaired together but shopkeeper
wasn't challanging hero to pay for the second one (trap).

The repair process had issues too.  If you broke a shop door, paid
off the shopkeeper, then left the level before the repair took
place and came back after (or rather, catching up for lost time
repaired it when you returned to the level), it didn't actually
get fixed and remained a doorless doorway that was considered to
have been successfully repaired (record of damage discarded).
Unless there was also a trap there; then the door did get properly
fixed when the trap was removed.

Object scattering during wall repair was bypassed if trap removal
took place.

Also, trap removal while off level still gave messages when it took
place after you returned.  I didn't try to verify that; it's possible
that vision is in a state where you can't see the repair even if you
return to a spot where it would be visible.  But the return value
from the repair routine was one which wanted a message instead of
the one to suppress messages.

Not addressed:  digging a pit inside a shop (aside from in doorway
or breached wall) is not treated as damage which should be repaired.
This includes the case of digging up a grave which converts the spot
into ordinary floor (plus pit trap).

6 years agofix github issue #125 - grave gold not buried
PatR [Thu, 16 Aug 2018 01:33:37 +0000 (18:33 -0700)]
fix github issue #125 - grave gold not buried

Fixes #125

When a random grave included some gold among whatever treasure was
generated, that gold was left on top of the grave instead of being
buried inside it like other treasure.

I'm sure this was intentional but only because mkgold() puts the
gold on the ground and merges it with other gold if there is already
some present.  Keeping an existing stack of gold distinct from the
new one in order to bury the latter is feasible but clumsy.  Just
make a new gold object directly, bypassing mkgold(), and bury that.

6 years agogit pull request #123 - wallification vs map edge
PatR [Wed, 15 Aug 2018 01:06:59 +0000 (18:06 -0700)]
git pull request #123 - wallification vs map edge

Fixes #123

Make sure wallification doesn't go out of bounds when operating
near the map edge.  The top and left edges were ok (although the
left edge could uselessly try to wallify unused column 0) but the
right and bottom ones weren't validating the map boundary.  None
of the 3.6.x levels were affected.

I've done this a little differently from the suggested commit in
the pull request.

6 years agofix #H7352 - panic when floodfilling large areas
PatR [Tue, 14 Aug 2018 01:33:15 +0000 (18:33 -0700)]
fix #H7352 - panic when floodfilling large areas

Special levels with FLAGS:inaccessibles could trigger a panic if
a large enough area was subjected to floodfill handling.  The buffer
intended to be enough to hold an entire level wasn't big enough when
individual coordinates were being added multiple times.  I don't
really understand what this code is doing but the recommended fix
does work to prevent the panic.

None of the levels included with 3.6.x were affected.

6 years agoquest message typo
PatR [Mon, 13 Aug 2018 00:02:12 +0000 (17:02 -0700)]
quest message typo

Remove an extra space from Val 00021.

This does not address github issue #124 where the extra space shown
on the message line is the result of combining two separate plines
rather than coming from the data.

6 years agoadjust wording on recent install.mw change
nhmall [Sun, 12 Aug 2018 14:21:52 +0000 (10:21 -0400)]
adjust wording on recent install.mw change

6 years agoprevious change bit
nhmall [Sun, 12 Aug 2018 13:06:47 +0000 (09:06 -0400)]
previous change bit

6 years agoinconsistency going down a hole/trapdoor accidentally vs deliberately
nhmall [Sun, 12 Aug 2018 12:40:55 +0000 (08:40 -0400)]
inconsistency going down a hole/trapdoor accidentally vs deliberately

Noted on rgrn, after being told that you don't fit upon discovery
of a hole or trap door you could then immediately use '>' to
proceed down.

The deliberate situation remains possible and has some
inherent risk.

6 years agofix github issue #122 - #turn takes 0 time
PatR [Sat, 11 Aug 2018 23:07:43 +0000 (16:07 -0700)]
fix github issue #122 - #turn takes 0 time

Fixes #122

When #turn won't work due to angry god or being in Gehennom, it
aggravates monsters instead.  But that was taking no time.

6 years ago10.11 is out of date these days but it's the most recent version that
PatR [Tue, 7 Aug 2018 00:41:06 +0000 (17:41 -0700)]
10.11 is out of date these days but it's the most recent version that
I can vouch for.

6 years agofurther OS X clarification
nhmall [Mon, 6 Aug 2018 12:03:46 +0000 (08:03 -0400)]
further OS X clarification

6 years agofix #H7342 - seduction sequencing
PatR [Sat, 4 Aug 2018 03:18:21 +0000 (20:18 -0700)]
fix #H7342 - seduction sequencing

Interrupt seduction if the hero gets moved away from the seducer, or
if both of them move to another level.  Loss of levitation can drop
the hero onto a trap which sends him/her somewhere else, but seduction
was continuing as if nothing had happened.  In theory it could continue
despite level change because succubus and incubus are level followers,
but there's no way of knowing whether seducer and victim will arrive
next to each other until they get delivered and that doesn't happen
until long after the attack needs to finish.

I don't think theft has the same problem because it is a multi-turn
activity operating on one item at a time, but I didn't check it out.

6 years agosuit_simple_name()
PatR [Sat, 4 Aug 2018 03:07:21 +0000 (20:07 -0700)]
suit_simple_name()

Unlike cloak_simple_name() and helm_simple_name(), suit_simple_name()
wasn't guarding against Null.  Current usage never trips up against
that, but when I added a new use in doseduce() [pending], it caused
a crash.

6 years agoMerge branch 'NetHack-3.6.2-beta01' of https://rodney.nethack.org:20040/git/NHsource...
nhmall [Fri, 3 Aug 2018 10:23:32 +0000 (06:23 -0400)]
Merge branch 'NetHack-3.6.2-beta01' of https://rodney.nethack.org:20040/git/NHsource into NetHack-3.6.2-beta01

6 years agofix #H7334 - hearing seduction msgs while deaf
PatR [Fri, 3 Aug 2018 01:44:41 +0000 (18:44 -0700)]
fix #H7334 - hearing seduction msgs while deaf

Various seduction messages with a verbal component were being given
to hero even when deaf.  This uses alternate messages if some cases
and bypasses the message in others.  In particular, if hero is deaf
then he or she will not be given the choice to decline removing a
piece of armor--or taking off or putting on a ring of adornment--
that can ordinarily occur (based on die roll against Charisma).

The seduction code was also using '!Blind' to test whether the hero
could see his/her seducer, ignoring the possibility that it might be
invisible.  I think the only ramification is that "It" would appear
in messages instead of the "She" or "He" that are explicitly used
when not seen due to blindness.

6 years agofix github issue #120 - quest message typo
PatR [Thu, 2 Aug 2018 00:39:02 +0000 (17:39 -0700)]
fix github issue #120 - quest message typo

Fixes #120

The one-line summary [for inclusion in message history] of the priest
quest's block message when bringing the quest artifact back to leader
misspelled "congratulations".

6 years agoMakefile recognition of VS 15.7.5
nhmall [Sat, 28 Jul 2018 21:48:57 +0000 (17:48 -0400)]
Makefile recognition of VS 15.7.5

6 years agogithub pull request #102 - Popeye vs Fixed_abil
PatR [Wed, 11 Jul 2018 00:14:36 +0000 (17:14 -0700)]
github pull request #102 - Popeye vs Fixed_abil

Fixes #102

This is a simplified version of the code in pull request #102,
which replaces "You feel like Popeye!" with "You feel like {Olive
Oyl or Bluto}!" if eating spinach fails to provide a strength gain.
I think you should still feel like Popeye if the lack of gain is
due to already being at maximum, so I left out the change to make
gainstr() return a value which indicates whether a change took place.

Unfortunately, if you're both already at maximum and have attribute
changes suppressed by Fixed_abil, the latter overrides and you'll
feel like Olive Oyl or Bluto.  I think that situation is too obscure
to bother with the complexity of figuring out if you're at maximum
for the purpose of a silly message.

6 years agofix github issue #116 - farlook at corpse
PatR [Tue, 10 Jul 2018 23:35:50 +0000 (16:35 -0700)]
fix github issue #116 - farlook at corpse

Fixes #116

Farlook in 3.4.3 used xname() and just described any corpse as
"corpse" whether you knew the monster type or not.  3.6.x switched
to doname() and describes it as "<mon-type> corpse", but if it isn't
there anymore, the fake object contructed for it would have a random
corpse type.

For corpses and statues, the map glyph provides enough information
to give the fake object the same type as the original.  For other
items that have a monster component (figurines, tins, eggs) it does
not, nor for other doname attributes of objects in general (which
might be picked up by monsters rather than rot away).  So this fixes
the rotted-away-corpse-seems-to- become-random-corpse issue but not
the general case of the details for a remembered item which isn't
there anymore.

6 years agorestore vs perm_invent
PatR [Thu, 5 Jul 2018 23:06:31 +0000 (16:06 -0700)]
restore vs perm_invent

Redo how updates of permanent inventory window are suppressed during
restore.  Reverses part of e9f1e032717921cb7a51c0f2822628355a35ec36
which included a simpler attempt to deal with this.

It looks like we should have been getting impossible "unpaid_cost:
object wasn't on any bill" but segfault was reported; I haven't tried
to figure out why.  The band in xname() ought to be redundant now but
is included for bulletproofing.

6 years agogithub pull request #113 - shopkeeper placement
PatR [Thu, 5 Jul 2018 02:26:59 +0000 (19:26 -0700)]
github pull request #113 - shopkeeper placement

Fixes #113

Incorporate the contents of pull request #113 to fix shopkeeper setup
for irregularly shaped shop rooms.  Code intending to adjust the Y
coordinate was erroneously incrementing the X one instead.  (I'm not
sure whether we have any irregular shops at all but if so, they don't
have the necessary orientation to trigger this bug.)

And add a couple of formatting tweaks in the vicinity....

6 years agofix #H7256 - bug WRT eating rings
PatR [Tue, 3 Jul 2018 23:39:34 +0000 (16:39 -0700)]
fix #H7256 - bug WRT eating rings

Wearing a negatively enchanted ring of increase <foo> would enhance
the bonus gained from eating another ring of the same type when you
got "the magic spreads through your body" effect so could be eploited.
Conversely, wearing a positively enchanted one would make you lose
that worn amount when gaining any bonus from eating one.

6 years agofix github pull request #114 - ant holes in *.des
PatR [Tue, 3 Jul 2018 22:49:44 +0000 (15:49 -0700)]
fix github pull request #114 - ant holes in *.des

Fixes #114

Report and contributed fix described lack of support for room type
"ant hole" in the code that loads special levels (and mentioned that
none of our des files attempted to use that room type so it isn't
noticeable in unmodified version of the game).  The fix overlooked
a couple of other missing room types (leprechaun hall and cockatrice
nest) so I didn't use the pull-request's commit (so not sure what
github's automated updating will make of 'Fixes #114').

6 years agofix github issue #111 - stone-to-flesh of statues
PatR [Tue, 3 Jul 2018 21:59:34 +0000 (14:59 -0700)]
fix github issue #111 - stone-to-flesh of statues

Fixes #111

Casting stone-to-flesh at a random statue animates it as a monster
(created via direct call to makemon()) at an adjacent or nearby spot
if there is already a monster at the statue's spot, but doing so on
a statue of a petrified monster (create attempt via montraits() which
called makemon() without the ADJACENTOK flag) turned it into a corpse
instead.  Pass an extra argument to montraits() so that it behaves
the same normal statue animation for stone-to-flesh without changing
how it behaves when reviving corpses for undead-turning.

6 years agohilite_status: score vs !SCORE_ON_BOTL reprise
PatR [Wed, 27 Jun 2018 00:36:00 +0000 (17:36 -0700)]
hilite_status: score vs !SCORE_ON_BOTL reprise

Handle suppression of 'score' from the 'O' menu for viewing and
setting hilite_status rules differently so that the count of the
number of rules will always match the number of rules shown by the
'a - View all hilites in config format' choice.  If there are score
rules in the config file for a game running under !SCORE_ON_BOTL
configuration, list 'score' normally but if player picks that menu
entry, the followup menu will have the existing rule(s) and 'X -
remove selected hilites' but not 'Z - Add a new hilite'.  If there
aren't any score rules--or there were some but they've now all been
'X'd--then 'score' won't be listed as one of the status fields.

6 years agohilite_status: score vs !SCORE_ON_BOTL
PatR [Mon, 25 Jun 2018 00:44:33 +0000 (17:44 -0700)]
hilite_status: score vs !SCORE_ON_BOTL

When built without support for SCORE_ON_BOTL (the default), suppress
'score' field from 'O' menus for adding/removing hilite_status rules.

Also, add "encumbrance" as field name synonym for "carrying-capacity"
and "experience-points" for "experience".  Relevant for rules set in
config file or via NETHACKOPTIONS.

6 years agomore hilite_status condition attributes
PatR [Sun, 24 Jun 2018 08:56:15 +0000 (01:56 -0700)]
more hilite_status condition attributes

The formatted value for attributes of condition highlights was
reporting 'normal' (aka no attributes) even when the highlight
rule specified some other value.  It initialized a bitmap variable
to ATR_NONE, which is not 0, and then or'd other bits to that.
Then during formatting it checked whether the ATR_NONE bit was set
and returned 'normal' without examining the other bits.  Actual
highlighting wasn't affected, just the strings in the rule set
shown by the 'O' command.

This is a separate issue from the earlier 'bonus fix' where the
attributes of previous condition rules got clobbered if a
hilite_status:condition/any-color&normal rule was added.

6 years agohilite_status attributes
PatR [Sun, 24 Jun 2018 00:37:54 +0000 (17:37 -0700)]
hilite_status attributes

Take a step towards eliminating merging hilite_status rules during
highlighting by creating a single rule instead of multiple ones
when specifying multiple attributes for the same highlight via the
'O' command's menus.

Old:
 (pick_one menu to pick a color) + (pick_one menu to pick an attribute)
| hilite_status:title/always/red&bold
 (pick_one menu to pick a color) + (pick_one menu to pick an attribute)
| hilite_status:title/always/red&blink
New:
 (pick_one menu to pick a color) + (pick_any menu to pick attributes)
| hilite_status:title/always/red&bold+blink

At present, rule selection during highlighting still merges multiple
applicable rules instead of finding the best one first, with the
problems that entails.

Bonus fix:  a hilite_status rule for status conditions which specified
"no attributes" would clear attributes for all previous condition
rules rather than just the one(s) in that "no attributes" rule.

6 years agofix github issue #110 - sortloot segfault
PatR [Thu, 21 Jun 2018 19:09:12 +0000 (12:09 -0700)]
fix github issue #110 - sortloot segfault

Fixes #110

NetHack dumped core while qsort was executing for sortloot.  Fix a
logic error introduced by adding filtering capability to sortloot()
which could result in a sparsely populated array instead of having
the number of elements be less than the list size.

I don't know why this didn't show up sooner.

6 years agofix github issue #109 - healing spells
PatR [Wed, 20 Jun 2018 21:53:20 +0000 (14:53 -0700)]
fix github issue #109 - healing spells

Fixes #109

Spells of healing and extra healing cast at monsters were handling
monster blindness differently from other forms of healing.  (Potions
also work differently when drunk by monsters but I haven't changed
that since it seems to be intentional.)

Hero:
   potion of healing cures blindness if blessed; spell of healing
      cast at skilled or better now behaves likewise;
   potion of extra healing cures blindness if not cursed; spell of
      extra healing is inherently not cursed and already behaved
      likewise;
   potion of full healing always cures blindness even if cursed.

Monsters quaffing potions:
   plain healing cures blindness if not cursed;
   extra healing and full healing always cure blindess.

Hero casting healing spell at monster:
   plain healing behaves like the hero plain healing case:  cures
      blindness as if blessed when cast at skilled or expert level;
      this is a change in hehavior--it used to cure timed blindness
      even if unskilled and not cure 'permanent' blindness at all;
   extra healing cast by hero is inherently not cursed so always
      cures blindness.

6 years agomore glob wishing
PatR [Wed, 20 Jun 2018 01:39:08 +0000 (18:39 -0700)]
more glob wishing

Wishing for "<size> glob of black pudding" worked, and wishing for
"black pudding glob" worked, but wishing for "<size> black pudding
glob" didn't work.  Fix that.

Also, remove a bit of spaghetti introduced by the previous patch.
And once we know we're wishing for a glob, we can skip a big chunk
of wish parsing and special case handling.

6 years agofix githib issue #108 - wishing for mimic corpse
PatR [Wed, 20 Jun 2018 00:21:21 +0000 (17:21 -0700)]
fix githib issue #108 - wishing for mimic corpse

Fixes #108

"small"/"medium"/"large" prefix was being stripped off during wish
parsing so that it could be used to control glob size.  But those
are also prefixes for monster and/or object names.  Wishing for
"small mimic corpse" or "large mimic" corpse failed with "nothing
matching that description exists" when it tried to satisfy "mimic
corpse".  (Asking for "giant mimic corpse" worked as intended.)

Not mentioned in the report:  wishing for "large {dog, cat, kobold}
corpse" produced the corpse of corresponding normal sized critter
instead of that of a large one.

Noticed while testing the fix:  wishing for "glob" failed rather
than pick a random glob type.  Wishing for "glob of grey ooze"
failed even though "grey ooze" is recognized as a variant spelling
for the gray ooze monster.  Wishing for "<monster type> glob" also
failed even when the monster type was viable for globs.  This fixes
all of those even though no one will ever notice....

Wishing for "small box" (and "medium box") no longer yields a large
box, it fails with "nothing matching..." instead.  I was ambivalent
about the earlier change which had the unintended side-effect of
making them synonyms for "large box" so haven't tried to revive it.

6 years agomore polymorph of worn item
PatR [Mon, 18 Jun 2018 02:09:36 +0000 (19:09 -0700)]
more polymorph of worn item

The earlier change for 'fix github issue #106' could result in a
polymorphed weapon being worn in multiple weapon/alt-weapon/quiver
slots.  Reorganize the relevant code more thoroughly this time.

6 years agofix github issue #106 - polymorph panic
PatR [Sun, 17 Jun 2018 23:59:58 +0000 (16:59 -0700)]
fix github issue #106 - polymorph panic

Fixes #106

If dipping a worn amulet into a potion of polymorph turns it into an
amulet of change, the game panics while trying to use up that amulet
when the new one hasn't replaced the old one in inventory yet.  Simply
reordering the relevant code isn't sufficient to fix things:  once it
is in inventory and can be successfully used up, later code would end
up deferencing a stale pointer because it was unaware of the deletion.

6 years agobuild fix, avoid use of 'class'
nhmall [Sat, 16 Jun 2018 02:35:32 +0000 (22:35 -0400)]
build fix, avoid use of 'class'

Build fix, avoid use of 'class'

include\hack.h(199): error C2236: unexpected token 'class'. Did you forget a ';'?
include\hack.h(199): error C2332: 'class': missing tag name
include\hack.h(199): error C2027: use of undefined type 'sortloot_item::<unnamed-tag>'

6 years agofix #H7226 - vault guard should have whistle
PatR [Fri, 15 Jun 2018 23:24:02 +0000 (16:24 -0700)]
fix #H7226 - vault guard should have whistle

Implement the suggestion that since teleporting away from the vault
while being confronted by the guard results in a shrill whistling
sound, the vault guard ought to have a tin whistle in his inventory.

I also added a check that he does have the whistle and to give an
alternate message if not, but after half a dozen tries to have a
squad of beefed up monkeys steal the whistle, they never accomplished
that.  At least three times they took everything except the whistle
but I never succeeded in verifying the alternate message.

6 years agoanother sortloot tweak
PatR [Fri, 15 Jun 2018 00:29:59 +0000 (17:29 -0700)]
another sortloot tweak

The code that formats an object for use in alphabetic comparisons
during sorting is forcing off wizard mode to avoid any alternate
formatting that might produce.  Add a guarantee that doing this can't
be used as a backdoor to create a normal mode panic file if someone
figures out a way to make xname() panic.

6 years agosortloot - enhanced sorting [re-revamp anyone?]
PatR [Tue, 12 Jun 2018 23:33:35 +0000 (16:33 -0700)]
sortloot - enhanced sorting [re-revamp anyone?]

When objects are in the same class, sortloot orders them by their
formatted name.  It was reformatting each object every time it got
compared to another object.  Change that to remember the formatted
name so that any given object is formatted at most once (during the
current sort; future sorts will need to format it again).

Armor and weapon classes are subdivided into smaller subclasses
and the formatting plus alpha compare is only done for items in
the same subclass, so helms come out before cloaks and don't get
their names compared, for instance.  [That was from my 'revamp'
rather than the original implementation.]  This adds a couple more
subclass sets:  food (named fruit, 'other' food, tins, eggs, corpses,
globs) and tools (containers, pseudo-containers [bag of tricks and
horn of plenty once those have become discovered; prior to discovery,
bag of tricks is classified as a container and horn of plenty as an
instrument], instruments, 'other' tools).

The main difference, aside from the formatting efficiency improvement,
is to change the previous sort order
| pink potion
| potion of enlightenment
| purple-red potion
to be
| pink potion
| purple-red potion
| potion of enlightenment
by grouping undiscovered items before discovered items when class and
subclass match.  So discovery state is essentially a sub-subclass and
formatting plus string comparison is only done for members of the
same sub-subclass.  There are actually four state values:  unseen
(which applies to particular objects rather than to their type),
unknown (not discovered and not named), named (not discovered but has
player-assigned type name), and discovered (either fully discovered
or considered not interesting to discover [no alternate description,
not nameable]).

My testing was primarily done with pickup ('m,' with menustyle:T)
and sortloot:Loot (the default) plus !sortpack (not the default and
not a setting I ordinarily use, but less verbose without the class
separators).  It won't astonish me if oddities crop up with other
usage combinations.

6 years agomore sortloot - picking up cockatrice corpses
PatR [Mon, 11 Jun 2018 01:02:20 +0000 (18:02 -0700)]
more sortloot - picking up cockatrice corpses

Yesterday's sortloot() overhaul didn't include some cockatrice corpse
handling for pickup.  If there's an object class filter in place and
pickup has been told to care about cockatrice corpses, have sortloot()
include them in the loot array even if food class isn't accepted by
the filter.  In the pre-sortloot days, and in 3.6.[01] which didn't
attempt to deliver a filtered subset of loot, the check for such
corpses was done before pickup checks the filter.  They need to be in
the loot array to retain the same behavior.

6 years agofix #H7205, #H7120, #H5216 - sortloot
PatR [Sun, 10 Jun 2018 01:03:37 +0000 (18:03 -0700)]
fix #H7205, #H7120, #H5216 - sortloot

H7205 - full-pack identify might skip items if perm_invent is on
        because updating the inventory window might reorder 'invent'
        while the identify code is in the midst of traversing it;
H7120 - pickup that doesn't pick anything up can change the glyph
        shown on the map because the pile might be reordered such
        that a different item is on top;
H5216 - performing a sortloot operation on a pile and then switching
        back to sortloot:none doesn't restore pile's original order.

The 'revamp' that changed the contributed sortloot feature to switch
to simpler usage (object list itself was sorted rather than having a
parallel array that needed to be constructed, sorted, traversed, and
discarded) turns out to have too many problems.  This reverts to a
hybrid solution that constructs an array for traversal, leaving the
linked list in its original order, but hides most of the details of
that from sortloot() callers.  The 'revamp' benefit of being able to
use normal list traversal is lost, as is the potential to skip
sorting when the list turns out to already be in the desired order.

This could stand to have a lot more testing than it's had so far.

6 years agomakeknown()
PatR [Thu, 7 Jun 2018 00:45:44 +0000 (17:45 -0700)]
makeknown()

Noticed while investigating the report about sortloot interacting
with persistent inventory window when identifying all of invent and
possibly skipping some items.  [This doesn't fix that.]

End of game disclosure was using makeknown() on inventory.  It is a
jacket around discover_object() which passes the flag to exercise
Wisdom.  That's useless at end of game [now; conceivably wrong if
disclosure of characteristics exercise ever got added], so call
discover_object() directly to suppress exercise of Wisdom.

discover_object() was also calling update_inventory() for every item
being discovered.  That's not useful when looping through inventory
at end of game.

6 years agoGuidebook date for merge verification
nhmall [Mon, 28 May 2018 12:45:35 +0000 (08:45 -0400)]
Guidebook date for merge verification

6 years agoexpand on patch 2 so far in patchlevel.h
nhmall [Mon, 28 May 2018 01:39:20 +0000 (21:39 -0400)]
expand on patch 2 so far in patchlevel.h

6 years agoGuidebook
nhmall [Sun, 27 May 2018 17:39:16 +0000 (17:39 +0000)]
Guidebook

6 years agomissed one
nhmall [Fri, 25 May 2018 22:57:41 +0000 (18:57 -0400)]
missed one

6 years agoguidebk.txt over guideboo.txt
nhmall [Fri, 25 May 2018 22:52:26 +0000 (18:52 -0400)]
guidebk.txt over guideboo.txt

6 years agoMerge branch 'msdos-build' of https://github.com/chasonr/NetHack into msdos
nhmall [Fri, 25 May 2018 22:42:50 +0000 (18:42 -0400)]
Merge branch 'msdos-build' of https://github.com/chasonr/NetHack into msdos

6 years agoMS-DOS does not use getreturn_enabled
Ray Chason [Thu, 24 May 2018 01:44:42 +0000 (21:44 -0400)]
MS-DOS does not use getreturn_enabled

6 years agoWork around quirky FreeDOS behavior
Ray Chason [Thu, 24 May 2018 01:44:20 +0000 (21:44 -0400)]
Work around quirky FreeDOS behavior

6 years agohilite_status title when polymorphed
PatR [Wed, 23 May 2018 02:23:03 +0000 (19:23 -0700)]
hilite_status title when polymorphed

Make a 'textmatch' rule for title that matches a specific monster type
while polymorphed take precedence over a "none of the above" one.

6 years agohilite_status, what else?
PatR [Tue, 22 May 2018 17:40:55 +0000 (10:40 -0700)]
hilite_status, what else?

While deciding which highlights to apply, give 'percentage' and/or
'absolute' rules that match precedence over 'always' rules regardless
of order within the config settings.

When using 'O' to add 'up/down/changed' rule, don't include 'down'
as a choice for field 'time'.

When using 'O' to add rules, don't squeeze out spaces if adding a
'textmatch' rule for title (to support "field worker", "high priest",
"student of stones", and so forth).

While deciding which highlights to apply, ignore double quotes when
testing whether a 'textmatch' rule matches the current text of a
field.  This allows rules to specify string values as '"value"'
instead of just 'value'.  It not does validate them to ensure quotes
are paired at beginning and end, it just ignores them.  New rules
created via 'O' for rank title include them when displaying what the
new rule would look like as a config file option.  Other text fields
haven't been changed to show quotes but ignoring such applies to all
'textmatch' comparisons.

Expand the menu for adding 'textmatch' rules for title.  When a rank
has separate male and female titles, list three entries instead of
just one
  "male rank"
  "female rank"
  "male rank" or "female rank"
(the order of the first two entries and of the two titles in the
third entry is reversed if the current character is female).  If the
user picks the third entry, two rules are added instead of just one,
identical to each other except for the text to match.

Further expand that menu with
  "none of the above (polymorphed)"
at the end.  When deciding which highlights to apply, "none of the
above" and "(polymorphed)" and the full string are treated as
equivalent (with spaces, quotes, and parentheses ignored).  Rather
than comparing anything against the title text, it matches if the
hero is polymorphed (where title will be "<hero> the <monster-type>"
instead of "<hero> the <rank>").  Note that the user can have config
file 'textmatch' rules for title to match specific "<monster-type>"
values but the 'O' menu doesn't offer any opportunity for that.
(I've just realized that rules for specific monster types should be
given precedence over "none of the above" but at present that isn't
done; the order of the rules will determine which wins out.)

6 years agohilite_status string comparison
PatR [Tue, 22 May 2018 09:42:08 +0000 (02:42 -0700)]
hilite_status string comparison

Simplify the string comparison done when checking 'textmatch' rules
to decide whether to highlight something.

Fix the menu titles when setting up a textmatch via 'O':  the title
for color referred to attribute and the one for attribute used the
default.  The two tiles are set up in advance; the one for color was
set correctly but then the one for attribute was written into the
wrong buffer.

When using 'O' to manipulate hilite_status rules, if there are any
when you're done and the 'statushilites' option (iflags.hilite_delta)
is 0, give a message reminding that it needs to be non-zero for
highlighting to be activated.