]> granicus.if.org Git - nethack/log
nethack
2 years agoredundant code warning line 400 src/apply.c
nhmall [Thu, 18 Aug 2022 01:16:23 +0000 (21:16 -0400)]
redundant code warning line 400 src/apply.c

                if (odummy->otyp == SLIME_MOLD
400 ->                    && has_mcorpsenm(mtmp) && MCORPSENM(mtmp) != NON_PM)

The definition of has_mcorpsenm macro is:
include/mextra.h:#define has_mcorpsenm(mon) ((mon)->mextra && MCORPSENM(mon) != NON_PM)

Remove the redundant code.

2 years agodocument pseudo-class 'P' slightly better
PatR [Thu, 18 Aug 2022 00:47:31 +0000 (17:47 -0700)]
document pseudo-class 'P' slightly better

Inspired by the diff from entrez.  I didn't care for 'time'.  I don't
like 'novelty' much either, but it is a little more accurate since
there is no time factor involved with just-picked-up.

2 years agocorrect an rng mistake in 6e0d55df from Jan 2019
nhmall [Thu, 18 Aug 2022 00:32:07 +0000 (20:32 -0400)]
correct an rng mistake in 6e0d55df from Jan 2019

Reported by entrez

2 years agoExpose some debug flags in options
Pasi Kallinen [Wed, 17 Aug 2022 11:28:04 +0000 (14:28 +0300)]
Expose some debug flags in options

Show and allow changing the debugging flags in options:

debug_fuzzer: turn on the fuzzer
debug_hunger: prevent hunger
debug_mongen: prevent monster generation
debug_overwrite_stairs: allow level generation overwrite stairs

These are wizard-mode only, cannot be set via config file,
and the fuzzer cannot change these either.

2 years agocurses: interactively toggling 'perm_invent' On
PatR [Tue, 16 Aug 2022 22:23:37 +0000 (15:23 -0700)]
curses: interactively toggling 'perm_invent' On

Enabling perm_invent with 'O' ('m O' these days) with curses used to
work but stopped at some point.  Analysis by entrez has attributed
the change to the g.program_state.in_docrt flag in docrt().  When
curses creates the perm_invent window for update_inventory(), it
calls docrt() to have nethack redraw the screen.

 docrt() -> update_inventory() -> curses_update_inventory() -> ...
  -> curs_reset_windows() -> doredraw() -> docrt() [early return]

resulted in room for the persistent inventory window but it was
blank.

This also replaces a couple of doredraw() calls with direct calls to
docrt() (one in code that isn't used).  doredraw() implements a user
command; docrt() does the actual redrawing.

2 years agoReturn early from mon_has_friends
Pasi Kallinen [Tue, 16 Aug 2022 11:49:25 +0000 (14:49 +0300)]
Return early from mon_has_friends

2 years agoMonsters using wands of teleportation more
Pasi Kallinen [Tue, 16 Aug 2022 09:17:54 +0000 (12:17 +0300)]
Monsters using wands of teleportation more

Previously monsters used wands of teleportation at hero, if hero was
standing on top of stairs, or on a scary thing (eg. Elbereth or
scroll of scare monster).

Allow monsters to recognize when hero is behind a chokepoint and
monster has friends with them, hopefully teleporting the hero
out of the chokepoint.

2 years agoinvent fixes, take II
PatR [Tue, 16 Aug 2022 01:00:10 +0000 (18:00 -0700)]
invent fixes, take II

Make sure that inventory listing when carrying only gold works when
build without TTY_PERM_INVENT as well as with that.

2 years agoinvent fixes
PatR [Mon, 15 Aug 2022 18:41:28 +0000 (11:41 -0700)]
invent fixes

Fix the reported problem of a crash when using the curses interface
when examining inventory while carrying only gold, and a blank menu
for tty in the same circumstance.  Triggered by changes made for
TTY_PERM_INVENT but doesn't require that to be enabled.

Not fixed: with curses, starting with perm_invent Off and toggling it
On (with sufficient screen real estate to show it) doesn't display it.
Doing something to update it like pickup or drop causes it to appear.
(^R isn't enough.)

2 years agou.uswallow
PatR [Mon, 15 Aug 2022 17:53:50 +0000 (10:53 -0700)]
u.uswallow

Make sure u.uswallow is cleared when u.ustuck gets set to Null so
that they won't be out of sync with each other.  Having u.uswallow
be non-zero does imply that u.ustuck is non-Null.

Running #panic while swallowed didn't produce any anomalies for me,
either before or after this change.

2 years agoattack/damage by trapper and lurker above
PatR [Mon, 15 Aug 2022 11:14:36 +0000 (04:14 -0700)]
attack/damage by trapper and lurker above

Change trappers and lurkers above to remove digestion damage.  They
fold themselves around rather than swallow the victim.  There were
are lot of places that assumed that an engulfer which is an animal
would swallow and digest the victim.  In hindsight, it might have
been simpler to take the M1_ANIMAL flag off of trappers and lurkers
above.

This adds a new digests() predicate for creatures with AT_ENGL+AD_DGST
(purple worm) and also enfolds() for AT_ENGL+AD_WRAP (both 't'-class
critters).

There are several minor fixes mixed in with this.  I didn't record
them as I went along but the two I remember are
1) if poly'd into a holder and holding on to a monster, the '<' and
   '>' commands refursed to work; release the held creature first
   and then treat those commands as normal;
2) throwing a non-weapon while engulfed by an ochre jelly reported
   "the <item> vanishes into the ochre jelly's /currents/".

This needs a lot more testing.  I found and fixed multiple minor
details before my own testing burned out.

2 years agoChange poison instakill to damage with attrib and maxhp loss
Pasi Kallinen [Mon, 15 Aug 2022 07:46:58 +0000 (10:46 +0300)]
Change poison instakill to damage with attrib and maxhp loss

2 years agoFix a couple latent bugs with initial rings/other charged items
copperwater [Sun, 14 Aug 2022 11:09:35 +0000 (07:09 -0400)]
Fix a couple latent bugs with initial rings/other charged items

These bugs are currently latent only because no role's starting
inventory happens to satisfy the conditions under which it would show
up. This commit contains the xNetHack fixes for them.

Bug 1: if a role received a specific charged ring (versus a random
ring), it would be possible for that ring's charge to be <= 0, since the
code currently only caught this case for random rings. Move that clause
outside the if (UNDEF_TYP) clause.

Bug 2: non-ring oc_charged items of UNDEF_TYP that randomly rolled a
starting charge/enchantment <= 0 would always be enchanted, sometimes
very highly, because their enchantment was getting set to rne(3) by
hitting this case, which is only intended for rings as a comment
indicates. In particular, Archeologists' starting pick-axe would hit
this case after moving it out of the UNDEF_TYP block, but it would also
apply to any role receiving a random tool or weapon-tool at the start
of the game.

2 years agoTurn statushilites on automatically if any are defined
Pasi Kallinen [Sun, 14 Aug 2022 19:32:09 +0000 (22:32 +0300)]
Turn statushilites on automatically if any are defined

2 years agoRemove obsolete find_skates function
copperwater [Sun, 14 Aug 2022 01:09:48 +0000 (21:09 -0400)]
Remove obsolete find_skates function

find_skates was still in use for its one intended case, but objdescr_is
has been around for a few years now and can do just as good a job
without having to hardcode the first and last boots in objects[].

2 years agofix github issue #842 - lamp/lantern feedback
PatR [Sat, 13 Aug 2022 22:55:10 +0000 (15:55 -0700)]
fix github issue #842 - lamp/lantern feedback

Issue reported by GorillaSapiens:  you get notified if a lamp burns
out even if you're blind at the time.

That is intended behavior; you can feel the heat or lack of heat
from a lamp or candle.  But the comment from copperwater pointed out
that you shouldn't be able to feel that for a brass lantern.

This suppresses the "power has run out" feedback if blind at the
time.  However, applying a lantern to turn it on or off still gives
the on/off feedback on the assumption that there's a switch and you
can feel its position.  When hero is blind and lantern is out of
power, trying to turn it on yields "nothing seems to happen".  It's
not completely consistent since you would feel the switch in its On
position but claiming that the lantern is on would be a lie.

The basic on and off messages referred to "lamp" even when using a
brass lantern.  I thought that that had been fixed a long time ago.

Fixes #842

2 years agoCI warning caused by deprecation of ubuntu-18.04 there
nhmall [Sat, 13 Aug 2022 14:08:39 +0000 (10:08 -0400)]
CI warning caused by deprecation of ubuntu-18.04 there

[warning]The ubuntu-18.04 environment is deprecated, consider switching to ubuntu-20.04(ubuntu-latest), or ubuntu-22.04 instead. For more details see https://github.com/actions/virtual-environments/issues/6002

2 years agoa couple of warnings
nhmall [Sat, 13 Aug 2022 13:09:10 +0000 (09:09 -0400)]
a couple of warnings

invent.c: In function 'getobj':
invent.c:1579:29: warning: 'cnt' may be used uninitialized [-Wmaybe-uninitialized]
 1579 |                 if (cnt < 1 || otmp->quan <= cnt)
      |                     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~
invent.c:1529:10: note: 'cnt' was declared here
 1529 |     long cnt;
      |          ^~~

../win/X11/winstat.c: In function 'update_fancy_status_field':
../win/X11/winstat.c:1920:28: warning: declaration of 'active' shadows a global declaration [-Wshadow]
 1920 |             static boolean active = FALSE;
      |                            ^~~~~~
In file included from ../include/hack.h:196,
                 from ../win/X11/winstat.c:36:
../include/wintype.h:180:5: note: shadowed declaration is here
  180 |     active           = 0x001,
      |     ^~~~~~

2 years agoMacros for checking is object artifact
Pasi Kallinen [Fri, 12 Aug 2022 16:37:34 +0000 (19:37 +0300)]
Macros for checking is object artifact

2 years agoBetter feedback for monster falling into a hole
Pasi Kallinen [Fri, 12 Aug 2022 15:17:27 +0000 (18:17 +0300)]
Better feedback for monster falling into a hole

... or a trap door. The trap is immediately identified anyway,
so just name the trap in the message.

2 years agoTurn on menucolors automatically if any are defined
Pasi Kallinen [Fri, 12 Aug 2022 14:34:21 +0000 (17:34 +0300)]
Turn on menucolors automatically if any are defined

2 years agoFix repeating untrapping
Pasi Kallinen [Fri, 12 Aug 2022 09:02:48 +0000 (12:02 +0300)]
Fix repeating untrapping

... or any that use getdir to ask direction.

2 years agoFix Windows compilation
Pasi Kallinen [Thu, 11 Aug 2022 14:07:43 +0000 (17:07 +0300)]
Fix Windows compilation

2 years agominor code cleanup
PatR [Thu, 11 Aug 2022 10:55:17 +0000 (03:55 -0700)]
minor code cleanup

Mostly removing several trailing spaces.

2 years agoRemove comment
Pasi Kallinen [Thu, 11 Aug 2022 05:46:20 +0000 (08:46 +0300)]
Remove comment

2 years agoMonsters "remember" noteleport levels
Pasi Kallinen [Thu, 11 Aug 2022 05:43:37 +0000 (08:43 +0300)]
Monsters "remember" noteleport levels

... using the same hack when zapping themselves: If the level is
no-teleport, the monster will learn of teleport traps, and if
it knows about them, won't try using teleportation again.

2 years agoFixes entries
Pasi Kallinen [Thu, 11 Aug 2022 05:28:15 +0000 (08:28 +0300)]
Fixes entries

2 years agoDocument monmove.c and name temp variables.
Kestrel Gregorich-Trevor [Fri, 21 Jan 2022 21:05:36 +0000 (15:05 -0600)]
Document monmove.c and name temp variables.

This commit expands on comments in dochug() and defines names for
the integer passed between it and m_move(). Hopefully increases readability.

2 years agoPull mind flayer blasts into their own function.
Kestrel Gregorich-Trevor [Fri, 21 Jan 2022 19:48:08 +0000 (13:48 -0600)]
Pull mind flayer blasts into their own function.

The mind blast code was previously a part of dochug().
This commit pulls that code into its own function, and also
happens to eliminate a goto and label with no change in functionality.

2 years agoPiranhas devour corpses.
Kestrel Gregorich-Trevor [Thu, 20 Jan 2022 19:24:37 +0000 (13:24 -0600)]
Piranhas devour corpses.

2 years agoClean up set_apparxy()
Kestrel Gregorich-Trevor [Thu, 20 Jan 2022 18:31:10 +0000 (12:31 -0600)]
Clean up set_apparxy()

This commit removes the gotos from set_apparxy, making it easier to read.
It also cuts out at 1-2 variable assignments on certain calls,
so technically it is an efficiency win as well.

2 years agoAllow monsters to zap wands of teleportation at the player.
Kestrel Gregorich-Trevor [Thu, 20 Jan 2022 17:05:35 +0000 (11:05 -0600)]
Allow monsters to zap wands of teleportation at the player.

According to comments in the code, this feature was disabled
because it never triggered, making it useless. I enabled the code
again, and monsters demonstrated a willingness to zap the player
with wands of teleportation. I am not sure of what exactly changed,
but I think this feature could trigger some interesting situations,
and absolutely deserves to make a comeback.

2 years agolook_here() arguments
PatR [Thu, 11 Aug 2022 01:02:57 +0000 (18:02 -0700)]
look_here() arguments

Add LOOKHERE_NOFLAGS to use instead of 0 for look_here()'s 2nd arg.
Fix the call to look_here() that passed FALSE.

2 years agoShopkeepers hold a grudge against past thieves
Michael Meyer [Tue, 26 Jul 2022 18:31:34 +0000 (14:31 -0400)]
Shopkeepers hold a grudge against past thieves

When you steal from a shop, its shopkeeper will remember you as a thief
and charge you higher prices in the future (as well as be more curt and
less polite in interactions with you, though not outright hostile) even
if you pacify them, or die on the level and revisit it later as a bones
file.  This was an idea aosdict had, and I think it makes sense that a
shopkeeper doesn't forgive and forget, immediately returning to treating
you exactly like anyone else, just because you were terrorized into
paying her back.  Paying a shopkeeper off may cause her to stop actively
attacking you, but it feels like she'd have her eye on you as a known
thief going forward (and maybe would hang up a sign with your picture,
saying something like "DO NOT ACCEPT CHECKS FROM THIS HERO").

This surchage already existed, but since it was tied to active anger
(which typically causes a shopkeeper to quickly abandon their shop to
follow you) it was somewhat rare to see it in action.

I did not implement it here, but one possible further tweak might be to
clear the surcharge if the shopkeeper is pacified via taming magic
(which more-or-less magically brainwashes the target to feel positively
towards the hero) but not if you simply pay your debts.

2 years agoFix: lookaround trap detection
Michael Meyer [Thu, 28 Jul 2022 16:04:34 +0000 (12:04 -0400)]
Fix: lookaround trap detection

Whether a trap exists is independent on the underlying terrain type, so
putting a check for traps in a block structured like

| if (IS_ROCK(levl[x][y].typ) || levl[x][y].typ == ROOM)
|     ; /* do nothing */
| else if (levl[x][y].typ == CORR)
|     do_corridor();
| else if ((trap = t_at(x, y)))
|     avoid_trap(trap);

would mean that the check for traps only happens on terrain other than
normal room and corridor spots.  As a result, it wasn't being evaluated
in most places where traps might actually occur.

Move the test for traps outside of the terrain type evaluation if/else
series, so that it happens independent of terrain (and remove the
'continue' so it doesn't preclue evaluation of the terrain).

Once the rule actually started coming into play, it became clear the
avoid_moving_on_trap message was being printed in cases where the hero
didn't actually stop (i.e. shift-dir runmode, the "if you must" case),
so I also modified the value for that parameter so it will match the
situations where the hero stops running.

2 years agoRestore old behavior for running onto trap
Michael Meyer [Thu, 28 Jul 2022 15:48:05 +0000 (11:48 -0400)]
Restore old behavior for running onto trap

The refactor of domove made it impossible to run onto a trap (or water,
if blind), even in the shift-dir mode where the hero is meant to stop
only upon "hitting a wall or running into something".  I use this
runmode to sprint large distances across the map, and the change to this
behavior meant that it was no longer possible to press shift-dir again
to continue past the trap.  This restores the old behavior of allowing
shift-dir running to carry you onto a trap (though the hero will still
stop before hitting a trap in less breakneck runmodes).

2 years agoUpdate lit corridor display if dark_room toggled
Michael Meyer [Fri, 29 Jul 2022 16:52:16 +0000 (12:52 -0400)]
Update lit corridor display if dark_room toggled

The dark_room option determines whether remembered but unseen waslit
corridor spaces are displayed with S_litcorr or not.  When it is
disabled, a remembered permanently-lit corridor spot will be shown
as "lit corridor" when out of sight.  When it is enabled,
corridors are only shown as lit if they are currently in view.

Toggling this option was not immediately refreshing how corridors on the
map were displayed: an unseen spot shown as a lit corridor because
dark_room was disabled would continue to be shown as a lit corridor
when it was toggled on, until the hero's memory was refreshed by
visiting the spot and then leaving.

Slightly extend the existing function for updating how room spaces are
displayed when dark_room is toggled so that it will update the glyph
used for unseen lit corridors in a similar way.

2 years agoDon't show corridors as lit in #terrain
Michael Meyer [Fri, 29 Jul 2022 16:17:47 +0000 (12:17 -0400)]
Don't show corridors as lit in #terrain

Because back_to_glyph assumes the hero can directly see the spot, when
used for #terrain (e.g. when a spot was covered by a remembered object)
it would display corridors as lit if lit_corridor was enabled.  Instead
of trying to suppress back_to_glyph's S_litcorr result only under
circumstances where it would be unusual, just show all corridor spots
with S_corr, so that none of them appear as "lit corridor".  This
is consistent with what is already done for room spots for #terrain
(S_darkroom is forced to the basic S_room across the board).

2 years agoRefer to non-damaging gas cloud as "steam"
copperwater [Mon, 8 Aug 2022 22:08:38 +0000 (18:08 -0400)]
Refer to non-damaging gas cloud as "steam"

You can create steam clouds that are gray and deal 0 damage when zapping
fire at or over water sources. If you happen to be in the cloud, it
produced the "You are enveloped in a cloud of noxious gas!" line, and
steam isn't noxious.

Other uses of "gas cloud" could have potentially been changed, but I
left them alone.

2 years agoImprove feedback for trying to bribe the watch
Michael Meyer [Wed, 10 Aug 2022 00:57:28 +0000 (20:57 -0400)]
Improve feedback for trying to bribe the watch

Members of the watch can never be bribed, no matter how much gold is
thrown at them, but when a bribe was attempted they would say "that's
not enough" (implying incorrectly some higher amount would be enough to
pacify them).  Also, an already-peaceful mercenary would take on an
unusually aggressive tone when given any amount of gold, giving the
player the same message to "beat it" as when a bribe succeeds in
pacifying them.

Adjust the mercenary bribery code a bit so that a more friendly message
is given if the monster is already peaceful, and so that unbribeable
monsters don't imply they are just not being given enough gold.  I think
the actual effects of bribery shouldn't be affected by this commit, just
the messages/feedback.

2 years agoDescribe engulf attack by animal as "swallowing"
Michael Meyer [Wed, 10 Aug 2022 13:09:02 +0000 (09:09 -0400)]
Describe engulf attack by animal as "swallowing"

Suggested by aosdict: instead of describing all gulp attacks as
"engulfing you", say "The <monster> swallows you whole" for purple worms
(or any other animal engulfer) to visibly differentiate between
engulfing and swallowing.

2 years agoFix: m-prefix looting a container
Michael Meyer [Wed, 10 Aug 2022 13:02:57 +0000 (09:02 -0400)]
Fix: m-prefix looting a container

Using #loot with the 'm' prefix would claim there was nothing to loot
even if the hero was standing on a box, as long as there was no adjacent
monster.  'm' prefix is an explicit request to select a direction so
make it work regardless of whether a monster is there.  Once I did that
I noticed that it was providing no feedback for using '.' or '>' as the
direction if no container was available, so adjust that to give the
"there is nothing here to loot" feedback.

2 years agoRandom item artifact chances
Pasi Kallinen [Wed, 10 Aug 2022 15:18:15 +0000 (18:18 +0300)]
Random item artifact chances

The chance that randomly generated item is an artifact will
now depend on the number of already existing artifacts.

2 years agoMigration-safe monster movement iteration
Pasi Kallinen [Wed, 10 Aug 2022 07:53:43 +0000 (10:53 +0300)]
Migration-safe monster movement iteration

The monster knockback could mess with the monster linked list while
the code was going through it for monster movements. (For example,
a monster knocked back another into a level teleport trap)

Add iter_mons_safe, which first grabs all the monster pointers in
the list into an array, and goes over that array instead of relying
on the "next monster" pointer. This is possible because dead monsters
are not removed from the linked list until after all the monsters
have moved.

Testing is very minimal, and I'm not sure the vault guard check
for migration is correct - it should probably check for more states?

Also the iterator could be improved by not continually allocating
and freeing the monster pointer array.

2 years agofix issue #836 - engulfing mounter hero
PatR [Tue, 9 Aug 2022 23:22:50 +0000 (16:22 -0700)]
fix issue #836 - engulfing mounter hero

Reported by copperwater:  if an engulfer swallowed a mounted hero,
odd things could happen if the hero dismounted.  The steed would be
silently expelled and float-down flooreffects were attempted.

It turns out that if the engulfer is classified as an animal (so
purple worm, lurker above, trapper), the hero got "plucked from
<steed>'s saddle" and was forcibly dismounted prior to completing
the engulf operation, but non-animals (vortices, air elemental,
ocher jelly, Juiblex) swallowed the hero+steed intact.  The most
straightforward fix to dismounting-while-engulfed issues is to change
engulfing to always pluck the hero from the saddle even when the
engulfer isn't an animal.

If there's no room on the level to place the former steed, it gets
killed off.  I looked at changing that to put the steed into limbo,
waiting to migrate back to the current level if hero leaves and
subsequently returns, but that breaks movemon()'s assumption that
when monsters are in the process of moving, only the currently moving
one can be taken off the fmon list to be placed on migrating_mons.

[The recently added monster knockback code violates that assumption
too when knocking the victim into a level changer trap.  It needs to
be fixed in one fashion or another.]

2 years agoCommand repeating by using cmd queues
Pasi Kallinen [Mon, 8 Aug 2022 11:02:59 +0000 (14:02 +0300)]
Command repeating by using cmd queues

This replaces the old pushq/saveq arrays (which were used to save
the keys pressed by the user for repeating a previous command)
with a new command queue.  This means there's no hard-coded limit
to the saved keys, and it can repeat extended commands which are
not bound to any key.

2 years agofix #K3656 - chest in pit
PatR [Sun, 7 Aug 2022 23:02:44 +0000 (16:02 -0700)]
fix #K3656 - chest in pit

Using #loot while in a pit allows looting containers in that pit.
Using open and specifying the hero's spot when not in a pit allows
looting containers at hero's spot.  But using open while in a pit
complained about not being able to reach out of the pit before player
had a chance to give hero's spot at the place of interest, so did not
allow looting any container there.

Get a target spot before rejecting use of 'open' while in a pit.
The alternate prompt might be tty-centric.

2 years agoMinor ranged attack tweak
Pasi Kallinen [Sun, 7 Aug 2022 19:31:41 +0000 (22:31 +0300)]
Minor ranged attack tweak

Make monsters with magic and gaze attacks avoid hero,
just like spitters and breathers already did.
Some small code cleanup related to the ranged attacks.

2 years agoFix: command counts greater than 2
Michael Meyer [Thu, 4 Aug 2022 17:53:12 +0000 (13:53 -0400)]
Fix: command counts greater than 2

Entering a count to repeat an action stopped working for counts greater
than 2 after 93db2a8: the unconditional call to reset_cmd_vars at the
top of rhack was resetting many more variables than had previously been
cleared at that point, including g.multi (which in this context tracks
how many more times the requested action should be repeated).  As a
result any count would perform the requested action twice at most.
Reduce the list of variables zeroed out at the start of rhack back to
what it was before 93db2a8.

2 years agoFix: get_count and altmeta
Michael Meyer [Thu, 4 Aug 2022 17:34:06 +0000 (13:34 -0400)]
Fix: get_count and altmeta

M-<key> shortcuts with altmeta enabled weren't working when preceded by
a count (e.g. 2 M-j for "jump twice"): g.program_state.getting_a_command
determined whether <esc> should be read as staring a potential meta key
combination, and was being reset by readchar on the first digit entered
without being reactivated for subsequent input.  As a result, by the
time the player entered the actual command to be modified by the count,
readchar wasn't bothering to look for M-<key> sequences.

2 years agoGive pyrolisk a bite attack
Pasi Kallinen [Sat, 6 Aug 2022 07:53:31 +0000 (10:53 +0300)]
Give pyrolisk a bite attack

2 years agoMake pyrolisk gaze effect match other fire effects
Pasi Kallinen [Sat, 6 Aug 2022 07:46:27 +0000 (10:46 +0300)]
Make pyrolisk gaze effect match other fire effects

2 years agoPyrolisk stops gazing if it sees you resist
Pasi Kallinen [Sat, 6 Aug 2022 07:45:11 +0000 (10:45 +0300)]
Pyrolisk stops gazing if it sees you resist

2 years agoMake hitting with a wielded potion hit you far less
Pasi Kallinen [Sat, 6 Aug 2022 05:28:36 +0000 (08:28 +0300)]
Make hitting with a wielded potion hit you far less

Hitting a monster with a wielded potion of paralysis or sleep
was practically useless, because it almost always also hit you.
Negate the chance and make it depend on your dex.

2 years agomore abandoned migrations when entering endgame
PatR [Fri, 5 Aug 2022 23:55:05 +0000 (16:55 -0700)]
more abandoned migrations when entering endgame

The earlier commit just removed monsters from migrating_mons and left
them orphaned.  Also it ignored migrating objects.

Actually release the monsters that can no longer arrive at their
migration destinations.  Release their inventories too.

Release objects that can no longer arrive at migration destinations.

2 years agomore Wizard of Yendor
PatR [Fri, 5 Aug 2022 22:05:10 +0000 (15:05 -0700)]
more Wizard of Yendor

The earlier attempt to prevent the Wizard from immediately teleporting
(and giving a vanishes and reappears message before the player has had
a chance to see the level) when you arrive on the Plane of Earth ended
up being worse.  He just stayed put, so no vanish and reappear but no
other activity either.

2 years agodiscard migrating monsters when entering endgame
PatR [Fri, 5 Aug 2022 21:36:11 +0000 (14:36 -0700)]
discard migrating monsters when entering endgame

When the hero enters the planes branch, all the rest of the dungeon
gets discarded since it can no longer be reached.  At the time that
that takes place, throw away any migrating monsters waiting to arrive
on any of those levels.

2 years agoWizard of Yendor entering endgame
PatR [Fri, 5 Aug 2022 21:22:27 +0000 (14:22 -0700)]
Wizard of Yendor entering endgame

When entering the Plane of Earth (or level teleporting directly to
another endgame level in wizard mode), if the Wizard came off the
migrating_mons list instead being re-created from scratch, he would
be placed randomly on the level instead of next to the arrival point.
If his mstrategy field still had the STRAT_WAITFORU bit set and you
didn't move to where he could see you, he might never come after you,
at least until some future harassment event chose 'resurrect'.

2 years agoIncrease buffer size for saving menucolors
Pasi Kallinen [Fri, 5 Aug 2022 15:19:02 +0000 (18:19 +0300)]
Increase buffer size for saving menucolors

The '"regex"=color&attr' is max BUFSZ, so prefixing with MENUCOLOR=
and adding a newline overflowed the temp buffer when saving the
menucolors.

2 years agoquiet a warning that appeared today
nhmall [Fri, 5 Aug 2022 14:31:54 +0000 (10:31 -0400)]
quiet a warning that appeared today

src/cmd.c(2867) : warning C4701: potentially uninitialized local variable 'win' used

2 years agoDon't give fake Demonbanes to angels
Pasi Kallinen [Fri, 5 Aug 2022 10:43:36 +0000 (13:43 +0300)]
Don't give fake Demonbanes to angels

Demonbane is a mace now, so trying to generate a long sword made
fake Demonbanes. Just don't give Demonbane at all to random angels.

2 years agoSave changed key binds to config file
Pasi Kallinen [Fri, 5 Aug 2022 10:07:26 +0000 (13:07 +0300)]
Save changed key binds to config file

2 years agoExperimental #saveoptions command
Pasi Kallinen [Fri, 5 Aug 2022 07:27:43 +0000 (10:27 +0300)]
Experimental #saveoptions command

Add a #saveoptions extended command, to allow saving configuration
settings from within the game. This is still highly experimental,
and gives plenty of warnings before asking to overwrite the file.

Lack of option saving is one of the biggest complaints new players
have, so this should help with it.  More experienced players with
highly customized config file should not use this feature, as it
completely rewrites the file, removing all comments and non-config
lines.

2 years ago'O' tweaks
PatR [Thu, 4 Aug 2022 23:53:31 +0000 (16:53 -0700)]
'O' tweaks

Reformat most of optlist.h.  In the process, fix a couple of
conditionally included items which were mis-classified as set_in_game
when excluded.  Add "permablind" as an alias for the "blind" option.
[I don't understand the size value of 70 for #if BACKWARD_COMPAT
{curses,DEC,IBM,Mac}_graphics but didn't alter that.]

Include 'pickup_types' in the behavior section; it's useful from
turn 1 and does get adjusted from time to time during play.

Include 'color' in the map section, but hide it for wc_tiled_map.

Include 'showscore' and 'statuslines=2|3' in the status section.
I didn't rebuild with SCORE_ON_BOTL enabled so the showscore part
hasn't been tested.

2 years agom_digweapon_check()
PatR [Thu, 4 Aug 2022 21:26:12 +0000 (14:26 -0700)]
m_digweapon_check()

Some streamlining that I left out of the recent commit for maybe
avoiding exclamation mark when a monster wields a tool or weapon
to dig or chop.

2 years agocondition mask option's menu
PatR [Thu, 4 Aug 2022 21:09:19 +0000 (14:09 -0700)]
condition mask option's menu

Not related to changes to 'O' but noticed because of those.  The menu
for selecting which status conditions to include on the status line
starts with a special entry for sorting that shouldn't be selected by
the select all and toggle all actions.

2 years agoSimple options: guard against boolean being null
Pasi Kallinen [Thu, 4 Aug 2022 17:08:19 +0000 (20:08 +0300)]
Simple options: guard against boolean being null

2 years agoFix roguesymset substitution in options
Pasi Kallinen [Thu, 4 Aug 2022 14:05:26 +0000 (17:05 +0300)]
Fix roguesymset substitution in options

2 years agoRudimentary key rebinding in game options
Pasi Kallinen [Thu, 4 Aug 2022 11:00:47 +0000 (14:00 +0300)]
Rudimentary key rebinding in game options

Currently shown only in the full options list, as it's not
quite complete. (For example, it doesn't handle movement commands,
or the getpos keys)

2 years agoNew options: swap symset to roguesymset on rogue level
Pasi Kallinen [Thu, 4 Aug 2022 06:48:58 +0000 (09:48 +0300)]
New options: swap symset to roguesymset on rogue level

2 years agoMinor tweaks to post-option screen refresh
Pasi Kallinen [Thu, 4 Aug 2022 06:39:21 +0000 (09:39 +0300)]
Minor tweaks to post-option screen refresh

2 years agoMore Guidebook formatting
Michael Meyer [Thu, 4 Aug 2022 06:01:19 +0000 (09:01 +0300)]
More Guidebook formatting

2 years agoFlush screen when toggling map-related option
Pasi Kallinen [Wed, 3 Aug 2022 16:57:57 +0000 (19:57 +0300)]
Flush screen when toggling map-related option

2 years agoAdd optionsfull extended command
Pasi Kallinen [Wed, 3 Aug 2022 16:18:41 +0000 (19:18 +0300)]
Add optionsfull extended command

This is the previous, full options list. Adding it as
an extended command, so users can do

BIND=O:optionsfull

to go back to the old behaviour.

2 years agoGuidebook fixes/formatting
Michael Meyer [Wed, 3 Aug 2022 13:41:11 +0000 (16:41 +0300)]
Guidebook fixes/formatting

2 years agoUser-friendly options menu
Pasi Kallinen [Wed, 3 Aug 2022 11:07:17 +0000 (14:07 +0300)]
User-friendly options menu

Make the default options menu only show the most important
options, split into categories. The full, traditional menu
can be accessed by using the m-prefix.

2 years agofix github issue #832 - "nethack --nethackrc=file"
PatR [Tue, 2 Aug 2022 22:07:20 +0000 (15:07 -0700)]
fix github issue #832 - "nethack --nethackrc=file"

Issue reported by schauveau:  when the command line specifies the
'--nethackrc=file' option (Unix, including linux and OSX, only) the
value of 'file' was set in pointer g.cmdline_rcfile and the options
parsing made a copy of that pointer rather than of what it pointed
to, then freed g.cmdline_rcfile before using the copy.  So it ended
up using a pointer to freed memory.

Stick with copying the pointer but defer freeing the original until
after its copy is no longer needed.

Fixes #832

2 years agoReset map x/y start/size in single place
Pasi Kallinen [Tue, 2 Aug 2022 14:02:25 +0000 (17:02 +0300)]
Reset map x/y start/size in single place

2 years agoWindows: Default boulder symbol to 0
Pasi Kallinen [Tue, 2 Aug 2022 10:06:24 +0000 (13:06 +0300)]
Windows: Default boulder symbol to 0

Set the boulder symbol to 0 in the Windows config template file.

2 years agoPrevent walking into water or lava by default
Pasi Kallinen [Tue, 2 Aug 2022 06:15:28 +0000 (09:15 +0300)]
Prevent walking into water or lava by default

Make paranoid_confirmation:swim the default, because it is far more
beginner friendly.

2 years agoPotions of healing, extra healing, and lifesaved heal amount
Pasi Kallinen [Mon, 1 Aug 2022 22:11:11 +0000 (01:11 +0300)]
Potions of healing, extra healing, and lifesaved heal amount

Make potions of healing and extra healing more useful in the early
game, by upping the average amount of health restored.

Make amulet of life saving restore between 60 and 170 health,
depending on constitution. Previously life saving was the best way
to heal back up to full, even if you had thousands of hp.

2 years agoMake explosions burn monster armor
Pasi Kallinen [Mon, 1 Aug 2022 19:30:43 +0000 (22:30 +0300)]
Make explosions burn monster armor

2 years agoWindows stubs.c follow-up
nhmall [Mon, 1 Aug 2022 06:03:38 +0000 (02:03 -0400)]
Windows stubs.c follow-up

2 years agoWindows stubs.c fix
nhmall [Mon, 1 Aug 2022 05:52:55 +0000 (01:52 -0400)]
Windows stubs.c fix

2 years agodon't negate new moon with a lizard corpse
PatR [Sun, 31 Jul 2022 23:12:40 +0000 (16:12 -0700)]
don't negate new moon with a lizard corpse

The only effect of a new moon was to make hearing a cockatrice's
hissing (whichs happens with 1 in 3 chance) always start the turn to
stone sequence instead just having a 1 in 10 chance to do so, but
that was negated by carrying a lizard corpse.

Keep the hiss-always-starts-petficiation part and remove the
carrying-a-lizard-corpse-negates-that part.  So the effect of a new
moon no longer gets controlled by the contents of hero's inventory.

2 years agomonster eating stalker corpse
PatR [Sun, 31 Jul 2022 01:30:16 +0000 (18:30 -0700)]
monster eating stalker corpse

Extend 8d2407f1f21cc60ac99e08f00233975b32321eef
"Monsters can gain resistances by eating corpses"
to include invisibility from stalker corpses.

2 years agodwarf + pick-axe feedback
PatR [Fri, 29 Jul 2022 23:11:35 +0000 (16:11 -0700)]
dwarf + pick-axe feedback

When you see a dwarf wield a pick-axe,
|The dwarf wields a pick-axe!
avoid the exclamation point if that dwarf just intends to dig.
|The dwarf wields a pick-axe.

2 years ago\#wizkill tweak
PatR [Fri, 29 Jul 2022 22:55:53 +0000 (15:55 -0700)]
\#wizkill tweak

If wizard mode player targets 'I' with #wizkill and there is no
monster there, remove that 'I'.

2 years agofixes entry for PR #796 - MUSE digging
PatR [Fri, 29 Jul 2022 22:08:27 +0000 (15:08 -0700)]
fixes entry for PR #796 - MUSE digging

Pull request from entrez:  nothing happened--except spending a wand
charge--if a monster zapped a wand of digging down at a spot where
holes can't be dug.  If a pit can be dug there, dig one and then trap
the monster in it.  No-op if a pit or other trap is already present.

Closes #796

2 years agoLet fleeing monsters dig pits in undiggable floor
Michael Meyer [Thu, 9 Jun 2022 16:48:41 +0000 (12:48 -0400)]
Let fleeing monsters dig pits in undiggable floor

When the hero zaps a wand of digging down in an undiggable level, it
creates a pit.  When a fleeing monster did the same thing, it had no
effect.  Bring this closer to the behavior experienced by the hero: if a
monster tries to use a wand of digging to create a hole in an undiggable
floor, a pit will be made (and the monster will fall into it, if not a
flyer).

2 years agoGreased saddle is slippery
Pasi Kallinen [Fri, 29 Jul 2022 09:27:08 +0000 (12:27 +0300)]
Greased saddle is slippery

2 years agogithub issue #828 - confuse monster effect when \
PatR [Thu, 28 Jul 2022 20:42:35 +0000 (13:42 -0700)]
github issue #828 - confuse monster effect when \

hero is invisible without being able to see invisible

Issue reported by EndHack:  you could see your hands glow red when
reading a scroll of confuse monster or casting the spell of confuse
monster even if you were unable to see yourself.

Switch to the blind feedback (tingling instead of glowing red) if
invisible without see invisible.

Also, have uncursed scroll or low skilled spell confer 1..2 turns
of glowing hands instead of always just 1.  (Blessed/highly skilled
stays at 2..9 turns.)

Fixes #828

2 years agoMake failed polearming or jumping return correct value
Pasi Kallinen [Thu, 28 Jul 2022 19:10:01 +0000 (22:10 +0300)]
Make failed polearming or jumping return correct value

2 years agoupdate 'mydogs' comment
PatR [Thu, 28 Jul 2022 15:16:23 +0000 (08:16 -0700)]
update 'mydogs' comment

2 years agoGrappling location feedback
Pasi Kallinen [Thu, 28 Jul 2022 10:50:57 +0000 (13:50 +0300)]
Grappling location feedback

2 years agoSpell location feedback
Pasi Kallinen [Thu, 28 Jul 2022 10:15:37 +0000 (13:15 +0300)]
Spell location feedback

Casting some spells at high enough skill allows picking for
the spell location. Say which locations are out of range
when picking the location.

2 years agofix broken migrating monster arrival
PatR [Thu, 28 Jul 2022 07:51:18 +0000 (00:51 -0700)]
fix broken migrating monster arrival

If the first monster on the migrating_mons list couldn't arrive and
was put back on the list to try again later, 'later' would happen
immediately and the program looped forever trying and failing to
bring that monster to the level.

Defer repeat attempts at migration until losedogs() has been through
the whole migrating_mons list.  mon_arrive() now populates a new
list called failed_arrivals and losedog() moves its contents, if any,
to migrating_mons prior to returning.

2 years ago\#migratemons
PatR [Thu, 28 Jul 2022 07:34:31 +0000 (00:34 -0700)]
\#migratemons

Extend the wizard mode #migratemons command.  Instead of just asking
for how many random new monsters to be sent to the next level, first
describe how many migrating monsters there already are, then if that's
non-zero ask whether to show them.  Choices are 'c' for ones scheduled
to arrive at the current level if hero leaves and returns, 'n' for
ones aimed at the next level, 'o' for ones that aren't in either of
those two categories, 'a' for all migrating monsters, and 'q' to skip.
After that, ask how many to make for the next level.  The default for
that is still zero.

For the 'o' and 'a' cases, they're displayed in the reverse order of
when they went onto migrating_mons, not sorted by destination level.

2 years agoHoles and trapdoors have predetermined exit level
Pasi Kallinen [Wed, 27 Jul 2022 19:51:13 +0000 (22:51 +0300)]
Holes and trapdoors have predetermined exit level

Same hole/trapdoor will always take you to the same level.

2 years agocomment typofix
Pasi Kallinen [Wed, 27 Jul 2022 10:13:49 +0000 (13:13 +0300)]
comment typofix