Files
nethack/doc/recover.6
T
G. Branden Robinson 61a16e6983 doc/recover.6: Fix style and markup nits
* 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.
2026-05-06 04:53:12 -05:00

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.