]> granicus.if.org Git - nethack/log
nethack
5 years agomkroom.h update
PatR [Tue, 18 Jun 2019 09:43:41 +0000 (02:43 -0700)]
mkroom.h update

Give room type enums explicit values so that it is easier to find
them when searching by value rather than by name.

Also some reformatting.

5 years agocuring green slime bit
PatR [Tue, 18 Jun 2019 09:39:45 +0000 (02:39 -0700)]
curing green slime bit

A recent change to make_slimed() overlooked a different recent change
in how mon->m_ap_type and youmonst.m_ap_type are referenced.  In this
case it had no impact; fix on general principles.

5 years agomonster overflow on Plane of Air
PatR [Mon, 17 Jun 2019 17:09:16 +0000 (10:09 -0700)]
monster overflow on Plane of Air

Make Air behave the same as Earth, Fire, and Water if monsters are
forced off the level for some reason.

5 years agofuzzer tweaks
PatR [Mon, 17 Jun 2019 16:31:01 +0000 (09:31 -0700)]
fuzzer tweaks

Prevent the fuzzer from randomly toggling the 'silent' option.  If
you use the default value of True then this eliminates most--but not
all--of the beeping that happens when it is running.  I'm not sure
where the remaining beeps are coming from.

Modify the random keystroke selection to implement some bias towards
direction keys that I thought had already been there, plus a higher
chance to entering digits to initiate number responses.

5 years agoEDIT_GETLIN when naming monsters and objects
PatR [Sat, 15 Jun 2019 15:19:32 +0000 (08:19 -0700)]
EDIT_GETLIN when naming monsters and objects

Like #annotate, #name monster, #name individual object, and #name
object type are places where it makes some sense to have an existing
name be the default for the new name, in case taking off from the end
and/or adding to the end is more convenient than retyping everything.

When there is an existing name used as default, clearing that default
and hitting <return> is not enough to remove the name, you still need
to 'assign a new name' of <space> to do that.

5 years agotake two: tty bug with long 'autodescribe' text
PatR [Sat, 15 Jun 2019 14:18:47 +0000 (07:18 -0700)]
take two: tty bug with long 'autodescribe' text

Messages on tty which bypass message history weren't handling long
lines properly.  If the text wrapped to line 2, that continuation
portion was left on the screen after whatever operation that put it
here was finished.  (To reproduce:  assign a long name to a monster
with a long type name so that the combined length exceeds the display
width, then move the cursor over it with ';' or '/' while autodescribe
is On.)

This time prompting isn't adversely affected.

5 years agotty bug with multi-line prompts
PatR [Sat, 15 Jun 2019 12:11:08 +0000 (05:11 -0700)]
tty bug with multi-line prompts

This effectively reverts 1ad2415315c1e6dbcdfcd4a4b22b6fb93ccef1f2
because it was interfering with prompts that spanned more than one
line (by inserting '--More-- + erase' between displaying of prompt and
getting input for the answer).

So we're back to the situation where autodescribe feedback when moving
the cursor will leave text on the second line if it generates text too
wide for one line.  (^R redraws the screen correctly.)

5 years agoEDIT_GETLIN vs monpolycontrol
PatR [Sat, 15 Jun 2019 11:13:34 +0000 (04:13 -0700)]
EDIT_GETLIN vs monpolycontrol

For wizard mode 'monpolycontrol', the getlin() answer buffer for the
"Change <monster> @ <x,y> into what kind of monster?" prompt is also
used to format the coordinate portion of that prompt, so when
EDIT_GETLIN is enabled getlin() was inadvertently given "<x,y>" to use
as default response.  Clear it after the prompt is formatted instead
of via an initializer.  Also, shorten the prompt on the first try:
"Change <monster> @ <x,y> into what?", expanding to the old prompt if
retry is needed.

This also allows specifying 'chameleon' when <monster> is a chameleon,
'doppelganger' when it's a doppelganger, and 'sandestin' when it's one
of those (but not 'doppelganger' when it's a chameleon or sandestin,
and so forth), instead of blanket refusal to accept any non-vampire
shapechanger as the choice.

5 years agodo_mname bit
PatR [Thu, 13 Jun 2019 01:04:00 +0000 (18:04 -0700)]
do_mname bit

Couple of tweaks I made to do_mname() while investigating the tty
autodescribe wrapping issue.

5 years agotty bug with displaying long 'autodescribe' text
PatR [Thu, 13 Jun 2019 00:57:24 +0000 (17:57 -0700)]
tty bug with displaying long 'autodescribe' text

Messages on tty which bypass message history weren't handling long
lines properly.  If the text wrapped to line 2, that continuation
portion was left on the screen after whatever operation that put it
here was finished.  (To reproduce:  assign a long name to a monster
with a long type name so that the combined length exceeds the display
width, then move the cursor over it with ';' or '/' while autodescribe
is On.)

5 years agomklev.c formatting and comments
PatR [Wed, 12 Jun 2019 01:54:32 +0000 (18:54 -0700)]
mklev.c formatting and comments

I made these to 3.7.0- and decided to bring them back to 3.6.2+
because of the 'TODO'.

5 years agowizweight vs globs
PatR [Mon, 10 Jun 2019 16:52:34 +0000 (09:52 -0700)]
wizweight vs globs

The wizard mode runtime option 'wizweight' appends an object's weight
to its formatted description, but that was skipped for globs on the
assumption that it had already been included.  But that inclusion only
happens in shops so most globs lacked weight feedback.

5 years agomuse wand/horn feedback
PatR [Mon, 10 Jun 2019 10:16:52 +0000 (03:16 -0700)]
muse wand/horn feedback

One of the claims in #H8849 was that a monster which zapped a wand
that the hero had fully identified made hero's knowledge of it revert
to "a wand".  That doesn't happen; it had to have been a different
wand which hadn't been seen up close yet.  But the hero should lose
track of known number of charges if a wand is zapped outside his/her
view.  When implementing that I noticed that a monster playing a fire
horn to burn away slime was using the routine that gives wand
feedback.  Add a separate, similar routine for magical horn feedback.

Half this diff is due to moving a naming support routine from mhitm.c
to do_name.c.

5 years agocurses EDIT_GETLIN - discarding preloaded answer
PatR [Sun, 9 Jun 2019 14:07:34 +0000 (07:07 -0700)]
curses EDIT_GETLIN - discarding preloaded answer

EDIT_GETLIN is more complicated on curses than on tty due to way that
long lines are handled....

Using ESC to get rid of the default response removed it from the
answer buffer but didn't erase back to the end of actual prompt,
making it look as if it was still there.  Fixing that for a one-line
prompt+answer was needed and would have been easy but it also needs to
be prepared to go back to prior lines.  Both the prompt and the answer
could conceivably span lines although in practice it will usually just
be one line or else prompt+answer combined spanning to a second line.

This hasn't been exhaustively tested been seems to be working correctly.

5 years agomore ^G of "hidden <monster>"
PatR [Sun, 9 Jun 2019 13:11:09 +0000 (06:11 -0700)]
more ^G of "hidden <monster>"

Fix a couple of glitches and add an enchancement.  The monster
attributes structure left the 'hidden' field uninitialized unless user
specified "hidden".  Mimics were being flagged with mon->mundetected
because they pass the is_hider() test but they 'hide' by taking on an
appearance rather than being unseen due to mundetected.  hides_under()
monsters fail the is_hider() test, but can become mundetected if there
is at least one object present.  Eels/other fish are neither is_hider()
nor hides_under() but can be mundetected at water locations.  So alter
'hidden' handling to deal with these various circumstances.

Asking for 'hidden' for any type of creature will result in having its
location be highlighted if it can't be actively seen or detected.  So
using '2000 ^G piranha' will fill up the Plane of Water "normally" but
'2000 ^G hidden piranha' will result in a ton of draw-glyph/delay/
draw-other-glyph/delay sequences and take a painfully long time.  Moral
of the story:  don't combine 'hidden' with a large count unless you
want to spend quite a while watching the level's fill pattern.  Turning
off the 'sparkle' option will cut the flashing in half but still take
a long time.  If you really need to fill a level with hidden creatures
and can't bear the flashing/highlighting, use blessed potion of monster
detection or #wizintrinsics to have extended detect.  Then all created
monsters will be seen so none will trigger location highlighting.

If you create a 'stalker' or 'invisible stalker' or 'invisible <other-
mon>' its location won't be highlighted, but for 'hidden stalker' or
'hidden invisible stalker' or 'hidden invisible <other-mon>' it will
(provided you don't actually see it due to See_invisible or sensemon()).

5 years agodisplay effect bits
nhmall [Sun, 9 Jun 2019 12:08:50 +0000 (08:08 -0400)]
display effect bits

5 years agoextend wizard-mode display effect to unseen invisible monsters
nhmall [Sun, 9 Jun 2019 11:46:14 +0000 (07:46 -0400)]
extend wizard-mode display effect to unseen invisible monsters

5 years agooverlooked rn2_on_display_rng bit
nhmall [Sun, 9 Jun 2019 11:41:11 +0000 (07:41 -0400)]
overlooked rn2_on_display_rng bit

5 years agomake display effect code reusable and move it to display.c
nhmall [Sun, 9 Jun 2019 03:19:29 +0000 (23:19 -0400)]
make display effect code reusable and move it to display.c

5 years agofixes entry and a display effect related to is_hider wishing
nhmall [Sun, 9 Jun 2019 02:40:51 +0000 (22:40 -0400)]
fixes entry and a display effect related to is_hider wishing

5 years agodebug mode wishing for hidden hiders
nhmall [Sun, 9 Jun 2019 01:54:06 +0000 (21:54 -0400)]
debug mode wishing for hidden hiders

5 years agofix github pull request #197 - curses CR handling
PatR [Sat, 8 Jun 2019 15:55:44 +0000 (08:55 -0700)]
fix github pull request #197 - curses CR handling

Fixes #197
Fixes #195

Add a call to nonl() to tell curses not to convert carriage return (^M)
to newline.  Line input accepts both ^J and ^M as end of line/end of
input, but the core's command processing treats ^M as "unknown command"
(by default; someone could use the BIND option to assign some command
to that character).  The end result is that accidentally pressing the
<return> or <enter> key (or Ctrl+M key combination) won't make the hero
run towards the bottom of the screen as if the user had typed ^J.  The
curses docs also claim that it allows more optimization during screen
updating by making ^J work as plain linefeed rather than ^M^J newline.

The tty interface can achieve this (the 'do not convert ^M to ^J part',
not the 'more optimization' part) by issuing the command 'stty -icrnl'
(on Unix or sufficiently Unix-like system) prior to running nethack,
but that has no effect when using the curses interface (at least with
ncurses on OSX where I've tested it).

A better fix would be to look up the current terminal settings at
program startup and only call nonl() if -crnl was in effect so that
curses and tty would behave the same in this regard, but curses is
supposed to let us avoid those sorts of messy details....

5 years agofix github issue #198 - mon wielding cursed weapon
PatR [Sat, 8 Jun 2019 12:58:42 +0000 (05:58 -0700)]
fix github issue #198 - mon wielding cursed weapon

Fixes #198

Watching a monster try to switch from a cursed weapon to some other
weapon (of any bless/curse state) reported that the old weapon was
welded to the monster's hand and wouldn't switch to the new one.
But watching a monster try to wield a cursed weapon didn't say that
it was becoming welded at the time.  Report correctly pointed out
that the weld-to-hand check wouldn't work unless the weapon was
already flagged as wielded, and the code in question was deferring
wielding so that the message wouldn't include "(weapon in hand)" in
the formatted object description.  There was also another problem:
it was erroneously testing the monster's old weapon (if any, after
unwielding it), instead of the new one being wielded.

Also, Sunsword starting to emit light when first wielded by a monster
only reported that it was shining if hero could see the monster.
Give an alternate message if hero sees the location instead.  (Just
the monster's/Sunsword's location rather than any newly lit spot
within Sunsword's radius.)

5 years agomissile light sources
PatR [Sat, 8 Jun 2019 11:50:40 +0000 (04:50 -0700)]
missile light sources

Throwing or kicking a lit lamp, lit candle, or lit potion of oil
wasn't giving off any light as it travelled to its destination.
Now it does, and dungeon features, objects, or monsters that are
temporarily seen as it moves from square to square till appear on
the map.  In the monster case, they go away as soon as the light
moves beyond range, but when it finishes moving the "remembered,
unseen monster" glyph will be drawn at their location.  I think that
part has some room for improvement, but mapping temporarily seen
terrain features is the primary impetus for this change.

Also, any message delivery while the "lit missile" travelled still
showed its light around the hero.  Noticeable for lamps or stacks
of sufficient candles if hero has no other light source.

This cannibalizes the monst->mburied bit for temporarily seeing a
monster.  It has been present but unused for ages.  I needed to
replace a couple of vision macros to make sure they didn't examine
it any more so that overloading for transient lighting doesn't
introduce any vision oddities.  For version $NEXT, monst->mtemplit
can be given its own bit.  It is only set during bhit() execution
and cleared by the time that returns, so has no effect on save files.

5 years ago\#turn comment
PatR [Thu, 6 Jun 2019 20:30:43 +0000 (13:30 -0700)]
\#turn comment

Remove a potential 'TODO' since it turned out [pun intended] to be a
no-op.

5 years ago\#turn mechanics
PatR [Thu, 6 Jun 2019 20:12:39 +0000 (13:12 -0700)]
\#turn mechanics

This part got left out of yesterday's #turn update.

5 years ago\#turn mechanics
PatR [Thu, 6 Jun 2019 01:36:55 +0000 (18:36 -0700)]
\#turn mechanics

When looking at something else I stumbled across this.  Using #turn
is described as chanting a formula but was allowed even if hero wasn't
able to speak due to strangulation or speechless polymorph form.
Also, the check for whether a potential target monster was in range
used 'cansee(mx,my)' which required the hero to be able to see but
not necessarily to be able to see the target.  I've changed that to
'couldsee(mx,my)' on the assumption that it was intended to prevent
\#turn from operating through walls.

Also, the comment about the effective range was wrong.  I changed the
comment to match the code rather than vice versa.

5 years agolocation viability on Plane of Water
PatR [Wed, 5 Jun 2019 11:16:34 +0000 (04:16 -0700)]
location viability on Plane of Water

While testing, I noticed that I could completely fill the Water level
with air elementals.

Hero can't fly or levitate or water walk into/onto water locations
on Water level without drowning/crawling out the water, and monsters
shouldn't have been able to but could, then they were hit by drowning
since minliquid used different criteria than movement.  But goodpos(),
used for teleport destination and new monster creation among other
things, consided water locations acceptable on that level for
non-aquadic creatures with Fly/Lev/Wwalk ability.

It explains why so many dragons and other 'nasty' monsters have been
ending up on the vanquished monsters list when hero uses level
teleport to go directly there from level 1.  They've either been
getting created in water and then they drown when it's their turn to
move or moving into it to approach the hero and drowning (not sure
whether that case is immediate or on next move).  There's no message
since hero doesn't see it, and air elementals didn't drown since thy
don't breathe.

5 years agofixes whitespace bit
nhmall [Wed, 5 Jun 2019 01:58:44 +0000 (21:58 -0400)]
fixes whitespace bit

5 years agoremove some trailing spaces from data.base
nhmall [Wed, 5 Jun 2019 01:49:20 +0000 (21:49 -0400)]
remove some trailing spaces from data.base

5 years agomake sure end.c can place the bc
nhmall [Wed, 5 Jun 2019 01:46:08 +0000 (21:46 -0400)]
make sure end.c can place the bc

5 years agoallow a parent function to restrict use of placebc
nhmall [Wed, 5 Jun 2019 01:18:46 +0000 (21:18 -0400)]
allow a parent function to restrict use of placebc

placebc was triggering an impossible sometimes on the plane of
water

It turned out to be because movebubbles issued an
unplacebc(), but a downstream function called
placebc(), so when movebubbles() issued its own
placebc() there was a problem.

The downstream function that beat movebubbles to the placebc()
turned out to be unstuck(). There could be others.

5 years agoplug montraits() memory leek
PatR [Tue, 4 Jun 2019 21:54:58 +0000 (14:54 -0700)]
plug montraits() memory leek

If a corpse with a revive timer included obj->oextra->omonst for
remembering the original monster (I think all corpses do these days)
and makemon() failed to create a new monster when the timer expired,
the copy of the original wasn't freed.  makemon() will fail if there
is no room for the monster.

5 years agoconfused blessed scroll of remove curse on itself
PatR [Tue, 4 Jun 2019 20:18:21 +0000 (13:18 -0700)]
confused blessed scroll of remove curse on itself

Noticed when testing the set_bknown patch earlier: something updated
the persistent inventory window while scroll processing was in the
midst of traversing invent and it showed the scroll I'd just read
change from known blessed to bless/curse state not known.  The scroll
should really be removed from inventory because player is told that it
has disappeared, but unlike charging (which does do that so that it is
gone when selecting an item to charge), remove curse isn't auto-IDed
and the code to ask the player to call an unIDed item something only
kicks in when it's still in inventory.  Preventing the scroll in use
from having its bknown flag cleared should be good enough; it won't
have disappeared yet but at least it won't be visibly changing.

5 years agocontainer->{cknown,lknown) vs perm_invent
PatR [Tue, 4 Jun 2019 19:13:46 +0000 (12:13 -0700)]
container->{cknown,lknown) vs perm_invent

Carried containers could have their contents-known state and/or
lock-known state changed without persistent inventory window being
updated to show the new information.

This also changes the behavior when player has hero zap self with
wand of locking or wizard lock spell.  If it doesn't trigger a
holding trap then the effect will hit inventory, similar to how
opening/knock operates (releasing hero from holding trap or hiting
inventory when that doesn't happen).

5 years agofix #H8850 - bless/curse state in perm_invent
PatR [Tue, 4 Jun 2019 17:50:24 +0000 (10:50 -0700)]
fix #H8850 - bless/curse state in perm_invent

Changing an inventory item's bknown flag wasn't followed by a call to
update_inventory() in many circumstances, so information which should
have appeared wasn't showing up until some other event triggered an
update.

5 years agofix github issue #196 - green slime feedback
PatR [Tue, 4 Jun 2019 16:16:00 +0000 (09:16 -0700)]
fix github issue #196 - green slime feedback

Fixes #196

If you didn't die from turning into green slime but then died because
green slimes had been genocided, the message given assumed that you
had just seen "OK, you don't die" from answering No to "Really die?".
Its wording didn't make sense if the reason you didn't die was an
amulet of life-saving.  Give a different message for that case.

Also, if you survive turning into slime (via either method) and either
green slimes are still around or you answer No to "Really die?" when
they've been genocided, give a message after "You survived that attempt
on your life" pointing out that you have done so in green slime form.
Useful since prior to 3.6.2 you would have reverted to original form--
despite the Slimed countdown saying you had turned into green slime.

5 years agodisabled code bit
nhmall [Mon, 3 Jun 2019 22:45:02 +0000 (18:45 -0400)]
disabled code bit

5 years agoadd some debugging BREADCRUMBS to identify caller of some functions
nhmall [Mon, 3 Jun 2019 22:37:45 +0000 (18:37 -0400)]
add some debugging BREADCRUMBS to identify caller of some functions

Only takes effect if a developer uncomments BREADCRUMBS in config.h

5 years agodata.base update
nhmall [Mon, 3 Jun 2019 22:00:19 +0000 (18:00 -0400)]
data.base update

5 years agomore precautions for monster obliteration during overcrowding
nhmall [Mon, 3 Jun 2019 21:11:54 +0000 (17:11 -0400)]
more precautions for monster obliteration during overcrowding

5 years agoextended ball&chain sanity check
PatR [Mon, 3 Jun 2019 09:36:44 +0000 (02:36 -0700)]
extended ball&chain sanity check

Verify that the locations of ball and chain are consistent.
If chain is on floor then ball is on floor or in hero's inventory
else if chain is free then ball is free or in hero's inventory.
When chain is on floor it is under hero or one step away from hero
and when ball is on floor it is on chain or one step away from chain.

5 years agomakedefs: add enum support when generating pm.h
nhmall [Sun, 2 Jun 2019 21:21:35 +0000 (17:21 -0400)]
makedefs: add enum support when generating pm.h

Only changes pm.h content if ENUM_PM is defined when compiling
util/makedefs.c

While NON_PM and LOW_PM could be included, it would require
for the makedefs.c compile, as well as an
around their macro definitions in permonst.h so for now those
particular lines are commented out in makedefs.c

5 years agodon't clear mtmp->mx, mtmp->my even when obliterating
nhmall [Sun, 2 Jun 2019 14:34:38 +0000 (10:34 -0400)]
don't clear mtmp->mx, mtmp->my even when obliterating

5 years agoelemental_clog() should not destroy the very monster trying to be placed
nhmall [Sun, 2 Jun 2019 12:15:41 +0000 (08:15 -0400)]
elemental_clog() should not destroy the very monster trying to be placed

5 years agoplace_object(obj,0,0) debugging
PatR [Sun, 2 Jun 2019 12:02:08 +0000 (05:02 -0700)]
place_object(obj,0,0) debugging

Got a hit (on Plane of Water) pretty quickly.

5 years agoremove a couple of debugging lines in mon.c
nhmall [Sat, 1 Jun 2019 21:36:54 +0000 (17:36 -0400)]
remove a couple of debugging lines in mon.c

5 years agofix gcc warning on linux
nhmall [Sat, 1 Jun 2019 21:26:15 +0000 (17:26 -0400)]
fix gcc warning on linux

5 years agoimprove full level handling in the endgame
nhmall [Sat, 1 Jun 2019 20:51:10 +0000 (16:51 -0400)]
improve full level handling in the endgame

Even though a goodpos failure in mnearto() would return 0 to
the caller and trigger proper overcrowding handling for mtmp,
the 'othermon' would be left with its mx,my set to 0,0 under
that circumstance and then trigger a mon_sanity_check()
failure and accompanying impossible() message a short while
afterwards.

This also includes the addition of some flags that proved useful
for troubleshooting the mystery sanity_check failure and helping
to understand some of the code paths the struct monst data had
been through. They are only used for inspection when issues are
reported or when debugging, they don't presently control the
code flow.  Their setting and use is done in an overloaded way
that should not intrude on the existing use of mspare1 for
MIGR_LEFTOVERS. mon->mstate is just a pseudonym for mon->mspare1
and does not alter save file content.

5 years agowhatdoes ('&') for movement commands
PatR [Sat, 1 Jun 2019 09:52:32 +0000 (02:52 -0700)]
whatdoes ('&') for movement commands

The key binding overhaul broke '&' reporting for movement commands.
This is somewhat clumsy but seems to be working as intended.

(M-0 with 'number_pad' set to 2 (or 4) appears to be broken.  It's
supposed to be a synonym for 'I' but brings full inventory ('i')
for me.  I have to set 'altmeta' On and type ESC followed by 0, but
that sequence does work to get M-0.)

5 years agohelp bits
PatR [Sat, 1 Jun 2019 01:41:37 +0000 (18:41 -0700)]
help bits

Fix a typo (count example "20s." shouldn't have the period).

Also expand the text for several gotchas that tend to hit newbies.

5 years agofix github issue #193 - curses: menu search
PatR [Fri, 31 May 2019 17:11:45 +0000 (10:11 -0700)]
fix github issue #193 - curses: menu search

Fixes #193

Under curses interface, make characters which are both entry selectors
and menu commands function as a selector.  Needed to support using ':'
to look inside a container when applying/looting it via menu, instead
of performing a menu search operation.  (There was another case like
this but I can't remember what the circumstances are.  The fix is
general enough to cover it, whatever it is.)

For menus which don't have ':' as a choice, make sure search prompt
doesn't offer garbage default input when built with EDIT_GETLIN.

Bug?  If player has 'popup_dialog' option On, EDIT_GETLIN is ignored.
Plain curses I/O doesn't seem to offer a way to implement it.

5 years agoedge of map feedback
PatR [Fri, 31 May 2019 14:35:37 +0000 (07:35 -0700)]
edge of map feedback

When testing Planes of Air and Water, I found it odd that trying to
move off the edge of a level uses a turn but provides no feedback.
If 'mention_walls' is On, report that you can't go any farther in
whichever direction you're trying to move.  Moving diagonally is
only blocked in one of the two combined directions unless you're in
the very corner, so if you try to move southwest while in the middle
of the bottom row, for instance, it says you can't go farther south
rather than southwest.

5 years agoPlanes of Water and Air
PatR [Fri, 31 May 2019 10:42:06 +0000 (03:42 -0700)]
Planes of Water and Air

Make the Plane of Water be water all the way to edge instead of having
stone on left, top, and right.  The Plane of Air already has air all
the way to edge (including unused/unuseable column #0) but does so via
code rather than the level description file so Water does that now too.

The edges of the Plane of Air were cloudless (3 columns on the left,
2 rows on the top, and 2 columns on the right; don't recall about the
bottom) and that looked pretty strange.  Those rows and columns are
beyond the range of bubble/cloud movement so just make some of those
spots randomly be sight-blocking cloud terrain instead of all open air.
It isn't integrated with the moving clouds but looks fairly good when
the hero moves along the edge of the level.

Using wizard mode to leave Water or Air and later return resulted in
no clouds on the Air level and bubbles as usual on the Water level.
I still don't understand why, but on return to those levels run the
bubble creation routine as if the old discarded bubbles or clouds were
being restored.

5 years agomnearto/mnexto/enexto
PatR [Thu, 30 May 2019 14:50:38 +0000 (07:50 -0700)]
mnearto/mnexto/enexto

This doesn't solve the <0,0> problem but it does prevent mnexto()
from using uninitialized coordinates if enexto() fails.  It also adds
several debugging messages.

enexto() was ignoring map row #0 (unlike column #0, row #0 contains
valid map locations).  Fixing that doesn't matter for Plane of Water
though since that row is stone there--that's probably a bug.  It was
also repeatedly re-testing the top+1 and bottom rows and left and
right columns after they had already failed to be acceptable.  It
still does some of that, but less.

5 years agosortloot memory leak
PatR [Wed, 29 May 2019 11:40:54 +0000 (04:40 -0700)]
sortloot memory leak

Unfreed memory noticed after interrupting the fuzzer and quitting.
query_objlist() has an early return--for touching a cockatrice
corpse--that was skipping release of sortloot info (an array with
one element per object from whichever object list was being used).

Some formatting that's been sitting around for a while got mixed in
and I decided not to take that back out.

5 years agoDeleting test file which was just checked-in.
Bart House [Wed, 29 May 2019 03:30:10 +0000 (20:30 -0700)]
Deleting test file which was just checked-in.

5 years agoMerge branch 'NetHack-3.6' of https://rodney.nethack.org:20040/git/NHsource into...
Bart House [Wed, 29 May 2019 03:19:33 +0000 (20:19 -0700)]
Merge branch 'NetHack-3.6' of https://rodney.nethack.org:20040/git/NHsource into NetHack-3.6

5 years agoTesting ability to cause chaos.
Bart House [Wed, 29 May 2019 03:18:27 +0000 (20:18 -0700)]
Testing ability to cause chaos.

5 years agoMerge branch 'NetHack-3.6' of https://rodney.nethack.org:20040/git/NHsource into...
nhmall [Wed, 29 May 2019 01:24:56 +0000 (21:24 -0400)]
Merge branch 'NetHack-3.6' of https://rodney.nethack.org:20040/git/NHsource into NetHack-3.6

5 years agoclean up Windows panic results further
nhmall [Wed, 29 May 2019 01:24:04 +0000 (21:24 -0400)]
clean up Windows panic results further

5 years agowizard mode memory leak in endgame
PatR [Wed, 29 May 2019 00:08:48 +0000 (17:08 -0700)]
wizard mode memory leak in endgame

Leaving the Plane of Water to return to a previously visited endgame
level didn't free the air bubbles unless/until you visit a new level.
Returning to that level creates a new set of air bubbles, losing track
of the previous set.  Likewise with Plane of Air and its clouds.  (Not
an issue with actual save and restore when on those levels, or when
just moving forward to not-yet-visited levels.)

Not applicable to normal play where it isn't possible to return to a
previously visited endgame level.

For 3.7, bubble save/restore ought to become part of savlev() instead
of being handled by savegamestate().

5 years agocurses getline()
PatR [Tue, 28 May 2019 09:27:40 +0000 (02:27 -0700)]
curses getline()

After going back and forth between prompts causing message lines
to be overwritten and to be skipped, this yoyo might have finally
run out of string.  Fingers crossed....

5 years agocurses message window
PatR [Tue, 28 May 2019 08:52:37 +0000 (01:52 -0700)]
curses message window

Fix a 'FIXME': don't follow a message with two spaces in anticipation
of combining with the next one, precede the next one with two spaces
when they're being combined.  Keeps nethack's message window <mx,my>
coordinates in sync with curses' internal coordinates.

5 years agomake the rc file match the build target name for Windows
nhmall [Mon, 27 May 2019 22:42:25 +0000 (18:42 -0400)]
make the rc file match the build target name for Windows

5 years agoWindows .rc files
nhmall [Mon, 27 May 2019 21:38:54 +0000 (17:38 -0400)]
Windows .rc files

bump the version in the win/win32/*.rc files

side note: winhack.rc wasn't properly updated for the 3.6.2 release

5 years agoend of game oddities: thrownobj, ball&chain
PatR [Mon, 27 May 2019 01:44:25 +0000 (18:44 -0700)]
end of game oddities: thrownobj, ball&chain

If you died while Punished but with attached ball and chain temporarily
off the map (changing levels and when swallowed are the cases I looked
at; there may be others), the ball and chain objects would not appear
in bones (for the falling-down-stairs case; bones are never saved if
hero dies while swallowed) and they weren't being freed.  Put them
back on the map so that they'll be included in bones and also freed as
part of normal map cleanup.

This caused a problem if the attached ball had state OBJ_FREE due to
being thrown rather than being temporarily off the map.  'thrownobj'
was being deallocated without first cancelling punishment, so uball
object was freed via thrownobj pointer but stale uball pointer still
referenced it.  Unpunishing would introduce sequencing issues because
that would need to be after attribute disclosure.  So instead of
deallocating thrown or kicked object, put it/them (can't actually have
both at the same time) back on the map.  This has a side-effect of
saving thrown Mjollnir in bones if it kills hero when failing to be
caught upon return.  (I thought that that had been fixed ages ago?)

5 years agoball.c formatting
PatR [Mon, 27 May 2019 01:23:05 +0000 (18:23 -0700)]
ball.c formatting

Mostly a couple of block comments.

5 years agosavelev() pasta
PatR [Sun, 26 May 2019 14:24:52 +0000 (07:24 -0700)]
savelev() pasta

Avoid some of the spaghetti [mostly the alternate call to
savecemetery()] in savelev().  There should be no change in behavior.

5 years agofree level.bonesinfo
PatR [Sun, 26 May 2019 07:40:40 +0000 (00:40 -0700)]
free level.bonesinfo

Bones information for the current level was freed during save but not
at end of game.  Have freedynamicdata() call savelev(,,FREE_SAVE) to
throw away current level instead of trying to duplicate the actions
that performs.

5 years agosave.c cleanup
PatR [Sun, 26 May 2019 07:11:53 +0000 (00:11 -0700)]
save.c cleanup

Mostly 'sizeof' usage.  This has been sitting around for a while and
I wanted to get it out of the way before making some other save.c
changes.

5 years agofree overview->final_resting_place
PatR [Sun, 26 May 2019 06:43:42 +0000 (23:43 -0700)]
free overview->final_resting_place

The #overview command can provide some feedback about levels loaded
from bones files; that data wasn't being released at end of game.

(There are two copies of that data, one set always in memory with
the overview data [final_resting_place field in the 'mapseen' data],
and another set with portions attached to each relevant level [via
level.bonesinfo].  Neither set was being properly freed; this only
addresses one of them, so far. The per-level data can probably be
eliminated--for post-3.6--since DUNGEON_OVERVIEW isn't a conditional
feature as it was when that was implemented.)

5 years agorefer to the same level the same way in fixes file
nhmall [Sat, 25 May 2019 16:25:05 +0000 (12:25 -0400)]
refer to the same level the same way in fixes file

5 years agoMake sure the correct luckstone is the prize
Pasi Kallinen [Sat, 25 May 2019 16:15:53 +0000 (19:15 +0300)]
Make sure the correct luckstone is the prize

The first generated luckstone is marked as the prize in mines' end.
Make sure we generate the intended one first, before any other
(possibly randomly generated) luckstones.

5 years agoMerge branch 'NetHack-3.6' of https://rodney.nethack.org:20040/git/NHsource into...
nhmall [Sat, 25 May 2019 16:01:58 +0000 (12:01 -0400)]
Merge branch 'NetHack-3.6' of https://rodney.nethack.org:20040/git/NHsource into NetHack-3.6

5 years agodo not mark multiple luckstones as the prize in mines-end
nhmall [Sat, 25 May 2019 15:58:32 +0000 (11:58 -0400)]
do not mark multiple luckstones as the prize in mines-end

if one of the random objects happened to be a luckstone then
it and the explicit one got marked as a prize.

Following this change, only one will be marked as the prize,
but a follow-up on the order of things in mines.des may be
warranted to ensure it is the explicitly placed luckstone.

5 years agocurses memory leak
PatR [Sat, 25 May 2019 14:37:08 +0000 (07:37 -0700)]
curses memory leak

Back in February, my e991dd1b0c4192495c7e9092c10fa83bb6d81a24 added
ESC (when there's no input) as an early return for curses' getline,
but it neglected to clean up some allocated memory.

5 years agowhitespace bit
nhmall [Sat, 25 May 2019 04:42:29 +0000 (00:42 -0400)]
whitespace bit

5 years agoswap places with pet onto boulder location
nhmall [Sat, 25 May 2019 04:33:47 +0000 (00:33 -0400)]
swap places with pet onto boulder location

when co-located with a boulder you could sometimes swap places
with pets of any size

bg72

5 years agovortex database update
nhmall [Sat, 25 May 2019 02:36:21 +0000 (22:36 -0400)]
vortex database update

Reported:
"The data.base entry for "vortex" is erronous, as fire and energy vortices have passive attacks (which count as "touching")"

5 years agocurses message window vs prompting
PatR [Fri, 24 May 2019 08:33:45 +0000 (01:33 -0700)]
curses message window vs prompting

Fix a problem introduced by f218e3f15e2d5525e817fb07e6a8b4773f296073
and/or a19e64e470f21ef30b96122dd2d40c26ef9b1527.  Sometimes the line
after a prompt would be empty and the next message get shown on the
line after that.  a19e64e470 was intended to fix the opposite problem
so probably overshot the mark....

5 years agocurses message window refresh
PatR [Fri, 24 May 2019 01:56:20 +0000 (18:56 -0700)]
curses message window refresh

Sometimes curses tears down and recreates all its windows (when the
display is resized, for instance) and after doing that it repopulates
the message window with data saved for use by ^P.  But it was showing
the oldest messages available rather than the most recent ones.

There is still room for improvement.  That process combines short
messages but the refresh is based on the available number of lines;
combining messages can result in lines at the bottom of the message
window being left blank.  This could be fixed by reverse-scrolling the
window and inserting more messages at the top, or by combining short
messages in history data instead of at refresh time.  The second seems
easier but won't handle changing the message window's width sensibly,
and neither method handles wrapped, long lines well.  A More>> prompt
(possibly more than one) is issued if the refresh shows too many lines
(either because long messages already took multiple lines or because
the window has become narrower and ones which used to fit now need to
be wrapped).

5 years agocurses: remove duplicate wincap2 bit
PatR [Fri, 24 May 2019 00:54:37 +0000 (17:54 -0700)]
curses: remove duplicate wincap2 bit

WC2_HITPOINTBAR was OR'd into wincap2 bitmask twice.

5 years agovs 2019 update bit
nhmall [Thu, 23 May 2019 04:11:18 +0000 (00:11 -0400)]
vs 2019 update bit

5 years agoxans fly, but could not reach your feet if you flew
nhmall [Wed, 22 May 2019 22:27:03 +0000 (18:27 -0400)]
xans fly, but could not reach your feet if you flew

5 years agofix #H8769 - steed drowns on Plane of Water
PatR [Wed, 22 May 2019 21:59:43 +0000 (14:59 -0700)]
fix #H8769 - steed drowns on Plane of Water

Air bubble movement on the Plane of Water manipulated <u.ux,u.uy>
directly when changing hero's coordinates, leaving steed with old
coordinates, resulting in dunking it when the old spot switched from
air to water.  Switch to u_on_newpos() which moves the steed with
the hero and also handles clipping when the screen is too small to
show the whole map at once.

5 years agoball and chain sanity check revisited
PatR [Wed, 22 May 2019 00:40:57 +0000 (17:40 -0700)]
ball and chain sanity check revisited

Move some duplicated debugging code into its own routine.

5 years agocloses #79
nhmall [Tue, 21 May 2019 03:45:51 +0000 (23:45 -0400)]
closes #79

5 years agoMerge branch 'spixi-engravings' into NetHack-3.6
nhmall [Tue, 21 May 2019 03:43:18 +0000 (23:43 -0400)]
Merge branch 'spixi-engravings' into NetHack-3.6

5 years agoMerge branch 'NetHack-3.6.0' of https://github.com/spixi/NetHack into spixi-engravings
nhmall [Tue, 21 May 2019 03:41:40 +0000 (23:41 -0400)]
Merge branch 'NetHack-3.6.0' of https://github.com/spixi/NetHack into spixi-engravings

5 years agowintty.c comments
PatR [Tue, 21 May 2019 01:08:32 +0000 (18:08 -0700)]
wintty.c comments

Some minor stuff I had pending that I stripped away for the status
conditions patch.

5 years agostatus line count (word two) bit
nhmall [Mon, 20 May 2019 19:16:57 +0000 (15:16 -0400)]
status line count (word two) bit

5 years agostatus_sanity_check is most useful in WIP and beta so restrict it
nhmall [Mon, 20 May 2019 16:08:51 +0000 (12:08 -0400)]
status_sanity_check is most useful in WIP and beta so restrict it

5 years agomore #H8609 - tty status condition rendering
PatR [Mon, 20 May 2019 12:26:19 +0000 (05:26 -0700)]
more #H8609 - tty status condition rendering

The earlier fix removed a valid optimization which happened to be
implemented incorrectly.  Put that back.  It also left an invalid
optimization when applied to conditions.  Remove that one.

I don't think either of these explains truncating 'y' off of "Hungry"
which was shown in one of the reports.

5 years agomake it tougher for incomplete render_status() to go unnoticed
nhmall [Mon, 20 May 2019 05:33:33 +0000 (01:33 -0400)]
make it tougher for incomplete render_status() to go unnoticed

Adds a sanity check that will write a paniclog
message if a code change prevents completion of
render_status() for each dirty (changed) field.

5 years agofix a botl status display issue
nhmall [Mon, 20 May 2019 03:35:21 +0000 (23:35 -0400)]
fix a botl status display issue

Reported as #H8609 (1679)

Some code recently added to render_status() for BL_CONDITION:
    if (!tty_condition_bits)
        continue;
was short-circuiting the required copy of NOW
values to BEFORE values for later comparison
further down in the for-loop.
    tty_status[BEFORE][idx] = tty_status[NOW][idx];

This caused some fields to be bypassed for rendering
once no more tty_condition_bits were set because the
length comparisons would match.

5 years agoremove a debug bit from Makefile.msc
nhmall [Sun, 19 May 2019 15:55:05 +0000 (11:55 -0400)]
remove a debug bit from Makefile.msc

5 years agoMakefile.msc bit for Windows
nhmall [Sun, 19 May 2019 15:48:20 +0000 (11:48 -0400)]
Makefile.msc bit for Windows

5 years agofixes github issue #190 - EDIT_GETLIN for curses
PatR [Sun, 19 May 2019 06:52:04 +0000 (23:52 -0700)]
fixes github issue #190 - EDIT_GETLIN for curses

Fixes #190

Add EDIT_GETLIN support for curses.  It remains disabled by default.

5 years agodon't merge globs with differing BUC status
nhmall [Sun, 19 May 2019 02:56:27 +0000 (22:56 -0400)]
don't merge globs with differing BUC status