]> granicus.if.org Git - nethack/log
nethack
3 years agocomment bit
nhmall [Fri, 28 Jan 2022 14:31:30 +0000 (09:31 -0500)]
comment bit

3 years agoMerge branch 'NetHack-3.7' of https://rodney.nethack.org:20040/git/NHsource into...
nhmall [Fri, 28 Jan 2022 12:50:46 +0000 (07:50 -0500)]
Merge branch 'NetHack-3.7' of https://rodney.nethack.org:20040/git/NHsource into NetHack-3.7

3 years agoCI mingw build should now invoke compile via gcc
nhmall [Fri, 28 Jan 2022 12:49:41 +0000 (07:49 -0500)]
CI mingw build should now invoke compile via gcc

3 years agoCancellation explodes magical traps
Pasi Kallinen [Fri, 28 Jan 2022 06:30:08 +0000 (08:30 +0200)]
Cancellation explodes magical traps

3 years agomingw rc and lua version
nhmall [Fri, 28 Jan 2022 05:08:02 +0000 (00:08 -0500)]
mingw rc and lua version

3 years agoCI mingw build follow-up
nhmall [Fri, 28 Jan 2022 04:00:49 +0000 (23:00 -0500)]
CI mingw build follow-up

3 years agoupdate CI build for mingw
nhmall [Fri, 28 Jan 2022 03:54:03 +0000 (22:54 -0500)]
update CI build for mingw

3 years agoupdate male valkyrie tile
PatR [Fri, 28 Jan 2022 00:15:07 +0000 (16:15 -0800)]
update male valkyrie tile

Basic stereotypical rendering:  shortens the hair and adds a beard;
removes the large, thin red X.  Needed when a valkyrie puts on an
amulet of change.

3 years agoX11 topten display
PatR [Fri, 28 Jan 2022 00:11:22 +0000 (16:11 -0800)]
X11 topten display

Make the same change as was done for Qt three or so weeks ago:  force
the 'toptenwin' option on in X11_init_nhwdinows() so that scores (or
wizard mode "your score is ignored") are shown in a popup text window
instead of being sent to stdout.

3 years agoX11 ant extermination
PatR [Fri, 28 Jan 2022 00:10:11 +0000 (16:10 -0800)]
X11 ant extermination

The X11 tiled map was being initialized to the tile for giant ant.
Visible during the role/race/&c selection dialog and if you get the
"already a game in progress under your name; destroy it?" prompt.

3 years agofixes37.0 entry for pr#661
nhmall [Thu, 27 Jan 2022 23:40:53 +0000 (18:40 -0500)]
fixes37.0 entry for pr#661

Makefile.mingw32 and Makefile.mingw32.depend are intended to replace
Makefile.gcc.
To use them:

cd /d/prj/NetHack/src
cp ../sys/windows/Makefile.mingw32* .
mingw32-make -f Makefile.mingw32 clean
mingw32-make -f Makefile.mingw32 depend
mingw32-make -f Makefile.mingw32
Improvements:

Add $(USE_LUADLL) to release lua-5.4.3.dll, instead of link static
lua.lib into .exe files.
Add windres "--target" option, to fix the NetHackW.exe startup problem.
Add "-s" option to $(LDFLAGS) in release mode, to make exe/dll smaller.
Add $(CLEAN_DIR) and $(CLEAN_FILE) to track what to clean.
Remove *.tag, but use "order-only prerequisites" to make directory
before any '.o' is built.
Use make variables and functions to improve readability.
Each project has its own directory to hold object files, to fix the
interference problem between different projects, like NetHack.exe object
files were built with "-DTILES".
Add "-mconsole" option when linking NetHack.exe, to fix that sometimes
GetStdHandle returned with invalid handle error.
Add ".PHONY" statements.
Use "gcc -E -MM -MT" to implement semi-auto "Prerequisites Generating".

3 years agoSome improvements in Makefile.mingw32.depend
Feiyun Wang [Thu, 27 Jan 2022 10:54:22 +0000 (18:54 +0800)]
Some improvements in Makefile.mingw32.depend
- Change $(cce) to output .d file prerequisite too, the same as .o
- Replace $(CLEAN_FILE) handling w/ "clean: cleandep", for more encapsulation

3 years agoremove sys/windows/Makefile.gcc
nhmall [Thu, 27 Jan 2022 23:34:23 +0000 (18:34 -0500)]
remove sys/windows/Makefile.gcc

It has been superseded by sys/windows/Makefile.mingw32

3 years agoAdd Makefile.mingw32 and Makefile.mingw32.depend
Feiyun Wang [Wed, 19 Jan 2022 19:23:06 +0000 (03:23 +0800)]
Add Makefile.mingw32 and Makefile.mingw32.depend

3 years agoMake WinMain() to call mingw_main() instead of main() for mingw32 version.
Feiyun Wang [Tue, 25 Jan 2022 02:19:37 +0000 (10:19 +0800)]
Make WinMain() to call mingw_main() instead of main() for mingw32 version.

3 years agoFix panic "Unexpected DpiAwareness state" in Windows 10 for mingw32 version.
Feiyun Wang [Tue, 25 Jan 2022 02:17:30 +0000 (10:17 +0800)]
Fix panic "Unexpected DpiAwareness state" in Windows 10 for mingw32 version.

3 years agoFix mingw32 building errors.
Feiyun Wang [Wed, 19 Jan 2022 19:26:49 +0000 (03:26 +0800)]
Fix mingw32 building errors.

3 years agoRemove DPI_AWARENESS stuff for mingw32 in win10.h
Feiyun Wang [Sun, 23 Jan 2022 12:40:41 +0000 (20:40 +0800)]
Remove DPI_AWARENESS stuff for mingw32 in win10.h

3 years agoutilize the submodules for Windows build
nhmall [Thu, 27 Jan 2022 23:30:43 +0000 (18:30 -0500)]
utilize the submodules for Windows build

3 years agosupport for build with current Lua version 5.4.4
nhmall [Wed, 26 Jan 2022 22:24:59 +0000 (17:24 -0500)]
support for build with current Lua version 5.4.4

On some platforms this may require:
       re-using a sys/unix/hints file to generate updated Makefiles
       make spotless
       make fetch-lua

3 years agowindows date updates
nhmall [Thu, 27 Jan 2022 21:59:00 +0000 (16:59 -0500)]
windows date updates

Also remove reference to sys/windows/Makefile.gcc

3 years agoFalling through a hole or trap door will cause damage
Pasi Kallinen [Tue, 25 Jan 2022 12:17:43 +0000 (14:17 +0200)]
Falling through a hole or trap door will cause damage

3 years agoX11: Fix map expose area
Pasi Kallinen [Tue, 25 Jan 2022 09:19:12 +0000 (11:19 +0200)]
X11: Fix map expose area

The stop_row and stop_col were off-by-one in some cases, leaving
black lines on the map when a window on top was closed.
Simplify the calculation by always going one row/col further,
ensuring previously covered area gets redrawn for sure.
This should not affect speed or resource usage noticeably these days.

3 years agoMindless monsters shouldn't cringe stepping on squeaky boards
Pasi Kallinen [Mon, 24 Jan 2022 21:13:00 +0000 (23:13 +0200)]
Mindless monsters shouldn't cringe stepping on squeaky boards

3 years agoFix ESC so it cancels the movement prefix commands
Pasi Kallinen [Mon, 24 Jan 2022 17:48:40 +0000 (19:48 +0200)]
Fix ESC so it cancels the movement prefix commands

My changes to turn the movement and prefix commands into
extended commands broke this.

3 years agoDon't stop running next to a peaceful monster
Pasi Kallinen [Mon, 24 Jan 2022 16:45:54 +0000 (18:45 +0200)]
Don't stop running next to a peaceful monster

... unless the monster blocks the way.

3 years agothrottle excessive HP and En gains
PatR [Mon, 24 Jan 2022 01:18:05 +0000 (17:18 -0800)]
throttle excessive HP and En gains

The priest/cleric quest provides unlimited wraiths and a player
(not a robot with limitless patience) posting on reddit gave up
building up his character by killing them and eating the corpses
after accumulating 40K HP and 20K En.  (Or something close to that;
I can't get back to the post right now.)  His character might have
been capable of surviving decapitation or bisection.

Make it very much harder to get to 5 digits of HP or En via level
gains after reaching level 30.  If maxhp < 300, new gains will be
capped at 5 extra HP; 300..599, cap is 4; 600..899, cap is 3;
900..1199, cap is 2; and once 1200 is reached, further level gains
will only add 1 HP.  For maxen < 200, extra En is capped at 4;
200..399, cap is 3; 400..599, cap is 2; and once 600 is reached,
further gains only add 1 En.  Note: this only kicks in when gaining
levels while already at level 30.

3 years agomore 'O' tinkering
PatR [Sun, 23 Jan 2022 19:02:26 +0000 (11:02 -0800)]
more 'O' tinkering

Make the code for setting up the 'O' menu's '?' entry more compact.

Also adds 'skipinvert' flag for that entry but it doesn't do anthing
here.  I thought that it had been implemented, but aside from the
flag itself, it doesn't seem to exist.

3 years agoLua: Pass more data to room contents function
Pasi Kallinen [Sun, 23 Jan 2022 11:27:00 +0000 (13:27 +0200)]
Lua: Pass more data to room contents function

3 years agoX11: Fix map display for hypothetical huge map
Pasi Kallinen [Sat, 22 Jan 2022 23:14:20 +0000 (01:14 +0200)]
X11: Fix map display for hypothetical huge map

memsets don't work very well when xchar isn't char sized.

3 years agoFix possibly uninitialized error
Pasi Kallinen [Sat, 22 Jan 2022 19:53:15 +0000 (21:53 +0200)]
Fix possibly uninitialized error

3 years agoFix vision if xchar is defined larger than char
Pasi Kallinen [Sat, 22 Jan 2022 19:15:44 +0000 (21:15 +0200)]
Fix vision if xchar is defined larger than char

3 years agoReplace a return value with ECMD define
Pasi Kallinen [Sat, 22 Jan 2022 14:04:02 +0000 (16:04 +0200)]
Replace a return value with ECMD define

3 years agoAvoid generating monsters on boulders
Pasi Kallinen [Sat, 22 Jan 2022 13:41:14 +0000 (15:41 +0200)]
Avoid generating monsters on boulders

... unless the monster can go through walls.

3 years agoCurses: fix extended command input
Pasi Kallinen [Sat, 22 Jan 2022 12:32:50 +0000 (14:32 +0200)]
Curses: fix extended command input

The extended command input prompt was behaving in an unintended way:
Typing #a<enter> executed #adjust. Spaces in the entry prevented matching
any command. No error message was given when no command was matched.

Fix all of those, so it behaves more like the tty.

Clean up the tty, curses, and X11 windowport code, so they don't use
the extcmdlist array directly, but query with extcmds_match
and extcmds_getentry.

3 years agomore 'rest_on_space'
PatR [Sat, 22 Jan 2022 08:30:39 +0000 (00:30 -0800)]
more 'rest_on_space'

Honor any key binding for <space> when rest_on_space is Off.
Toggling it On and Off remembers the key binding if there is one.
So if the RC file has BIND=\32:attributes, <space> will run #wait
when rest_on_space is On and run #attributes when it's Off.

3 years agofix rest_on_space
PatR [Fri, 21 Jan 2022 23:51:05 +0000 (15:51 -0800)]
fix rest_on_space

When rest_on_space is On, assign same function as for #wait to the
<space> key.  When Off, set that key to Null instead.  Binding some
other command to <space> when rest_on_space is Off doesn't work but
I would classify that as something to be discouraged anyway.

3 years agoautodig '>'
PatR [Fri, 21 Jan 2022 22:27:21 +0000 (14:27 -0800)]
autodig '>'

This fixes moving in direction '>' while wielding a pick-axe with
the 'autodig' option On.  Attempting to dig assumed size-to-side
activity because u.dz wasn't being set, so the pick-axe was swung at
thin air instead making a pit or turning an existing pit into a hole.

dodown() and doup() should probably call set_move_cmd() instead of
manipulating u.dz directly.  But they would also need to suppress
g.move_attempting or the game says "you can't get there from here..."
after successfully digging or plunging into a pit.

3 years agoreconcile toss_up() with hmon_hitmon()
PatR [Fri, 21 Jan 2022 21:37:33 +0000 (13:37 -0800)]
reconcile toss_up() with hmon_hitmon()

Throwing silver or blessed non-weapons upward and having them fall
back onto susceptible hero's head wasn't adding the extra bonus damage
that a weapon would get in that situation.

Make hitting vulnerable monsters with blessed just-about-anything get
the 1d4 bonus that blessed weapons get for that.  Doesn't apply to
things that have their own special handing, like potions or eggs.

3 years agoblessed objects vs vulnerable creatures
PatR [Fri, 21 Jan 2022 21:19:57 +0000 (13:19 -0800)]
blessed objects vs vulnerable creatures

Collect creatures that don't like being hit by blessed objects in one
place.  No change in behavior.

3 years agowet towel tweaks
PatR [Fri, 21 Jan 2022 19:38:21 +0000 (11:38 -0800)]
wet towel tweaks

When hitting with a wielded wet towel, use "you lash <mon>" like
bullwhip.  If you continue with the towel after it has dried out,
message reverts to ordinary "you hit <mon>".

Enhance damage slightly and double the wetness bonus when target
is an iron golem.  Damage was (tmp=rnd(1..7), max(tmp,6)); now it's
rnd(1 + 1..7) for other monsters, rnd(1 + 2*(1..7)) for iron golem,
with no cap of 6 for either.

Sequencing:  defer "your towel dries" until after the lash message.

3 years agoslippery fingers
PatR [Fri, 21 Jan 2022 00:31:34 +0000 (16:31 -0800)]
slippery fingers

When the hero has the Glib condition, ^X reports "you have slippery
fingers" or "you have slippery gloves" but self-probing (either wand
or stethoscope aimed at self) was reporting "you have slippery hands."
Change self-probing to match enlightenment for this.

3 years agomore 'O' tinkering
PatR [Thu, 20 Jan 2022 20:44:43 +0000 (12:44 -0800)]
more 'O' tinkering

When picking '?', showing help, and then re-executing the 'O' menu,
let doset() perform its normal cleanup after the first pass instead
of duplicating that prior to making the second pass.

3 years ago'O' help bulletproofing
PatR [Thu, 20 Jan 2022 20:25:24 +0000 (12:25 -0800)]
'O' help bulletproofing

When using the 'O' menu, if player picks '?' plus additional choices,
it shows help and then operates on the other choices as if normal.
But for the latter, it was re-using the '?' pick as an option to
change, attempting (and silently failing) to toggle the legacy option
because it happens to be allopts['?' - 1].  It was also relying on
the list of picks being sorted in menu order rather than in player's
selection order or some other arbitrary ordering, something not
specified by the windowing specs.

Instead of looking for '?' as the first selection, process the list
normally and show the options menu help if '?' is found as a choice.
If any interface doesn't return a set of multiple picks in menu
order, the help might not be seen before prompting for compounds,
but it would be very unusual to ask for help and also try to make
changes at the same time so this doesn't seem worth worrying about.

3 years agofix 'O' typo
PatR [Thu, 20 Jan 2022 18:42:38 +0000 (10:42 -0800)]
fix 'O' typo

3 years agoadjust build procedures for added file
nhmall [Thu, 20 Jan 2022 15:37:53 +0000 (10:37 -0500)]
adjust build procedures for added file

Builds for:
   sys/msdos/Makefile.GCC - for local build on msdos itself (untested)
   sys/unix/NetHack.xcodeproj/project.pbxproj   - for Xcode build
   sys/windows/Makefile.gcc - for Windows build via Ming-w64 (untested)
   sys/windows/Makefile.msc - for visual studio nmake build
   sys/windows/vs/files.props for visual studio solution/project build

3 years agoThis is cron-daily v1-Jan-11-2022. 000files updated: Files
nhw_cron [Wed, 19 Jan 2022 23:24:07 +0000 (18:24 -0500)]
This is cron-daily v1-Jan-11-2022.  000files updated: Files

3 years agooptions help one more time...
PatR [Wed, 19 Jan 2022 22:22:21 +0000 (14:22 -0800)]
options help one more time...

Move the help text for the 'O' command from the code into its own file
and allow that to be accessed from the '?' menu as well as by choosing
entry '?' in the 'O' menu.

sys/unix/Makefile.top has been updated to handle new 'optmenu', others
need to catch up.  The game will still build and run without the file
but asking for options menu help won't work until they do.

3 years agomore if (c) XtSetArg(...); num_args++; braces
nhmall [Wed, 19 Jan 2022 16:01:52 +0000 (11:01 -0500)]
more if (c) XtSetArg(...); num_args++; braces

3 years agofix #K3520 - typo in dry_a_towel()
PatR [Wed, 19 Jan 2022 08:58:08 +0000 (00:58 -0800)]
fix #K3520 - typo in dry_a_towel()

Message shown when hero sees a monster's wet towel become less wet:
"<Mon>'s {moist|wet} towel drie[ out]."  Corresponding message for
hero's towel spelled "dries" correctly.

Reported for to-be-3.7 but present since 3.6.0.

3 years agoredo the help for the 'O' command
PatR [Wed, 19 Jan 2022 00:27:32 +0000 (16:27 -0800)]
redo the help for the 'O' command

This is a bit more complicated but far less intrusive.  Instead of
three dozen lines of introductory text before the menu entries start,
it now has one extra menu choice at the start:
|
|    For a brief explanation of how this works, type '?' to select
|    the next menu choice, then press <enter> or <return>.
|? - view help for options menu
|    [To suppress this menu help, toggle off the 'cmdaddist' option.]
|
Picking '?' shows essentially the same text as was in-line text in
the menu before.  Then doset() goes back to the start and re-runs the
options setting menu but without that extra entry the second time.

3 years agofix #K3518 - "WHAMMM!!!" vs deafness
PatR [Tue, 18 Jan 2022 22:13:56 +0000 (14:13 -0800)]
fix #K3518 - "WHAMMM!!!" vs deafness

Kicking a door can produce "WHAMMM!!!".  "Wham" doesn't necessarily
imply any noise but there's a strong suggestion that it does, so a
deaf hero shouldn't be able to hear it.  Give alternate feedback,
"Thwack!!" when deaf, and sometimes give that even when not deaf.

Also tone down "WHAMMM!!!" to Whammm!!".

3 years agoQt: more '#' support
PatR [Mon, 17 Jan 2022 22:38:16 +0000 (14:38 -0800)]
Qt: more '#' support

Add an entry for running an extended command to Qt's 'game' menu.

3 years agoQt vs #repeat
PatR [Mon, 17 Jan 2022 19:22:13 +0000 (11:22 -0800)]
Qt vs #repeat

For Qt's extended command selector, gray out the button for "repeat"
because picking it just causes the '#' command that led to that to
be repeated, bringing the extended command selector up again.

It can be chosen by typing "rep" but at each keystroke the grayed
out button is visible so having that behave differently from what
was probably expected should not come as a surprise.

3 years agoThis is cron-daily v1-Jan-11-2022. 005guidebook updated: doc/Guidebook.txt
nhw_cron [Mon, 17 Jan 2022 16:24:08 +0000 (11:24 -0500)]
This is cron-daily v1-Jan-11-2022.  005guidebook updated: doc/Guidebook.txt

3 years agoThis is cron-daily v1-Jan-11-2022. 001datesub updated: ./doc/Guidebook.tex ./doc...
nhw_cron [Mon, 17 Jan 2022 16:24:08 +0000 (11:24 -0500)]
This is cron-daily v1-Jan-11-2022.  001datesub updated: ./doc/Guidebook.tex ./doc/Guidebook.mn

3 years agoChange repeat into extended command
Pasi Kallinen [Mon, 17 Jan 2022 15:13:59 +0000 (17:13 +0200)]
Change repeat into extended command

3 years agoQt extended commands
PatR [Sun, 16 Jan 2022 22:41:17 +0000 (14:41 -0800)]
Qt extended commands

The substantial increase in extended commands has forced the grid of
commands to be expanded, otherwise the bottom of each column ends up
off the bottom of the screen.

The widget supporting the '#' command doesn't include scrollbars.
It really needs to be able to include those when needed but I don't
know how to do that.

3 years agoFix up/down movement
Pasi Kallinen [Sun, 16 Jan 2022 19:46:43 +0000 (21:46 +0200)]
Fix up/down movement

I broke these in the recent commit changing the movement commands.

3 years agoThis is cron-daily v1-Jan-11-2022. 005guidebook updated: doc/Guidebook.txt
nhw_cron [Sun, 16 Jan 2022 13:24:08 +0000 (08:24 -0500)]
This is cron-daily v1-Jan-11-2022.  005guidebook updated: doc/Guidebook.txt

3 years agoThis is cron-daily v1-Jan-11-2022. 001datesub updated: ./doc/Guidebook.tex ./doc...
nhw_cron [Sun, 16 Jan 2022 13:24:08 +0000 (08:24 -0500)]
This is cron-daily v1-Jan-11-2022.  001datesub updated: ./doc/Guidebook.tex ./doc/Guidebook.mn

3 years agoChange special keys into extended commands
Pasi Kallinen [Sat, 15 Jan 2022 23:22:17 +0000 (01:22 +0200)]
Change special keys into extended commands

Changes most of the special keys used in the main input loop
into extended commands:

- movement keys are now bound to extended commands, eg.
  #movewest and so on.

- m-prefix is now #reqmenu extended command, still bound to
  the 'm' key.

- run, rush, and fight are now extended commands, still bound
  to the same keys as previously.

- nopickup and runnopickup keys are removed.
  Nopickup was using 'm' key, the same as the m-prefix, so
  allow #reqmenu to modify movement commands to disable pickup.

- multiple prefix commands are allowed. This lets user to
  use #reqmenu, followed by #run, followed by movement to simulate
  runnopickup behaviour. (If necessary, adding runnopickup back
  as an extended command would be easy)

3 years agoQT build warning
nhmall [Sat, 15 Jan 2022 22:12:06 +0000 (17:12 -0500)]
QT build warning

The reason that the QT6.2 build on Linux was getting a warning
on qt_main.cpp, but the QT6.2 build on macOS was not, was
because of a difference in compiler flags between clang++ and g++.

clang++ was using the
    -Wno-deprecated-declarations
and g++ wasn't, so add it.

3 years agoQt splash window again
PatR [Sat, 15 Jan 2022 18:14:11 +0000 (10:14 -0800)]
Qt splash window again

Redo the fix that was used to eliminate a Qt6 compile-time warning.
The splash image is a square and doesn't need any clipping mask.

3 years agowarning fixes
PatR [Sat, 15 Jan 2022 06:42:41 +0000 (22:42 -0800)]
warning fixes

unpaid_cost():  'shkp' might be used without being initialized.  That
sort of warning is sometimes wrong but was correct in this instance.

qt_Splash():  the Qt 6.2 warning suggests switching the argument for
setMask() from QBitmap() to fromPixmap() but that doesn't work with
5.11.  However, switching from setMask() to setPixmap() does work,
and results in a crisp splash image instead of the fuzzy one I
recently complained about.  I've no idea what the right QT_VERSION
check ought to be but another QLabel propery is documented as "added
in 4.2" and the pixmap one has no such mention so I picked Qt < 4
for the code that's been in use and Qt >= 4 for the new code.

3 years agoremove unused roles[].femalenum, races[].femalenum
PatR [Fri, 14 Jan 2022 22:09:00 +0000 (14:09 -0800)]
remove unused roles[].femalenum, races[].femalenum

and rename {roles,races}[].malenum to {roles,races}[].mnum.

Pull request #653 from entrez.  Male and female player character
monsters are no long separate even when their title's differ and all
the entries for femalenum in the roles[] and races[] arrays were set
to NON_PM (meaning not used in this case).

The update in the pull request overlooked win/Qt/qt_plsel.cpp which
had four references to .malenum so this is more than just the fixes
entry.

Closes #653

3 years agoRemove gendered mons indices from roles, races
Michael Meyer [Wed, 12 Jan 2022 21:56:13 +0000 (16:56 -0500)]
Remove gendered mons indices from roles, races

There are no longer distinct gendered versions of monsters, so femalenum
is unused (i.e. set to NON_PM) for all roles and races. Take a pass at
removing all uses of/references to femalenum, and rename 'malenum' to
'mnum' since it no longer has any particular association with
gender or sex.

3 years agofixes entry for unpaid_cost regression fix
PatR [Fri, 14 Jan 2022 21:33:17 +0000 (13:33 -0800)]
fixes entry for unpaid_cost regression fix

Pull request #654 from entrez:  the change to avoid impossible
"unpaid_cost: object wasn't on any bill" when examining inventory
while in a wall shared by multiple shops didn't work correctly for
shop-owned objects inside hero-owned containers (which worked prior
to that change).

Not fixed, and possibly not going to be:  if a hero-owned container
holds items from more than one shop, the cost appended to those items'
inventory entries might show the wrong amount if the relevant code
picks the wrong shk.  Presumably the wrong amount can also happen if
player puts items from one shop into a container owned by another
shop.

Closes #654

3 years agoFix: unpaid_cost regression
Michael Meyer [Fri, 14 Jan 2022 14:38:00 +0000 (09:38 -0500)]
Fix: unpaid_cost regression

Recent commit 5c14f3e fixed an issue with unpaid_cost when the hero is
in two shops at once (e.g. phasing through a shared wall), but
introduced new problems with finding the cost of a container with unpaid
contents -- an unpaid item in a player-owned container would generate
the same "unpaid_cost: object wasn't on any bill" impossible as the
issue the commit fixed.

The main issue was that finding the bill entry used to depend on finding
the shopkeeper, but after the change, finding the shopkeeper depended on
finding the bill entry; for a container with unpaid items which has a
shopkeeper, but no bill entry, this caused issues.

Revert part of 5c14f3e and tackle the problem another way, which should
correctly handle unpaid items in inventory or a container, even if they
belong to a mixture of different shops and/or the hero is on a space
shared between multiple shops.

3 years agofixes entry for flyers 'swooping' down levels
PatR [Fri, 14 Jan 2022 20:59:46 +0000 (12:59 -0800)]
fixes entry for flyers 'swooping' down levels

Pull request from entrez:  flying hero who uses a hole or trap door to
move down to a lower level shouldn't fall to the floor when arriving.

Closes #655

3 years agoDon't 'fall' and self-stone when flying down
Michael Meyer [Fri, 14 Jan 2022 16:48:46 +0000 (11:48 -0500)]
Don't 'fall' and self-stone when flying down

When a flying hero deliberately "swoops" through a trap door or hole,
consider the movement down to the next level to be controlled flight
rather than falling, preventing the sort of inadvertent touching of a
carried cockatrice corpse that happens when falling between levels.

3 years agotested Jan 11 visual studio updates
nhmall [Fri, 14 Jan 2022 02:45:05 +0000 (21:45 -0500)]
tested Jan 11 visual studio updates

3 years agoyet more help
PatR [Fri, 14 Jan 2022 00:56:32 +0000 (16:56 -0800)]
yet more help

Add an extra couple of sentences explantion for control and meta.
Noticed an omitted command in the process.

3 years agomore user help
PatR [Fri, 14 Jan 2022 00:32:37 +0000 (16:32 -0800)]
more user help

A couple of additional things witnessed in between the frequent adds
shown by youtube (top prize goes to the recurring popup ad advertising
popup blocking).

He knew that ^D meant a control character but thought that he had to
type Ctrl+Shift+d instead of just being able to type Ctrl+d.  And he
had no idea what "meta key" meant.  (I don't think I've ever seen a
key labeled that myself.)

3 years agolinking with Qt6 support on Linux
nhmall [Thu, 13 Jan 2022 23:27:21 +0000 (18:27 -0500)]
linking with Qt6 support on Linux

3 years ago'O' assistance
PatR [Thu, 13 Jan 2022 22:25:01 +0000 (14:25 -0800)]
'O' assistance

I don't care for this very much at all, but making it shorter will
reduce its usefullness.  It addresses one of the struggles exhibited
in the "a man and his cat" youtube video, where he was baffled when
selecting booleans didn't change their values and he later used Esc
instead of Enter after eventually finding number_pad.

This inserts some explanatory text (around three dozen lines,
unfortunately) at the start of 'O's menu.  Some of it is general menu
stuff, some is specific options stuff, and some attempts to fend off
various bug reports about options that do or don't persist across
save and restore or RC revisions that seem to have no effect.

The new introductory text can be disabled by turning off cmdassist.
Players who already do that don't need to see this.  Many who ignore
cmdassist and occasionally endure an outburst of compass directions
are likely to be goaded into turning it off.  I hope we won't need a
new 'optassist' for players who want to skip this but leave cmdassist
in general on.

It doesn't attempt to address his attempt to use arrow keys (possibly
arrows overloaded on number pad keys, or perhaps just digits on the
number pad while numpad mode was off) to navigate the menu then having
the Windows port 'helpfully' change those into hjkl which resulted in
selecting and subsequently unintentionally toggling some options on
the first page.  One was 'color' which he did notice and then re-run
'O' to successfully toggle it back on.  There was at least one other
which he either didn't notice to didn't both to reverse.

3 years agoremove a couple of debugging lines
nhmall [Thu, 13 Jan 2022 19:35:07 +0000 (14:35 -0500)]
remove a couple of debugging lines

3 years agotypo fix
nhmall [Thu, 13 Jan 2022 19:30:52 +0000 (14:30 -0500)]
typo fix

3 years agobuild with Qt6 support on Linux
nhmall [Thu, 13 Jan 2022 19:09:41 +0000 (14:09 -0500)]
build with Qt6 support on Linux

3 years agomove_update()
PatR [Wed, 12 Jan 2022 07:42:13 +0000 (23:42 -0800)]
move_update()

Some changes I made while investigating the unpaid_code impossible.
Shouldn't produce any noticeable changes in behavior.

3 years agofix #K3514 - unpaid_cost() impossible
PatR [Wed, 12 Jan 2022 07:32:13 +0000 (23:32 -0800)]
fix #K3514 - unpaid_cost() impossible

Fix the reported bug of using Passes_walls to carry an unpaid item
from inside a shop into the wall it shares with another shop
producing a situation where examining inventory issued an impossible
"unpaid_cost: object wasn't on any bill" when trying to append the
cost to the formatted inventory line.  u.ushops[], u.ushops0[], and
others are lists that can have up to four entries and the relevant
code was only checking the first one.

Not mentioned in the report:  continuing another step into the other
shop didn't get recognized as robbing the first shop, for a similar
reason.

For either of these bugs, digging a breach in the wall, paying off
the miffed shopkeeper, then stepping into the breach before it gets
repaired will probably trigger the same results without the need for
polymorphing into a xorn or earth elemental.  But not on the tourist
goal level test case since walls there are undiggable.

I didn't go looking for other instances of not checking all relevant
shopkeepers.  It wouldn't surprise me if there are some more.

3 years agomore Qt player selection
PatR [Tue, 11 Jan 2022 22:56:33 +0000 (14:56 -0800)]
more Qt player selection

Mostly expands the comment about the layout of the selection dialog.
Also adds filtering available roles and races by the currently checked
alignment.

3 years agomonnum_to_glyph() followup
PatR [Tue, 11 Jan 2022 22:42:28 +0000 (14:42 -0800)]
monnum_to_glyph() followup

This was a fix for missing parentheses, but that just became redundant.
Add it anyway, for the reformatting.

3 years agoGuidebook.txt update from cron job
nhmall [Tue, 11 Jan 2022 22:38:46 +0000 (17:38 -0500)]
Guidebook.txt update from cron job

3 years agoThis is cron-daily v1-Jan-11-2022. 001datesub updated: ./doc/Guidebook.tex ./doc...
nhw_cron [Tue, 11 Jan 2022 22:24:08 +0000 (17:24 -0500)]
This is cron-daily v1-Jan-11-2022.  001datesub updated: ./doc/Guidebook.tex ./doc/Guidebook.mn

3 years agomacro argument monnum_to_glyph
nhmall [Tue, 11 Jan 2022 22:00:31 +0000 (17:00 -0500)]
macro argument monnum_to_glyph

In file included from ../include/hack.h:217,
                 from ../win/Qt/qt_plsel.cpp:18:
../win/Qt/qt_plsel.cpp: In member function ‘void nethack_qt_::NetHackQtPlayerSelector::populate_roles()’:
../win/Qt/qt_plsel.cpp:378:53: warning: enumerated and non-enumerated type in conditional expression [-Wextra]
  378 |         gf = monnum_to_glyph(roles[i].malenum, is_f ? FEMALE : MALE);
../include/display.h:610:27: note: in definition of macro ‘monnum_to_glyph’
  610 |                         ((gnd == MALE) ? GLYPH_MON_MALE_OFF : GLYPH_MON_FEM_OFF))
      |                           ^~~
../win/Qt/qt_plsel.cpp: In member function ‘void nethack_qt_::NetHackQtPlayerSelector::populate_races()’:
../win/Qt/qt_plsel.cpp:407:53: warning: enumerated and non-enumerated type in conditional expression [-Wextra]
  407 |         gf = monnum_to_glyph(races[j].malenum, is_f ? FEMALE : MALE);
../include/display.h:610:27: note: in definition of macro ‘monnum_to_glyph’
  610 |                         ((gnd == MALE) ? GLYPH_MON_MALE_OFF : GLYPH_MON_FEM_OFF))
      |                           ^~~

3 years agoMerge branch 'keni-datesub2' into NetHack-3.7
Kenneth Lorber [Tue, 11 Jan 2022 21:49:21 +0000 (16:49 -0500)]
Merge branch 'keni-datesub2' into NetHack-3.7

3 years agoFix shopkeeper Kop summons causing segfault
Pasi Kallinen [Tue, 11 Jan 2022 20:55:40 +0000 (22:55 +0200)]
Fix shopkeeper Kop summons causing segfault

... if it happened on a level with no downstairs, such as the tourist quest.

3 years agoEnable automated date generation on the Guidebook source files.
Kenneth Lorber [Tue, 11 Jan 2022 20:39:20 +0000 (15:39 -0500)]
Enable automated date generation on the Guidebook source files.

3 years agosuppress obsolete restore_attrib()
PatR [Tue, 11 Jan 2022 19:25:04 +0000 (11:25 -0800)]
suppress obsolete restore_attrib()

moveloop() has been calling restore_attrib() every turn, and
restore_attrib() loops through all six characteristics every time
to check for ones that have temporary adjustments timing out.  But
ATIME(characteristic) is never set anywhere and no time outs would
occur.  So delete the call to restore_attrib() from moveloop().

This leaves that no-longer-called routine in place and updates it
to handle Wounded_legs properly in case it ever does get used.

Also, add a comment about "restore ability" not fixing temporarily
lost characteristics due to hunger or wounded legs.  And update
unfixable_trouble_count() to check for those so that restore ability
won't say "you feel great" when it fails to fix them.

3 years agofix recent Wounded_legs fix
PatR [Tue, 11 Jan 2022 18:25:50 +0000 (10:25 -0800)]
fix recent Wounded_legs fix

Wounded_legs was changed from (HWounded_legs || EWounded_legs) to
just (HWounded_legs), but when the timeout code decremented the timer
to 0, HWounded_legs became 0 and heal_legs() operated as if there was
nothing to repair and hero didn't recover from temporarily lost Dex.
Change Wounded_legs back to (HWounded_legs || EWounded_legs).

3 years agoQt player selection dialog
PatR [Mon, 10 Jan 2022 21:23:09 +0000 (13:23 -0800)]
Qt player selection dialog

During role/race/gender/alignment selection, when gender gets toggled
replace the gender-specific role titles and their icons to reflect
new gender value.  And enable or disable Valkyrie choice depending
upon the gender value, not just current race value.

This ended up revising a lot of the NetHackQtPlayerSelector code,
eliminating some redundancies and being more careful with the use of
validrace()/validgend()/validalign().  That still isn't bulletproof.

It also changes the two instances of buttonPressed that were drawing
Qt6 warnings from connect() at run-time with buttonClicked.  That
works as intended with Qt5 and might eliminate those.

The code to use female player character tiles looks correct to me
but when I toggle gender, role titles change but their icons don't.
I don't know what's going on here.  Some ealier code always specifies
MALE but that code isn't used according to various prints to stderr
that I temporarily inserted.

3 years agoremove some dev code
nhmall [Mon, 10 Jan 2022 19:18:12 +0000 (14:18 -0500)]
remove some dev code

Closes #648

3 years agoMore "user canceled" extended command return values
Pasi Kallinen [Mon, 10 Jan 2022 15:37:48 +0000 (17:37 +0200)]
More "user canceled" extended command return values

3 years agofix typo in Guidebook.tex
SHIRAKATA Kentaro [Mon, 10 Jan 2022 12:33:34 +0000 (21:33 +0900)]
fix typo in Guidebook.tex

3 years agoX11 fixes
PatR [Sun, 9 Jan 2022 21:27:23 +0000 (13:27 -0800)]
X11 fixes

Fix the warnings issued when compiling win/X11/.  The error handler
one is presumeably due to a change in /usr/include/X11/Intrinsic.h
between different releases of X11 and is inconsequential.  The
indentation ones represented real bugs.  The X11 convention of using
'foo(); argcount++;' requires braces when preceded by 'if' or 'else'.
I don't know why the convention doesn't use comma instead of semi-colon
between the function that adds an entry to an argument list and the
accumulating count of the number of those arguments.

A few years ago I added code to zero out various argument lists prior
to their use, which shouldn't have been necessary.  The wrong argument
count being used when the 'if (whatever)' check fails could possibly
have been the reason that pre-zeroing solved mystery problems.  I don't
remember enough details to attempt to go back and retest with this fix
in place.

3 years agowhitelist several non-literal format strings
nhmall [Sun, 9 Jan 2022 19:18:10 +0000 (14:18 -0500)]
whitelist several non-literal format strings

djgpp cross-compiler was griping about several.

This also removes these lines from sys/unix/hints/include/compiler.370.
    CFLAGS+=-Wno-format-nonliteral
    CCXXFLAGS+=-Wno-format-nonliteral

-Wformat-nonliteral should not be incompatible with the printf
argument-checking capabilities on literal format strings and there
shouldn't be any new warnings created.

-- &< --

artifact.c: In function 'artifact_hit':
artifact.c:1309:23: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 1309 |                       mon_nam(mdef));
      |                       ^~~~~~~
artifact.c:1328:17: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 1328 |                 pline(behead_msg[rn2(SIZE(behead_msg))], wepdesc, "you");
      |                 ^~~~~

ball.c: In function 'drop_ball':
ball.c:896:17: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  896 |                 pline(pullmsg, "pit");
      |                 ^~~~~
ball.c:899:17: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  899 |                 pline(pullmsg, "web");
      |                 ^~~~~
ball.c:904:17: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  904 |                 pline(pullmsg, hliquid("lava"));
      |                 ^~~~~
ball.c:908:17: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  908 |                 pline(pullmsg, "bear trap");
      |                 ^~~~~

dig.c: In function 'liquid_flow':
dig.c:747:9: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  747 |         pline(fillmsg, hliquid(typ == LAVAPOOL ? "lava" : "water"));
      |         ^~~~~

fountain.c: In function 'floating_above':
fountain.c:28:5: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
   28 |     You(umsg, what);
      |     ^~~

invent.c: In function 'hold_another_object':
invent.c:1018:17: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 1018 |                 pline(drop_fmt, drop_arg);
      |                 ^~~~~
invent.c:1073:9: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 1073 |         pline(drop_fmt, drop_arg);
      |         ^~~~~
invent.c: In function 'silly_thing':
invent.c:1811:9: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 1811 |         pline(silly_thing_to, word);
      |         ^~~~~

lock.c: In function 'pick_lock':
lock.c:375:19: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  375 |             pline(no_longer, "hold the", what);
      |                   ^~~~~~~~~
lock.c:379:19: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  379 |             pline(no_longer, "reach the", "lock");
      |                   ^~~~~~~~~
lock.c: In function 'pick_lock':
lock.c:375:19: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  375 |             pline(no_longer, "hold the", what);
      |                   ^~~~~~~~~
lock.c:379:19: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  379 |             pline(no_longer, "reach the", "lock");
      |                   ^~~~~~~~~
mcastu.c: In function 'cast_cleric_spell':
mcastu.c:670:13: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  670 |             pline(fmt, Monnam(mtmp), what);
      |             ^~~~~

mhitu.c: In function 'hitmsg':
mhitu.c:68:13: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
   68 |             pline(pfmt, Monst_name);
      |             ^~~~~

mkobj.c: In function 'insane_object':
mkobj.c:2848:20: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2848 |         impossible(altfmt, mesg, fmt_ptr((genericptr_t) obj), where_name(obj),
      |                    ^~~~~~
mkobj.c:2852:20: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2852 |                    objnm);
      |                    ^~~~~

mon.c: In function 'mon_givit':
mon.c:1469:9: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 1469 |         pline(msg, Monnam(mtmp));
      |         ^~~~~
mon.c: In function 'mondead':
mon.c:2485:33: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2485 |                                 | SUPPRESS_INVISIBLE), FALSE));
      |                                 ^

muse.c: In function 'mon_reflects':
muse.c:2438:13: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2438 |             pline(str, s_suffix(mon_nam(mon)), "shield");
      |             ^~~~~
muse.c:2445:13: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2445 |             pline(str, s_suffix(mon_nam(mon)), "weapon");
      |             ^~~~~
muse.c:2450:13: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2450 |             pline(str, s_suffix(mon_nam(mon)), "amulet");
      |             ^~~~~
muse.c:2458:13: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2458 |             pline(str, s_suffix(mon_nam(mon)), "armor");
      |             ^~~~~
muse.c:2464:13: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2464 |             pline(str, s_suffix(mon_nam(mon)), "scales");
      |             ^~~~~
muse.c: In function 'ureflects':
muse.c:2476:13: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2476 |             pline(fmt, str, "shield");
      |             ^~~~~
muse.c:2483:13: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2483 |             pline(fmt, str, "weapon");
      |             ^~~~~
muse.c:2487:13: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2487 |             pline(fmt, str, "medallion");
      |             ^~~~~
muse.c:2493:13: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2493 |             pline(fmt, str, uskin ? "luster" : "armor");
      |             ^~~~~
muse.c:2497:13: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2497 |             pline(fmt, str, "scales");
      |             ^~~~~

polyself.c: In function 'polyman':
polyself.c:201:5: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  201 |     urgent_pline(fmt, arg);
      |     ^~~~~~~~~~~~

potion.c: In function 'make_hallucinated':
potion.c:423:13: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  423 |             pline(message, verb);
      |             ^~~~~
potion.c: In function 'peffect_gain_level':
potion.c:1033:17: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 1033 |                 You(riseup, ceiling(u.ux, u.uy));
      |                 ^~~
potion.c:1044:21: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 1044 |                     You(riseup, ceiling(u.ux, u.uy));
      |                     ^~~

priest.c: In function 'intemple':
priest.c:487:17: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  487 |                 You(msg1, msg2);
      |                 ^~~

read.c: In function 'doread':
read.c:522:9: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  522 |         pline(silly_thing_to, "read");
      |         ^~~~~

shk.c: In function 'shk_names_obj':
shk.c:2576:15: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2576 |         pline(fmtbuf, obj_name, (obj->quan > 1L) ? "them" : "it", amt,
      |               ^~~~~~
shk.c:2579:9: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2579 |         You(fmt, obj_name, amt, plur(amt), arg);
      |         ^~~
shk.c: In function 'shk_chat':
shk.c:4506:13: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 4506 |             pline(Izchak_speaks[rn2(SIZE(Izchak_speaks))], shkname(shkp));
      |             ^~~~~
shk.c: In function 'check_unpaid_usage':
shk.c:4633:9: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 4633 |         verbalize(fmt, arg1, arg2, tmp, currency(tmp));
      |         ^~~~~~~~~

sounds.c: In function 'dosounds':
sounds.c:66:21: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
   66 |                     pline(throne_msg[2], uhis());
      |                     ^~~~~
sounds.c:259:17: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  259 |                 You_hear(msg, halu_gname(EPRI(mtmp)->shralign));
      |                 ^~~~~~~~

timeout.c: In function 'choke_dialogue':
timeout.c:269:26: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  269 |                          body_part(NECK));
      |                          ^~~~~~~~~
timeout.c:274:17: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  274 |                 urgent_pline(str, hcolor(NH_BLUE));
      |                 ^~~~~~~~~~~~
timeout.c: In function 'levitation_dialogue':
timeout.c:339:26: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  339 |                          danger ? surface(u.ux, u.uy) : "air");
      |                          ^~~~~~
timeout.c: In function 'slime_dialogue':
timeout.c:379:34: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  379 |                     urgent_pline(buf, hcolor(NH_GREEN));
      |                                  ^~~
timeout.c:381:30: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
  381 |                 urgent_pline(buf, an(Hallucination ? rndmonnam(NULL)
      |                              ^~~

uhitm.c: In function 'hmon_hitmon':
uhitm.c:1398:9: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 1398 |         pline(fmt, whom);
      |         ^~~~~
uhitm.c:1421:9: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 1421 |         pline(fmt, whom);
      |         ^~~~~
uhitm.c: In function 'stumble_onto_mimic':
uhitm.c:5301:9: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 5301 |         pline(fmt, what);
      |         ^~~~~

../win/tty/wintty.c: In function 'tty_clear_nhwindow':
../win/tty/wintty.c:1649:15: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 1649 |         panic(winpanicstr, window);
      |               ^~~~~~~~~~~
../win/tty/wintty.c: In function 'tty_display_nhwindow':
../win/tty/wintty.c:2339:15: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2339 |         panic(winpanicstr, window);
      |               ^~~~~~~~~~~
../win/tty/wintty.c: In function 'tty_dismiss_nhwindow':
../win/tty/wintty.c:2432:15: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2432 |         panic(winpanicstr, window);
      |               ^~~~~~~~~~~
../win/tty/wintty.c: In function 'tty_destroy_nhwindow':
../win/tty/wintty.c:2477:15: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2477 |         panic(winpanicstr, window);
      |               ^~~~~~~~~~~
../win/tty/wintty.c: In function 'tty_curs':
../win/tty/wintty.c:2503:15: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2503 |         panic(winpanicstr, window);
      |               ^~~~~~~~~~~
../win/tty/wintty.c: In function 'tty_putsym':
../win/tty/wintty.c:2599:15: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2599 |         panic(winpanicstr, window);
      |               ^~~~~~~~~~~
../win/tty/wintty.c: In function 'tty_add_menu':
../win/tty/wintty.c:2967:15: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 2967 |         panic(winpanicstr, window);
      |               ^~~~~~~~~~~
../win/tty/wintty.c: In function 'tty_end_menu':
../win/tty/wintty.c:3032:15: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 3032 |         panic(winpanicstr, window);
      |               ^~~~~~~~~~~
../win/tty/wintty.c: In function 'tty_select_menu':
../win/tty/wintty.c:3140:15: warning: format not a string literal, argument types not checked [-Wformat-nonliteral]
 3140 |         panic(winpanicstr, window);
      |               ^~~~~~~~~~~

3 years agoUse visctrl like in other places
Pasi Kallinen [Sun, 9 Jan 2022 17:27:47 +0000 (19:27 +0200)]
Use visctrl like in other places

3 years agoperm_invent update when applying a bag of tricks
Pasi Kallinen [Sun, 9 Jan 2022 14:40:35 +0000 (16:40 +0200)]
perm_invent update when applying a bag of tricks

3 years agolibnh follow-up
nhmall [Sun, 9 Jan 2022 01:38:22 +0000 (20:38 -0500)]
libnh follow-up