]> granicus.if.org Git - nethack/log
nethack
5 years ago'O' vs bouldersym
PatR [Sun, 30 Dec 2018 23:30:38 +0000 (15:30 -0800)]
'O' vs bouldersym

The 'O' handling for bouldersym was updating the display value for
boulder even if the value had been rejected, and if it still had the
default of '\0', the map would end up with <NUL> characters.  (When
examined via '//' or ';', those matched dummy monster class #0 and
led to the impossible "Alphabet soup: 'an("")'" that was suppressed
yesterday.)

Attempting to set bouldersym to ^@ or \0 would also be rejected as
duplicating a monster symbol.  That is now accepted and used to reset
the boulder symbol to default.  However, other control characters are
also accepted--not due to this patch, they already are, and from a
config file in addition to via 'O'--so bouldersym can still disrupt
the map.  But that's no different from putting control characters
into a symbol set or setting them from config file via S_foo:^C.

5 years agoremove curses date.h dependency in Windows Makefiles
nhmall [Sun, 30 Dec 2018 12:58:39 +0000 (07:58 -0500)]
remove curses date.h dependency in Windows Makefiles

5 years agominor memory leak
PatR [Sun, 30 Dec 2018 04:41:16 +0000 (20:41 -0800)]
minor memory leak

I ran the fuzzer with MONITOR_HEAP enabled and heaputil found a dozen
or so un-free'd allocations, all made by the same dupstr() call in
special_handling() for "symset" and "roguesymset".  (Reproducible with
a few tens of thousands of fuzzer moves, although you have to take
over from the fuzzer and make a clean exit rather than just interrupt
it or there'll be lots of other un-free'd memory.)  I haven't actually
figured out how/why it was leaking, but reorganizing the code has made
the leak go away (according to a couple of even longer fuzzer runs) so
I'm settling for that.

5 years agoalphabet sour warning
PatR [Sun, 30 Dec 2018 04:39:11 +0000 (20:39 -0800)]
alphabet sour warning

A recently added impossible to check for an(Null) and an("") was
triggered by the fuzzer:  Alphabet soup: 'an("")'.  I reproduced it a
couple of times and tracked it do_screen_description(for '/' command)
matching the symbol from mapglyph to monster class #0, a placeholder
with symbol value '\0'.  So mapglyph() returned a symbol of '\0', but
not necessary from showsyms[0 + SYM_OFF_M].

The pager lookup code's monster loop shouldn't have been attempting
to match against class #0, and since this fix I haven't been able to
reproduce the situation again.  But I also didn't trigger it with a
bunch of temporary checks in mapglyph() so don't know what is really
going on under the hood.

5 years agocurses splash/copyright screen, role prompt
PatR [Sun, 30 Dec 2018 02:38:30 +0000 (18:38 -0800)]
curses splash/copyright screen, role prompt

Back out '#include "date.h"' so that cursinit.c won't be recompiled
every time any other file(s) need to be compiled.  It doesn't need
patchlevel.h either.  There is already a straightforward way to fetch
the copyright banner lines from version.c.

The splash screen (ascii art spelling "NetHack" preceding the normal
copyright lines) was invisible when showing white text on white-ish
background.  Make it honor !guicolor.

"Shall I pick a character's role, race, gender and alignment for you?
 [ynaq] (y) " was too wide to accept the answer on the same line on
an 80-column display so "(y) " was placed on the second line.  That's
constructed in the core; change the construction to omit " a" when
using "character" rather than a role name.  (tty shortens it by omitting
the default " (y)"; with " a" gone, it could revert to normal prompt.)

Also a bit of lint cleanup and some reformatting of cursinit.c....

5 years agofix typos in header line so expansion works
keni [Sun, 30 Dec 2018 00:19:30 +0000 (19:19 -0500)]
fix typos in header line so expansion works

5 years agonttty topten output processing
nhmall [Sat, 29 Dec 2018 17:26:33 +0000 (12:26 -0500)]
nttty topten output processing

switch back to using the safe routines
after tty port exits on Windows console
tty port.

Fixes H7758
1613

5 years agoX11 on OSX
PatR [Sat, 29 Dec 2018 11:28:07 +0000 (03:28 -0800)]
X11 on OSX

The change to Makefile.src for X11+XPM on linux broke linking X11 on
OSX.  This updates the hints files (except for the -qt one) so that
 make WANT_WIN_X11=1
and
 make WANT_WIN_X11=1 USE_XPM=1
work correctly.

The comment in macosx10.14 about what version(s) it's intended for
and been tested on is just cloned from 10.10 and should be updated.

5 years agoCurses: Remove useless inventory label
Pasi Kallinen [Sat, 29 Dec 2018 11:16:46 +0000 (13:16 +0200)]
Curses: Remove useless inventory label

The inventory window used a line to say "Inventory:", which is pretty
useless, and that was the only window showing such a label.

Also don't duplicate the "Not carrying anything" text from core.

5 years agoX11 USE_XPM lint
PatR [Sat, 29 Dec 2018 11:02:07 +0000 (03:02 -0800)]
X11 USE_XPM lint

5 years agoX11: default to XPM-format tile file and rip screen
Pasi Kallinen [Sat, 29 Dec 2018 05:19:18 +0000 (07:19 +0200)]
X11: default to XPM-format tile file and rip screen

People have been wondering how to change the tiles on the X11
version, and the old default of NetHack-specific binary tile data
isn't directly editable with image editing tools.

Also show in the #version info if xpm and graphic rip are enabled.

5 years agocreate_particular 'I' vs mkclass
PatR [Sat, 29 Dec 2018 03:10:54 +0000 (19:10 -0800)]
create_particular 'I' vs mkclass

The revised mkclass() [actually new mkclass_aligned()] has an extra
check which didn't used to be there, and attempting to create a
monster of class 'I' with ^G triggered impossible "mkclass found no
class 35 monsters" which the fuzzer escalates to panic.

5 years agomemory #stats
PatR [Fri, 28 Dec 2018 23:06:45 +0000 (15:06 -0800)]
memory #stats

obj->oextra->omonst might contain monst->mextra plus mextra->edog, &c.
That was being ignored when summing up memory allocated for objects.

5 years agoyet more Windows Makefile
nhmall [Fri, 28 Dec 2018 17:51:11 +0000 (12:51 -0500)]
yet more Windows Makefile

Now that the dependency lines are corrected for the
correct output files in the Makefile, it revealed a
dependency on a non-existent file.

5 years agoMore Windows Makefile corrections
nhmall [Fri, 28 Dec 2018 17:34:41 +0000 (12:34 -0500)]
More Windows Makefile corrections

5 years agoWindows Makefile updates
nhmall [Fri, 28 Dec 2018 17:29:12 +0000 (12:29 -0500)]
Windows Makefile updates

5 years agoa couple of source spelling consistencies for /*FALLTHRU*/
nhmall [Fri, 28 Dec 2018 15:08:56 +0000 (10:08 -0500)]
a couple of source spelling consistencies for /*FALLTHRU*/

5 years agocurses - fix count selection not working for PICK_ONE menus.
Tangles [Fri, 28 Dec 2018 14:32:45 +0000 (01:32 +1100)]
curses - fix count selection not working for PICK_ONE menus.

eg: d2b would drop 2 of item b, but using d* to pick from a menu
and then selecting 2b would ignore the count and just drop the
whole stack.

5 years agoFix missing compilation dependency for cursinit.c
Patric Mueller [Fri, 28 Dec 2018 14:21:33 +0000 (15:21 +0100)]
Fix missing compilation dependency for cursinit.c

5 years agocurses: include date.h
Pasi Kallinen [Fri, 28 Dec 2018 09:33:58 +0000 (11:33 +0200)]
curses: include date.h

This way the curses port will show the version and compile date
on the startup banner, just like tty does.

5 years agofix github issue #170 - stacks of non-missiles
PatR [Fri, 28 Dec 2018 02:36:26 +0000 (18:36 -0800)]
fix github issue #170 - stacks of non-missiles

Fixes #170

Monsters never throw athames or scalpels but some fake player monsters
on the Astral Plane are given those.  Since they're stackable the
quantity usually gets boosted but there's no point in having more than
one if they won't be thrown.

This could have been fixed by letting monsters throw those two items,
but I prevented the quantity from being boosted instead.

5 years agostack merging vs shop pricing
PatR [Thu, 27 Dec 2018 23:37:06 +0000 (15:37 -0800)]
stack merging vs shop pricing

When merging one stack into another and they have different obj->o_id
price adjustments, keep the o_id of whichever one commands the higher
shop price.

5 years agostack splitting vs shop prices
PatR [Thu, 27 Dec 2018 23:01:15 +0000 (15:01 -0800)]
stack splitting vs shop prices

I misread part of the original code and the revision introduced a bug
based on that.  obj->o_id price variations are used for all types of
non-IDed items, not just non-glass gems.

5 years agofix #H7103 - shop pricing
PatR [Thu, 27 Dec 2018 22:12:48 +0000 (14:12 -0800)]
fix #H7103 - shop pricing

Player came across a stack of 2 gray stones in a shop and kicked one.
That one ended up with a different (in his case, lower) price once it
was separate.  This behavior only applies to non-glass gems which add
a price variation derived from internal ID (obj->o_id) number.  Make
splitting stacks always yield the same price per item in the new stack
as was being charged in the old stack by choosing a similar o_id.  Do
it for all splits (that can vary price by ID, so just non-glass gems),
not just ones performed inside shops.

He picked up the lower priced one and dropped it back on the original
higher priced one; the combined stack took on the lower price.  That
will no longer happen if they come from splitting a stack, but this
fix doesn't address merging with different prices when they start out
as separate stacks.  (Unpaid items won't merge in inventory if prices
are different, but shop-owned items will merge on floor.)

5 years agomines luckstone as achievement marker
PatR [Thu, 27 Dec 2018 21:31:42 +0000 (13:31 -0800)]
mines luckstone as achievement marker

It was possible to have the guaranteed luckstone at Mines' End become
merged with a random one and lose its specialness for achievement
tracking.  Mark it 'nomerge' when created and clear that if/when the
achievement is recorded.

6 years agocurses lint
PatR [Wed, 26 Dec 2018 09:45:17 +0000 (01:45 -0800)]
curses lint

6 years agocontainer_contents() vs show goods
PatR [Wed, 26 Dec 2018 01:07:45 +0000 (17:07 -0800)]
container_contents() vs show goods

Fix another inconsistency with containers in shops:  prices shown when
looking inside.  Apply had them (because shop goods in containers are
flagged as 'unpaid' when hero carries the container), and loot did not
(because they aren't flagged that way).

6 years agobill hero for magic bag explosion
PatR [Wed, 26 Dec 2018 00:52:33 +0000 (16:52 -0800)]
bill hero for magic bag explosion

Exploding a bag of holding on a shop floor didn't bill for shop-owned
contents which got destroyed.  This puts them on the 'Ix' used up list.

6 years agostolen_value() vs containers
PatR [Wed, 26 Dec 2018 00:45:41 +0000 (16:45 -0800)]
stolen_value() vs containers

stolen_value() treated hero-owned container holding shop-owned goods
as free for the taking.

The fix I'm working on which led to discovering this first added
stolen_value() then eventually stopped using it so I don't have an
example of where it is giving the wrong result.

6 years agoprices of items on shop floor
PatR [Tue, 25 Dec 2018 21:48:51 +0000 (13:48 -0800)]
prices of items on shop floor

get_cost_of_item() was giving different information from shop #chat
when dealing with containers owned by hero containing objects owned
by the shop.  And when it was legitimately reporting a price of 0,
doname_with_price() wasn't reporting 'no charge' for items inside a
shop that were owned by hero or that shopkeeper didn't care about.

Extend the shop price reveal to far-look, but only when hero and item
being examined are inside the same shop.

6 years agosimplify container_contents()
PatR [Tue, 25 Dec 2018 21:05:35 +0000 (13:05 -0800)]
simplify container_contents()

iflags.in_dumplog is accessible even when DUMPLOG is not enabled.

6 years agostatus gold vs symset:Blank
PatR [Tue, 25 Dec 2018 02:43:51 +0000 (18:43 -0800)]
status gold vs symset:Blank

Symset:Blank sets all the map symbols (except STRANGE_OBJECT) to
<space>.  The status lines for !STATUS_HILITES force status to use '$'
instead of ' ' for the prefix before ":1234" for gold, but the status
lines for STATUS_HILITES did not.  tty ended up with ":1234" for gold.
win32 and curses both ignore the prefix and construct their own, but
since win32 uses the map symbol for that it must also be ending up
with ":1234" (I assume; I haven't seen it).  curses is forcing '$' for
the prefix, even on the rogue level.

This attempts to fix win32 without be able to test the result.  I've
left curses alone.

6 years agoformatting: parse_conf_file()
PatR [Tue, 25 Dec 2018 01:50:21 +0000 (17:50 -0800)]
formatting: parse_conf_file()

6 years agofix temporary strength loss that was permanent
PatR [Mon, 24 Dec 2018 10:08:44 +0000 (02:08 -0800)]
fix temporary strength loss that was permanent

Watching the fuzzer, I saw hero's strength plummet to 3 again and not
rise above 5 after that.  It turns out to be due to life-saving, which
was fixing severe hunger but was not restoring the point of strength
that's lost when you go from hungry to weak.

I'm not sure whether this was caused by 3.6.1's commit
024e9e122576db664e37df0937cfb4c06c436e0c or already behaved that way.

Another fuzzer bit:  the monk I was watching was bitten by a wererat
early on and was still inflicted with lycanthropy when he reached
level 19.  (I've no idea how his level got to be so high; it jumped
from 14 to 19 while I wasn't paying attention.)  Extend the earlier
hack for drinking a blessed potion of restore ability to recover lost
characteristcs to sometimes drink a potion of holy water instead.

6 years agoimplement #H6051 - fake players resist Conflict
PatR [Mon, 24 Dec 2018 01:25:14 +0000 (17:25 -0800)]
implement #H6051 - fake players resist Conflict

The rationale is that since the player character resists conflict,
fake players should too.

[I'm not sure that I buy that.  Player character is always the one
*causing* conflict and it doesn't affect self.  But this is simple
as long as no other resistance checks are against attack-by-ring.]

6 years agofix #H6942 - dropx vs hold_another_object
PatR [Sun, 23 Dec 2018 20:37:26 +0000 (12:37 -0800)]
fix #H6942 - dropx vs hold_another_object

Dropping an existing fragile item while levitating will usually
break it.  Getting a new wished-for fragile item and dropping it
because of fumbling or overfull inventory never would.

Some callers of hold_another_object() held on to its return value,
others discarded that.  That return value was unsafe if the item
was dropped and fell down a hole (or broke [after this change]).
Return Null if we can't be sure of the value, and make sure all
callers are prepared to deal with Null.

6 years agoEXTRA_SANITY_CHECKS build fix
PatR [Sun, 23 Dec 2018 20:13:37 +0000 (12:13 -0800)]
EXTRA_SANITY_CHECKS build fix

is if/else friendly and semi-colon friendly, but not comma friendly.

6 years agoavoid checkfile() segfault
PatR [Sun, 23 Dec 2018 20:03:53 +0000 (12:03 -0800)]
avoid checkfile() segfault

Recent change for "pair of lenses names The Eyes of the Overworld"
triggered a segfault if item was neither named nor called.

6 years agofix github issue #155 - encumbrance vs water
PatR [Sun, 23 Dec 2018 02:09:44 +0000 (18:09 -0800)]
fix github issue #155 - encumbrance vs water

Fixes #155

When drowning, you need to be unencumbered in order to crawl out of
water.  When not drowing, you don't, but put a limit on how much can
be carried.  If polymorphed into a swimming creature, allow stressed
or less; otherwise (magical breathing), burdened or less.  (Doesn't
apply on the Plane of Water since there's no climb from water to land
involved.)

6 years agofix #H7749 - "you detect it"
PatR [Sun, 23 Dec 2018 00:35:15 +0000 (16:35 -0800)]
fix #H7749 - "you detect it"

'Detect' is used for observing a vampire shape change without being
able to see the vampire.  The problem here is that it changed from
bat form to fog cloud form in order to pass under a closed door,
and the message was being delivered when it was already at the door
location instead of before the move from a visible spot to that door.

I'm not happy with this fix, but any other alternative I considered
seemed to be worse.  Having the shape change use up the monster's
move is probably a better way to go.  Then on its next move it will
be in the right form to make a normal flow-under-door move.

6 years agofix #H2709 - exercise_steed() for riding skill
PatR [Sat, 22 Dec 2018 01:11:22 +0000 (17:11 -0800)]
fix #H2709 - exercise_steed() for riding skill

Code appears to intend that riding for 100 turns be treated like a
successful weapon hit as far as skill training goes, but it was
actually requiring 101 turns each time.  It's conceivable that that
was intentional, but unlikely.

6 years agomonsters on melting ice
PatR [Fri, 21 Dec 2018 22:36:55 +0000 (14:36 -0800)]
monsters on melting ice

Reported seven years ago, when ice melts underneath a monster, it
hovers there until its next move, then falls in and drowns.  Dunk it
immediately, and give hero credit/blame if it happens during the
hero's turn (so presumably the melting was caused by the hero).

Also, let monster with teleport capability who gets dunked teleport
away from the water before getting wet, the way hero does.

6 years agofix #H2680 - IDing unpaid gem should adjust price
PatR [Fri, 21 Dec 2018 09:14:45 +0000 (01:14 -0800)]
fix #H2680 - IDing unpaid gem should adjust price

Another one from 6.5 years ago, identifying a type of gem should give
a new price for any unpaid gems of that type and adjust shopping bill
accordingly.  Report was for rubbing with touchstone and learning
worthless glass with price not changing until the learned 'gem' was
dropped.  Fix works for that and also other forms of identification
(and for amnesia, raising prices of forgotten gems); no dropping is
required for the price to change.

Theoretically could apply to any type of item, but prices of gems are
by far the most sensitive to whether or not they're identified.

6 years agodata.base lookup bit
PatR [Fri, 21 Dec 2018 02:58:44 +0000 (18:58 -0800)]
data.base lookup bit

When testing the change to the Eyes of the Overworld wording and asking
for information about inventory item
 k - a pair of lenses named The Eyes of the Overworld
I got "I don't have any information on those things".  Not because that
item wasn't identified, but because the lookup was for "pair of lenses"
(finding nothing) and then for "The Eyes of the Overworld" (and not
finding it due to "The" which is stripped from the first attempt but
wasn't from the second nor present in the data.base key).

6 years agofix #H6189 - Eyes of the Overworld database entry
PatR [Fri, 21 Dec 2018 02:28:57 +0000 (18:28 -0800)]
fix #H6189 - Eyes of the Overworld database entry

The phrasing of the data.base entry for the Eyes of the Overworld
reads as if it is continuing some passage in a reference book, but
that comes off strange when using '/' to see it.  Rephrase it.

data.base could stand to have an entry for 'lenses'....

6 years agoclang on OSX
PatR [Thu, 20 Dec 2018 01:52:49 +0000 (17:52 -0800)]
clang on OSX

The Unix Makefile.{src,utl} use the compiler name 'gcc' by default on
OSX, and that invokes clang which defines __GNUC__ to deal with gcc
extensions.  But when invoked via the Xcode IDE, it evidently uses its
own name instead, and wasn't defining __GNUC__.  tradstdc.h started
down the road of duplicating gcc features; switch to pretending to be
gcc instead.

6 years agofix #H2582 - seemingly angry peaceful vault guard
PatR [Thu, 20 Dec 2018 01:36:14 +0000 (17:36 -0800)]
fix #H2582 - seemingly angry peaceful vault guard

Another one from nearly 7 years ago.  Hero kicked embedded gold out
of a wall while following the guard away from the vault and got
  "The guard calms down and picks up the gold."
and player thought it was odd because the guard was peaceful.  It is
odd, but guards have an agitation state (0..7) when peaceful and it
is always non-zero when this event occurs.  Suppress the "calms down"
part unless the agitation is close to making the guard turn hostile.
[Agitation is set to 5 after that event, so it isn't very calming.]

Also, the guard was picking up gold from underneath the hero while
two steps away.  Move him adjacent (although it doesn't knock other
monsters out of the way if there's no room) prior to the message,
then back again after.  That's how if works for gold that's not at
the guard's location and not at the hero's location, although that
case does knock another monster out of the way if one is on the gold.

6 years agofix github issue #169 - monst vs vibrating square
PatR [Wed, 19 Dec 2018 22:52:23 +0000 (14:52 -0800)]
fix github issue #169 - monst vs vibrating square

Fixes #169

Monsters should not be afraid of stepping on the vibrating square
since it's only a trap for display purposes.  [Perhaps they should
deliberately avoid it if the hero hasn't seen it yet, but I didn't
implement that.]

"You see a strange vibration beneath <mon's> <parts>." was strange
when <parts> was a wolf's "rear paws" or horse's "rear hooves"--was
the vibration magically skipping the front ones?  And it sounded
naughty when it was a snake's "rear regions".  If the creature has no
limbs or is floating or flying, just say "beneath <mon>"; otherwise,
if the part is "rear <something>", omit "rear ".

The message was weird in another way.  Caller removes the monster
from it's old location and places it on the new one, calls newsym()
for the old location to show lack of monster, but then calls mintrap()
before newsym() for monster's new location (the trap's location).  If
pline messages cause buffered map output to be flushed, the monster
will be missing during the time the messages are delivered.  I fixed
that for vibrating square [seetrap()->newsym() before pline() rather
than after] but it should probably be fixed in the caller instead.

6 years agoeliminate sys/share/pcsys.c from Windows build
nhmall [Wed, 19 Dec 2018 11:43:00 +0000 (06:43 -0500)]
eliminate sys/share/pcsys.c from Windows build

Windows build was actually only using a single function
in there, so just add a similar function to sys/winnt/winnt.c
and eliminate the need for including sys/share/pcsys.c in
the build.

6 years agofix #H2636 - vault guard "fakecorr overflow" panic
PatR [Wed, 19 Dec 2018 11:06:40 +0000 (03:06 -0800)]
fix #H2636 - vault guard "fakecorr overflow" panic

Another 6.5 year old report.  This one from Steven Melenchuk told
how to reproduce C343-23 which is still open on our 'known bugs'
page.  (I've no idea whether the original bug report came through
the contact page, and if so, what its assigned number was.)

I didn't try to solve this one, I just confirmed that it could be
reproduced and took the fix from grunthack at github.  He didn't
menion a fix at the time but implemented one before abandoing his
variant.  (Others kept it going afterwards; fix was during his time.)

The overflow occurred when the guard couldn't figure out where to
move to next and just repeatedly 'moved' to his current location
until the maximum number of fake corridor spots was used up.  The
fix detects not knowing where to go next and explicitly choosing a
new destination.

Original problem could be reproduced by teleporting into the vault,
digging out a wall and two spaces of stone in a straight line, then
going back into the vault to wait for a guard.  When he shows up:
answer, drop gold, follow.  If the guard's path walks through both
dug spaces, he will stop waiting for the hero.  But hero is in
between the guard and the gap in the vault wall and can't advance;
guard has reached a persistent corridor so doesn't know where to go
next.  Have hero wait for 125-ish more turns and then game panicks.

The code was 3.4.3 vintage so needed thorough reformatting, but not
any actual changes (unless I've overlooked something).

6 years agodisable gcc's __attribute__((warn_unused_result))
PatR [Wed, 19 Dec 2018 03:11:36 +0000 (19:11 -0800)]
disable gcc's __attribute__((warn_unused_result))

Casting to (void) to discard a function return value doesn't satisfy
gcc's -Wunused-result (which we aren't enabling but is apparently
being activated for particular functions by glibc header files).  Turn
it into a no-op to suppress three dozen warnings from Travis builds.

6 years agomake diluted oil less effective than normal oil
PatR [Wed, 19 Dec 2018 01:16:05 +0000 (17:16 -0800)]
make diluted oil less effective than normal oil

Suggested 6.5 years ago...

6 years agowarn_unused_result in end.c
PatR [Tue, 18 Dec 2018 22:30:31 +0000 (14:30 -0800)]
warn_unused_result in end.c

There is only one warn_unused_result warning from gcc in end.c;
change the code a little to use it.

6 years agoMerge branch 'NetHack-3.6.2-beta01' of https://rodney.nethack.org:20040/git/NHsource...
nhmall [Tue, 18 Dec 2018 22:10:29 +0000 (17:10 -0500)]
Merge branch 'NetHack-3.6.2-beta01' of https://rodney.nethack.org:20040/git/NHsource into NetHack-3.6.2-beta01

6 years agoupdate .gitattributes for recent changes
nhmall [Tue, 18 Dec 2018 22:09:52 +0000 (17:09 -0500)]
update .gitattributes for recent changes

6 years agowarn_unused_result in recover.c
PatR [Tue, 18 Dec 2018 22:01:57 +0000 (14:01 -0800)]
warn_unused_result in recover.c

There is only one warn_unused_result warning from gcc in recover.c,
so actually use that result.

Plus a bit of reformatting (tab replacement).

6 years agoplug open file leaks for rumors and oracles
PatR [Tue, 18 Dec 2018 11:24:38 +0000 (03:24 -0800)]
plug open file leaks for rumors and oracles

If the rumors file or oralces file got opened successfully but had bad
data, it wouldn't be closed.

6 years agosuppress dead code in move_special()
PatR [Tue, 18 Dec 2018 11:13:41 +0000 (03:13 -0800)]
suppress dead code in move_special()

This dead code was already dead in 3.4.3; I didn't look any further
back.

6 years agolife support for comatose code in explmu()
PatR [Tue, 18 Dec 2018 11:01:50 +0000 (03:01 -0800)]
life support for comatose code in explmu()

Static analysis notices that
  if (physical_damage)
    tmp = Maybe_Half_Phys(tmp);
will never pass the test because all code paths leading to it set
'physical_damage' to False.  Instead of getting rid of it, add a fake
case that leaves that True.

6 years agoplug potential open file leak in checkfile()
PatR [Tue, 18 Dec 2018 10:44:21 +0000 (02:44 -0800)]
plug potential open file leak in checkfile()

Another item from static analysis.  If an internal error ever caused
the "bad do_look buffer" warning from checkfile(), open file 'data'
would not be closed.  (The bug in checkfile()'s caller which prompted
that check was fixed long go.)

An alternate fix would be to move the input buffer check to before
the file is opened, but verifying the file first seems worthwhile.

6 years agoremove dead code from parse()
PatR [Tue, 18 Dec 2018 10:24:19 +0000 (02:24 -0800)]
remove dead code from parse()

From Jessie's old static analysis report.  'prezero' was used in 3.4.3
when processing a count for 'multi', but count handling is now done in
a separate routine and 'prezero' in parse() never changes value, so
get rid of it.

6 years agowording adjustment to fixes entry
nhmall [Tue, 18 Dec 2018 05:24:37 +0000 (00:24 -0500)]
wording adjustment to fixes entry

6 years agofix OPTIONS=symset:default, roguesymset:RogueEpyx
nhmall [Tue, 18 Dec 2018 05:14:39 +0000 (00:14 -0500)]
fix OPTIONS=symset:default, roguesymset:RogueEpyx

6 years agofixes36.2 fixes
PatR [Mon, 17 Dec 2018 23:45:55 +0000 (15:45 -0800)]
fixes36.2 fixes

Fix a few typos, reword a couple of entries describing the bug rather
than its fix to use past tense, move a couple of entries to be adjacent
to closely related entries (there's a lot of scope for more of that...)
and remove a bunch of trailing spaces.

[fixes36.2 starts with a header line but the tags on it aren't being
substituted.]

6 years agothrowing recoil inside shop
PatR [Mon, 17 Dec 2018 11:05:10 +0000 (03:05 -0800)]
throwing recoil inside shop

Another bug from seven years ago, sent directly to devteam so no #H
number.  Report stated that throwing recoil could move a levitating
hero diagonally through a shop's doorway to exit it.  If the thrown
item was unpaid, it remained unpaid after landing on shop's floor
and was an unlisted item on shop's bill.  Moving diagonally out the
door seems to have been fixed, but the same effect still occurred
if you were far enough from the door to have the shopkeeper vacate
his door-blocking spot and throwing recoil took hero to that spot.
The thrown unpaid item remained unpaid, and walking out the door was
treated as shop robbery.

6 years agoyet more dropping while inside engulfer
PatR [Mon, 17 Dec 2018 10:49:38 +0000 (02:49 -0800)]
yet more dropping while inside engulfer

I don't know why we have two different functions which do exactly
the same thing (checking whether an item is unpaid or is a container
that holds at least one unpaid item), but switch the #H2504 fix to
use 'the other one' and reverse one of the changes made when using
the inventory one.

6 years agomore dropping unpaid shop items inside engulfer
PatR [Mon, 17 Dec 2018 08:45:00 +0000 (00:45 -0800)]
more dropping unpaid shop items inside engulfer

I thought that the earlier fix for #H2504 was too easy for anything
shop related.  It didn't deal sensibly with containers owned by hero
but holding unpaid shop goods.

6 years agodropping shop item(s) inside engulfer
PatR [Mon, 17 Dec 2018 00:06:15 +0000 (16:06 -0800)]
dropping shop item(s) inside engulfer

'Yobjnam2()' is for beginning of sentence or other deliberate
capitalization.  Switch to yobjnam().

6 years agoMerge branch 'NetHack-3.6.2-beta01' of https://rodney.nethack.org:20040/git/NHsource...
nhmall [Sun, 16 Dec 2018 23:55:30 +0000 (18:55 -0500)]
Merge branch 'NetHack-3.6.2-beta01' of https://rodney.nethack.org:20040/git/NHsource into NetHack-3.6.2-beta01

6 years agorevert to prior behavior
nhmall [Sun, 16 Dec 2018 23:52:55 +0000 (18:52 -0500)]
revert to prior behavior

6 years agofix #H2504 - dropping shop goods inside engulfer
PatR [Sun, 16 Dec 2018 23:43:17 +0000 (15:43 -0800)]
fix #H2504 - dropping shop goods inside engulfer

This one is only seven years old.  Dropping an unpaid item inside an
engulfer leaves it unpaid and still on bill.  If engulfer is killed,
it ends up unpaid when back on the shop's floor.

Treat dropping an unpaid item into engulfer's inventory as stealing
that item.  You have to pay for it to leave the shop, and like any
other dying monster's inventory, the shopkeeper will take ownership
if it lands on the shop floor when the engulfer is killed.

The 'theft' doesn't anger the shopkeeper and the cost shows up on 'Ix'
as part of "usage fees/other charges" rather than as an itemized used
up item.

6 years agofix #H2204 - mkclass() mon selection distribution
PatR [Sun, 16 Dec 2018 22:21:30 +0000 (14:21 -0800)]
fix #H2204 - mkclass() mon selection distribution

That #H number isn't a typo.  This finally fixes--at least improves--
something reported eight years ago.  The monster types chosen by
mkclass() could be way off in some circumstances.  Cited example was
repeated same-race sacrifice by chaotic hero on dungeon level 20; it
produced about twice as many incubi as succubi even though they're
the same as far as difficulty goes.  (No changes in the intervening
years had any discernable effect; that was still reproducible.)
The report also mentioned that ndemon() threw away the result from
mkclass() and retried quite often and suggested that mkclass() be
taught to filter by alignment when caller cared about that.

This seems to even things out, although it also made harder monsters
chosen more often.  A test program generated these numbers when
picking a chaotic demon 10000 times (level 1 hero on dungeon level 20,
so not realistic; actually probably level 0 hero since the program
didn't initialize struct u.)  Third column is the number of times the
monster type was chosen with the old mkclass(), fourth is same for
the new one.
    mkclass() calls    27315 10000
286 succubus            2800  3309
288 incubus             5552  3262
291 marilith             973   780
292 vrock                477  1617
293 hezrou               150   626
294 bone devil            46   247
295 ice devil              2   107
296 nalfeshnee             0    23
297 pit fiend              0    15
298 sandestin              0     4
299 balrog                 0    10
Note that vrock has generation frequency 2 and marilith only 1, so
getting twice as many vrocks as mariliths should be expected.

I temporarily changed ndemon() to ask for lawful demons instead of
chaotic ones and got this.
    mkclass() calls    15762 10000
287 horned devil        3197  3375
289 erinys              4991  3339
290 barbed devil        1812  3286

I also ran it for dragons with any alignment (so the outcome was
never thrown away; 10000 calls were needed for 10000 picks) instead
of demons of specific alignment and am suspicious of the outcome.
    mkclass() calls    10000 10000
140 baby yellow dragon  1124     0
141 gray dragon         1096  1096
142 silver dragon       1073  1099
143 red dragon          1061  1126
144 white dragon        1077  1128
145 orange dragon       1141  1118
146 black dragon        1154  1049
147 blue dragon         1137  1123
148 green dragon        1137  1154
149 yellow dragon          0  1107
There may be a flaw in the test program.  Or else old mkclass() was
not very good at picking dragons.

6 years agodon't show stubs in window port valid list
nhmall [Sun, 16 Dec 2018 04:11:52 +0000 (23:11 -0500)]
don't show stubs in window port valid list

6 years agoMerge branch 'NetHack-3.6.2-beta01' into win-minor
nhmall [Sun, 16 Dec 2018 03:58:32 +0000 (22:58 -0500)]
Merge branch 'NetHack-3.6.2-beta01' into win-minor

6 years agoUpdateda PDCurses Visual Studio project to latest PDCurses content.
Bart House [Sun, 16 Dec 2018 03:52:58 +0000 (19:52 -0800)]
Updateda PDCurses Visual Studio project to latest PDCurses content.

6 years agoMerge branch 'NetHack-3.6.2-beta01' of https://rodney.nethack.org:20040/git/NHsource...
nhmall [Sun, 16 Dec 2018 03:40:07 +0000 (22:40 -0500)]
Merge branch 'NetHack-3.6.2-beta01' of https://rodney.nethack.org:20040/git/NHsource into NetHack-3.6.2-beta01

6 years agoclean exit on window port init failure
nhmall [Sun, 16 Dec 2018 03:36:24 +0000 (22:36 -0500)]
clean exit on window port init failure

6 years agobuilding lev_comp with USE_OLDARGS
PatR [Sun, 16 Dec 2018 03:27:08 +0000 (19:27 -0800)]
building lev_comp with USE_OLDARGS

The relatively recent change to lev_comp do deal with apparent junk
in some places in its generated data has triggered a bunch of
 "cast to 'vA' (aka 'const char *') from smaller integer type 'int'
 [-Wint-to-pointer-cast]"
from clang when building with USE_OLDARGS.  Probably should have
added a zillion explicit casts to long and 'L' suffix for 0 rather
than trying to handle both int and long.  Or maybe just turned off
that particular warning, which must be coming from -Wall or -Wextra.

This modification has no effect for USE_STDARG or USE_VARARGS configs.

6 years agocomment out PDCurses bt default again
nhmall [Sun, 16 Dec 2018 03:04:55 +0000 (22:04 -0500)]
comment out PDCurses bt default again

6 years agoMerge branch 'NetHack-3.6.2-beta01' into win-minor
nhmall [Sun, 16 Dec 2018 03:03:44 +0000 (22:03 -0500)]
Merge branch 'NetHack-3.6.2-beta01' into win-minor

6 years agoGuidebook bit
nhmall [Sun, 16 Dec 2018 03:03:05 +0000 (22:03 -0500)]
Guidebook bit

6 years agoMakefile.msc update
nhmall [Sun, 16 Dec 2018 02:52:00 +0000 (21:52 -0500)]
Makefile.msc update

Tell people where to find the latest PDCurses git
repository

6 years agoMerge branch 'win-minor' of https://rodney.nethack.org:20040/git/NHsource into win...
Bart House [Sun, 16 Dec 2018 01:35:43 +0000 (17:35 -0800)]
Merge branch 'win-minor' of https://rodney.nethack.org:20040/git/NHsource into win-minor

6 years agoAdded PDCurses project to VS 2017 build.
Bart House [Sun, 16 Dec 2018 01:35:27 +0000 (17:35 -0800)]
Added PDCurses project to VS 2017 build.

6 years agoMerge branch 'win-minor' into NetHack-3.6.2-beta01
nhmall [Sun, 16 Dec 2018 00:34:56 +0000 (19:34 -0500)]
Merge branch 'win-minor' into NetHack-3.6.2-beta01

6 years agomore win32 gui fuzzer work
nhmall [Sun, 16 Dec 2018 00:31:42 +0000 (19:31 -0500)]
more win32 gui fuzzer work

6 years agomore win32 gui fuzzer work
nhmall [Sun, 16 Dec 2018 00:31:07 +0000 (19:31 -0500)]
more win32 gui fuzzer work

6 years agotty SIGHUP
PatR [Sun, 16 Dec 2018 00:24:59 +0000 (16:24 -0800)]
tty SIGHUP

We still don't know whether this will be of any help against
disconnected processes that hog the CPU instead of exiting, but I
don't think it imposes significant overhead on ones which aren't
disconnected.  Install it before it suffers from more bit rot.

6 years agoget_hilite_color()
PatR [Sat, 15 Dec 2018 23:46:49 +0000 (15:46 -0800)]
get_hilite_color()

Stop pretending that long and int are the same size when picking status
highlight rule for gold or time or experience-points.

Also, K&R compilation might lack <limits.h>, so let XXXconf.h define the
necessary macro(s) (currently just LONG_MAX) so that it can be skipped.

6 years agoMerge branch 'win-minor' of https://rodney.nethack.org:20040/git/NHsource into win...
Bart House [Sat, 15 Dec 2018 22:50:14 +0000 (14:50 -0800)]
Merge branch 'win-minor' of https://rodney.nethack.org:20040/git/NHsource into win-minor

6 years agoSmall improvements to fuzzer for NetHackW.
Bart House [Sat, 15 Dec 2018 22:49:59 +0000 (14:49 -0800)]
Small improvements to fuzzer for NetHackW.

Can toggle fuzzer on/off using "Pause" key if attached to debugger.
Extended command selected randomly.

6 years agoFix always trapped castle chest
Patric Mueller [Sat, 15 Dec 2018 21:40:30 +0000 (22:40 +0100)]
Fix always trapped castle chest

6 years agoMakefile.msc update
nhmall [Sat, 15 Dec 2018 07:17:15 +0000 (02:17 -0500)]
Makefile.msc update

6 years agoMerge branch 'NetHack-3.6.2-beta01' into win-minor
nhmall [Sat, 15 Dec 2018 04:11:37 +0000 (23:11 -0500)]
Merge branch 'NetHack-3.6.2-beta01' into win-minor

6 years agofix up PDCurses cursor placement for prompts
nhmall [Sat, 15 Dec 2018 04:08:41 +0000 (23:08 -0500)]
fix up PDCurses cursor placement for prompts

6 years agotty status condition: Cf, Hl, Rd
PatR [Sat, 15 Dec 2018 02:51:07 +0000 (18:51 -0800)]
tty status condition: Cf, Hl, Rd

While the fuzzer was running, amidst the continual screen updating I
caught a glimpse of "Cn" and was puzzled about how the hero became
cancelled.  I quickly realized it actually meant confused, but I
think "Cf" is a better abbreviation for that.  I've also changed "Ha"
to "Hl" for hallucination and "Ri" to "Rd" for riding.  The rest is
formatting.

6 years agodisplacing pet long worm
PatR [Sat, 15 Dec 2018 02:17:42 +0000 (18:17 -0800)]
displacing pet long worm

Salvage part of an old patch.  Swapping places with any long worm,
even a baby one, always failed with "You stop.  Foo is in the way!"
This lets you swap places with tame baby long worms, and adult ones
if they have no tail (which won't happen unless there are more than
32 long worms on the current level--even if a long worm appears to
be only a head, there is normally a hidden tail segment at the same
location).

6 years agoMerge branch 'NetHack-3.6.2-beta01' into win-minor
nhmall [Fri, 14 Dec 2018 22:25:24 +0000 (17:25 -0500)]
Merge branch 'NetHack-3.6.2-beta01' into win-minor

6 years agolast? pickup_types
PatR [Fri, 14 Dec 2018 07:52:35 +0000 (23:52 -0800)]
last? pickup_types

Although choose_classes_menu() is only used for objects, it is written
to handle monsters too.  My change to give <space> special handling
might have broken selecting ghosts if it's ever used for monsters so
fix that.

6 years agoRemove parameter names in declaration.
Bart House [Fri, 14 Dec 2018 05:23:43 +0000 (21:23 -0800)]
Remove parameter names in declaration.