diff --git a/doc/Guidebook.mn b/doc/Guidebook.mn index 1e85d7e02..e6a903062 100644 --- a/doc/Guidebook.mn +++ b/doc/Guidebook.mn @@ -1,4 +1,4 @@ -.\" $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.317 $ $NHDT-Date: 1572448817 2019/10/30 15:20:17 $ +.\" $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.319 $ $NHDT-Date: 1572525093 2019/10/31 12:31:33 $ .\" .\" This is an excerpt from the 'roff' man page from the 'groff' package. .\" NetHack's Guidebook.mn currently does *not* adhere to these guidelines. @@ -2683,7 +2683,9 @@ HACKDIR, must be writable. .lp TROUBLEDIR The location that a record of game aborts and self-diagnosed game problems is kept. Defaults to HACKDIR, must be writable. +.\" .\" config file entries beyond this point are shown alphabetically +.\" .lp AUTOCOMPLETE Enable or disable an extended command autocompletion. Autocompletion has no effect for the X11 windowport. @@ -2749,7 +2751,7 @@ See the \(lqModifying NetHack Symbols\(rq section. .lp "" Example: .sd -\f(CR# replace small punctuation (tick marks) with easier to see digits\fP +\f(CR# replace small punctuation (tick marks) with digits\fP \f(CRSYMBOLS=S_boulder:0,S_golem:7\fP .ed .lp WIZKIT @@ -4576,8 +4578,8 @@ X S_xorn (xorn) Y S_yeti (apelike creature) Z S_zombie (zombie) z S_zruty (zruty) - S_pet_override (pet override if sysconf accessibility is set) - S_player_override (player override if sysconf accessibility is set) +\ S_pet_override (any pet if sysconf accessibility is set) +\ S_player_override (hero if sysconf accessibility is set) .\"TABLE_END Do not delete this line. .TE .pg @@ -4660,7 +4662,7 @@ of moving 8 units at a time. .lp nostatus_updates Prevent updates to the status lines at the bottom of the screen, if your screen-reader reads those lines. The same information can be -seen via the #attributes command. +seen via the \(lq#attributes\(rq command. .hn 2 Global Configuration for System Administrators .pg diff --git a/doc/Guidebook.tex b/doc/Guidebook.tex index 553862907..9c0d9a57d 100644 --- a/doc/Guidebook.tex +++ b/doc/Guidebook.tex @@ -2895,9 +2895,13 @@ Section names are case insensitive. %.pg You can use different configuration statements in the file, some -of which can be used multiple times. In general, the statements are +of which can be used multiple times. +In general, the statements are written in capital letters, followed by an equals sign, followed by -settings particular to that statement. Here is a list of allowed statements: +settings particular to that statement. + +%.pg +Here is a list of allowed statements: %.lp \blist{} @@ -2912,7 +2916,7 @@ You can specify multiple OPTIONS statements, and multiple options separated by commas in a single OPTIONS statement. (Comma separated options are processed from right to left.) -%.pg +%.lp "" Example: %.sd \begin{verbatim} @@ -2946,6 +2950,9 @@ HACKDIR, must be writable. \item[\bb{TROUBLEDIR}] The location that a record of game aborts and self-diagnosed game problems is kept. Defaults to HACKDIR, must be writable. +% +% config file entries beyond this point are shown alphabetically +% %.lp \item[\bb{AUTOCOMPLETE}] Enable or disable an extended command autocompletion. @@ -2955,11 +2962,11 @@ autocompletion, list the extended command. Prefix the command with ``{{\tt !}}'' to disable the autocompletion for that command. -%.pg +%.lp "" Example: %.sd \begin{verbatim} - AUTOCOMPLETE=zap,!annotate + AUTOCOMPLETE=zap,!annotate \end{verbatim} %.ed @@ -2974,7 +2981,7 @@ extended commands. You can specify multiple bindings. Format is key followed by the command, separated by a colon. See the ``Changing Key Bindings`` section for more information. -%.pg +%.lp "" Example: %.sd \begin{verbatim} @@ -2987,7 +2994,7 @@ Example: Chooses at random one of the comma-separated parameters as an active section name. Lines in other sections are ignored. -%.pg +%.lp "" Example: %.sd \begin{verbatim} @@ -3000,23 +3007,37 @@ Example: \end{verbatim} %.ed -%.lp -\item[\bb{MSGTYPE}] -Change the way messages are shown in the top status line. -See the ``Configuring Message Types`` section. %.lp \item[\bb{MENUCOLOR}] Highlight menu lines with different colors. See the ``Configuring Menu Colors`` section. %.lp -\item[\bb{SYMBOLS},\bb{ROGUESYMBOLS}] -Override one or more symbols in the symbols files. +\item[\bb{MSGTYPE}] +Change the way messages are shown in the top status line. +See the ``Configuring Message Types`` section. +%.lp +\item[\bb{ROGUESYMBOLS}] +Custom symbols for for the rogue level's symbol set. +See {\it SYMBOLS} below. +%.lp +\item[\bb{SOUND}] +Define a sound mapping. +See the ``Configuring User Sounds'' section. +%.lp +\item[\bb{SOUNDDIR}] +Define the directory that contains the sound files. +See the ``Configuring User Sounds'' section. +%.lp +\item[\bb{SYMBOLS} +Override one or more symbols in the symbol set used for all dungeon +levels except for the special rogue level. See the ``Modifying {\it NetHack\/} Symbols'' section. %.pg Example: %.sd \begin{verbatim} - SYMBOLS=S_boulder:0 + # replace small punctuation (tick marks) with digits + SYMBOLS=S_boulder:0,S_golem:7 \end{verbatim} %.ed @@ -3026,22 +3047,17 @@ Debug mode only: extra items to add to initial inventory. Value is the name of a text file containing a list of item names, one per line, up to a maximum of 128 lines. Each line is processed by the function that handles wishing. -%.pg + +%.lp "" Example: %.sd \begin{verbatim} - WIZKIT=~/wizkit.txt + WIZKIT=~/wizkit.txt \end{verbatim} %.ed -%.lp -\item[\bb{SOUNDDIR}] -Define the directory that contains the sound files. -See the ``Configuring User Sounds'' section. -%.lp -\item[\bb{SOUND}] -Define a sound mapping. See the ``Configuring User Sounds'' section. \elist +%.lp "" %.pg Here is a short example of config file contents: %.sd @@ -4876,11 +4892,13 @@ on the rogue level. \elist You can also override one or more symbols using the {\it SYMBOLS\/} and -{\it ROGUESYMBOLS\/} config file options. Symbols are specified as -{\it name:value\/} pairs. Note that {\it NetHack\/} escape-processes -the {\it value\/} string in conventional C fashion. This means that `\verb+\+' -is a prefix to take the following character literally. Thus `\verb+\+' needs -to be represented as `\verb+\\+'. +{\it ROGUESYMBOLS\/} config file options. +Symbols are specified as {\it name:value\/} pairs. +Note that {\it NetHack\/} escape-processes +the {\it value\/} string in conventional C fashion. +This means that `\verb+\+' is a prefix to take the following character +literally. +Thus `\verb+\+' needs to be represented as `\verb+\\+'. The special prefix `\verb+\m+' switches on the meta bit in the symbol value, and the `{\tt \^{}}' prefix causes the following character to be treated as a control @@ -5067,8 +5085,8 @@ Default & Symbol Name & Description\\ \verb@Y@ & S\verb+_+yeti & (apelike creature)\\ \verb@Z@ & S\verb+_+zombie & (zombie)\\ \verb@z@ & S\verb+_+zruty & (zruty)\\ -\verb@ @ & S\verb+_+pet\verb+_+override & (pet override if sysconf accessibility is set)\\ -\verb@ @ & S\verb+_+player\verb+_+override & (player override if sysconf accessibility is set) +\verb@ @ & S\verb+_+pet\verb+_+override & (any pet if sysconf accessibility is set)\\ +\verb@ @ & S\verb+_+player\verb+_+override & (hero if sysconf accessibility is set) \end{longtable}% } diff --git a/doc/fixes36.3 b/doc/fixes36.3 index 5940e16aa..c95a46c4c 100644 --- a/doc/fixes36.3 +++ b/doc/fixes36.3 @@ -1,4 +1,4 @@ -$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.149 $ $NHDT-Date: 1572141706 2019/10/27 02:01:46 $ +$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.151 $ $NHDT-Date: 1572530225 2019/10/31 13:57:05 $ This fixes36.3 file is here to capture information about updates in the 3.6.x lineage following the release of 3.6.2 in May 2019. Please note, however, @@ -208,6 +208,8 @@ parsing for the argument to 'scores' option was sloppy; "3a/o" (slash) and "3a 1o" (space and digit one, not lowercase L) both worked but "3a o" (just space) was supposed to but didn't wizmakemap could leave genocided monsters on map +when entering Astral level, initial rendering of guardian angel didn't show + it as tame; noticeable if the level was entered with 'hilite_pet' On Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository diff --git a/include/ntconf.h b/include/ntconf.h index a94ba3579..ab97ea9b7 100644 --- a/include/ntconf.h +++ b/include/ntconf.h @@ -79,6 +79,12 @@ */ #define MAIL +#define CONFIG_FILE "defaults.nh" +#define CONFIG_TEMPLATE "defaults.template" +#define SYSCF_TEMPLATE "sysconf.template" +#define SYMBOLS_TEMPLATE "symbols.template" +#define GUIDEBOOK_FILE "Guidebook.txt" + /* Stuff to help the user with some common, yet significant errors */ #define INTERJECT_PANIC 0 #define INTERJECTION_TYPES (INTERJECT_PANIC + 1) diff --git a/include/pcconf.h b/include/pcconf.h index 875530efd..f113c18b3 100644 --- a/include/pcconf.h +++ b/include/pcconf.h @@ -21,6 +21,11 @@ * Note: 3.6.x was not verified with Symantec C. */ +#if defined(MSDOS) +#define CONFIG_FILE "defaults.nh" +#define GUIDEBOOK_FILE "Guidebook.txt" +#endif + /* * The following options are somewhat configurable depending on * your compiler. diff --git a/src/files.c b/src/files.c index e543c9b71..8455cce34 100644 --- a/src/files.c +++ b/src/files.c @@ -2141,7 +2141,7 @@ const char *default_configfile = "NetHack Defaults"; #else #if defined(MSDOS) || defined(WIN32) - "defaults.nh"; + CONFIG_FILE; #else "NetHack.cnf"; #endif diff --git a/src/minion.c b/src/minion.c index de6018a8d..925fccfd4 100644 --- a/src/minion.c +++ b/src/minion.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 minion.c $NHDT-Date: 1544998886 2018/12/16 22:21:26 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.40 $ */ +/* NetHack 3.6 minion.c $NHDT-Date: 1572530226 2019/10/31 13:57:06 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.43 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2008. */ /* NetHack may be freely redistributed. See license for details. */ @@ -460,15 +460,18 @@ gain_guardian_angel() && (mtmp = mk_roamer(&mons[PM_ANGEL], u.ualign.type, mm.x, mm.y, TRUE)) != 0) { mtmp->mstrategy &= ~STRAT_APPEARMSG; + /* guardian angel -- the one case mtame doesn't imply an + * edog structure, so we don't want to call tamedog(). + * [Note: this predates mon->mextra which allows a monster + * to have both emin and edog at the same time.] + */ + mtmp->mtame = 10; + /* for 'hilite_pet'; after making tame, before next message */ + newsym(mtmp->mx, mtmp->my); if (!Blind) pline("An angel appears near you."); else You_feel("the presence of a friendly angel near you."); - /* guardian angel -- the one case mtame doesn't - * imply an edog structure, so we don't want to - * call tamedog(). - */ - mtmp->mtame = 10; /* make him strong enough vs. endgame foes */ mtmp->m_lev = rn1(8, 15); mtmp->mhp = mtmp->mhpmax = diff --git a/sys/winnt/windmain.c b/sys/winnt/windmain.c index fa29bd350..f9753510f 100644 --- a/sys/winnt/windmain.c +++ b/sys/winnt/windmain.c @@ -300,7 +300,8 @@ update_file( const char * dst_folder, const char * dst_name, const char * src_folder, - const char * src_name) + const char * src_name, + BOOL save_copy) { char dst_path[MAX_PATH]; strcpy(dst_path, dst_folder); @@ -310,12 +311,20 @@ update_file( strcpy(src_path, src_folder); strcat(src_path, src_name); + char save_path[MAX_PATH]; + strcpy(save_path, dst_folder); + strcat(save_path, dst_name); + strcat(save_path, ".save"); + if(!file_exists(src_path)) error("Unable to copy file '%s' as it does not exist", src_path); if (!file_newer(src_path, dst_path)) return; + if (file_exists(dst_path) && save_copy) + CopyFileA(dst_path, save_path, FALSE); + BOOL success = CopyFileA(src_path, dst_path, FALSE); if(!success) error("Failed to update '%s' to '%s'", src_path, dst_path); @@ -324,37 +333,39 @@ update_file( void copy_config_content() { /* Keep templates up to date */ - update_file(g.fqn_prefix[CONFIGPREFIX], "defaults.tmp", - g.fqn_prefix[DATAPREFIX], "defaults.nh"); - update_file(g.fqn_prefix[SYSCONFPREFIX], "sysconf.tmp", - g.fqn_prefix[DATAPREFIX], SYSCF_FILE); + /* TODO: Update the package to store config file as .nethackrc */ + update_file(g.fqn_prefix[CONFIGPREFIX], CONFIG_TEMPLATE, + g.fqn_prefix[DATAPREFIX], CONFIG_FILE, FALSE); + update_file(g.fqn_prefix[SYSCONFPREFIX], SYSCF_TEMPLATE, + g.fqn_prefix[DATAPREFIX], SYSCF_FILE, FALSE); /* If the required early game file does not exist, copy it */ - copy_file(g.fqn_prefix[CONFIGPREFIX], "defaults.nh", - g.fqn_prefix[DATAPREFIX], "defaults.nh"); + /* NOTE: We never replace .nethackrc or sysconf */ + copy_file(g.fqn_prefix[CONFIGPREFIX], CONFIG_FILE, + g.fqn_prefix[DATAPREFIX], CONFIG_FILE); copy_file(g.fqn_prefix[SYSCONFPREFIX], SYSCF_FILE, g.fqn_prefix[DATAPREFIX], SYSCF_FILE); - /* If a required game file does not exist, copy it */ + /* Update symbols and save a copy if we are replacing */ /* TODO: Can't HACKDIR be changed during option parsing causing us to perhaps be checking options against the wrong symbols file? */ - copy_file(g.fqn_prefix[HACKPREFIX], SYMBOLS, - g.fqn_prefix[DATAPREFIX], SYMBOLS); + update_file(g.fqn_prefix[HACKPREFIX], SYMBOLS, + g.fqn_prefix[DATAPREFIX], SYMBOLS, TRUE); } void copy_hack_content() { /* Keep Guidebook and opthelp up to date */ - update_file(g.fqn_prefix[HACKPREFIX], "Guidebook.txt", - g.fqn_prefix[DATAPREFIX], "Guidebook.txt"); - update_file(g.fqn_prefix[HACKPREFIX], "opthelp", - g.fqn_prefix[DATAPREFIX], "opthelp"); + update_file(g.fqn_prefix[HACKPREFIX], GUIDEBOOK_FILE, + g.fqn_prefix[DATAPREFIX], GUIDEBOOK_FILE, FALSE); + update_file(g.fqn_prefix[HACKPREFIX], OPTIONFILE, + g.fqn_prefix[DATAPREFIX], OPTIONFILE, FALSE); /* Keep templates up to date */ - update_file(g.fqn_prefix[HACKPREFIX], "symbols.tmp", - g.fqn_prefix[DATAPREFIX], "symbols"); + update_file(g.fqn_prefix[HACKPREFIX], SYMBOLS_TEMPLATE, + g.fqn_prefix[DATAPREFIX], SYMBOLS, FALSE); }