]> granicus.if.org Git - nethack/log
nethack
6 years agogitinfo.txt on Unix
PatR [Sun, 4 Mar 2018 22:17:13 +0000 (14:17 -0800)]
gitinfo.txt on Unix

Hide the scary perl command during 'make all' feedback in src/.
I'm not a shell programmer but this works fine for me when skipping
NHgithook::NHversioning because dat/gitinfo.txt is already present,
when creating dat/gitinfo.txt successfully, and when creation fails
because perl can't find NHgithook.pm.  It hasn't been tested when
perl itself is absent.

6 years agomore nmake spotless
nhmall [Sun, 4 Mar 2018 15:37:43 +0000 (10:37 -0500)]
more nmake spotless

6 years agomsc makefiles update timestamp on copied files
nhmall [Sun, 4 Mar 2018 15:30:17 +0000 (10:30 -0500)]
msc makefiles update timestamp on copied files

6 years agomsc Makefile
nhmall [Sun, 4 Mar 2018 15:25:11 +0000 (10:25 -0500)]
msc Makefile

6 years agoupdate nmake spotless for windows
nhmall [Sun, 4 Mar 2018 15:09:35 +0000 (10:09 -0500)]
update nmake spotless for windows

6 years agomore msc makefile tweaks
nhmall [Sun, 4 Mar 2018 14:54:29 +0000 (09:54 -0500)]
more msc makefile tweaks

6 years agowindows cmdline dependency bit
nhmall [Sun, 4 Mar 2018 14:11:01 +0000 (09:11 -0500)]
windows cmdline dependency bit

6 years agowindows cmdline Makefile
nhmall [Sun, 4 Mar 2018 14:07:16 +0000 (09:07 -0500)]
windows cmdline Makefile

6 years agofix prayer infinite loop
PatR [Sun, 4 Mar 2018 00:46:39 +0000 (16:46 -0800)]
fix prayer infinite loop

Reported internally, if a prayer resulted in 'fix all troubles' and
one of those was TROUBLE_STUCK_IN_WALL but safe_teleds() couldn't find
any place to relocate the hero to, nothing was done and STUCK_IN_WALL
would be found again as the next trouble to fix.  Since safe_teleds()
eventually resorts to trying every single spot on the map, there was
no other result possible than failing to find an available spot again,
nothing would be done, and next trouble would be STUCK_IN_WALL, ad
naseum.

I started out with a fix that looked for secret corridors to expose
and doors to open, to make more space available, then try to move a
monster off the level, then try digging out rock and/or walls and
smashing boulders.  None of those guarantee success and I got bogged
down by the digging case.  This was going to be a last resort if all
of those still failed to make somewhere to move the hero, but for now,
at least, I'm skipping all that other stuff and going directly to the
last resort:  give the hero Passes_walls ability for a short time, and
let him or her find own way out of trouble.  The next trouble to fix
won't be STUCK_IN_WALL because Passes_walls makes that a non-issue.

I'm not thrilled with the new messages involved but want to get this
behind me.

6 years agoburied_ball()
PatR [Sat, 3 Mar 2018 23:26:49 +0000 (15:26 -0800)]
buried_ball()

Noticed when I was looking at float_up()/float_down() vs being trapped.
(I have a substantial patch for that but it involves infrastructure
changes so will have to go into master instead of the 3.6.0 branch.)
buried_ball() was using nested loops as a very convoluted way to test
  if (otmp->ox >= cc->x - 2 && otmp->ox <= cc->x + 2
   && otmp->oy >= cc->y - 2 && otmp->oy <= cc->y + 2)
I think this revised version is closer to what was intended.

There are issues.  buried_ball() finds the buried iron ball nearest to
the specified location--which is always the hero's current location--
rather than the one which was 'uball' before being buried.  A player
can spot that since iron balls aren't necessarily identical.  Also, it
searches within a radius of two steps but a tethered hero is only
allowed to move one step away from buried ball, so something is off.

6 years agoaklys tweaks
PatR [Sat, 3 Mar 2018 18:54:43 +0000 (10:54 -0800)]
aklys tweaks

It turns out that Mjollnir before the recent aklys enhancement and
aklys since then would end up both wielded and quivered if it returned
to thrower's hand while quiver was empty.  Remove it from quiver before
restoring it to hand.

Limit the throwing range of an aklys if it is expected to return (ie,
thrown while wielded as primary) since it is a "thonged club" which is
supposedly attached by a cord to the thrower's wrist or hand.  I have
no idea how long a real cord like that might be.  I set the range limit
to BOLT_LIM/2.  Shorter makes throw-and-return uninteresting for an
item that needs to be wielded to throw--so would probably be swapped
back and forth with a stronger melee weapon or longer range missile
weapon--and longer seems absurd.

6 years agoenable USE_WIN_IOCTL code unless explicitly avoided
nhmall [Sat, 3 Mar 2018 17:58:53 +0000 (12:58 -0500)]
enable USE_WIN_IOCTL code unless explicitly avoided

 Changes to be committed:
modified:   doc/fixes36.1
modified:   include/unixconf.h
modified:   sys/share/ioctl.c

github pull request #19 made reference to resulting code behaviour
being better when windows were resized when USE_WIN_IOCTL was defined.

The logic for including the necessary enabling code in the build in
sys/share/ioctl.c was an explicit "opt-in" strategy, so anything not
deliberately and explicitly listed was not able to take advantae
of the potentially useful code. The need to add #defines to that
list would have been perpetual as new platforms came online, and
unnecessarily restrictive for everything else.

This switches the logic to include the code by default now,
and thus
unless there is an explicit "opt-out" by uncommenting
AVOID_WIN_IOCTL in include/unixconf.h

Some platforms, and we have no way of knowing which ones, may have
to ensure that AVOID_WIN_IOCTL is #define'd.

6 years agotypo missing word
nhmall [Sat, 3 Mar 2018 15:24:26 +0000 (10:24 -0500)]
typo missing word

6 years agointerim dungeoneer, README update
nhmall [Sat, 3 Mar 2018 15:19:47 +0000 (10:19 -0500)]
interim dungeoneer, README update

6 years agoMake spotless should remove qt4 specific files
Pasi Kallinen [Sat, 3 Mar 2018 14:58:07 +0000 (16:58 +0200)]
Make spotless should remove qt4 specific files

6 years agoAdd catch-all database entry for the polearms
Pasi Kallinen [Sat, 3 Mar 2018 14:15:12 +0000 (16:15 +0200)]
Add catch-all database entry for the polearms

6 years agoCleaver update
PatR [Sat, 3 Mar 2018 02:19:23 +0000 (18:19 -0800)]
Cleaver update

I worked on this a while back but didn't commit it because I couldn't
figure out the dead monster which wouldn't die.  Pasi beat me to that.

Clean up the Cleaver code some and make the three-target swing alternate
between counter-clockwise and clockwise to simulate normal right-to-left
swing followed by left-to-right backswing.  (Alternation happens on each
swing regardless of whether it is consecutive with the most recent one.
That's suboptimal but easy....)  Also, stop three-target attack early if
hero is life-saved after being killed by a passive counter-attack from
the first or second target.

Prevent rogue backstab and two-hander breaking foes' weapons when using
Cleaver hand-to-hand because getting more than one of either of those
bonuses at a time would be excessive.  I think allowing those for the
primary target but not for the two adjacent ones would be better, but I
just thought of that and am not going back for another round of revising.

This doesn't incorporate the two pull requests:  one to avoid hitting
tame or peaceful adjacent targets unless the primary was also tame or
peaceful, the other to avoid hitting unseen adjacent targets.  I'm not
sure if that includes remembered-unseen 'I' on the spot or no monster
shown at all.  (There's a third one about updating the map but it isn't
needed for the existing Cleaver code either before or after this patch.)
I'm in favor of the first one and am not sure about the second.  My
original concern was that someone could use Cleaver to find/hit three
unknown monsters at a time via 'F' prefix, but forcefight aimed at
thin air doesn't reach the Cleaver code so that can't happen, nor can
attacking two known close monsters at once by targetting an empty spot
between them.

6 years agodate bit
nhmall [Fri, 2 Mar 2018 20:35:07 +0000 (15:35 -0500)]
date bit

6 years agofixes typo bit, pt3
Pasi Kallinen [Fri, 2 Mar 2018 14:56:18 +0000 (16:56 +0200)]
fixes typo bit, pt3

6 years agofixes typo bit, pt2
Pasi Kallinen [Fri, 2 Mar 2018 14:38:52 +0000 (16:38 +0200)]
fixes typo bit, pt2

6 years agofixes typo bit
Pasi Kallinen [Fri, 2 Mar 2018 14:32:29 +0000 (16:32 +0200)]
fixes typo bit

6 years agoFix Cleaving giving dmonsfree warning
Pasi Kallinen [Fri, 2 Mar 2018 13:49:45 +0000 (15:49 +0200)]
Fix Cleaving giving dmonsfree warning

Due to inverted logic, hitting a blue jelly with the Cleaver could cause
a dmonsfree warning - the jelly would die, but then come back to life
via the passive attack.  This is a post-3.6.0 bug

6 years agoFix comment typo
Pasi Kallinen [Wed, 28 Feb 2018 07:17:06 +0000 (09:17 +0200)]
Fix comment typo

6 years agoMjollnir bit
PatR [Tue, 27 Feb 2018 17:28:15 +0000 (09:28 -0800)]
Mjollnir bit

Ue the same object name formatting for the new "Mjollnir fails to
return" message as is used for most of the other throwing messages.

6 years agothrow-and-return for aklys
PatR [Mon, 26 Feb 2018 19:18:29 +0000 (11:18 -0800)]
throw-and-return for aklys

The comment I added to data.base--to explain that despite what the
short description says, an aklys wouldn't return to sender after being
thrown--was bugging me, so I've made aklyses behave like Mjollnir.
If thrown when wielded as primary weapon, it will usually return and
usually be re-wielded.  I also added a new message when either thrown
Mjollnir or thrown aklys is expected to return and fails to do so.

Most of the diff to dothrow.c is a change in indentation level.  The
amount of code needed was quite small.

Autopickup for thrown Mjollnir which had failed to return was putting
it into the quiver slot if that was empty.  Note quite an outright bug,
but it started wielded and can't be thrown if quivered, so exclude it
from the stuff that will auto-fill the quiver slot when added to invent
(post-3.6.0 issue).

6 years agofix #H4997 - "Congratulations" -> "Well done"
PatR [Mon, 26 Feb 2018 16:35:33 +0000 (08:35 -0800)]
fix #H4997 - "Congratulations" -> "Well done"

Reported suggested that "congratulations" was too modern for use by
your god during ascension and that the longer phrases which were
shortened to yield it were too modest for the god to use.  Make the
suggested change.

6 years agoMerge githash
keni [Mon, 26 Feb 2018 14:03:12 +0000 (09:03 -0500)]
Merge githash

6 years agofinal msdos bit un-revert a reversion
nhmall [Sun, 25 Feb 2018 23:15:28 +0000 (18:15 -0500)]
final msdos bit un-revert a reversion

6 years agofixes36.1 catch-up bit for deaf whistling
nhmall [Sun, 25 Feb 2018 22:52:33 +0000 (17:52 -0500)]
fixes36.1 catch-up bit for deaf whistling

6 years agoBug 734 - #H4611: Whistling while deaf
nhmall [Sun, 25 Feb 2018 22:42:31 +0000 (17:42 -0500)]
Bug 734 - #H4611: Whistling while deaf

fixed

6 years agomsdos Makefile update for posix regex
nhmall [Sun, 25 Feb 2018 21:28:46 +0000 (16:28 -0500)]
msdos Makefile update for posix regex

6 years agoupdate msdos header
nhmall [Sun, 25 Feb 2018 20:15:10 +0000 (15:15 -0500)]
update msdos header

6 years agoupdate msdos Makefile so at least possible to build
nhmall [Sun, 25 Feb 2018 20:09:56 +0000 (15:09 -0500)]
update msdos Makefile so at least possible to build

6 years agoresolve part of H4422 related to .exe versions
nhmall [Sun, 25 Feb 2018 17:20:50 +0000 (12:20 -0500)]
resolve part of H4422 related to .exe versions

I also saw
 that looking at the details of both windows .exes that they indicate file
 version 3.5.0.0. Shouldn't it be 3.6.0.0 for the NH version 3.6.0

6 years agoanother msdos bit
nhmall [Sun, 25 Feb 2018 04:32:54 +0000 (23:32 -0500)]
another msdos bit

6 years agofix some msdos build errors
nhmall [Sun, 25 Feb 2018 04:26:25 +0000 (23:26 -0500)]
fix some msdos build errors

6 years agofix #H6861 - whatis behaves weirdly with plurals
PatR [Sun, 25 Feb 2018 03:35:56 +0000 (19:35 -0800)]
fix #H6861 - whatis behaves weirdly with plurals

Report indicated that looking up "more info?" for "kittens" would show
the data.base entry for "kitten" and then when the display window was
dismissed, another "--More--" prompt for a empty second display window
would occur.  Looking up "2 arrows" from a closely-seen object on the
map behaved similarly.  User correctly diagnosed that the two-pass
lookup left the 'found_in_file' flag set from the first pass during
the second but that just clearing that resulted in "I have no info
about such things" on the second pass.  The code is on the convoluted
side and needed an extra flag to handle 'seen on first pass' in
addition to clearing found flag after the first pass.  I also added a
check to skip the second display if primary and secondary keys don't
match each other but both find the same entry.  To test it, I tried
"a +0 aklys named aclys".  That found the aclys entry but failed to
find "+0 aklys", so I added another change to have the key massaging
remove +/-N after removing "a", "an", or "the".

If "Want to see more info \"" + lookup string + "\"?" was too long,
the prompt buffer passed to yn() was being left uninitialized.  Also,
test for too long was based on BUFSZ but yn() complains (to paniclog)
if the prompt is longer than QBUFSZ.  Make checkfile() construct a
truncated prompt if the lookup string is too long.

I untangled some spaghetti by making all the 'goto's be forward.  It
didn't help a lot but did simplify a few early returns by having them
jump to a common exit instead of replicating the file close.

6 years agoUpdate docs, man page.
keni [Wed, 21 Feb 2018 15:58:31 +0000 (10:58 -0500)]
Update docs, man page.
Add last chance attempt to build dat/gitinfo.txt

6 years agoa documentation bit
nhmall [Wed, 21 Feb 2018 02:08:44 +0000 (21:08 -0500)]
a documentation bit

6 years agogitinfo.pl: special case code to allow running it from $TOP or DEVEL without
keni [Fri, 9 Feb 2018 16:48:04 +0000 (11:48 -0500)]
gitinfo.pl: special case code to allow running it from $TOP or DEVEL without
 installing the hooks first
NHgithook.pm: add some warnings if nhversioning can't open files
make sure nhversioning fails before opening gitinfo.txt if it can't get valid
 data

6 years agoIncorporate some git information into NetHack
nhmall [Mon, 29 Jan 2018 03:54:08 +0000 (22:54 -0500)]
Incorporate some git information into NetHack

Incorporate some git information into NetHack so that it
is potentially visible to a player. That's useful when
collecting details about the version that they are
running and, if the gitinfo is present, it can tie the
code to a specific git commit in the repository.

This modifies 'makedefs -v' to check for the presence of a data file
called dat/gitinfo.txt and if it is there, parse out its
contents, then write additional lines to include/date.h beyond
what 'makedefs -v' was previously putting in there, similar to
this sample:

      #define NETHACK_GIT_SHA "0c84e564c78e2024e562d39539376ce2e21eec8e"
      #define NETHACK_GIT_BRANCH "NetHack-3.6.0"

The contents of an appropriate dat/gitinfo.txt are as follows,
and trailing/leading whitespace is not significant:

      githash = 0c84e564c78e2024e562d39539376ce2e21eec8e
      gitbranch = NetHack-3.6.0

It also adjusts the contents of the 'v' version information to
include the additional git info when available.

Also adds some hooks DEVEL/hooksdir and a perl file to DEVEL
for simplifying and automating the deposit of dat/gitinfo.txt
so that it generally reflects the most current git commit.

DEVEL/gitinfo.pl can be used to build dat/gitinfo.txt at any
time without doing a commit, merge, or checkout.
     perl DEVEL/gitinfo.pl

command line --version and -version support

To complement the extra information being provided in the
version by the 'v' command, this also adds support for the
following new command line arguments:
    --version
     -version            Output the NetHack version string then exit.

    --version:paste      Output the NetHack version string and also copy it to
     -version:paste      the platform's paste buffer for insertion somewhere,
                         then exit.

If the paste variation of -version is requested on a platform that
hasn't incorporated any support for the capability, it will deliver
the version info then an error message, prior to exiting.

To support the extended -version:paste variation, a port needs to:
    - provide a port-specific routine to perform
      the paste buffer copy in a port code file.
    - #define RUNTIME_PASTEBUF_SUPPORT in the include/portconf.h header file.

    --skeleton--
    void port_insert_pastebuf(buf)
    char *buf;
    {
     /* insert code to copy the version info from buf into
        platform's paste buffer in a supported way */
    }

macosx and Windows have both added support for RUNTIME_PASTEBUF_SUPPORT

6 years agoswitch docall() to safe_qbuf()
PatR [Fri, 23 Feb 2018 21:07:49 +0000 (13:07 -0800)]
switch docall() to safe_qbuf()

Simplify docall() for object types.  Adds some different complexity to
a new routine so the overall simplification is rather minimal, but we
already have a routine to construct prompt buffers involving formatted
object names without allowing overflow, so use it.

tty getlin() limits the input to COLNO characters, so 80 by default.
To get potential QBUFSZ overflow, I had to increase COLNO in global.h
and rebuild from scratch.  A value greater than 127 triggers a lot of
warnings.  I didn't try 127.  126 gets one warning, involving use of
FARAWAY (defined as COLNO+2) in dogmove.c.

We should change things to limit object names to much less than 80,
but this doesn't attempt to implement that.

6 years agofix "wonky secret door" in Cav quest
PatR [Fri, 23 Feb 2018 15:25:37 +0000 (07:25 -0800)]
fix "wonky secret door" in Cav quest

The earlier fix for hoizontal vs vertical doors would have worked for
the Cav quest (lower left in leader's chamber) where door handling
occurs before wallification, but it wasn't working for minend-3 (east
wall of entry room) which already had walls.  The more recent fix
solved the second case but broke the first one.  I think this actually
solves both modes of door classification.  I hope....

6 years agofix #6870 - clairvoyance feedback
PatR [Thu, 22 Feb 2018 06:44:15 +0000 (22:44 -0800)]
fix #6870 - clairvoyance feedback

Forwarded to the contact form from a github "issue":  in some
circumtances clairvoyance lets you move the cursor around to examine
the revealed map, and when doing so starts with "for instructions
type '?'".  When extended clairvoyance periodically kicks in, as
opposed to explicitly casting the spell, there wasn't sufficient
context to figure out what it was prompting for (unless you actually
answer '?' to get instructions).  Depending upon the most recent
message, it could seem like quite a strange prompt.  Explicitly give
a clairvoyance-specific message prior to that.

Also, the getpos() help was including suggestions for targetting
monsters that aren't appropriate when it's being used for detection.

do_name.c has had quite a bit of formatting rot slip in since 3.6.0.
This fixes up the stuff I spotted by manual inspection.

6 years agopline() -> raw_print() -> dumplog()
PatR [Wed, 21 Feb 2018 03:32:47 +0000 (19:32 -0800)]
pline() -> raw_print() -> dumplog()

Reorder some code in pline() so that early pline messages which use
raw_print() instead of putstr(WIN_MESSAGE) are included in the DUMPLOG
message buffer.  If the game ends soon enough they'll be shown in the
final log; otherwise they'll get pushed out of the buffer once enough
later messages are delivered.

6 years agoMerge branch 'NetHack-3.6.0' into NetHack-3.6.0
Alex Smith [Tue, 20 Feb 2018 21:55:31 +0000 (21:55 +0000)]
Merge branch 'NetHack-3.6.0' into NetHack-3.6.0

6 years agoWake up monsters, and let them stop eating, before angering them
Alex Smith [Tue, 20 Feb 2018 21:53:27 +0000 (21:53 +0000)]
Wake up monsters, and let them stop eating, before angering them

If we do it the other way round, then mimics will forget what
they're mimicking without a seemimic() call, meaning that the
line-of-sight calculations can get confused if the mimic was
mimicking something opaque.

6 years agofix some typos mentioned downstream
nhmall [Tue, 20 Feb 2018 02:32:54 +0000 (21:32 -0500)]
fix some typos mentioned downstream

6 years agoupdate fixes36.1 with the docall() prompt string overrun
nhmall [Mon, 19 Feb 2018 20:42:18 +0000 (15:42 -0500)]
update fixes36.1 with the docall() prompt string overrun

6 years agofix #H6867 - mail buffer overrun
PatR [Mon, 19 Feb 2018 19:59:14 +0000 (11:59 -0800)]
fix #H6867 - mail buffer overrun

Web contact report of a github pull request.  A previous fix from
same user dealt with potential crash caused by freeing mailbox data
when the mailbox came from getenv("MAIL").  getenv() doesn't return
a value obtained by malloc so freeing it was bad.  The fix was to
allocate memory to hold a copy of getenv("MAIL") so that free() was
valid.  Unfortunately it didn't allocate enough space to hold the
terminating '\0' so potentially corrupted malloc/free bookkeeping
data.  And the alloc+copy was being performed every time the mailbox
was checked, resulting in leaked memory from the previous check (if
MAIL came from player's environment).  Fortunately the recheck only
takes place after new mail is actually detected and reported to the
player so the leak was probably small for most folks.

This compiles for the set of conditionals that apply to me (after
taking out -DNOMAIL that the hints put in my Makefile) but I can't
test that it actually works since mail is never delivered to this
machine.

6 years agosync README and DEVEL/Developer re: repositories
nhmall [Mon, 19 Feb 2018 16:18:57 +0000 (11:18 -0500)]
sync README and DEVEL/Developer re: repositories

6 years agofix reported stack corruption bug during Call
nhmall [Mon, 19 Feb 2018 15:19:44 +0000 (10:19 -0500)]
fix reported stack corruption bug during Call

Fix an issue reported as github #74.
Some guard code was required to prevent writing past end of qbuf
via a sprintf.

6 years agostatic analyzer bit
PatR [Sun, 18 Feb 2018 02:54:52 +0000 (18:54 -0800)]
static analyzer bit

I can't find the original message at the moment, but one of the things
that an analyzer complained about was the *s='\0' possibly assigning
to a Null pointer.  The superfluous test of 's' in the while condition
has fooled it into thinking that's possible when it's not.

if (s) {
  while (s && ...) {
    *s++ = ...
  }
  *s = '\0';
}

6 years agocomment formatting
PatR [Sat, 17 Feb 2018 09:58:14 +0000 (01:58 -0800)]
comment formatting

Fix a few mis-indented comments I stumbled across.

6 years agoI noticed makedefs was segfaulting when argc == 1
nhmall [Fri, 16 Feb 2018 19:52:02 +0000 (14:52 -0500)]
I noticed makedefs was segfaulting when argc == 1

6 years agoinfrastructure fixes:
keni [Fri, 16 Feb 2018 17:07:37 +0000 (12:07 -0500)]
infrastructure fixes:
- fix bug in git hooks that loses file permissions when doing variable expansion
- fix execute permissions on sys/unix/hints/macosx.sh
- explicitly call out perl as required for hooks in Developer.txt

6 years agoplace_lregion() bug
PatR [Thu, 15 Feb 2018 18:13:42 +0000 (10:13 -0800)]
place_lregion() bug

Noticed while looking into the TROUBLE_STUCK_IN_WALL prayer bug,
place_lregion() has been using the wrong row for 'low y' in its
whole-level handling, presumeably ever since it was first introduced.
3.4.3 definitely had the same bug; I didn't check any further back.

For maze levels which only consider every other row and every other
column to be viable locations this probably didn't matter.  And even
non-maze levels usually don't have anything on row 0, so this fix
isn't likely to be noticeable.

6 years agofix #H4240 - linking on VAX/VMS
PatR [Thu, 15 Feb 2018 02:38:35 +0000 (18:38 -0800)]
fix #H4240 - linking on VAX/VMS

First reported two years ago, then again this week by someone else
who didn't go through the web contact page (so no new #H number or
bugzilla entry).  Using vmsbuild.com to build on VAX complains about
not being able to resolve a bunch of functions--it's basically
trying to build the full program using only the code supplied by
sys/vms/vmsmain.c.  The original report mentioned a workaround and
was also dealing with a second issue (already fixed post-3.6.0) that
I incorrectly guessed was responsible for the linking problem.  This
report had the correct linker magic to fix the linking issue.

I'm still not sure whether the order of /Library and /Include after
the name of an object library file on a LINK command line matters.
In a linker options file, which vmsbuild.com constructs and uses,
/Include needs to come first so that the contents of the library are
searched after the explicitly included object modules are processed.

Building with the Makefiles (using DEC's MMS or some versions of
freeware MMK) doesn't collect the object files into a library so was
never affected by this.  And the linker options ordering issue is
apparently specific to the VAX/VMS linker; vmsbuild.com run on Alpha
and on IA64 linked 3.6.0 successfully without this fix.

6 years agocommand line Makefile update for vs compiler
nhmall [Fri, 9 Feb 2018 23:57:43 +0000 (18:57 -0500)]
command line Makefile update for vs compiler

6 years ago'Iu' vs unknown container contents
PatR [Thu, 8 Feb 2018 01:31:44 +0000 (17:31 -0800)]
'Iu' vs unknown container contents

An inventory of unpaid items where more than one was present would
show
|> bag's contents    N zorkmids
if any of the items were inside a container whose contents aren't
known.  But if there was only one item (so container must be owned
by hero) the 'Iu' output menu was skipped for pline and yielded
|> scroll of magic mapping   133 zorkmids
Force the menu display if the lone unpaid item is inside a container
whose contents are unknown.

I'm not sure whether a hero-owned container can have both unknown
contents and an unpaid item in normal play.  I managed it while
trying to fix a reported problem--except I can no longer find the
relevant report--where itemized shop billing also revealed unseen
container contents (for any number of items, not just 1).  That isn't
fixed yet, but I want to get the simpler 'Iu' part out of the way.

6 years agosome more reformatting, dig.c
PatR [Tue, 6 Feb 2018 10:41:31 +0000 (02:41 -0800)]
some more reformatting, dig.c

A bit more ambitious this time, but not much.

6 years agoformatting bit for u_on_rndspot()
PatR [Tue, 6 Feb 2018 10:20:26 +0000 (02:20 -0800)]
formatting bit for u_on_rndspot()

Something trivial I noticed while looking into the stuck-in-wall
situation.

6 years agofix #H4459 - shopkeeper/scare monster bug
PatR [Tue, 6 Feb 2018 00:36:35 +0000 (16:36 -0800)]
fix #H4459 - shopkeeper/scare monster bug

Reported about 18 months ago:  standing on a scroll of scare monster
while next to a shopkeeper who was blocking the shop entrance because
hero was carrying unpaid shop goods would yield "<shk> turns to flee"
but <shk> wouldn't move.  This was a side-effect of making standing
on scrolls of scare monster be stronger than on "Elbereth" when the
latter was nerfed.  Make shopkeepers inside their own shops and temple
priests inside their own temples be immune to the effect of hero
standing on scare monster.

Also, make the Wizard, lawful minions, Angels of any alignment, the
Riders, and shopkeepers and priests in their own special rooms (ie,
all creatures that now ignore standing on scare monster) be immune to
the fright effect of tooled horns.  Innate magic resistance usually
prevented them from being scared anyway, but make it explicit.

Reading a scroll of scare monster or casting the spell of cause fear
still rely on innate resistance to avoid chasing away those monsters.
I'm not sure whether they should have the same adjustment.

7 years agofix #6691 and a couple other twoweap issues
PatR [Sun, 28 Jan 2018 08:38:08 +0000 (00:38 -0800)]
fix #6691 and a couple other twoweap issues

Report was for dual-wielding hitting an enchanter and assumed that
a resistant artifact as primary weapon was protecting vulnerable
secondary weapon.  Actual reason was simpler.

When in normal form, dual-wielding attacks against creatures which
cause erosion to the weapon which hits them would only inflict the
passive erosion damage to the primary weapon, even if it missed and
secondary hit.  Make primary attack always trigger passive counter-
attack--before second swing now, rather than after--even if it misses,
and secondary attack trigger another one if that hits.  Both weapons
are now subject to passive erosion (but only when they actually hit);
when secondary weapon hits, hero gets a double dose of counter-attack.

Hero poly'd into a monster with multiple weapon attacks (various
leaders:  dwarf lord, orc-captain, and so forth) would try to emulate
dual wielding and first hit with uwep then with uswapwep.  But it
would do that even if uswapwep was a bow or stack of darts that the
player had no itention of using for hand-to-hand.  Stick with repeat
hits by uwep when uswapwep seems inappropriate.

Splitting a pudding while dual-wielding would only do so when hit by
uwep of appropriate material, never when hit by uswapwep.  So silver
saber and longsword could split if longsword was primary but never
split if saber was primary.  Check material and splitting separately
for each hit.  It's now possible to split twice with one dual-weapon
attack if both weapons hit and both are made of the right material
(iron or 'metal'; among relevant objects the latter is only used for
tsurugi and scapel).

7 years agoversion output appearance bits
nhmall [Fri, 26 Jan 2018 22:25:21 +0000 (17:25 -0500)]
version output appearance bits

7 years agofix branch placement of change
nhmall [Fri, 26 Jan 2018 13:06:23 +0000 (08:06 -0500)]
fix branch placement of change

7 years agoOnly update dat/gitinfo.txt if the hash is new
nhmall [Fri, 26 Jan 2018 13:01:03 +0000 (08:01 -0500)]
Only update dat/gitinfo.txt if the hash is new

7 years agocopyright notice to 2018
nhmall [Fri, 26 Jan 2018 04:23:16 +0000 (23:23 -0500)]
copyright notice to 2018

7 years agofix 'makedefs -z' for config using FILE_PREFIX
PatR [Tue, 23 Jan 2018 08:52:57 +0000 (00:52 -0800)]
fix 'makedefs -z' for config using FILE_PREFIX

Apply user-contributed patch to make do_vision() handle FILE_PREFIX
correctly.  It was putting that value into the filename buffer, then
overwriting it with the ordinary filename instead of appending.

Deletion of just-made vis_tab.h when creation of vis_tab.c fails would
have failed too if FILE_PREFIX had been working.

The patch was against 3.4.3 and didn't apply cleanly to current code,
but it is a staightforward fix, although the file deletion case was
buggy (failed to clear "vis_tab.c" from buffer before reconstructing
"vis_tab.h" via appending stuff).  FILE_PREFIX seems to be Amiga-only
so I've only tested the usual case where it isn't defined.

7 years agofix object pickup
PatR [Mon, 22 Jan 2018 00:30:58 +0000 (16:30 -0800)]
fix object pickup

Mentioned in the newsgroup:  picked up items have stopped merging with
compatible stacks in inventory.

The commit 0c5155584975731f2c37ace88acd046a54ae5aa6 by me on January 5
|
| fix #H6713 - unpaid_cost: object not on any bill
|
| Stealing a shop object from outside the shop with a grappling hook
| would result in that item being left marked 'unpaid' after the shop's
| bill was treated as being bought and not yet paid for.  This led to
| "unpaid_cost: object wasn't on any bill" every time inventory was
| examined.  The problem was caused by handling the shop robbery after
| removing the object from the floor but before adding it to inventory,
| so it couldn't be found to have its unpaid bit cleared.
|
inadvertently caused that.  The effect was actually deliberate but it
wasn't intended to be so widespread.  Handle extract/bill/addinv/rob
sequencing differently instead of overriding inventory merging.

7 years agoT-shirt punctuation
PatR [Sat, 13 Jan 2018 00:13:14 +0000 (16:13 -0800)]
T-shirt punctuation

'It reads:  "foo bar quux"' is a sentence so should have a terminating
period.  Technically that ought to be placed inside the quotes, but
putting it after distinguishes slogans which have their own punctuation
from ones which don't.

A couple of entries contain multiple sentences.  Some used two-space
separation between those sentences, some only one; make all use two.

Add a few new T-shirt messages, including a couple with pop culture
references which are only 10 years old instead of 20 or more....

7 years agobuild fixes for MacOSX:
keni [Wed, 10 Jan 2018 01:59:26 +0000 (20:59 -0500)]
build fixes for MacOSX:
- fix generation of sysconf when WANT_SOURCE_INSTALL=1
- use xcrun as main search for gdb
- turn gdb off in most cases

7 years agoMerge branch 'NetHack-3.6.0' of https://rodney.nethack.org:20040/git/NHsource into...
Alex Smith [Sat, 6 Jan 2018 00:39:17 +0000 (00:39 +0000)]
Merge branch 'NetHack-3.6.0' of https://rodney.nethack.org:20040/git/NHsource into NetHack-3.6.0

7 years agoFix an exploit involving bags and potions of water
Alex Smith [Sat, 6 Jan 2018 00:31:11 +0000 (00:31 +0000)]
Fix an exploit involving bags and potions of water

Discovered while writing the previous commit. If you dipped a sack
full of potions into an uncursed potion of water, the potions would
dilute but you wouldn't lose the original potion, letting you repeat
until all were diluted.

Allowing people to do this trick to blank multiple potions from one
potion of water seems like it's not an abuse, given that it can be
done in a more tedious way with water walking or the like and it
costs resources, but it's definitely abusive to make it possible
entirely for free.

7 years agoGive feedback when oilskin sacks get wet
Alex Smith [Sat, 6 Jan 2018 00:12:49 +0000 (00:12 +0000)]
Give feedback when oilskin sacks get wet

We can identify them by elimination in this case (they're the only
bag-like container that doesn't produce a message, the others all
do), so it's probably best to be more explicit as to what's going
on (for user interfaces and TDTTOE purposes).

7 years agofix #H6713 - unpaid_cost: object not on any bill
PatR [Fri, 5 Jan 2018 09:23:56 +0000 (01:23 -0800)]
fix #H6713 - unpaid_cost: object not on any bill

Stealing a shop object from outside the shop with a grappling hook
would result in that item being left marked 'unpaid' after the shop's
bill was treated as being bought and not yet paid for.  This led to
"unpaid_cost: object wasn't on any bill" every time inventory was
examined.  The problem was caused by handling the shop robbery after
removing the object from the floor but before adding it to inventory,
so it couldn't be found to have its unpaid bit cleared.

When investigating this I came across a more severe bug:  if the hero
had never entered the shop, the shopkeeper's bill wasn't initialized
properly and add_one_tobill() could crash while attempting to execute
    bp->bo_id = obj->o_id;
because 'bp' was Null.

7 years agofix #H6707 - double "gush of water hits" messages
PatR [Tue, 2 Jan 2018 01:14:37 +0000 (17:14 -0800)]
fix #H6707 - double "gush of water hits" messages

When polymorphed into an iron golem (or gremlin with 2/3 chance),
triggering a rust trap would give "a gush of water hits <you or some
body part>" and then give a second "a gush of water hits you" when
dealing with golem or gremlin effects.  That made it seem as if the
trap was hitting twice.  This removes the redundant messages.  (Rust
trap against monster iron golem or gremlin didn't have them.)

7 years agospecial level mimics
PatR [Mon, 1 Jan 2018 01:19:38 +0000 (17:19 -0800)]
special level mimics

The special level loader would allow the level description to specify
an alternate monster appearance for any type of monster, and if one
was specified for a mimic then that mimic would be polymorphed into
the appearance instead of masquerading as it.  This changes it to
only use an appearance for mimics, the Wizard, vampires, and general
shapeshifters (chameleons, doppelgangers, sandestins).  The mimic
case doesn't work as expected:  map display shows the symbol for the
specified shape but farlook describes it as a mimic.  The Wizard case
hasn't been tested.  The chameleon and vampshifter cases seem to work.

It also allowed shapechangers (including vampires) to be given an
object or furniture appearance.  I didn't try things out to find out
what what their behavior would be if/when that happened.

I'm not sure whether the farlook issue for mimics-as-monsters is with
the pager code or the monster name formatting code.  (Possibly the
mimic just needs to be flagged has 'hidden' as well has having an
alternate appearance.)  I'm not going to worry about it since none of
our special levels attempt to give mimics a monster shape.  Mimicking
a monster is a feature for clones of the Wizard, not for mimics,
although it might be nice if the latter worked correctly someday.

7 years agofix #H6704 - appearance of mimic's replacement
PatR [Sun, 31 Dec 2017 11:38:29 +0000 (03:38 -0800)]
fix #H6704 - appearance of mimic's replacement

If mimics were genocided before loading a special level which
contained mimics with specific appearances, whatever random monsters
took their place also end up having their intended appearance.
monst->cham uses NON_PM rather than 0 to mean "not a shapechanger".

7 years agouncursing prayer vs helm of opposite alignment
PatR [Sat, 30 Dec 2017 00:20:05 +0000 (16:20 -0800)]
uncursing prayer vs helm of opposite alignment

Implement the suggestion that hero's current god not uncurse a worn helm
of opposite alignment when prayer result is fix-worst-cursed-item or
uncurse-all-cursed-items since doing so makes it easy for hero to switch
to another god.  The second boon will still uncurse non-worn helms of
opposite alignment since that has no effect on how easy or hard it is
for the hero to change alignments.  (The first boon only applies to worn
items plus luckstones and loadstones; non-worn helms aren't applicable.)

7 years agoplaying music while impaired
PatR [Thu, 28 Dec 2017 23:40:11 +0000 (15:40 -0800)]
playing music while impaired

Newsgroup discussion mentioned that it was possible to open the castle
drawbridge with musical notes even while confused.  There was already
some handling for confusion:  improvisation treats magical instruments
as their mundane equivalents.  This takes if farther:  when stunned
or confused or hallucinating you'll always improvise instead of being
given a chance to choose notes.  Being stunned now behaves the same
as being confused in regards to magical instruments (possibly/probably
it should prevent playing music altogether).  Hallucination gives
different feedback at start but still allows magical playing.

7 years agofix #H6624 - missile miss message redundancy
PatR [Sun, 24 Dec 2017 22:00:49 +0000 (14:00 -0800)]
fix #H6624 - missile miss message redundancy

Excess verbosity for multi-shot throwing/shooting by monsters.
 The Green-elf shoots 2 elven arrows.
 You are almost hit by the 1st elven arrow.  The 1st elven arrow misses.
 You are almost hit by the 2nd elven arrow.  The 2nd elven arrow misses.
Just give one or the other of the miss messages.  If it reaches the
hero's location, give the first.  If it lands somewhere else, give the
second.  (It might be possible to get both if hero is displaced and
the monster thinks he/she is behind his/her actual location.  I'm not
sure.)

Also, only say "you are almost hit" if it is true:  the dieroll nearly
got past your armor.  Otherwise, say "The Nth arrow misses you."

7 years agofix #H6648 - can't wear via 'W' but can via 'P'
PatR [Sat, 23 Dec 2017 23:42:20 +0000 (15:42 -0800)]
fix #H6648 - can't wear via 'W' but can via 'P'

More fallout from allowing W/T on accessories and P/R on armor without
combining them outright.  If poly'd into verysmall or nohands critter,
'W' yields "don't even bother" before even prompting what to wear, but
'P' would prompt for an accessory and then wear armor if that was what
got picked.  Now 'P' will still prompt, in case it's for an accessory,
but picking a piece of armor no longer wears that armor.

'W' still doesn't even prompt, so won't allow accessories as well as
no armor.  I'm not sure whether that should be changed.

7 years agoflags.sortloot
PatR [Sat, 23 Dec 2017 23:19:27 +0000 (15:19 -0800)]
flags.sortloot

This should maximize save file compatibility between 3.6.1 and 3.6.0,
at the risk of breaking save files for folks using post-3.6.0 git
sources.  (It's unlikely that many in that situation are using a
configuration which will be affected, so probably nobody will notice.)

7 years agofix #H6628 - secret doors display as wrong wall
PatR [Thu, 21 Dec 2017 18:04:18 +0000 (10:04 -0800)]
fix #H6628 - secret doors display as wrong wall

A relatively recent change to make secret doors within horizontal walls
become horizontal doors after discovery was making some secret doors
that should have remained vertical become horizontal too.  While still
hidden, they got displayed as horizontal wall segments in the midst
of vertical walls.  Example was the "Catacombs" (minend-3) variant of
mines' end.  The hidden door on the east wall of the entry room was
shown as horizontal, while another one on the west wall of that same
room was correctly vertical.  This fix uses different criteria to
decide horizontal vs vertical, partly because I couldn't understand
how the previous code was supposed to work.

Hidden doors now seem to display as correctly oriented walls and once
discovered seem to become correctly oriented doors.  I tested by
checking quite a few special levels (and some regular ones)--but not
all--with '#terrain d'.  Plus some searching to unhide secret doors
while using a custom symbol set that displayed closed horizontal doors
(S_hcdoor) as '=' and vertical ones (S_vcdoor) as '"'.

7 years agosanity check bit - current_wand
PatR [Fri, 15 Dec 2017 00:46:16 +0000 (16:46 -0800)]
sanity check bit - current_wand

'current_wand' should always be Null at the time the sanity checking
routine is called, so check for that.  Also a couple of formatting bits.

7 years agorehumanizing while Unchanging
PatR [Fri, 15 Dec 2017 00:39:21 +0000 (16:39 -0800)]
rehumanizing while Unchanging

When hero poly'd into paper golem "burns completely" he is rehumanized
even if he has the Unchanging attribute.  A comment states that that is
intentional, but there was no explanation given to the player.  Report
that "your amulet of unchanging failed" when rehumanization despite
Unchanging happens.  (Don't ask me how or why it fails; I don't know.)

7 years agofix #H6610 - completely burnt paper golem
PatR [Fri, 15 Dec 2017 00:22:36 +0000 (16:22 -0800)]
fix #H6610 - completely burnt paper golem

When a monster killed a paper golem with a fire attack, the player was
told that the golem "burns completely" yet it might still leave some
blank scrolls as 'corpse'.  The fix for that was one-line, but several
other death-by-fire situations which didn't report "burns completely"
were also leaving scrolls:  fireball spell or scroll of fire or other
fire explosions (if any), also wand of fire.  Fire trap and poly'd
hero with fire attack were already suppressing 'corpse'.

7 years agoself-genocide's "you feel dead inside"
PatR [Wed, 13 Dec 2017 01:53:54 +0000 (17:53 -0800)]
self-genocide's "you feel dead inside"

It seems to me that the reaction to "you feel dead inside" when you're
polymorphed into an undead creature at the time would be "so what else
is new?".  Vary the "dead" when current form is something which gets
reported as "destroyed" rather than "killed" when killed.  That happens
for things flagged as non-living.  Now undead "feel condemned inside"
and golems "feel empty inside".  Neither of those are ideal but they're
more interesting than "feel dead inside".

After becoming dead inside, give a reminder about that during
enlightenment and if you restore a saved game in that condition.  It
was the latter that set this in motion:  I wanted to confirm that
restoring with u.uhp == -1 didn't give "you aren't healthy enough to
survive restoration" when polymorphed.  (It doesn't; the game resumes
and you'll die if/when you rehumanize.)

7 years agogit on windows was misbehaving on doc/window.doc
nhmall [Sat, 9 Dec 2017 15:51:41 +0000 (10:51 -0500)]
git on windows was misbehaving on doc/window.doc
 Changes to be committed:
modified:   .gitattributes

7 years agoAdd an instance flag for being inside parse()
Alex Smith [Sat, 9 Dec 2017 14:12:40 +0000 (14:12 +0000)]
Add an instance flag for being inside parse()

Some windowports that are currently being written by third parties
need more information about the engine than they currently have.
Two specific reported problems: a) needing to know whether a
putstr() call relates to a count (so that it can be placed in a
different part of the user interface from the message area); b)
needing to know whether a request for a character relates to
command input (some hangup handling routines need this so that
they can determine what behaviour is potentially exploitable).
Knowing whether or not you're inside parse() fixes both of them.

This would be cleaner to do by changing the windowport API, but
that'd break existing windowports, which isn't really ideal.
Setting a globalish variable that the windowport can inspect, but
can ignore if it prefers, means that existing windowports will
continue to work fine, but new windowports will have more
information and thus more flexibility in how they handle command
entry.

7 years agofix #H6597 - genocide exploit
PatR [Sat, 9 Dec 2017 08:36:19 +0000 (00:36 -0800)]
fix #H6597 - genocide exploit

Self-genocide (own role or race) while polymorphed sets u.uhp to -1
so that you'll be killed during rehumanization.  I found a couple
of places which were testing (u.uhp < 1) without checking polymorph
state, and one of those was where monster movement decides whether or
not to attack.  This bug seems to have been present since start of
the second cvs repository, so has been around for quite a long time
without anybody letting on that they'd noticed.  So it probably isn't
a very effective exploit, although it would certainly make ascending
without wearing armor become much more feasible.

There are bound to be other places which examine u.uhp directly
instead of '(Upolyd ? u.mh : u.uhp)' but I only checked m*.c.

7 years agofix #H5590 - pets not shown on dumplog map
PatR [Sat, 9 Dec 2017 07:06:25 +0000 (23:06 -0800)]
fix #H5590 - pets not shown on dumplog map

When ascending or escaping from the dungeon, adjacent pets are moved
onto the 'mydogs' list so that they can be included in the score and
mentioned as being with hero in the final messages.  But keepdogs()
was caled to do that before the known portion of the map was drawn
in the dumplog file, so adjacent pets were missing.  Defer that until
after the map has been dumped so that pets will still be present.

7 years agofix #6598 - monster briefly rendered as hero
PatR [Fri, 8 Dec 2017 22:12:35 +0000 (14:12 -0800)]
fix #6598 - monster briefly rendered as hero

When swapping places with a pet, the hero's coordinates are changed
before some tests which might disallow the swap, and if the pet was
a hidden mimic or was trapped and became untame, the attempt to draw
the revised pet or former pet would actually draw the hero and have
that mistake be visible during the message about not swapping.  That
last bit only occurred when the pet couldn't move diagonally (due to
being a grid bug or to being unable to squeeze through a tight space).
Also, spoteffects for arriving at a new location took place even
though the hero hadn't changed position.

7 years agoTDTTOE: Discourage generating elf corpses on sleeping gas traps
Alex Smith [Wed, 6 Dec 2017 18:49:08 +0000 (18:49 +0000)]
TDTTOE: Discourage generating elf corpses on sleeping gas traps

These are elven /adventurers/, so they get sleep resistance at
experience level 4 (not immediately), and so there's an outside
chance they'll be killed by a sleeping gas trap. This commit
reduces the probability, though.

7 years agomore #adjust (#H6571)
PatR [Tue, 5 Dec 2017 11:38:23 +0000 (03:38 -0800)]
more #adjust (#H6571)

Make the suggested change that only adjusting something into its own
slot be the way to collect/merge compatible stacks with it, instead
of any #adjust without a split count.  This removes the previous
special case for a count that matches the stack size.  Having to
know the exact count was not a burden on the player, but being able
to move things around without merging with other stacks makes more
sense than the original behavior or the hack to work-around that
behavior.

7 years agoUpdate the Files file that tracks what's in the source tree
nhmall [Sun, 3 Dec 2017 14:40:48 +0000 (09:40 -0500)]
Update the Files file that tracks what's in the source tree

7 years agoVS community editions are freely downloadable. Maintain only 2 most recent.
nhmall [Sun, 3 Dec 2017 13:42:38 +0000 (08:42 -0500)]
VS community editions are freely downloadable. Maintain only 2 most recent.

 Changes to be committed:
modified:   sys/winnt/Install.nt
modified:   sys/winnt/Makefile.msc
modified:   sys/winnt/nhsetup.bat
deleted:    win/win32/vs2010/NetHack.sln
deleted:    win/win32/vs2010/NetHackW.vcxproj
deleted:    win/win32/vs2010/dgncomp.vcxproj
deleted:    win/win32/vs2010/dgnstuff.vcxproj
deleted:    win/win32/vs2010/dlb_main.vcxproj
deleted:    win/win32/vs2010/levcomp.vcxproj
deleted:    win/win32/vs2010/levstuff.vcxproj
deleted:    win/win32/vs2010/makedefs.vcxproj
deleted:    win/win32/vs2010/recover.vcxproj
deleted:    win/win32/vs2010/tile2bmp.vcxproj
deleted:    win/win32/vs2010/tilemap.vcxproj
deleted:    win/win32/vs2010/tiles.vcxproj
deleted:    win/win32/vs2010/uudecode.vcxproj
deleted:    win/win32/vs2013/NetHack.sln
deleted:    win/win32/vs2013/NetHack.vcxproj
deleted:    win/win32/vs2013/NetHackW.vcxproj
deleted:    win/win32/vs2013/dgncomp.vcxproj
deleted:    win/win32/vs2013/dgnstuff.vcxproj
deleted:    win/win32/vs2013/dlb_main.vcxproj
deleted:    win/win32/vs2013/levcomp.vcxproj
deleted:    win/win32/vs2013/levstuff.vcxproj
deleted:    win/win32/vs2013/makedefs.vcxproj
deleted:    win/win32/vs2013/nhdefkey.vcxproj
deleted:    win/win32/vs2013/recover.vcxproj
deleted:    win/win32/vs2013/tile2bmp.vcxproj
deleted:    win/win32/vs2013/tilemap.vcxproj
deleted:    win/win32/vs2013/tiles.vcxproj
deleted:    win/win32/vs2013/uudecode.vcxproj

7 years agoaddress #H6552 - #adjust behavior
PatR [Fri, 1 Dec 2017 03:15:45 +0000 (19:15 -0800)]
address #H6552 - #adjust behavior

The report stated that '#adjust a c' after '#adjust 1a b' moved all
the original 'a' to 'c' instead of leaving the one in 'b' alone.
That's true, but it is also the intended behavior.  Splitting off
with a count explicitly avoids gathering compatible stacks (but
does merge into the destination if compatible, instead of swapping).
Moving a whole stack gathers compatible ones and puts the whole
merged group into the destination.

But that leaves a gap in functionality:  there's no way to get the
don't-collect-other-stacks without splitting; there ought to be.
So, allow the player to specify full count to move a stack from one
slot to another without collecting compatible stacks (the behavior
when no count is given) or splitting (the behavior when count is
less than full amount).  In the example above, if 'a' started with
5 doodads and had 4 left after splitting one to 'b', '#adjust 4a c'
will move those 4 (all of 'a') to 'c' without merging 'b' into them.
The method is a bit obscure but it's also something which doesn't
come up very often.

7 years agomklev.c tweaks
PatR [Sun, 26 Nov 2017 07:35:39 +0000 (23:35 -0800)]
mklev.c tweaks

Fix a compiler complaint about comparing unsigned against signed,
plus a couple of formatting bits.