README.menucolor
1
2 This is version 1.5 of the menucolors patch.
3
4 This patch allows the user to define in what color menus are shown.
5 For example, putting
6
7 OPTIONS=menucolors
8 MENUCOLOR=" blessed "=green
9 MENUCOLOR=" holy "=green
10 MENUCOLOR=" cursed "=red
11 MENUCOLOR=" unholy "=red
12 MENUCOLOR=" cursed .* (being worn)"=orange&underline
13
14 in the configuration file makes all known blessed items
15 show up in green, all cursed items show up in red and
16 all cursed worn items show up in orange and underlined
17 when viewing inventory.
18
19 If you have regex.h but it is not GNU (e.g. DJGPP, *BSD), uncomment
20 #define MENU_COLOR_REGEX_POSIX in include/config.h
21
22 If you do not have regex.h, comment
23 #define MENU_COLOR_REGEX out from include/config.h
24 and replace the MENUCOLOR lines in your config file with these:
25
26 MENUCOLOR="* blessed *"=green
27 MENUCOLOR="* holy *"=green
28 MENUCOLOR="* cursed *"=red
29 MENUCOLOR="* unholy *"=red
30 MENUCOLOR="* cursed * (being worn)"=orange&underline
31
32
33 Colors: black, red, green, brown, blue, magenta, cyan, gray, orange,
34 lightgreen, yellow, lightblue, lightmagenta, lightcyan, white.
35 Attributes: none, bold, dim, underline, blink, inverse.
36
37 Note that the terminal is free to interpret the attributes however
38 it wants.
39
40
41 TODO/BUGS:
42
43 o Only works with TTY and Windows GUI.
44 o You can't use '=' or '&' in the match-string.
45 o Maybe add color-field to tty_menu_item in include/wintty.h
46 (so there's no need to find the color for the line again)
47 o Guidebook is not up to date
48 o Better place to put the functions, colornames[] and attrnames[]?
49 o Some menus do not need coloring; maybe add new parameter
50 to process_menu_window()?
51
52
53 FIXES:
54
55 v1.5:
56 o Partial support for Windows GUI windowport; supports colors,
57 but not attributes.
58
59 v1.4:
60 o Option to use standard instead of GNU regex functions.
61
62 v1.3:
63 o Updated to use 3.4.3 codebase.
64 o Added a text to #version to show menucolors is compiled in.
65
66 v1.2:
67 o Updated to use 3.4.2 codebase.
68
69 v1.1:
70 o Updated to use 3.4.1 codebase.
71 o replaced USE_REGEX_MATCH with MENU_COLOR_REGEX
72
73 v1.04:
74 o Oops! 1.03 worked only on *nixes... (GNU regex.h)
75 o Compile-time option USE_REGEX_MATCH: if it's defined, use regex,
76 otherwise use globbing. ('?' and '*' wildcards)
77
78 v1.03:
79
80 o Now using Nethack 3.4.0 codebase
81 o Compile-time option MENU_COLOR
82 o Strings match using regular expressions instead of globbing
83 o You can use attribute with color (attr must come after '&')
84 o Use ``MENUCOLOR="foo"=color'' instead of ``OPTIONS=menucolor=...''
85 (Both work, but OPTIONS complains if you define menucolor
86 more than once)
87
88 v1.02:
89
90 o Should now work with OS/2, thanks to Jukka Lahtinen
91 o Strings match now using simple globbing. ('?' and '*' wildcards)
92
93 v1.01:
94
95 o Moved 'menucolors' boolean option, so now the options-menu
96 is in alphabetical order.
97 o Fixed 'menucolor' description in dat/opthelp.
98 o menu_colorings is now initialized to null in src/decl.c.
99
100 v1.0:
101
102 o Initial release
103
104--
105 Pasi Kallinen
106 paxed@alt.org
107
README.new_lev_comp
1What is this patch?
2---------------------
3Almost a total redesign of the special level code;
4the level compiler outputs a kind of a bytecode, which Nethack can
5read and execute. The output of the executed bytecode program
6is a dungeon level.
7Most of the changes are not visible to normal player.
8
9
10Visible changes:
11
12-New wizard-mode extended command #mazewalkmap, which shows the
13 MAZEWALK paths.
14
15Changes under the hood:
16
17-*.des file format change: If the level is LEVEL-type,
18 replace DOORs with ROOMDOORs.
19
20-"IF [xx%] THEN ... ENDIF;"
21 and
22 "IF [xx%] THEN ... ELSE ... ENDIF;"
23 (See dat/sokoban.des for an example)
24
25-It's much easier to shoot yourself in the foot when creating
26 new special levels. For example, MAZE-level shops do not get
27 stocked, unless the shop areas are defined before the doors.
28 (This was evident in orcustown)
29
30
31Affected Files:
32-----------------
33include/mkroom.h
34include/sp_lev.h
35doc/README.new_lev_comp (this file)
36src/cmd.c
37src/mkmaze.c
38src/sp_lev.c
39util/lev_comp.l
40util/lev_comp.y
41util/lev_main.c
42dat/*.des
43
44
45BUGS:
46-------
47-shops do not get stocked unless the shop area is defined before
48 the shop door.
49
50
51TODO, problems, ideas and other miscellany:
52---------------------------------------------
53-There may be some regressions, due to the fact that I basically took
54 the 3.3.1 new_lev_comp diff, and applied it by hand on to 3.4.2, but
55 I did check the incremental diffs, up to 3.4.2 and added the missing
56 new parts to the files changed by this patch.
57 (minetn-6 is buggy due to remove_rooms(), as in vanilla 3.4.2)
58
59-Due to the changes how MAZEWALKs are done and how they keep track which
60 parts of the level they should walk on, empty mazes may now get filled
61 with slightly fewer items/traps, etc.
62
63-sort_rooms() causes a problem with subroom door indexes.
64 You can tell when the problem shows up only because shops are
65 not filled correctly; eg. shopkeepers are out of their shops, etc.
66 Currently all I've done is remove sort_rooms() from the random
67 corridor creation, as this doesn't seem to cause any problems.
68
69-When doing ROOM-type level, there's no easy way to put monsters
70 or objects, etc, in a parent room on a random coord, because
71 subrooms come afterwards, and likely on top of them.
72 This causes eg. monsters to be inside subroom walls.
73 Could maybe make change the [sub]room definition,
74 ROOM: <blahblah>
75 <define room stuff here>
76 SUBROOM: <blahblah>
77 <define subroom stuff here>
78 ENDROOM;
79 <define room stuff here>
80 ENDROOM;
81
82-maybe allow subrooms in a subroom? Need a stack where you push
83 the parent room, while doing the subroom, instead of using
84 mkr and mkrsub in sp_level_coder.
85 But this might complicate level creation a bit too much...
86
87-should be able to list room walls in the room door definition,
88 "ROOMDOOR:false, closed, north|south|west, random"
89 and the door is placed on one of those walls.
90 (then the coordinate must be random)
91
92-src/lev_comp.y: there is no easy way to put back the checks whether
93 mon/obj will be put in a wall, unless we run the special level through
94 the sp_level_coder(), with a flag that says it's a test run, or something.
95
96-Add a "transparent" map char, "x". eg.
97 MAP
98 xxLxx
99 xxLxx
100 LLLLL
101 xxLxx
102 xxLxx
103 ENDMAP;
104 puts a cross made out of lavapools, but doesn't change
105 the mapgrids in those places where there are any 'x'.
106
107-Allow x- and y-align in GEOMETRY and ROOM to be random, eg.
108 GEOMETRY: random, random;
109 Also, an explicitly set coordinates:
110 GEOMETRY: (60,8)
111
112-Allow setting of light-state for each MAP:
113 GEOMETRY: center,center;
114 MAPLIGHT:lit;
115 MAP
116 ...
117 .L.
118 ...
119 ENDMAP;
120 Parameters for MAPLIGHT:
121 "random" The map is either light or dark.
122 "lit" The map is lighted.
123 "unlit" The map is dark.
124 "nolitchange" No change in the lighting.
125 "litreverse" Reverse the lighting.
126
127-Add a new command, TERRAIN. For example
128 TERRAIN: (20, 10), 'L', lit;
129 Puts a lighted pool of lava on (20,10).
130
131-Add a new command, LINE. For example
132 LINE: (1,1), (40,10), 'T', lit, true;
133 Creates a lighted line of trees from (1,1) to (40,10). The last parameter
134 is optional. If it's true, the line doesn't have any 'holes' to walk
135 diagonally through.
136
137-Add new commands:
138 SHUFFLE_RANDOM_OBJS, which shuffles the objects given in RANDOM_OBJECTS,
139 SHUFFLE_RANDOM_MONS, which does the same for RANDOM_MONSTERS,
140 SHUFFLE_RANDOM_PLACES, which shuffles RANDOM_PLACES, and
141 EXIT, which exits from the level script immediately.
142
143
144-----
145Pasi Kallinen
146paxed@alt.org
147
README.nh343
1 NetHack 3.4.3 -- General information
2
3NetHack 3.4 is an enhancement to the dungeon exploration game NetHack.
4It is a distant descendent of Rogue and Hack, and a direct descendent of
5NetHack 3.3.
6
7NetHack 3.4.3 is a bugfix release for NetHack 3.4.2.
8 * Several dozen general bug fixes including at least one fatal bug
9 * Correct several inconsistencies
10 * Handle level completely filled with monsters better
11 * win32tty performance enhancements when playing on Windows 98 and Windows Me
12 * win32gui player selection fixes
13 * X11 player selection fixes, one of which could be fatal
14 * Eliminated a gold-in-shop-container cheat
15 * Include bones file version compatibility info in options file
16
17A fuller list of changes for this release can be found in the file
18doc/fixes34.3 in the source distribution. The text in there was written
19for the development team's own use and is provided "as is", so please do
20not ask us to further explain the entries in that file.
21
22The internal structure of bones and save files has not changed between
23NetHack 3.4.0, 3.4.1, 3.4.2 and now 3.4.3. That means that if you use the
24same compiler, the same compiler version and compiler switches, the same
25NetHack compile-time options, and you have not incorporated any additional
26source code patches that altered the save file format on your system, then
27bones and save files from 3.4.0 through 3.4.3 should be compatible.
28
29
30 - - - - - - - - - - -
31
32Please read items (1), (2) and (3) BEFORE doing anything with your new code.
33
341. Unpack the code in a dedicated new directory. We will refer to that
35 directory as the 'Top' directory. It makes no difference what you
36 call it.
37
382. If there is no flaw in the packaging, many sub-directories will be
39 automatically created, and files will be deposited in them:
40
41 a. A 'dat' directory, which contains a variety of data files.
42 b. A 'doc' directory, which contains various documentation.
43 c. An 'include' directory, which contains *.h files.
44 d. A 'src' directory, which contains game *.c files used by all versions.
45 e. A 'util' directory, which contains files for utility programs.
46 f. A 'sys' directory, which contains subdirectories for files that
47 are operating-system specific.
48 g. A 'sys/share' subdirectory, which contains files shared by some OSs.
49 h. A 'sys/share/sounds' subsubdirectory, which contains sound files
50 shared by some OSs.
51 i. A 'sys/amiga' subdirectory, which contains files specific to AmigaDOS.
52 j. A 'sys/amiga/ship' subsubdirectory
53 k. A 'sys/atari' subdirectory, which contains files specific to TOS.
54 l. A 'sys/be' subdirectory, which contains files specific to Be OS.
55 m. A 'sys/mac' subdirectory, which contains files specific to MacOS.
56 n. A 'sys/msdos' subdirectory, which contains files specific to MS-DOS.
57 o. A 'sys/os2' subdirectory, which contains files specific to OS/2.
58 p. A 'sys/unix' subdirectory, which contains files specific to UNIX.
59 q. A 'sys/vms' subdirectory, which contains files specific to VMS.
60 r. A 'sys/wince' subdirectory, which contains files specific to Windows CE.
61 s. A 'sys/winnt' subdirectory, which contains files specific to Windows NT.
62 t. A 'win' directory, which contains subdirectories for files that
63 are windowing-system specific (but not operating-system specific).
64 u. A 'win/share' subdirectory, which contains files shared by some
65 windowing systems.
66 v. A 'win/Qt' subdirectory, which contains files specific to Qt.
67 w. A 'win/X11' subdirectory, which contains files specific to X11.
68 x. A 'win/gem' subdirectory, which contains files specific to GEM.
69 y. A 'win/gnome' subdirectory, which contains files specific to GNOME.
70 z. A 'win/tty' subdirectory, which contains files specific to ttys.
71 A. A 'win/win32' subdirectory, which contains files specific to the
72 Windows Win32 API.
73
74 The names of these directories should not be changed unless you are
75 ready to go through the makefiles and the makedefs program and change
76 all the directory references in them.
77
783. Having unpacked, you should have a file called 'Files' in your Top
79 directory. This file contains the list of all the files you now SHOULD
80 have in each directory. Please check the files in each directory
81 against this list to make sure that you have a complete set.
82
834. Before you do anything else, please read carefully the file called
84 "license" in the 'dat' subdirectory. It is expected that you comply
85 with the terms of that license, and we are very serious about it.
86
875. If everything is in order, you can now turn to trying to get the program
88 to compile and run on your particular system. It is worth mentioning
89 that the default configuration is SysV/Sun/Solaris2.x (simply because
90 the code was housed on such a system). It is also worth mentioning
91 here that NetHack 3.4 is a huge program. If you intend to run it on a
92 small machine, you'll have to make hard choices among the options
93 available in config.h.
94
95 The files sys/*/Install.* were written to guide you in configuring the
96 program for your operating system. The files win/*/Install.* are
97 available, where necessary, to help you in configuring the program
98 for particular windowing environments. Reading them, and the man pages,
99 should answer most of your questions.
100
101 At the time of this release, NetHack 3.4 is known to run/compile on:
102
103 Apple Macintosh running MacOS 7.5 or higher, LinuxPPC, BeOS 4.0
104 Atari ST/TT/Falcon running TOS (or MultiTOS) with GCC
105 Commodore Amiga running AmigaDOS 3.0 or higher with SAS/C 6.x
106 (but see Makefile.ami about DICE and Manx)
107 DEC Alpha/VMS (aka OpenVMS AXP), running V1.x through V7.1
108 DEC VAX/VMS, running V4.6 through V7.1
109 HP 9000s700 running HP-UX 10.x, 11.x
110 IBM PS/2 and AT compatibles running OS/2 - 2.0 and up with GCC emx
111 Intel 80386 or greater (or clone) boxes running MS-DOS with DPMI.
112 Intel 80386 or greater (or clone) boxes running Linux, or BSDI.
113 Intel 80386 or greater (or clone) boxes running Windows 95/98/Me.
114 Intel 80386 or greater (or clone) boxes running Windows NT/2000/XP/2003.
115 Intel Pentium or better (or clone) running BeOS 4.5
116 Sun SPARC based machine running SunOS 4.x, Solaris 2.x, or Solaris 7
117
118 NetHack 3.4 will also run on the following, but a cross-compiler hosted
119 on another platform, such as win32, is required to build from source.
120
121 Pocket PC devices running Windows CE 3.0 and higher
122 H/PC Pro devices running Windows CE 2.11 and higher.
123 Palm Size PC 1.1 devices running Windows CE 2.11
124
125 Previous versions of NetHack were tested on the following systems,
126 and we expect that NetHack 3.4 will work on them as well:
127
128 AT&T 3B1 running System V (3.51)
129 AT&T 3B2/600 & 3B2/622 running System V R3.2.1
130 AT&T 3B2/1000 Model 80 running System V R3.2.2
131 AT&T 3B4000 running System V
132 AT&T 6386 running System V R3.2
133 Data General AViiON systems running DG/UX
134 DEC vaxen running BSD, Ultrix
135 Decstations running Ultrix 3.1, 4.x
136 Encore Multimax running UMAX 4.2
137 Gould NP1 running UTX 3/2
138 HP 9000s300 running HP-UX
139 HP 9000s700 running HP-UX 9.x
140 IBM PC/RT and RS/6000 running AIX 3.x
141 IBM PS/2 and AT compatibles running OS/2 1.1 - 2.0 (and probably
142 Warp) with Microsoft 6.0, and OS/2 2.0 and up with IBM CSet++ 2.0.
143 Intel 80386 or greater (or clone) running 386BSD
144 Mips M2000 running RiscOS 4.1
145 NeXT running Mach (using BSD configuration)
146 Pyramid 9820x running OSx 4.4c
147 SGI Iris running IRIX
148 Stardent Vistra 800 running SysV R4.0
149 Stride 460 running UniStride 2.1
150 Sun-3s, -4s, and -386is running SunOS 3.x
151 Sun-3s and -386is running SunOS 4.x
152 Valid Logic Systems SCALD-System
153
154 Unless otherwise mentioned, the compiler used was the OS-vendor's
155 C compiler.
156
157 With the demise of Windows NT on the DEC Alpha, no attempt has been
158 made to build NetHack 3.4.3 on that platform.
159
160 Windows 98/Me have been the most problematic Windows platforms for
161 running NetHack so far. Patches for 3.4.2 (courtesy Michael Lehotay)
162 have been incorporated into 3.4.3 to help make them work better. Your
163 results may vary.
164
165 A build for Intel 80286 machines and DOS "real mode" overlaid versions
166 has not been produced for 3.4.3. Nobody on the porting team has
167 the time or the software to attempt the necessary tuning that will allow
168 it to achieve the balance of having just the right amount of available
169 memory, and still have acceptable performance. The sources necessary
170 to do so are still included in the source distribution, so if someone
171 has access to a real-mode compiler and lots of spare time on their hands,
172 you may be able to get things working. Of course you do so at your own risk.
173
174 - - - - - - - - - - -
175
176If you have problems building the game, or you find bugs in it, we recommend
177filing a bug report from our "Contact Us" web page at:
178 http://www.nethack.org/
179
180When sending correspondence, please observe the following:
181o Please be sure to include your machine type, OS, and patchlevel.
182o Never send us binary files (e.g. save files or bones files). Whichever
183 platform you are using, only a small minority of the development team has
184 access to it, and you will rapidly annoy the others. If you have found
185 a bug and think that your save file would aid in solving the problem,
186 send us a description in words of the problem, your machine type, your
187 operating system, and the version of NetHack. Tell us that you have a
188 save file, but do not actually send it.
189 In the rare case that we think your save file would be helpful, you will
190 be contacted by a member of the development team with the address of a
191 specific person to send the save file to.
192o Though we make an effort to reply to each bug report, it may take some
193 time before you receive feedback. This is especially true during the
194 period immediately after a new release, when we get the most bug reports.
195o We don't give hints for playing the game.
196o Don't bother to ask when the next version will be out. You will not get
197 a reply.
198
199If you don't have access to the world wide web, or if you want to submit
200a patch for the NetHack source code via email directly, you can direct it
201to this address:
202 nethack-bugs (at) nethack.org
203
204If you've changed something to get NetHack to run on your system, it's likely
205that others have done it by making slightly different modifications. By routing
206your patches through the development team, we should be able to avoid making
207everyone else choose among variant patches claiming to do the same thing, to keep
208most of the copies of 3.4 synchronized by means of official patches, and to
209maintain the painfully-created file organization. (This process has been working
210since the time when everyone just posted their own patches to 2.3. At that time,
211there were no archived bug-fixes to give to people who got 2.3 after its initial
212release, so the same bugs kept being discovered by new batches of people.)
213We have been successful in preventing this from happening since the 3.0
214release. Please cooperate to keep this from happening to 3.4.
215
216It is inevitable that we will reject some proposed additions of new features
217either because they do not fit our conception of the game, or because they
218require more code than we consider they're worth. If we reject your feature,
219you are free, of course, to post the patches to the net yourself and let the
220marketplace decide their worth.
221
222All of this amounts to the following: If you decide to apply a free-lanced
223patch to your 3.4 code, you are on your own. In our own patches, we will
224assume that your code is synchronized with ours.
225
226 -- Good luck, and happy Hacking --
227
README.statuscolors
1Statuscolors is a patch for Nethack (version 3.4.3) that attempts to generalize
2the hpmon patch to be more like the menucolor patch. As of v1.2, the
3statuscolors patch may be applied after the menucolor patch (but not before
4it). Unlike menucolor, it does not use regexps. Instead, it provides the
5following options:
6
7To enable statuscolors:
8 OPTIONS=statuscolors
9
10To specify statuscolor options, write:
11 STATUSCOLOR=<option>,<option>
12
13Numeric options have the format <field>%<max-percent>:<color-option>. For
14example:
15 STATUSCOLOR=hp%15:red&bold,pw%100=green
16
17Text options have the format <text>:<color-option>. Text is case-insensitive.
18For example:
19 STATUSCOLOR=hallu:orange,foodpois:red&inverse&blink
20
21A color option is a <color> followed by an optional sequence of &<attr>. Color
22and attribute names are case insensitive. Valid colors are:
23 black blue brown cyan gray green lightblue lightcyan lightgreen
24 lightmagenta magenta none orange red white yellow
25
26Valid attributes are:
27 blink bold dim inverse none underline
28
29A reasonable set of defaults might be:
30 # HP
31 STATUSCOLOR=hp%100=green,hp%66=yellow,hp%50=orange
32 STATUSCOLOR=hp%33=red&bold,hp%15:red&inverse,hp%0:red&inverse&blink
33 # Pw
34 STATUSCOLOR=pw%100=green,pw%66=yellow,pw%50:orange,pw%33=red&bold
35 # Carry
36 STATUSCOLOR=burdened:yellow,stressed:orange,strained:red&bold
37 STATUSCOLOR=overtaxed:red&inverse,overloaded:red&inverse&blink
38 # Hunger
39 STATUSCOLOR=satiated:yellow,hungry:orange,weak:red&bold
40 STATUSCOLOR=fainting:red&inverse,fainted:red&inverse&blink
41 # Mental
42 STATUSCOLOR=hallu:yellow,conf:orange,stun:red&bold
43 # Health
44 STATUSCOLOR=ill:red&inverse,foodpois:red&inverse,slime:red&inverse
45 # Other
46 STATUSCOLOR=held:red&inverse,blind:red&inverse
47
48Changelog:
49
50 v1.2:
51 - Menucolor compatibility.
52
53 v1.1:
54 - Fixed several shameful bugs.
55
56 v1.0:
57 - Initial release.
58
59---
60Shachaf & Oren Ben-Kiki
61shachaf+nethack@gmail.com
62nethack-oren@ben-kiki.org
63
xlog.readme
1Extended logfile patch for Nethack 3.4.3
2Version 3
3
4This patch creates a new, more verbose logfile of all of the games
5completed, in order to make interpreting the logfile easier, as well as
6providing a simple way to add new fields to the log. A new file (named, by
7default, 'xlogfile') is created, with each line representing a completed
8game. The format looks something like:
9
10version=3.4.3:points=24978:deathdnum=4:deathlev=8:maxlvl=12:hp=-4:maxhp=95:death
11s=1:deathdate=20051215:birthdate=20051215:uid=1000:role=Bar:race=Hum:gender=Mal:
12align=Neu:name=aardvark:death=killed by a gargoyle, while helpless:conduct=0xf80
13:turns=5925:achieve=0x200:realtime=1414:starttime=1134705144:endtime=1134706562
14
15The standard record and logfile both work the same as usual.
16
17All of the information from the standard logfile is stored in the extended
18logfile. In addition, code to record some extra game data is included.
19
20version - the version of nethack (eg '3.4.3')
21points - the final score
22deathdnum - death dungeon number
23deathlev - death level
24maxlvl - max dungeon level
25hp - final hit points
26maxhp - max hit points
27deaths - number of deaths
28deathdate - the date that the game ended (eg '20041130' is Nov 30, 2004)
29birthdate - the date that the game started
30uid - the player's UID
31role - the player's role (3-letter abbreviation, eg 'Sam')
32race - the player's race (3-letter abbreviation, eg 'Hum')
33gender - the player's gender (3-letter abbreviation, eg 'Mal')
34align - the player's alignment (3-letter abbreviation, eg 'Law')
35name - the player's name
36death - the death string (eg 'killed by a woodchuck')
37
38* turns - The number of turns elapsed during the game
39
40* conduct - The conducts followed during the game
41 The conducts are encoded as a bitfield, with each bit representing one
42 conduct. If a bit is set, then the corresponding conduct was followed
43 during the game. (Note: this is backwards from my original conduct
44 patch, but it seems more natural this way.)
45
46 Bit 1 (0x0001) - Went without food
47 Bit 2 (0x0002) - Strict vegan diet
48 Bit 3 (0x0004) - Vegetarian diet
49 Bit 4 (0x0008) - Atheist
50 Bit 5 (0x0010) - Never hit with a wielded weapon
51 Bit 6 (0x0020) - Pacifist
52 Bit 7 (0x0040) - Illiterate
53 Bit 8 (0x0080) - Never polymorphed an object
54 Bit 9 (0x0100) - Never changed form
55 Bit 10 (0x0200) - Used no wishes
56 Bit 11 (0x0400) - Did not wish for any artifacts
57 Bit 12 (0x0800) - Never genocided any monsters
58
59* realtime - The amount of time spent playing the game
60 Records the time (in seconds) actually spent playing the game. (Or, more
61 accurately, all of the time that nethack is loaded and running the game.)
62 Specifically, the timer is started right before giving the welcome
63 message, and stopped when you save or when the game is over.
64
65 Note that this will invalidate save files, because the current value of
66 the timer is recorded in the save file. Bones files should not be
67 invalidated.
68
69* achieve - Whether or not the player reached certain milestones
70 This is another bitfield that records whether or not certain things were
71 achieved.
72
73 Achievement bitfield:
74 bit meaning
75 1 obtained the Bell of Opening
76 2 entered gehennom (by any means)
77 3 obtained the Candelabrum of Invocation
78 4 obtained the Book of the Dead
79 5 performed the invocation ritual
80 6 obtained the amulet
81 7 entered elemental planes
82 8 entered astral plane
83 9 ascended (not "escaped in celestial disgrace!")
84 10 obtained the luckstone from the Mines
85 11 obtained the sokoban prize
86 12 defeated Medusa (killed her by any means)
87
88 This will also invalidate save files, as a structure (u_achieve)
89 containing flags corresponding to a few of these achievements is added
90 to the savefile. Bones files should not be invalidated.
91
92* starttime - The time the game was started, as obtained from time(2).
93 (That is, stored as a 32-bit integer number of seconds
94 since 00:00:00 UTC, January 1, 1970.) This is the same
95 time as "birthdate" above, but with greater precision.
96
97* endtime - The time the game ended; it is the same time as "deathdate"
98 above.
99
100* gender0 - The player's original gender (3 letter abbreviation, eg 'Mal')
101
102* align0 - The player's original alignment (3 letter abbreviation, eg 'Law')
103
104The file sys/unix/Makefile.top is modified to add xlogfile to the install
105target. If you are using a different system, you may need to either initially
106create xlogfile, or modify your makefiles appropriately.
107
108Also included in this patch is an option to display the actual elapsed time
109(the time that RECORD_REALTIME logs) on the status line. It is disabled
110by default, so to enable it you can uncomment the definition of
111REALTIME_ON_BOTL in config.h (and then set the flag showrealtime in either
112nethackrc or via the options menu.)
113
114The REALTIME_ON_BOTL option does not depend on XLOGFILE being defined; I
115just added it to the same patch because they share most of the same code.
116It does break savefile compatibility for the same reasons that
117RECORD_REALTIME does.
118
119Breakdown of files changed:
120include/config.h
121 Added a definition for XLOGFILE, the extended logfile filename
122 Added definition of REALTIME_ON_BOTL
123 Added definitions for RECORD_CONDUCT, RECORD_TURNS, RECORD_ACHIEVE,
124 RECORD_REALTIME, RECORD_START_END_TIME, RECORD_GENDER0, RECORD_ALIGN0
125 in order to give fine-grained control of what should be logged.
126include/decl.h
127 add d_mineend_level and d_sokoend_level to dungeon_topology structure
128 declaration of u_achieve structure and extern definition of achieve
129 declaration of realtime_data structure and extern definition
130include/dungeon.h
131 add definitions of Is_mineend_level() and Is_sokoend_level()
132include/extern.h
133 declaration of get_realtime function
134include/flag.h
135 added showrealtime to iflags structure
136include/obj.h
137 add definition of "record_achieve_special" as "corpsenm"
138src/allmain.c
139 update the status line whenever the number of elapsed minutes changes
140 start the realtime timer and store the time that the game started
141 add get_realtime() function to calculate elapsed time
142src/botl.c
143 display elapsed time
144src/decl.c
145 declaration of globals achieve, realtime_data
146src/do.c
147 set enter_gehennom=1 when the player enters gehennom
148src/dungeon.c
149 add the mine end and sokoban end levels to the level_map list
150src/end.c
151 update the realtime counter when the game ends
152src/invent.c
153 set get_amulet=1, get_candelabrum=1, get_bell=1, and get_book=1 when the
154 corresponding item enters your inventory
155 set get_luckstone and finish_sokoban when the mines luckstone or sokoban
156 prize enters your inventory
157src/mklev.c
158 set perform_invocation=1 when you successfully perform the invocation
159 ritual
160src/mon.c
161 set killed_medusa=1 when Medusa is killed
162src/options.c
163 add "showrealtime" option
164src/pray.c
165 set ascended=1 when ascending
166src/restore.c
167 read the stored value of the realtime timer from the savefile, and set the
168 restore time properly
169src/save.c
170 write the elapsed time to the savefile
171src/sp_lev.c
172 set otmp->record_achieve_special = 1 when generating mines luckstone and
173 sokoban prize
174src/topten.c
175 add definition of deathtime
176 add munge_xlstring to convert any ':' in a string to '_'
177 add write_xlentry which writes a single xlogfile entry
178 add encodeconduct which converts the current player's conduct to a number
179 add encodeachieve which converts the game achievements to a number
180 store the time to deathtime when deathdate is calculated
181 open and write to the xlogfile just after writing to the logfile
182sys/unix/Makefile.top
183 create and set permissions on xlogfile when doing a 'make install'
184util/makedefs.c
185 add entries for XLOGFILE, RECORD_*, and REALTIME_ON_BOTL to
186 build_opts[] list
187