OSDN Git Service

shrink sokoban
[nethackexpress/trunk.git] / doc / recover.6
1 .TH RECOVER 6 "9 January 1993"
2 .UC 4
3 .SH NAME
4 recover \- recover a NetHack game interrupted by disaster
5 .SH SYNOPSIS
6 .B recover
7 [
8 .B \-d
9 .I directory
10 ]
11 .I "base1 base2" ...
12 .SH DESCRIPTION
13 .PP
14 Occasionally, a NetHack game will be interrupted by disaster
15 when the game or the system crashes.
16 Prior to NetHack v3.1, these games were lost because various information
17 like the player's inventory was kept only in memory.
18 Now, all pertinent information can be written out to disk,
19 so such games can be recovered at the point of the last level change.
20 .PP
21 The
22 .I base
23 options tell
24 .I recover
25 which files to process.
26 Each base option specifies recovery of a separate game.
27 .PP
28 The
29 .B \-d
30 option, which must be the first argument if it appears,
31 supplies a directory which is the NetHack playground.
32 It overrides the value from NETHACKDIR, HACKDIR, or the directory
33 specified by the game administrator during compilation
34 (usually /usr/games/lib/nethackdir).
35 .PP
36 For recovery to be possible,
37 .I nethack
38 must have been compiled with the INSURANCE option, and the run-time option
39 .I checkpoint
40 must also have been on.
41 NetHack normally writes out files for levels as the player leaves them,
42 so they will be ready for return visits.
43 When checkpointing, NetHack also writes out the level entered and
44 the current game state on every level change.
45 This naturally slows level changes down somewhat.
46 .PP
47 The level file names are of the form base.nn, where nn is an internal
48 bookkeeping number for the level.
49 The file base.0 is used for game identity, locking, and, when checkpointing,
50 for the game state.
51 Various OSes use different strategies for constructing the base name.
52 Microcomputers use the character name, possibly truncated and modified
53 to be a legal filename on that system.
54 Multi-user systems use the (modified) character name prefixed
55 by a user number to avoid conflicts,
56 or "xlock" if the number of concurrent players is being limited.
57 It may be necessary to look in the playground to find the correct
58 base name of the interrupted game.
59 .I recover
60 will transform these level files into a save file of the same name as
61 .I nethack
62 would have used.
63 .PP
64 Since
65 .I recover
66 must be able to read and delete files from the playground
67 and create files in the save directory,
68 it has interesting interactions with game security.
69 Giving ordinary players access to
70 .I recover
71 through setuid or setgid is tantamount to leaving the playground
72 world-writable,
73 with respect to both cheating and messing up other players.
74 For a single-user system, this of course does not change anything,
75 so some of the microcomputer ports install
76 .I recover
77 by default.
78 .PP
79 For a multi-user system,
80 the game administrator may want to arrange for all .0 files in the
81 playground to be fed to recover when the host machine boots,
82 and handle game crashes individually.
83 If the user population is sufficiently trustworthy,
84 .I recover
85 can be installed with the same permissions the
86 .I nethack
87 executable has.
88 In either case,
89 .I recover
90 is easily compiled from the distribution utility directory.
91 .SH NOTES
92 .PP
93 Like
94 .I nethack
95 itself,
96 .I recover
97 will overwrite existing savefiles of the same name.
98 Savefiles created by
99 .I recover
100 are uncompressed;
101 they may be compressed afterwards if desired,
102 but even a compression-using
103 .I nethack
104 will find them in the uncompressed form.
105 .SH "SEE ALSO"
106 nethack(6)
107 .SH BUGS
108 .PP
109 .I recover
110 makes no attempt to find out if a base name specifies a game in progress.
111 If multiple machines share a playground, this would be impossible to
112 determine.
113 .PP
114 .I recover
115 should be taught to use the nethack playground locking mechanism to
116 avoid conflicts.