Commit Graph
1174 Commits
Author SHA1 Message Date
nhmall 6aed21933d add paragraph about README.hints to NewInstall.unx 2026-05-23 13:33:35 -04:00
Alex Smith 3f837939ba Change the MAX_REROLLS option to be MAX_REROLL_RATE
Having a hard cap on the number of rerolls doesn't help save CPU
usage from excessive rerolling, because if the cap is set low
enough to keep the CPU usage reasonable it isn't high enough for
players to actually use the feature.

Instead, allow capping the number of rerolls per second. (Sensible
values seem to be in the 5-10 range.) If the player attempts more
rerolls than this, show a paranoid confirmation prompt: the need to
type the answer to the prompt will slow a human user down (and if
the prompt is filled in too quickly, it will simply just be shown
again, preventing attempts to use automation to skip the prompt).
2026-05-22 06:02:00 +01:00
Pasi Kallinen 51f486589c Add sysconf MAX_REROLLS option
Public servers probably want to set this.
2026-05-21 09:11:24 +03:00
nhmall 1b7e529732 cross-compile and build adjustments
Tested:
    Ubuntu: make WANT_WIN_TTY=1 WANT_WIN_CURSES=1 resp=1 update
    Ubuntu: make WANT_SYSTEM_LUA=1 WANT_WIN_TTY=1 WANT_WIN_CURSES=1 resp=1 update
    make CROSS_TO_MSDOS=1 package
    make CROSS_TO_AMIGA=1 all
    make CROSS_TO_AMIGA=1 package
2026-05-20 00:37:02 -04:00
nhmall 4c825ed9a9 typo CROSS_TO_MSDOS=1 2026-05-19 15:38:37 -04:00
nhmall b17eafa0ab CROSS_TO_AMIGA=1 build fix
Fallout from other work this past weekend.
2026-05-19 12:18:23 -04:00
nhmall 182dd93a38 remove a debug line 2026-05-19 11:53:54 -04:00
nhmall 46735de8a6 extend WANT_SYSTEM_LUA=1 to other distros
Only tested on Ubuntu at this point.

feedback on other distros is welcome
2026-05-19 11:38:05 -04:00
nhmall 5333747f02 Add some support for Alpine Linux system Lua package
Requires apk add lua5.4-dev (for the C Lua headers)
2026-05-19 00:49:30 -04:00
nhmall 721dc27f26 remove an unneeded change from earlier CROSS_TO_MSDOS 2026-05-18 16:09:36 -04:00
nhmall 68e36aff74 CROSS_TO_AMIGA fix 2026-05-18 16:06:15 -04:00
nhmall 9841830460 some more follow-up
CROSS_TO_MSDOS build
2026-05-18 15:46:54 -04:00
nhmall 95151d99fc more follow-up
CI still had a duplicate tile.o
2026-05-18 14:18:24 -04:00
nhmall 0607d6426c follow-up 2026-05-18 13:53:02 -04:00
nhmall 3a892160df macOS follow-up 2026-05-18 13:07:13 -04:00
nhmall 29951cccd1 add support for optional builder-created make.prefs
Set things up so that the Makefile build will look for 'make.prefs'
at the top of the NetHack source tree.

If 'make.prefs' is present, the Makefile build will include it
just ahead of the PRE section of a hints file specified to
sys/unix/setup.sh, or practically the first thing during a
Makefile build if no hints file was specified.

The advantage of using a 'make.prefs' is that instead of putting a
series of Makefile variable value assignments on the command line
each time, like this:
    make WANT_WIN_X11=1 WANT_WIN_TTY=1 WANT_WIN_CURSES=1 c2x=1 resp=1 update
you can, instead, put those preferences into make.prefs, like this:

# start of make.prefs
WANT_WIN_X11=1
WANT_WIN_TTY=1
WANT_WIN_CURSES=1
c2x=1
resp=1
# end of make.prefs

Now, my make command just needs to specify a target:
    make update

The syntax for checking whether make.prefs exists, and for including
it, is GNU make, or bsd make, specific, so sys/unix/mkmkfile.sh will
insert the correct syntax for the make that is in-use when
sys/unix/setup.sh is executed.

The 'make.prefs' file isn't limited to Makefile variable assignments, and
can contain any valid make syntax for the version of make on your system,
but adding make syntax beyond Makefile variable assignment will cause
your make.prefs file to become specific to that version of make. There
are syntactical differences between GNU make and bsd make, particularly
for directives and conditional tests.

The 'make.prefs' file can potentially eliminate much/all of the manual
editing of distributed repository Makefiles or hints files that you, as
a NetHack developer or builder, might routinely carry out.
You have the option of placing your preference changes in 'make.prefs'
instead.

Related reference for .500 hints file variables:

In the NetHack source tree:
sys/unix/README.hints

On GitHub:
https://github.com/NetHack/NetHack/blob/NetHack-5.0/sys/unix/README-hints

For example, on macOS, where GNU make is being used, and I typically
set things up using the macOS.500 hints file:
    sys/unix/setup.sh sys/unix/hints/macOS.500
I might have the following make.prefs in the root of my NetHack source tree:
#---- snip -------
$(info Attention - Using make.prefs)
WANT_MACSOUND=1
resp=1
#---- end-snip ---

For another example, on Linux, where GNU make is being used, and I
typically set things up using the linux.500 hints file:
    sys/unix/setup.sh sys/unix/hints/linux.500
I might have the following make.prefs file in the root of my NetHack
source tree:
#---- snip -------
$(info Using make.prefs)
WANT_WIN_X11=1
WANT_WIN_TTY=1
WANT_WIN_CURSES=1
c2x=1
resp=1
#---- end-snip ---
2026-05-18 13:03:31 -04:00
nhmall d9bc6d7b8a Revert "add #-EARLY section"
This reverts commit 85ca1cce74.
2026-05-17 20:54:08 -04:00
nhmall 85ca1cce74 add #-EARLY section 2026-05-17 20:38:10 -04:00
nhmall 4434b14884 more hints file readiness in Makefiles 2026-05-16 10:59:48 -04:00
nhmall 2445b97a10 build fix with hints file linux.500 and musl=1
This fix was suggested by @PPN-SD in the comments on
GitHub issue https://github.com/NetHack/NetHack/issues/1530#issuecomment-4466027729

Resolves #1530
2026-05-16 08:57:54 -04:00
PatR e11ff5f703 another try at removing static analyzer complaints
The one in options hasn't been addressed this time.
2026-05-15 13:40:34 -07:00
nhmall c558ef0b33 Makefile syntax did not work on OpenBSD
Trying another approach for whichbsd.500
2026-05-15 15:29:25 -04:00
nhmall d81d47b81e new file header info 2026-05-15 12:18:29 -04:00
nhmall 8d0cfb05fa rename netbsd.500 to bsd.500
In past releases of NetHack, there was a myriad of different hints
files for different operating systems, and even different versions
of operating systems.

It made maintenance a chore, because all the variable hints files
had to be updated for a wanted change, or (as typically was the
case), some lesser-used hints files were left behind and became
outdated.

Instead of going down that road again, this renames
    sys/unix/hints/netbsd.500
to
    sys/unix/hints/bsd.500

Where things need to differ for a different bsd flavour,
the differences can be shrouded in things like

    .if ${WHICHBSD} == "NETBSD"
    .else
    .endif

This change is being done to make maintenance easier, at the
cost of making the resulting Makefiles a little more complex,
but there won't be as many separate Makefile hints to maintain.

This commit is being done instead of merging pull request #1531
which would add a new sys/unix/hints/openbsd.500 file.

Only tested on NetBSD so far. Please let us know if there's
an issue on other bsd's, and we will attempt to fix thos issues.

Closes #1531

Close
2026-05-15 12:11:34 -04:00
PatR 9ec26da4ff static analysis fix attempt
These three changes compile but I don't know whether thay succeed in
suppressing the new static analyzer complaints.
2026-05-15 08:11:56 -07:00
nhmall 342bbc85c4 warning bit for clang-22 and tiletext.c 2026-05-14 08:31:33 -04:00
nhmall 11cd021063 update header info on netbsd.500 2026-05-13 17:34:46 -04:00
Anthony C Howe afeb2f55c9 bsd build support
Originating from https://github.com/NetHack/NetHack/pull/1519,
there was an issue with the pull request's back-end fork or with
the pull request itself.

The code changes were applied manually instead, with credit to the
pull request's author, instead of being directly merged in via the
pull request.

Contributed by @SirWumpus on GitHub.

Also,
- fixed a bit of conditional code in include/unixconf.h, where the
  #else clause remained out of reach for non-bsd systems, but was
  needed..
- added a disclaimer to the contributed sys/unix/hints/netbsd.500.
2026-05-13 12:49:45 -04:00
nhmall 82d7b2b249 Merge branch 'cleanup-followup' of https://github.com/ingpaschke/NetHack into NetHack-5.0 2026-05-12 12:46:25 -04:00
Ingo Paschke 7c8524ae37 Amiga: make amigapkg depend on $(GAMEBIN)
Without the dependency, 'make amigapkg' would copy whatever was
already in targets/amiga/ without ever rebuilding when sources
changed -- silently shipping a stale binary.
2026-05-12 15:12:07 +02:00
nhmall 7d802883bc replace hard-coded nroff with $(NROFF) 2026-05-12 09:07:06 -04:00
nhmall d62b56e0f2 yet more hints file prep 2026-05-11 20:45:49 -04:00
nhmall ccb3db39d7 more hints file prep 2026-05-11 19:59:53 -04:00
nhmall ef600a41f6 allow a hints file to be able to specify GUIDECMD
define GUIDECMD in sys/unix/Makefile.doc using '?=' notation
2026-05-11 19:16:03 -04:00
nhmall 9bfaa066e2 Merge branch 'cleanup' of https://github.com/ingpaschke/NetHack into NetHack-5.0 2026-05-11 15:43:56 -04:00
nhmall 3ca18c8e44 be more cautious on gcc version for warning 2026-05-11 15:40:29 -04:00
nhmall 0991b0e770 tiletext.c warning suppression 2026-05-11 15:30:53 -04:00
Ingo Paschke 688f9344cd Amiga: route port paths through fqname()
Tile loading hard-coded "NetHack:tiles/tiles{16,32}.iff" and PORT_HELP
hard-coded "nethack:amii.hlp".  Route through fqname(DATAPREFIX) so
DATADIR= overrides apply.  Refresh amii.hlp to 5.0 content, ship it via
amigapkg, and document HACKDIR / SAVEDIR / BONESDIR examples in
nethack.cnf.
2026-05-11 20:51:06 +02:00
Ingo Paschke 7b559f4d02 Amiga: delete dead files and dead-macro code
Delete amigst.c (empty) and amitty.c (TTY/BBS stub).  Drop WINVERS_AMIT,
SUPERBITMAP_MAP, EXTMENU, SHELL/dosh(), and the bbs_id reference in
src/files.c.
2026-05-11 20:30:45 +02:00
nhmall f64b996899 optional package sequencer for building binary
Add Makefile support for an optional AMIGPKGSEQ to
append a suffix to the Amiga binary, without having to
rename the zip file manually after the
    make CROSS_TO_AMIGA=1 package
step.
2026-05-10 10:33:20 -04:00
nhmall ce92a979dd Merge branch 'linux-tty-cflags' of https://github.com/torakoya/NetHack into NetHack-5.0 2026-05-10 08:48:30 -04:00
nhmall 39f31a8f06 fix a CROSS_TO_WASM=1 build issue 2026-05-07 10:43:24 -04:00
Yoichiro Takahashi 4a4b4498a8 Respect ncurses cflags on Linux tty 2026-05-07 21:22:15 +09:00
nhmall dcf8752e92 Merge branch 'fix/libnh-native-build' of https://github.com/YttriumOx/NetHack into YttriumOx-fix/libnh-native-build 2026-05-06 21:07:23 -04:00
Patric Mueller 60de227615 fix ncurses build on macOS with Homebrew 2026-05-06 09:58:00 +02:00
Benjamin de WaalandClaude Opus 4.7 f6afa23e28 libnh: fix native build of libnh.a on macOS
Fixes four issues that prevented `make WANT_LIBNH=1 all` from producing
a libnh.a that could be linked into a host program on macOS.  Before
these patches, it built but the resulting archive was unusable: macOS
ld errored on a nested liblua archive member, was missing date.o and
hacklib symbols (`populate_nomakedefs`, `eos`, `lcase`, `mungspaces`,
...), and had duplicate definitions of `main`, `whoami`, etc.

Specific changes:

1. sys/libnh/libnhmain.c: drop `static` on `whoami()`.  src/earlyarg.c
   declares it `extern` and calls it from `scores_only()`; the static
   makes it file-local and that reference goes unresolved.

2. sys/libnh/libnhmain.c: gate the emscripten-only code in get_nhuuid
   with `#ifdef __EMSCRIPTEN__` instead of `#ifdef NHUUID`.  The macOS
   hints define NHUUID for the libnh build (they did so unconditionally
   before NO_NHUUID even existed), so on native builds the compiler
   tried to call `emscripten_run_script_int` / `_string` and failed
   with implicit-function-declaration errors.  __EMSCRIPTEN__ is the
   real signal for "this is being cross-compiled to WASM."

3. sys/unix/hints/macOS.500: in the WANT_LIBNH block, add an explicit
   `recover: lua_support` dependency (gated by MAKEFILE_TOP).  When
   $(GAME) is overridden to empty, the regular `recover: $(GAME)` chain
   no longer triggers `lua_support`, so include/nhlua.h never gets
   generated and recover.c's transitive #include of hack.h fails.

4. sys/unix/hints/macOS.500: rewrite the libnh.a rule.  The previous
   `ar rcs libnh.a $(HOBJ) $(LIBNHSYSOBJ) liblua-$(LUA_VERSION).a` had
   four problems: (a) ar archives liblua.a as a single opaque member
   that macOS ld can't dereference, (b) date.o (DATE_O, kept separate
   from HOBJ) was never archived, so `populate_nomakedefs` and
   `nomakedefs` were missing, (c) hacklib.a was likewise omitted, and
   (d) HOBJ already contains $(SYSOBJ) (with unixmain.o) and $(WINOBJ)
   (the tty windowport), which duplicated symbols from libnhmain.o /
   winshim.o.

   The fix uses `libtool -static` so hacklib.a and liblua's archive
   have their members merged rather than nested, depends on $(LUALIB)
   so lua_support runs first, includes $(DATE_O) and $(TARGET_HACKLIB),
   and uses $(filter-out $(SYSOBJ) $(WINOBJ),$(HOBJ)) to drop the
   duplicates.

Verified by clean rebuild on macOS 26 (arm64, Apple clang 17):
  make spotless
  make fetch-Lua
  make WANT_LIBNH=1 all
and link-tested with a tiny harness that calls
shim_graphics_set_callback() against the resulting libnh.a.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 07:06:41 +01:00
nhmall b7735632bf follow-up for issue #1512
The previous fix, while valid, still prompts for input during early
options processing if stdin is a tty. It really shouldn't be doing
that during early options such as --showpaths, so alter the placement
of the program_state.earlyoptions flag within *main().
2026-05-05 06:57:32 -04:00
Ingo Paschke 5852e8c2a0 Amiga: ship as a NetHack drawer with drawer icon and README 2026-05-04 15:43:12 +02:00
Ingo Paschke d94fb08f8b Amiga: ship Workbench icons for the binary and text files 2026-05-04 15:33:20 +02:00
Ingo Paschke 9a909be7c5 Amiga: auto-assign NetHack: to the program directory 2026-05-04 15:33:14 +02:00