* Identify NETHACKDIR and HACKDIR as environment variables. * ...and set them italics, not roman. * Set default playground directory name in italics, not roman. * Set command names in italics. * Refer to command operands as such, not as "options". * Use man page cross reference on first occurrence of "nethack" when referring to the command executable as opposed to the overall game. Because some text is commented out (`ig`nored), meaning the "first" occurrence appears twice (what's lexically present vs. what's formatted) do this twice as future-proofing. * Set file names in italics, not roman. Set variable parts of file names in roman. * Refer to "single-user systems" instead of "microcomputers"; the latter is becoming antiquated terminology. * Favor present tense over future. * Tighten wording. * Spell "save files" consistently as two words.
176 lines
4.9 KiB
Plaintext
176 lines
4.9 KiB
Plaintext
.\"DO NOT REMOVE NH_DATESUB .TH RECOVER 6 "Date(%-d %B %Y)" Project(uc)
|
|
.TH RECOVER 6 "26 April 2026" NETHACK
|
|
.\"DO NOT REMOVE NH_DATESUB .ds Nd Date(%Y)
|
|
.ds Nd 2024
|
|
.de NB
|
|
.ds Nb \\$2
|
|
..
|
|
.de NR
|
|
.ds Nr \\$2
|
|
..
|
|
.NB $NHDT-Branch: NetHack-5 $
|
|
.NR $NHDT-Revision: 1.12 $
|
|
.ie \n(.g .ds ^ \(ha
|
|
.el .ds ^ ^
|
|
.\" groff and AT&T-descended troffs use different hyphenation patterns.
|
|
.\" Don't hyphenate the last word on a page or column, or
|
|
.\" before/after last/first 2 characters of a word.
|
|
.ie \n(.g .hy 12
|
|
.el .hy 14
|
|
.ds Na Kenneth Lorber
|
|
.SH NAME
|
|
recover \- recover a NetHack game interrupted by disaster
|
|
.SH SYNOPSIS
|
|
.B recover
|
|
.RB [ \-d
|
|
.IR playground-directory ]
|
|
.I base
|
|
\&.\|.\|.
|
|
.SH DESCRIPTION
|
|
Occasionally, a NetHack game is interrupted by disaster
|
|
when the program or the system crashes.
|
|
Prior to NetHack v3.1, these games were lost because information
|
|
like the player's inventory was kept only in memory.
|
|
Now, all pertinent information can be written out to disk,
|
|
so such games can be recovered at the point of the last level change.
|
|
.PP
|
|
.I Base
|
|
operands tell
|
|
.I recover
|
|
which files to process.
|
|
Each
|
|
.I base
|
|
specifies recovery of a separate game.
|
|
.PP
|
|
The
|
|
.B \-d
|
|
option, which must be the first argument if it appears,
|
|
supplies the directory housing the NetHack playground.
|
|
It overrides the value of the environment variables
|
|
.I NETHACKDIR
|
|
and
|
|
.IR HACKDIR ,
|
|
and the directory
|
|
specified by the game administrator during compilation
|
|
(usually
|
|
.IR /usr/games/lib/nethackdir ).
|
|
.ig
|
|
.PP
|
|
\*^?ALLDOCS
|
|
For recovery to be possible,
|
|
.IR nethack (6)
|
|
must have been compiled with the INSURANCE option, and the run-time option
|
|
.I checkpoint
|
|
must also have been on.
|
|
\*^:
|
|
\*^?INSURANCE
|
|
For recovery to be possible,
|
|
.I nethack
|
|
must have been compiled with the INSURANCE option (this configuration was),
|
|
and the run-time option
|
|
.I checkpoint
|
|
must also have been on.
|
|
\*^:
|
|
This configuration of
|
|
.I nethack
|
|
was created without support for recovery.
|
|
\*^.
|
|
\*^.
|
|
..
|
|
.IR nethack (6)
|
|
normally writes out files for levels as the player leaves them,
|
|
so they will be ready for return visits.
|
|
When checkpointing, it also writes out the level entered and
|
|
the current game state on every level change.
|
|
This procedure slows level changes.
|
|
.PP
|
|
The level file names are of the form
|
|
.IR base. nn, where
|
|
.I nn
|
|
is an internal bookkeeping number for the level.
|
|
The file
|
|
.I base.0
|
|
is used for game identity, locking, and, when checkpointing,
|
|
for the game state.
|
|
Various OSes use different strategies for constructing the base name.
|
|
Single-user systems use the character name,
|
|
possibly truncated and modified
|
|
to be a legal filename on that system.
|
|
Multi-user systems use the (modified) character name prefixed
|
|
by a user number to avoid conflicts,
|
|
or
|
|
.I xlock
|
|
if the number of concurrent players is being limited.
|
|
It may be necessary to look in the playground to find the correct
|
|
base name of the interrupted game.
|
|
.I recover
|
|
transforms these level files into a save file of the same name that
|
|
.I nethack
|
|
would have used.
|
|
.PP
|
|
Since
|
|
.I recover
|
|
must be able to read and delete files from the playground
|
|
and create files in the save directory,
|
|
it has interesting interactions with game security.
|
|
Giving ordinary players access to
|
|
.I recover
|
|
through setuid or setgid is tantamount to leaving the playground
|
|
world-writable,
|
|
with respect to both cheating and messing up other players.
|
|
For a single-user system, this of course does not change anything,
|
|
so some of these ports install
|
|
.I recover
|
|
by default.
|
|
.PP
|
|
For a multi-user system,
|
|
the game administrator may want to arrange for all
|
|
.I .0
|
|
files in the playground to be fed to
|
|
.I recover
|
|
when the host machine boots,
|
|
and handle game crashes individually.
|
|
If the user population is sufficiently trustworthy,
|
|
.I recover
|
|
can be installed with the same permissions the
|
|
.I nethack
|
|
executable has.
|
|
In either case,
|
|
.I recover
|
|
is easily compiled from the distribution utility directory.
|
|
.SH NOTES
|
|
Like
|
|
.I nethack
|
|
itself,
|
|
.I recover
|
|
will overwrite existing save files of the same name.
|
|
Savefiles created by
|
|
.I recover
|
|
are uncompressed;
|
|
they may be compressed afterwards if desired,
|
|
but even a compression-using
|
|
.I nethack
|
|
will find them in the uncompressed form.
|
|
.SH "SEE ALSO"
|
|
.IR nethack (6)
|
|
.SH BUGS
|
|
.I recover
|
|
makes no attempt to find out if a base name specifies a game in progress.
|
|
If multiple machines share a playground, this would be impossible to
|
|
determine.
|
|
.PP
|
|
.I recover
|
|
should be taught to use the
|
|
.I nethack
|
|
playground locking mechanism to avoid conflicts.
|
|
.SH COPYRIGHT
|
|
.\" All troffs and nroffs support `\(co` except Plan 9 nroff, but Plan 9
|
|
.\" offers no test for special character availability, and its feature
|
|
.\" set too closely resembles DWB 3.3 to test for it. Use a string with
|
|
.\" any nroff-mode formatter not claiming groff compatiblity.
|
|
.ds co \(co
|
|
.if !\n(.g .if n .ds co (C)\" in principle, should be just "c"
|
|
This file is Copyright \*(co \*(Na, \*(Nd for version \*(Nb:\*(Nr.
|
|
NetHack may be freely redistributed.
|
|
See license for details.
|