Commit Graph

12045 Commits

Author SHA1 Message Date
PatR
f6e60c7516 fix bullwhip-induced panic
While testing some corpse/statue name manipulation changes I managed
to trigger a panic during end-of-game cleanup.  Using a bullwhip to
snatch a wielded cockatrice corpse from a monster's inventory into
the hero's inventory and being turned to stone due to lack of gloves
took the corpse out of the monster's inventory but didn't place it
anywhere.  If no life-saving took place, it led to an "obj_is_local"
panic during timer cleanup when freeing the level.

This patch includes some of the stuff I've been testing rather than
just the fix for the panic (which is the very last bit of the diff).
2021-06-15 18:42:30 -07:00
PatR
7088f6a846 fix obj_pmname() fix
The omonst 'data' pointer is always Null so taking mons[].pmname from
saved traits would be skipped all the time.
2021-06-15 14:13:55 -07:00
nhmall
fe4822829c fixes37.0 entry update 2021-06-15 16:30:07 -04:00
nhmall
5ac913e035 null pointer dereference in do_name.c
fixes #534
2021-06-15 15:49:31 -04:00
PatR
57e970b227 mon_pmname(), obj_pmname()
Revive some code from 5 or so years ago that's been sitting in a
defunct local git branch.  There are a couple of references to
figurines having gender; the old, unfinished code did already have
support for that, the current code doesn't.  It probably won't take
much effort to add it in but I want to get this first part out of
the way.

Replace some of the
pmname(mon->data, Mgender[mon]) calls with simpler
mon_pmname(mon) and some
pmname(&mons[statue->corpsenm],
   (statue->spe & CORPSTAT_GENDER) == ... ? ... : ...) with simpler
obj_pmname(obj).  There are other instances of them which haven't
been changed but could be.
2021-06-12 03:07:30 -07:00
PatR
234eceae60 corpse/statue gender fix when wishing
Wishing for "{corpse,statue} of gnome queen" would produce a corpse or
statue of a gnome queen, but wishing for "gnome queen {corpse,statue}"
would produce corpse or statue of a gnome king.  The matching for
gender-specific monster name was only passing back the corresponding
gender when an exact match occurred (which happens for "foo of pmname"
but not for "pmname foo" since 'pmname' through end of string is what
the name_to_mon() matching code is looking at).
2021-06-12 02:25:16 -07:00
nhmall
39a0c5ee38 nethack --showpaths output tweak
Don't display a portable_device_path in --showpaths output if it is
empty or not being used.
2021-06-10 12:14:36 -04:00
PatR
38d2b3afc2 tribute update: Hogfather
Add three new passages for Hogfather, bringing total to 13.
2021-06-09 16:45:37 -07:00
nhmall
3af88b8802 Follow-up to earlier warning correction with Microsoft compiler
The earlier warning is architecture-dependent.

The warning showed up under an x64 build, but not an x86 build.
The __unaligned keyword is not supported under an x86 build.

Refine the preprocessor conditional.
2021-06-08 21:51:55 -04:00
PatR
cfc4f24c8e issue #531 followup
Set gender before creating monster rather than after the fact
to force display to show it correctly.
2021-06-08 16:38:43 -07:00
nhmall
710efe4175 Microsoft compiler warning building tile2bmp.c
..\win\share\tile2bmp.c(234): warning C4366: The result of the unary '&'
operator may be unaligned
2021-06-08 14:38:47 -04:00
nhmall
ca7b1d5df0 another nhsetup.bat tweak 2021-06-08 14:15:36 -04:00
nhmall
e6d9e6be0b no need to check vs version in nhsetup.bat 2021-06-08 13:56:02 -04:00
PatR
04a8ddcce1 fix github issue #531 - genderless corpses
Dead monsters that had traits saved with the corpse would revive as
the same gender, but ordinary corpses revived with random gender so
could be different from before they got killed.

Since corpses of monsters lacked gender, those for monsters with
gender-specific names were described by the neuter name.

This is a fairly big change for a fairly minor problem and needs a
lot more testing.

Fixes #531
2021-06-08 03:43:46 -07:00
PatR
14b2330fd6 curses color cleanup
The color handling changes for curses left a set of variables
unused, so get rid of them.
2021-06-06 15:23:39 -07:00
PatR
e20dd2e760 fix github issue #530 - weapon skill enlightenment
^X feedback and end of game disclosure reported
 Your two weapon skill {is,was} [also] limited by being <skill rating>
 with with <secondary weapon>.
when the skill rating for the secondary weapon is/was less than the
skill rating for two-weapon combat.  The corresponding message for
primary weapon did not duplicate the word "with".

Fixes #530
2021-06-06 13:38:49 -07:00
Pasi Kallinen
97e58a4fdc Change autopickup and color default values
Change the default value of autopickup to off. Having it on is
harmful for new players, making them very easily burdened.
We can't expect new players to know how to configure
pickup_types, pickup_burden, and pickup exceptions.

Change the default value of color to on. We can safely assume
new users have a terminal that supports color, and most people
want color.
2021-06-06 19:25:49 +03:00
PatR
41eecdf6b3 curses menu: support backspace/delete for counts
Have curses call the core get_count() routine instead rolling its
own so that backspace and delete are supported.  That part was
trivial to accomplish.  Unfortunately it brought the disappearing
menu phenomenon back so it became more complicated overall.
2021-06-06 05:54:53 -07:00
PatR
0280006d76 fix #K3357 - curses menu disappears
This fixes the disappearing menu, but not curses menu count entry
failing to honor backspace/delete.  Entering two or more digits
to get a "Count:12" message, followed by non-digit which removes
that, resulted in the menu for apply/loot in-out container operation
vanishing while it was still waiting for a choice.  (Typing a choice
blindly did work.)

The code intended to handle this.  I don't understand why refresh()
wasn't working.  Reordering stuff didn't help until I changed that
from refresh() to wrefresh(win).

The original Count:123 display was limited to 25 characters and
menus to half the main window, so they didn't overlap.  I made the
count display wider--because it is now also used for 'autodescribe'
feedback when moving the cursor around the map--so made something
that originally was impossible become possible.  One line of the
menu does get erased while "Count:" is displayed, but then gets put
back by the wrefresh().
2021-06-05 16:11:50 -07:00
PatR
b8b95718d7 fix pull request #527 - cursed levitation
The stair handling reorganization changed drinking a cursed potion
of levitation to only check whether stairs up existed on the level
instead of whether the hero drank the potion while at their spot.
That resulted in always attempting to go up and then getting "you
can't go up here" when not at stairs instead of the intended "you
hit your head on the ceiling".

Fixes #527
2021-06-05 15:37:03 -07:00
PatR
60cc48890b fix pull request #526 - 'menucolor' help message
being given when it shouldn't be.  A change for perm_invent handling
back in March screwed up the if/then/else logic for code executed
when finishing MENUCOLOR manipulation via the 'O' command.  That
resulted in the reminder to set menucolors to True being given even
when it was already True if perm_invent happened to be False.

I noticed this myself recently, then neglected to investigate it or
even write it down anywhere.

Fixes #526
2021-06-05 15:17:55 -07:00
Patric Mueller
5c15ca1002 curses: remove unnecessary special handling for dark gray
On terminals with at least 16 colors there should be no need for special
handling dark gray.

The curses code uses COLORS < 16, COLORS <= 16, COLORS > 16, or COLORS >= 16
at several places although I'm not sure if they are correct or which could
possibly be off-by-one errors.

But realistically in this case, we only need to distinguish between 8 color
terminals and terminals supporting more than 8 colors as this will mean the
terminal supports at least 256 colors.
2021-06-05 14:38:41 +02:00
Patric Mueller
6e7f1bc1f0 curses: don't change the terminal's default colors
The curses port changed some of the basic 8 terminal colors and all 8 bright
colors on terminals supporting changing colors.
2021-06-05 14:38:13 +02:00
nhmall
70925807f6 nuget restore task 2021-06-04 23:01:49 -04:00
nhmall
0305a14a27 windows substitution error in gcc Makefile 2021-06-04 21:46:03 -04:00
PatR
e7cc458225 a few formatting bits for zap.c 2021-06-04 15:51:36 -07:00
nhmall
7439c8b060 windsys.c name tidbit 2021-06-04 08:51:42 -04:00
nhmall
4c3078041d Merge branch 'NetHack-3.7' of https://rodney.nethack.org:20040/git/NHsource into NetHack-3.7 2021-06-04 08:49:47 -04:00
nhmall
631e80c47a msdos Install.dos tidbit 2021-06-04 08:49:20 -04:00
Pasi Kallinen
8849f66dae Don't bind quit to any key by default
Quit is not a commmand you usually need very often, and generally
don't want to use by accident.

Apparently, on Spanish keyboard layout, n-with-tilde is interpreted
by the Windows NetHack as M-q, and the key is next to l. Loot also
asks for confirmation, just like quit.

Prevent stuff like this by not binding the quit command to any key.
2021-06-04 09:13:30 +03:00
nhmall
0fcc151706 cron daily Files update 2021-06-04 00:27:20 -04:00
nhmall
80d3178d25 windows doc update tidbit 2021-06-04 00:24:46 -04:00
nhmall
254c6c55f5 Windows build warning and Makefile update
.\hack.c(2657): warning C4389: '!=': signed/unsigned mismatch
Visual Studio autodetection update for Makefile.msc
2021-06-04 00:14:37 -04:00
nhmall
d27c507c16 pipelines update 2021-06-04 00:01:37 -04:00
nhmall
91ab71f0f9 windows and visual studio follow-up bit 2021-06-03 23:43:32 -04:00
nhmall
0a10bd632d change references from winnt to windows
rename sys/winnt to sys/windows
move vs (visual studio) folder out of win/win32 and into sys/windows
rename include/ntconf.h to include/windconf.h
rename winnt.c to windsys.c
place visual studio projects into individual subfolders.

This will hopefully resolve GitHub issue #484 as well.
2021-06-03 23:26:00 -04:00
PatR
acfbf20958 unix/Makefile.top fetch-Lua bit
% make spotless
% sh sys/unix/setup.sh sys/unix/hints/macOS.2020
% make fetch-Lua

worked, but the last ended with

|rm include/nhlua.h
|rm: include/nhlua.h: No such file or directory
|make: [fetch-Lua] Error 1 (ignored)

which might frighten skittish users (like me).  Check whether the
constructed header file exists (so is assumed to be for an earlier
Lua version) and only delete it in that case.  No more scary report
of benign failure when it isn't there (after 'make spotless' or for
brand new source setup).

Also, some time ago we came to the conclusion that 'if [ ]' was an
extension for GNU 'bash' and wouldn't work with some older actual
'sh' implementations.  This replaces the one post-3.6 instance of
|if [ ! -d foo ] then bar; fi
in Makefile.top with
|if test -d foo; then true; else bar; fi
Testing was successful but done with bash rather than an old sh. :-}
2021-06-02 17:13:56 -07:00
nhmall
5c95603a82 Makefile command echo suppression 2021-06-02 19:21:37 -04:00
nhmall
e69808987e support for build with current Lua version 5.4.3
On some platforms this may require:
	make spotless
	make fetch-lua

I did attempt to force a reminder message about the latter to
Makefile.top this time, and hope that works correctly for everyone.
2021-06-02 19:12:47 -04:00
PatR
9e59977c79 fix pull request #521 - valk+warrior alignment
Valkyrie player monster was set to be chaotic even though valk
hero is lawful by default and can also be neutral but not chaotic.
Change it to be lawful.  Warrior quest monsters attending leader
were also chaotic; change to lawful to match revised valk.  If
hero is a neutral valk then both the player monster and warriors
get changed to neutral at start of game (and stay that way even
if hero changes alignment).  The leader defaults to neutral but
gets changed to lawful for lawful valk hero.

Attentdant quest monsters with the healer leader were lawful but
if they gain enough experience they get promoted to healer, so
make them neutral like the latter.

I've added some miscellaneous comments and done a small amount of
reformatting.  Comment about alignment changing in bones applies
to all roles that can be played with different alignments, not
just to valkyries.  It isn't new; I just thought that it ought to
be mentioned somewhere.

Fixes #521
2021-06-01 17:14:50 -07:00
PatR
ffddb3ecf9 append_str(pager.c) again
More for issue #524.

The revised append_str() was still vulnerable to unsigned subtraction
overflowing from small negative value to huge positive one, if caller
ever passed an outbuf buffer which already had more than BUFSZ
characters in it.

Also the semantics were changed.  If there wasn't room for the whole
" or "+string to be appended, it used to add as much as would fit.
The revised version changed that to all-or-nothing.  This changes it
back, although players will probably never know the difference.
2021-05-31 15:28:19 -07:00
PatR
6fb8434ec9 Tribute: Feet of Clay
Add a page citation for passage #1 and change the wording of that
passage to match the book:  the second "does not need" should be
"doesn't even need".

Also make the comments about various added passages (for other
books) be more consistent.
2021-05-31 07:59:12 -07:00
nhmall
174cd59616 potential buffer overflow in append_str
fixes #524
2021-05-31 10:21:44 -04:00
PatR
53888a713c add ^ and " choices to / command
Like /m for nearby monsters and /O for all objects, implement /^
and /" to view a list of nearby traps or all known traps.  Only
lists discovered traps (or mimics immitating traps, or detected
door or chest traps iff still shown as such on map), but lists
map traps even when an object or monster at the same location is
blocking view of them.

For traps on the Water and Air levels that have been mapped, they
will only be listed when within line of sight so that this feature
can't be used to track portal location as it moves around.  However,
when within line of sight it does allow the portal to be recognized
if that has become covered.
2021-05-30 17:31:47 -07:00
PatR
494b374e12 whatis / quick-whatis for '^'
When using '//' or ';' to examine the map and player uses '^' to
move the cursor to the next displayed trap, have cursor go to
locations containing webs, the vibrating square, or other non-'^'
trap when such is the next trap symbol up.  Otherwise looking at
webs is very tedious because '"' is treated as a look-at command
rather than than a target symbol.
2021-05-30 01:31:54 -07:00
PatR
0fda8504bb sp_lev.c reformatting
Mostly reformatting but fixes a bug in mapfrag_free(); would matter
if the same map fragment gets freed a second time.
2021-05-30 01:01:01 -07:00
PatR
72866e2252 special level loading error
For the baalz 'lit=0' fix, I first tried 'lit=false'.  That isn't
supported and triggered an error, but the error reporting passed
a null pointer to sprintf() for a %s argument.  OSX's stdio shows
"null" instead of crashing in that situation; most implementations
wouldn't be so forgiving.

It intends to complain about "false" but that won't work if the
unexpected value doesn't get put into the lua table.  I don't know
how to fix that aspect of this.  This fix just avoids passing a
null pointer to sprintf.  Plus some miscellaneous reformatting.
2021-05-29 13:34:32 -07:00
PatR
7f2620b98c fix pull request #523 - lighting on baalz level
Details for baalz level are different from other levels and that
unintentionally gave it a chance to be lit.  Force it to be unlit.

Fixes #523
2021-05-29 13:33:15 -07:00
PatR
825314c040 tribute update: Maskerade
Accept "novel named Masquerade" when wishing for Maskerade.

Add four new passages, bringing total to 13.
2021-05-26 13:19:36 -07:00
Pasi Kallinen
a71482af71 Check genocided zombies before raising the zombified corpse
Fixes #520
2021-05-26 09:02:38 +03:00