diff --git a/include/decl.h b/include/decl.h
index 6aa7ab4fa..2eb47fcbd 100644
--- a/include/decl.h
+++ b/include/decl.h
@@ -978,6 +978,9 @@ struct instance_globals_u {
/* decl.c */
boolean unweapon;
+ /* revision.c */
+ int uplift_needed_rev0_to_rev1;
+
/* role.c */
struct Role urole; /* player's role. May be munged in role_init() */
struct Race urace; /* player's race. May be munged in role_init() */
diff --git a/include/extern.h b/include/extern.h
index 90f14c21b..90af830f4 100644
--- a/include/extern.h
+++ b/include/extern.h
@@ -2754,6 +2754,15 @@ void restore_msghistory(NHFILE *);
extern void rest_adjust_levelflags(void);
extern void moves_to_relative_time(long *);
extern void relative_time_to_moves(long *);
+extern boolean revision_increment(int, int, uchar *);
+
+/* ### revision.c ### */
+
+extern boolean revision_increment(int, int, uchar *);
+#ifdef DEMO_UPLIFTS
+void uplift_mystruct_rev0_to_mystruct(struct mystruct_rev0 *rev0,
+ struct mystruct *rev1);
+#endif /* DEMO_UPLIFTS */
/* ### rip.c ### */
diff --git a/include/patchlevel.h b/include/patchlevel.h
index 94bfacf74..4c66c7fd2 100644
--- a/include/patchlevel.h
+++ b/include/patchlevel.h
@@ -43,6 +43,14 @@
#define COPYRIGHT_BANNER_C nomakedefs.copyright_banner_c
#define COPYRIGHT_BANNER_D " See license for details."
+/*
+ * SAVEFILE_REVISION_LEVEL
+ * Increment this if there has been a change to a data structure
+ * that the source code is prepared to handle and convert properly.
+ * The SAVEFILE_REVISION_LEVEL value needs to fit into an unsigned byte.
+ */
+#define SAVEFILE_REVISION_LEVEL 0x00
+
/*
* If two or more successive releases have compatible data files, define
* this with the version number of the oldest such release so that the
diff --git a/include/revision.h b/include/revision.h
new file mode 100644
index 000000000..fa324132c
--- /dev/null
+++ b/include/revision.h
@@ -0,0 +1,228 @@
+/* NetHack 5.0 revision.h $NHDT-Date: 1706213796 2024/01/25 20:16:36 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.116 $ */
+/* Copyright (c) Michael Allison, 2026. */
+/* NetHack may be freely redistributed. See license for details. */
+
+/*
+ * Supporting revisions to NetHack structs via incemental
+ * uplifts, rather than incrementing EDITLEVEL and breaking
+ * savefile compatibility.
+ *
+ * Here is the contrived example struct we'll use for
+ * this document:
+ *
+ * The old revision: The new revision:
+ *
+ * struct mystruct { struct mystruct {
+ * int field1; int field1;
+ * int field2; int field2;
+ * char field3; char field3;
+ * long field4; long field4;
+ * }; int newfielda;
+ * int newfieldb;
+ * };
+ *
+ * Steps (using mystruct as an example name)
+ *
+ * 1. Paste an exact copy of the struct declaration as it is/was
+ * in the previous revision into include/revision.h, shrouded by
+ * #if defined(MYSTRUCT_REV0), and tack a '_rev0' suffix onto the
+ * name of the struct. For example,
+ *
+ * #if defined(MYSTRUCT_REV0)
+ * struct mystruct_rev0 {
+ * int field1;
+ * int field2;
+ * char field3;
+ * long field4;
+ * };
+ *
+ * That goes just ahead of this existing placeholder:
+ *
+ * #elif defined(XXX_REV0)
+ *
+ * 2. Place a comment ahead of the mystruct_rev0 declaration
+ * that explains what has changed, and why the revision
+ * is required.
+ *
+ * 3. Immediately following the revised struct declaration in the
+ * original header file where it is located, add the following:
+ *
+ * #define MYSTRUCT_REV0
+ * #include "revision.h"
+ * #undef MYSTRUCT_REV0
+ *
+ * 4. In include/savefile.h, add a new prototype for a function
+ * to read the previous revision from the savefile, ideally
+ * immediately following the prototype for the current active
+ * one that hasn't got the '_rev0' suffix:
+ *
+ * extern void sfi_mystruct(NHFILE *, struct mystruct *,
+ * const char *);
+ * extern void sfi_mystruct_rev0(NHFILE *, struct mystruct_rev0 *,
+ * const char *);
+ *
+ * 5. Also in include/savefile.h, in the '#if NH_C < 202300L' block,
+ * add an entry below the one that should already exist for the
+ * struct that hasn't got the '_rev0' suffix:
+ *
+ * #define Sfi_mystruct(a,b,c) sfi_rm(a, b, c)
+ * #define Sfi_mystruct_rev0(a, b, c) sfi_mystruct_rev0(a, b, c)
+ *
+ * 6. Also in include/savefile.h, in the '#define sfi(nhfp, dt, tag)'
+ * generic function definition, add an entry below the one
+ * that should already exist for the struct name that hasn't
+ * got the '_rev0' suffix:
+ *
+ * struct mystruct * : sfi_rm, \
+ * struct mystruct_rev0 * : sfi_rm_rev0, \
+ *
+ * 7. Also in include/savefile.h, a little further down in the
+ * 'Sfi_' macro defininitions, add one below the existing
+ * one for the struct without the '_rev0' suffix:
+ *
+ * #define Sfi_mystruct(a,b,c) sfi(a, b, c)
+ * #define Sfi_mystruct_rev0(a, b, c) sfi(a, b, c)
+ *
+ * Only the input 'Sfi_' is required, because the old revision
+ * will never be written out to a file, only read in from a
+ * a file, so no 'Sfo_' is needed.
+ *
+ * 8. In include/sfmacros.h, add a new entry below the existing
+ * entry that exists without the '_rev0' suffix:
+ *
+ * SF_C(struct, mystruct)
+ * SF_C(struct, mystruct_rev0)
+ *
+ * 9. In include/sfprocs.h, add a new SF_PROTO_C entry below the
+ * existing entry that already exists without the '_rev0' suffix:
+ *
+ * SF_PROTO_C(struct, mystruct);
+ * SF_PROTO_C(struct, mystruct_rev0);
+ *
+ * 10. Also in include/sfprocs.h, add a new SF_ENTRY_C entry below the
+ * entry that already exists without the '_rev0' suffix:
+ *
+ * SF_ENTRY_C(struct, mystruct);
+ * SF_ENTRY_C(struct, mystruct_rev0);
+ *
+ * 11. In src/sfbase.c, add a prototype for a 'norm_ptrs' stub function
+ * below the entry that already exists without the '_rev0' suffix:
+ *
+ * void norm_ptrs_mystruct(struct mystruct *d_mystruct);
+ * void norm_ptrs_mystruct_rev0(struct mystruct_rev0 *d_mystruct);
+ *
+ * 12. Also in src/sfbase.c, add a 'norm_ptrs' stub function below the
+ * stub function that already exists without the '_rev0' suffix:
+ *
+ * void
+ * norm_ptrs_mystruct(struct mystruct *d_mystruct UNUSED)
+ * {
+ * }
+ *
+ * void
+ * norm_ptrs_mystruct_rev0(struct mystruct_rev0 *d_mystruct_rev0 UNUSED)
+ * {
+ * }
+ *
+ * 13. In src/sfstruct.c, add entries to the 'historical' section below the
+ * existing entry that doesn't have a '_rev0' suffix. You need an 'sfo_'
+ * entry and an 'sfi_' entry here, because they have to match function
+ * pointers in another struct. The 'sfo_' function will not be called
+ * from anywhere.
+ *
+ * historical_sfo_rm,
+ * historical_sfo_rm_rev0,
+ * ...
+ * historical_sfi_rm,
+ * historical_sfi_rm_rev0,
+ *
+ * 14. In the C source file where the 'Sfi_' call is made for your struct,
+ * the current code likely has a line for reading the struct from
+ * a file, similar the one shown below for the mystruct example:
+ *
+ * Sfi_mystruct(nhfp, &svl.mystruct, "mystruct-example");
+ *
+ * That single line will need to modified to become a code block similar
+ * to this, so that the uplift function will get called:
+ *
+ * if (!gu.uplift_needed_rev0_to_rev1) {
+ * Sfi_mystruct(nhfp, &svl.mystruct, "mystruct-example");
+ * } else {
+ * struct mystruct_rev0 old_mystruct;
+ *
+ * Sfi_mystruct_rev0(nhfp, &old_mystruct, "mystruct-example");
+ * uplift_mystruct_rev0_to_mystruct(&old_mystruct, &svl.mystruct);
+ * }
+ * }
+ *
+ * 15. Shortly after the reading of the struct by the 'Sfi_' function,
+ * if the newer revision of the struct added some new fields, new code
+ * will be needed to initialize the new fields to sane values.
+ * There is no data for the new fields in the exising savefile.
+ *
+ * if (gu.uplift_needed_rev0_to_rev1 == 1) {
+ * svl.mystruct.newfielda = sanevalue1;
+ * svl.mystruct.newfieldb = sanevalue2;
+ * }
+ *
+ * 16. In include/extern.h, add a prototype to the ' ### revision.c ###'
+ * section for the supporting uplift function:
+ *
+ * extern void uplift_mystruct_rev0_to_mystruct(struct mystruct_rev0 *,
+ * struct mystruct *);
+ *
+ * 17. Add the uplift function to src/revision.c. It needs to do
+ * field-by-field copies of the fields that exist in the old
+ * revision and the new revision. For now, it likely needs to
+ * be handcrafted using your knowledge of the struct's old
+ * and new revisions.
+ *
+ * Be sure that any new fields present in the newer revision
+ * of the struct get set to sane values or initialized to
+ * zero. Do whatever suits those fields best, based on your
+ * knowledge of the struct.
+ *
+ * void
+ * uplift_mystruct_rev0_to_mystruct(struct mystruct_rev0 *rev0,
+ * struct mystruct *rev1)
+ * {
+ * rev1->field1 = rev0->field1;
+ * rev1->field2 = rev0->field2;
+ * rev1->field3 = rev0->field3;
+ * rev1->field4 = rev0->field4;
+ *
+ * rev1->newfielda = 0; // new field
+ * rev1->newfieldb = 42; // new field
+ * }
+ *
+ */
+
+#if defined(MYSTRUCT_REV0)
+#ifdef DEMO_UPLIFTS
+/*
+ * struct mystruct_rev0
+ *
+ * This is the predecessor for 'struct mystruct'
+ * Revisions to 'struct mystruct' that 'struct mystruct_rev0' does not have:
+ * int newfielda;
+ * int newfieldb;
+ *
+ * The uplift function is:
+ * void uplift_mystruct_rev0_to_mystruct(struct *mystruct_rev0,
+ * struct *mystruct);
+ */
+
+struct mystruct_rev0 {
+ int field1;
+ int field2;
+ char field3;
+ long field4;
+};
+#endif /* DEMO_UPLIFTS */
+
+#elif defined(XXX_REV0)
+
+#else
+#error Unproductive inclusion of revision.h
+#endif
+/* revision.h */
diff --git a/include/savefile.h b/include/savefile.h
index bfaea951d..3307de1ca 100644
--- a/include/savefile.h
+++ b/include/savefile.h
@@ -184,6 +184,10 @@ extern void sfi_int(NHFILE *, int *, const char *);
extern void sfi_unsigned(NHFILE *, unsigned *, const char *);
extern void sfi_long(NHFILE *, long *, const char *);
extern void sfi_ulong(NHFILE *, ulong *, const char *);
+#ifdef DEMO_UPLIFTS
+extern void sfi_mystruct(NHFILE *, struct mystruct *, const char *);
+extern void sfi_mystruct_rev0(NHFILE *, struct mystruct_rev0 *, const char *);
+#endif
#if NH_C < 202300L
#define Sfo_aligntyp(a,b,c) sfo_aligntyp(a, b, c)
#define Sfo_any(a,b,c) sfo_any(a, b, c)
@@ -315,6 +319,10 @@ extern void sfi_ulong(NHFILE *, ulong *, const char *);
#define Sfi_unsigned(a, b, c) sfi_unsigned(a, b, c);
#define Sfi_xint8(a, b, c) sfi_xint8(a, b, c);
#define Sfi_xint16(a, b, c) sfi_xint16(a, b, c);
+#ifdef DEMO_UPLIFTS
+#define Sfi_mystruct(a, b, c) sfi_mystruct(a, b, c)
+#define Sfi_mystruct_rev0(a, b, c) sfi_mystruct_rev0(a, b, c)
+#endif
#else
#define sfo(nhfp, dt, tag) \
@@ -553,7 +561,7 @@ extern void sfi_ulong(NHFILE *, ulong *, const char *);
#define Sfi_dest_area(a,b,c) sfi(a, b, c)
#define Sfi_levelflags(a,b,c) sfi(a, b, c)
#define Sfi_rm(a,b,c) sfi(a, b, c)
-#define Sfi_cemetery(a,b,c) sfi(a, b, c)
+#define Sfi_cemetery(a,b,c) sfi_cemetery(a, b, c)
#define Sfi_damage(a,b,c) sfi(a, b, c)
#define Sfi_stairway(a,b,c) sfi(a, b, c)
#define Sfi_obj(a,b,c) sfi(a, b, c)
@@ -575,6 +583,10 @@ extern void sfi_ulong(NHFILE *, ulong *, const char *);
#define Sfi_unsigned(a, b, c) sfi(a, b, c)
#define Sfi_xint8(a, b, c) sfi(a, b, c)
#define Sfi_xint16(a, b, c) sfi(a, b, c)
+#ifdef DEMO_UPLIFTS
+#define Sfi_mystruct(a, b, c) sfi(a, b, c)
+#define Sfi_mystruct_rev0(a, b, c) sfi(a, b, c)
+#endif
#endif
/* not in _Generic */
diff --git a/include/sfmacros.h b/include/sfmacros.h
index d0bedf69f..0905effaf 100644
--- a/include/sfmacros.h
+++ b/include/sfmacros.h
@@ -49,6 +49,10 @@ SF_C(struct, s_level)
SF_C(struct, trap)
SF_C(struct, you)
SF_C(union, any)
+#ifdef DEMO_UPLIFTS
+SF_C(struct, mystruct)
+SF_C(struct, mystruct_rev0)
+#endif
SF_A(aligntyp)
SF_A(boolean)
diff --git a/include/sfprocs.h b/include/sfprocs.h
index f544b04c9..63bb631fe 100644
--- a/include/sfprocs.h
+++ b/include/sfprocs.h
@@ -68,6 +68,10 @@ SF_PROTO_C(struct, trap);
SF_PROTO_C(struct, version_info);
SF_PROTO_C(struct, you);
SF_PROTO_C(union, any);
+#ifdef DEMO_UPLIFTS
+SF_PROTO_C(struct, mystruct);
+SF_PROTO_C(struct, mystruct_rev0);
+#endif
SF_PROTO(int16);
SF_PROTO(int32);
SF_PROTO(int64);
@@ -149,6 +153,10 @@ struct sf_procs {
SF_ENTRY_C(struct, version_info);
SF_ENTRY_C(struct, you);
SF_ENTRY_C(union, any);
+#ifdef DEMO_UPLIFTS
+ SF_ENTRY_C(struct, mystruct);
+ SF_ENTRY_C(struct, mystruct_rev0);
+#endif
SF_ENTRY(aligntyp);
SF_ENTRY(boolean);
diff --git a/src/decl.c b/src/decl.c
index bb4485705..587c83e90 100644
--- a/src/decl.c
+++ b/src/decl.c
@@ -770,6 +770,8 @@ static const struct instance_globals_u g_init_u = {
FALSE, /* update_all */
/* decl.c */
FALSE, /* unweapon */
+ /* revision.c */
+ 0, /* uplift_needed_rev0_to_rev1 */
/* role.c */
UNDEFINED_ROLE, /* urole */
UNDEFINED_RACE, /* urace */
diff --git a/src/restore.c b/src/restore.c
index fab825de3..870c678f5 100644
--- a/src/restore.c
+++ b/src/restore.c
@@ -30,6 +30,7 @@ staticfn int restlevelfile(xint8);
staticfn void rest_bubbles(NHFILE *);
staticfn void restore_gamelog(NHFILE *);
staticfn void reset_oattached_mids(boolean);
+
/* these ones are declared non-static in extern.h if SFCTOOL is defined */
staticfn boolean restgamestate(NHFILE *);
staticfn void rest_bubbles(NHFILE *);
@@ -900,6 +901,11 @@ dorecover(NHFILE *nhfp)
restlevelstate();
program_state.something_worth_saving = 1; /* useful data now exists */
+ if (gu.uplift_needed_rev0_to_rev1 == 1) {
+ /* they've all been uplifted now */
+ gu.uplift_needed_rev0_to_rev1 = 0;
+ }
+
if (!wizard && !discover)
(void) delete_savefile();
if (Is_rogue_level(&u.uz))
diff --git a/src/revision.c b/src/revision.c
new file mode 100644
index 000000000..97cdb7750
--- /dev/null
+++ b/src/revision.c
@@ -0,0 +1,89 @@
+/* NetHack 5.0 revision.c $NHDT-Date: 1736530208 2025/01/10 09:30:08 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.234 $ */
+/*-Copyright (c) Michael Allison, 2026. */
+/* NetHack may be freely redistributed. See license for details. */
+
+#include "hack.h"
+
+boolean revision_increment(
+ int file_rev_level,
+ int file_critical_byte_count,
+ uchar *csc)
+{
+ if (file_rev_level == 0 && SAVEFILE_REVISION_LEVEL == 1) {
+ /*
+ * Revision 1
+ * We set a flag gu.uplift_needed_rev0_to_rev1 for use by restore routines.
+ *
+ */
+ gu.uplift_needed_rev0_to_rev1 = 1;
+ if (csc[file_critical_byte_count - 1] == 0)
+ /* below may not be necessary, or even useful */
+ csc[file_critical_byte_count - 1] = SAVEFILE_REVISION_LEVEL;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+#ifdef DEMO_UPLIFTS
+
+/* original revision 0 is in include/revision.h */
+
+/* revision 1 */
+struct mystruct {
+ int field1;
+ int field2;
+ char field3;
+ long field4;
+ int newfielda;
+ int newfieldb;
+};
+
+void
+uplift_mystruct_rev0_to_mystruct(struct mystruct_rev0 *rev0,
+ struct mystruct *rev1)
+{
+ rev1->field1 = rev0->field1;
+ rev1->field2 = rev0->field2;
+ rev1->field3 = rev0->field3;
+ rev1->field4 = rev0->field4;
+ rev1->newfielda = 0; // new field
+ rev1->newfieldb = 0; // new field
+}
+
+void
+read_mystruct(struct mystruct *ms)
+{
+#ifdef SAVEFILE_REVISION_LEVEL
+
+#if (SAVEFILE_REVISION_LEVEL == 0)
+ Sfi_mystruct(nhfp, ms, "mystruct-example");
+#elif (SAVEFILE_REVISION_LEVEL == 1)
+
+#define MYSTRUCT_REV0
+#include "revision.h"
+#undef MYSTRUCT_REV0
+
+ if (!gu.uplift_needed_rev0_to_rev1) {
+ Sfi_mystruct(nhfp, ms, "mystruct-example");
+ } else {
+ struct mystruct_rev0 old_mystruct;
+
+ Sfi_mystruct_rev0(nhfp, &old_mystruct, "mystruct-example");
+ uplift_mystruct_rev0_to_mystruct(&old_mystruct, ms);
+ }
+
+ /* this could be elsewhere in some other sourcefile for example,
+ * where it is needed */
+ if (gu.uplift_needed_rev0_to_rev1 == 1) {
+ /* Provide suitable starting values for fields that were not
+ * present in the previous revision that was read */
+ ms->newfielda = 0; // new field in Rev. 1
+ ms->newfieldb = 42; // new field in Rev. 1
+ }
+#endif
+#endif /* SAVEFILE_REVISION_LEVEL */
+}
+
+#endif /* DEMO_UPLIFTS */
+
+/*revision.c*/
diff --git a/src/sfbase.c b/src/sfbase.c
index 00c165c68..b26175b99 100644
--- a/src/sfbase.c
+++ b/src/sfbase.c
@@ -743,6 +743,10 @@ void norm_ptrs_version_info(struct version_info *d_version_info);
void norm_ptrs_vlaunchinfo(union vlaunchinfo *d_vlaunchinfo);
void norm_ptrs_vptrs(union vptrs *d_vptrs);
void norm_ptrs_you(struct you *d_you);
+#ifdef DEMO_UPLIFTS
+void norm_ptrs_mystruct(struct mystruct *d_mystruct);
+void norm_ptrs_mystruct_rev0(struct mystruct_rev0 *d_mystruct_rev0);
+#endif
void
norm_ptrs_any(union any *d_any UNUSED)
@@ -1038,6 +1042,17 @@ norm_ptrs_rm(struct rm *d_rm UNUSED)
{
}
+#ifdef DEMO_UPLIFTS
+void
+norm_ptrs_mystruct(struct mystruct *d_mystruct UNUSED)
+{
+}
+void
+norm_ptrs_mystruct_rev0(struct mystruct_rev0 *d_mystruct_rev0 UNUSED)
+{
+}
+#endif
+
void
norm_ptrs_s_level(struct s_level *d_s_level UNUSED)
{
diff --git a/src/sfstruct.c b/src/sfstruct.c
index 3c8b8fd66..424d57c88 100644
--- a/src/sfstruct.c
+++ b/src/sfstruct.c
@@ -194,7 +194,6 @@ struct sf_structlevel_procs historical_sfo_procs = {
historical_sfo_version_info,
historical_sfo_you,
historical_sfo_any,
-
historical_sfo_aligntyp,
historical_sfo_boolean,
historical_sfo_coordxy,
@@ -219,6 +218,10 @@ struct sf_structlevel_procs historical_sfo_procs = {
historical_sfo_xint8,
historical_sfo_char,
historical_sfo_bitfield,
+#ifdef DEMO_UPLIFTS
+ historical_sfo_mystruct,
+ historical_sfo_mystruct_rev0,
+#endif
}
};
@@ -295,6 +298,10 @@ struct sf_structlevel_procs historical_sfi_procs = {
historical_sfi_xint8,
historical_sfi_char,
historical_sfi_bitfield,
+#ifdef DEMO_UPLIFTS
+ historical_sfi_mystruct,
+ historical_sfi_mystruct_rev0,
+#endif
}
};
diff --git a/src/version.c b/src/version.c
index 1958ae5ed..fb92ddbec 100644
--- a/src/version.c
+++ b/src/version.c
@@ -607,7 +607,7 @@ struct critical_sizes_with_names critical_sizes[] = {
{ (uchar) sizeof(struct objclass), "struct objclass" },
{ (uchar) sizeof(struct oextra), "struct oextra" },
{ (uchar) sizeof(struct q_score), "struct q_score" },
- { (uchar) sizeof(struct rm), "struct rm" },
+ { (uchar) sizeof(struct rm), "struct rm" }, /* [61] */
{ (uchar) sizeof(struct spell), "struct spell" },
{ (uchar) sizeof(struct stairway), "struct stairway" },
{ (uchar) sizeof(struct s_level), "struct s_level" },
@@ -660,7 +660,7 @@ struct critical_sizes_with_names critical_sizes[] = {
{ 0, "" },
{ 0, "" },
{ 0, "" },
- { 0, "" },
+ { (uchar) SAVEFILE_REVISION_LEVEL, "savefile_revision_level" },
};
uchar cscbuf[SIZE(critical_sizes)];
@@ -780,6 +780,15 @@ compare_critical_bytes(NHFILE *nhfp, int *idx_1st_mismatch, unsigned long utdfla
Sfi_uchar(nhfp, &cscbuf[i], "critical_sizes");
}
for (i = 1; i < cnt; ++i) {
+ if (cscbuf[i] != critical_sizes[i].ucsize && i == cnt - 1) {
+ /* SAVEFILE_REVISION_LEVEL mismatch; attempt to deal with it */
+ int file_rev_level = cscbuf[i];
+
+ if (revision_increment(file_rev_level,
+ file_csc_count,
+ cscbuf))
+ continue;
+ }
if (cscbuf[i] != critical_sizes[i].ucsize) {
const char *dm = datamodel(0), *dmfile;
diff --git a/sys/msdos/Makefile.GCC b/sys/msdos/Makefile.GCC
index d7220fc10..1f8107826 100644
--- a/sys/msdos/Makefile.GCC
+++ b/sys/msdos/Makefile.GCC
@@ -288,18 +288,18 @@ VOBJ14 = $(O)muse.o $(O)music.o $(O)o_init.o $(O)objects.o $(O)objnam.
VOBJ15 = $(O)options.o $(O)pickup.o $(O)pline.o $(O)polyself.o $(O)potion.o
VOBJ16 = $(O)quest.o $(O)questpgr.o $(O)pager.o $(O)pray.o $(O)priest.o
VOBJ17 = $(O)read.o $(O)rect.o $(O)region.o $(O)report.o $(O)restore.o
-VOBJ18 = $(O)rip.o $(O)rnd.o $(O)role.o $(O)rumors.o $(O)save.o
-VOBJ19 = $(O)selvar.o $(O)sfstruct.o $(O)shk.o $(O)shknam.o $(O)sit.o
-VOBJ20 = $(O)sounds.o $(O)sp_lev.o $(O)spell.o $(O)stairs.o $(O)steal.o
-VOBJ21 = $(O)steed.o $(O)symbols.o $(O)sys.o $(O)teleport.o $(O)strutil.o
-VOBJ22 = $(O)termcap.o $(O)timeout.o $(O)topl.o $(O)topten.o $(O)trap.o
-VOBJ23 = $(O)u_init.o $(O)uhitm.o $(O)utf8map.o $(O)vault.o $(O)track.o
-VOBJ24 = $(O)vision.o $(O)weapon.o $(O)were.o $(O)wield.o $(O)windows.o
-VOBJ25 = $(O)wintty.o $(O)wizard.o $(O)wizcmds.o $(O)worm.o $(O)worn.o
-VOBJ26 = $(O)write.o $(O)zap.o $(O)light.o $(O)dlb.o $(REGEX)
+VOBJ18 = $(O)revision.o $(O)rip.o $(O)rnd.o $(O)role.o $(O)rumors.o
+VOBJ19 = $(O)save.o $(O)selvar.o $(O)sfstruct.o $(O)shk.o $(O)shknam.o
+VOBJ20 = $(O)sit.o $(O)sounds.o $(O)sp_lev.o $(O)spell.o $(O)stairs.o
+VOBJ21 = $(O)steal.o $(O)steed.o $(O)symbols.o $(O)sys.o $(O)teleport.o
+VOBJ22 = $(O)strutil.o $(O)termcap.o $(O)timeout.o $(O)topl.o $(O)topten.o
+VOBJ23 = $(O)trap.o $(O)u_init.o $(O)uhitm.o $(O)utf8map.o $(O)vault.o
+VOBJ24 = $(O)track.o $(O)vision.o $(O)weapon.o $(O)were.o $(O)wield.o
+VOBJ25 = $(O)windows.o $(O)wintty.o $(O)wizard.o $(O)wizcmds.o $(O)worm.o
+VOBJ26 = $(O)worn.o $(O)write.o $(O)zap.o $(O)light.o $(O)dlb.o $(REGEX)
-SOBJ = $(O)msdos.o $(O)pcsys.o $(O)tty.o $(O)unix.o \
- $(O)video.o $(O)vidtxt.o $(O)pckeys.o
+SOBJ = $(O)msdos.o $(O)pcsys.o $(O)tty.o $(O)unix.o \
+ $(O)video.o $(O)vidtxt.o $(O)pckeys.o
VVOBJ = $(O)version.o
diff --git a/sys/unix/Makefile.src b/sys/unix/Makefile.src
index 71d55b3ce..d89958d10 100644
--- a/sys/unix/Makefile.src
+++ b/sys/unix/Makefile.src
@@ -514,21 +514,21 @@ HACK_H = ../src/hack.h-t
# all .c that are part of the main NetHack program and are not operating- or
# windowing-system specific. Do not include date.c in this list.
HACKCSRC ?= allmain.c alloc.c apply.c artifact.c attrib.c ball.c bones.c \
- botl.c calendar.c cmd.c coloratt.c dbridge.c decl.c detect.c dig.c display.c \
- dlb.c do.c do_name.c do_wear.c dog.c dogmove.c dokick.c dothrow.c \
- drawing.c dungeon.c earlyarg.c eat.c end.c engrave.c exper.c explode.c \
- extralev.c files.c fountain.c hack.c hacklib.c \
+ botl.c calendar.c cmd.c coloratt.c dbridge.c decl.c detect.c dig.c \
+ display.c dlb.c do.c do_name.c do_wear.c dog.c dogmove.c dokick.c \
+ dothrow.c drawing.c dungeon.c earlyarg.c eat.c end.c engrave.c \
+ exper.c explode.c extralev.c files.c fountain.c hack.c hacklib.c \
getpos.c glyphs.c iactions.c insight.c invent.c isaac64.c light.c \
lock.c mail.c makemon.c mcastu.c mdlib.c mhitm.c \
mhitu.c minion.c mklev.c mkmap.c mkmaze.c mkobj.c mkroom.c mon.c \
mondata.c monmove.c monst.c mplayer.c mthrowu.c muse.c music.c \
nhlua.c nhlsel.c nhlobj.c nhmd4.c o_init.c objects.c objnam.c \
options.c pager.c pickup.c pline.c polyself.c potion.c pray.c \
- priest.c quest.c questpgr.c read.c rect.c region.c report.c restore.c \
- rip.c rnd.c role.c rumors.c save.c selvar.c sfbase.c sfstruct.c \
- shk.c shknam.c sit.c sounds.c sp_lev.c spell.c stairs.c steal.c steed.c \
- strutil.c symbols.c sys.c teleport.c \
- timeout.c topten.c track.c trap.c u_init.c utf8map.c \
+ priest.c quest.c questpgr.c read.c rect.c region.c report.c \
+ restore.c revision.c rip.c rnd.c role.c rumors.c save.c selvar.c \
+ sfbase.c sfstruct.c shk.c shknam.c sit.c sounds.c sp_lev.c \
+ spell.c stairs.c steal.c steed.c strutil.c symbols.c sys.c \
+ teleport.c timeout.c topten.c track.c trap.c u_init.c utf8map.c \
uhitm.c vault.c version.c vision.c weapon.c were.c wield.c \
windows.c wizard.c wizcmds.c worm.c worn.c write.c zap.c
@@ -567,14 +567,13 @@ HACKINCL ?= align.h artifact.h artilist.h attrib.h botl.h \
color.h config.h config1.h context.h coord.h cstd.h decl.h \
defsym.h display.h dlb.h dungeon.h engrave.h extern.h flag.h \
fnamesiz.h func_tab.h global.h warnings.h hack.h lint.h mextra.h \
- mcastu.h \
- micro.h mfndpos.h mkroom.h monattk.h mondata.h monflag.h monst.h \
- monsters.h nhmd4.h obj.h objects.h objclass.h optlist.h patchlevel.h \
- pcconf.h permonst.h prop.h rect.h region.h savefile.h selvar.h sym.h \
- rm.h sp_lev.h spell.h sndprocs.h seffects.h stairs.h sys.h \
- tcap.h timeout.h tradstdc.h trap.h unixconf.h vision.h vmsconf.h \
- wintty.h wincurs.h winX.h winprocs.h wintype.h you.h youprop.h \
- weight.h
+ mcastu.h micro.h mfndpos.h mkroom.h monattk.h mondata.h monflag.h \
+ monst.h monsters.h nhmd4.h obj.h objects.h objclass.h optlist.h \
+ patchlevel.h pcconf.h permonst.h prop.h rect.h region.h revision.h \
+ savefile.h selvar.h sym.h rm.h sp_lev.h spell.h sndprocs.h \
+ seffects.h stairs.h sys.h tcap.h timeout.h tradstdc.h trap.h \
+ unixconf.h vision.h vmsconf.h wintty.h wincurs.h winX.h winprocs.h \
+ wintype.h you.h youprop.h weight.h
HSOURCES ?= $(HACKINCL) dgn_file.h
@@ -617,20 +616,20 @@ HOBJ ?= $(TARGETPFX)allmain.o $(TARGETPFX)alloc.o \
$(TARGETPFX)potion.o $(TARGETPFX)pray.o $(TARGETPFX)priest.o \
$(TARGETPFX)quest.o $(TARGETPFX)questpgr.o $(TARGETPFX)read.o \
$(TARGETPFX)rect.o $(TARGETPFX)region.o $(TARGETPFX)report.o \
- $(TARGETPFX)restore.o $(TARGETPFX)rip.o $(TARGETPFX)rnd.o \
- $(TARGETPFX)role.o $(TARGETPFX)rumors.o $(TARGETPFX)save.o \
- $(TARGETPFX)selvar.o $(TARGETPFX)sfbase.o $(TARGETPFX)sfstruct.o \
- $(TARGETPFX)shk.o $(TARGETPFX)shknam.o $(TARGETPFX)sit.o \
- $(TARGETPFX)sounds.o $(TARGETPFX)sp_lev.o $(TARGETPFX)spell.o \
- $(TARGETPFX)stairs.o $(TARGETPFX)symbols.o $(TARGETPFX)sys.o \
- $(TARGETPFX)steal.o $(TARGETPFX)steed.o $(TARGETPFX)strutil.o \
- $(TARGETPFX)teleport.o $(TARGETPFX)timeout.o $(TARGETPFX)topten.o \
- $(TARGETPFX)track.o $(TARGETPFX)trap.o $(TARGETPFX)u_init.o \
- $(TARGETPFX)uhitm.o $(TARGETPFX)utf8map.o $(TARGETPFX)vault.o \
- $(TARGETPFX)vision.o $(TARGETPFX)weapon.o $(TARGETPFX)were.o \
- $(TARGETPFX)wield.o $(TARGETPFX)windows.o $(TARGETPFX)wizard.o \
- $(TARGETPFX)wizcmds.o $(TARGETPFX)worm.o $(TARGETPFX)worn.o \
- $(TARGETPFX)write.o $(TARGETPFX)zap.o \
+ $(TARGETPFX)restore.o $(TARGETPFX)revision.o $(TARGETPFX)rip.o \
+ $(TARGETPFX)rnd.o $(TARGETPFX)role.o $(TARGETPFX)rumors.o \
+ $(TARGETPFX)save.o $(TARGETPFX)selvar.o $(TARGETPFX)sfbase.o \
+ $(TARGETPFX)sfstruct.o $(TARGETPFX)shk.o $(TARGETPFX)shknam.o \
+ $(TARGETPFX)sit.o $(TARGETPFX)sounds.o $(TARGETPFX)sp_lev.o \
+ $(TARGETPFX)spell.o $(TARGETPFX)stairs.o $(TARGETPFX)symbols.o \
+ $(TARGETPFX)sys.o $(TARGETPFX)steal.o $(TARGETPFX)steed.o \
+ $(TARGETPFX)strutil.o $(TARGETPFX)teleport.o $(TARGETPFX)timeout.o \
+ $(TARGETPFX)topten.o $(TARGETPFX)track.o $(TARGETPFX)trap.o \
+ $(TARGETPFX)u_init.o $(TARGETPFX)uhitm.o $(TARGETPFX)utf8map.o \
+ $(TARGETPFX)vault.o $(TARGETPFX)vision.o $(TARGETPFX)weapon.o \
+ $(TARGETPFX)were.o $(TARGETPFX)wield.o $(TARGETPFX)windows.o \
+ $(TARGETPFX)wizard.o $(TARGETPFX)wizcmds.o $(TARGETPFX)worm.o \
+ $(TARGETPFX)worn.o $(TARGETPFX)write.o $(TARGETPFX)zap.o \
$(REGEXOBJ) $(RANDOBJ) $(SYSOBJ) $(WINOBJ) \
$(HINTOBJ) $(SNDLIBOBJ) $(UUIDOBJ) \
$(TARGETPFX)version.o
@@ -907,19 +906,19 @@ $(HACK_H): $(CONFIG_H) ../include/align.h ../include/artilist.h \
../include/decl.h ../include/defsym.h ../include/display.h \
../include/dungeon.h ../include/engrave.h ../include/flag.h \
../include/hack.h ../include/lint.h ../include/mextra.h \
- ../include/mcastu.h \
- ../include/mkroom.h ../include/monattk.h ../include/mondata.h \
- ../include/monflag.h ../include/monst.h ../include/monsters.h \
- ../include/nhlua.h ../include/obj.h ../include/objclass.h \
- ../include/objects.h ../include/permonst.h ../include/prop.h \
- ../include/quest.h ../include/rect.h ../include/region.h \
+ ../include/mcastu.h ../include/mkroom.h ../include/monattk.h \
+ ../include/mondata.h ../include/monflag.h ../include/monst.h \
+ ../include/monsters.h ../include/nhlua.h ../include/obj.h \
+ ../include/objclass.h ../include/objects.h \
+ ../include/permonst.h ../include/prop.h ../include/quest.h \
+ ../include/rect.h ../include/region.h ../include/revision.h \
../include/rm.h ../include/savefile.h ../include/sfprocs.h \
- ../include/seffects.h ../include/selvar.h \
- ../include/skills.h ../include/sndprocs.h ../include/spell.h \
- ../include/stairs.h ../include/sym.h ../include/sys.h \
- ../include/timeout.h ../include/trap.h ../include/vision.h \
- ../include/weight.h ../include/winprocs.h \
- ../include/wintype.h ../include/you.h ../include/youprop.h
+ ../include/seffects.h ../include/selvar.h ../include/skills.h \
+ ../include/sndprocs.h ../include/spell.h ../include/stairs.h \
+ ../include/sym.h ../include/sys.h ../include/timeout.h \
+ ../include/trap.h ../include/vision.h ../include/weight.h \
+ ../include/winprocs.h ../include/wintype.h ../include/you.h \
+ ../include/youprop.h
touch $(HACK_H)
#
$(TARGETPFX)cppregex.o: ../sys/share/cppregex.cpp $(CONFIG_H)
@@ -1256,6 +1255,7 @@ $(TARGETPFX)rect.o: rect.c $(HACK_H)
$(TARGETPFX)region.o: region.c $(HACK_H)
$(TARGETPFX)report.o: report.c $(HACK_H) ../include/dlb.h ../include/nhmd4.h
$(TARGETPFX)restore.o: restore.c $(HACK_H) ../include/tcap.h
+$(TARGETPFX)revision.o: revision.c $(HACK_H)
$(TARGETPFX)rip.o: rip.c $(HACK_H)
$(TARGETPFX)rnd.o: rnd.c $(HACK_H) ../include/isaac64.h
$(TARGETPFX)role.o: role.c $(HACK_H)
diff --git a/sys/vms/Makefile.src b/sys/vms/Makefile.src
index 4cdef1436..b810ad946 100644
--- a/sys/vms/Makefile.src
+++ b/sys/vms/Makefile.src
@@ -157,12 +157,12 @@ HACKCSRC = allmain.c alloc.c apply.c artifact.c attrib.c ball.c bones.c \
monmove.c monst.c mplayer.c mthrowu.c muse.c music.c o_init.c \
objects.c objnam.c options.c pager.c pickup.c pline.c polyself.c \
potion.c pray.c priest.c quest.c questpgr.c read.c rect.c \
- region.c report.c restore.c rip.c rnd.c role.c rumors.c save.c \
- selvar.c sfstruct.c shk.c shknam.c sit.c sounds.c sp_lev.c \
- spell.c stairs.c steal.c steed.c strutil.c sys.c teleport.c \
- timeout.c topten.c track.c trap.c u_init.c uhitm.c vault.c \
- version.c vision.c weapon.c were.c wield.c windows.c wizard.c \
- wizcmds.c worm.c worn.c write.c zap.c
+ region.c report.c restore.c revision.c rip.c rnd.c role.c \
+ rumors.c save.c selvar.c sfstruct.c shk.c shknam.c sit.c sounds.c \
+ sp_lev.c spell.c stairs.c steal.c steed.c strutil.c sys.c \
+ teleport.c timeout.c topten.c track.c trap.c u_init.c uhitm.c \
+ vault.c version.c vision.c weapon.c were.c wield.c windows.c \
+ wizard.c wizcmds.c worm.c worn.c write.c zap.c
#-# generated source files (vis_tab.c is gone; tile.c is handled separately
#-# via WINxxxSRC)
@@ -180,11 +180,11 @@ HACKINCL = align.h artifact.h artilist.h attrib.h botl.h \
fnamesiz.h func_tab.h global.h warnings.h hack.h lint.h mextra.h \
micro.h mkroom.h monattk.h mondata.h monflag.h monst.h monsters.h \
mfndpos.h nhmd4.h obj.h objects.h objclass.h optlist.h patchlevel.h \
- pcconf.h permonst.h prop.h rect.h region.h savefile.h selvar.h sym.h \
- rm.h sp_lev.h spell.h sndprocs.h seffects.h stairs.h sys.h \
- tcap.h timeout.h tradstdc.h trap.h unixconf.h vision.h vmsconf.h \
- wintty.h wincurs.h winX.h winprocs.h wintype.h you.h youprop.h \
- weight.h
+ pcconf.h permonst.h prop.h rect.h region.h revision.h savefile.h \
+ selvar.h sym.h rm.h sp_lev.h spell.h sndprocs.h seffects.h \
+ stairs.h sys.h tcap.h timeout.h tradstdc.h trap.h unixconf.h \
+ vision.h vmsconf.h wintty.h wincurs.h winX.h winprocs.h wintype.h \
+ you.h youprop.h weight.h
#HSOURCES = $(HACKINCL) date.h onames.h pm.h
@@ -575,6 +575,7 @@ read.obj : read.c $(HACK_H)
rect.obj : rect.c $(HACK_H)
region.obj : region.c $(HACK_H)
restore.obj : restore.c $(HACK_H) $(INC)tcap.h
+revision.obj : revision.c $(HACK_H)
rip.obj : rip.c $(HACK_H)
rnd.obj : rnd.c $(HACK_H)
role.obj : role.c $(HACK_H)
diff --git a/sys/vms/Makefile_src.vms b/sys/vms/Makefile_src.vms
index 160ddb95d..31a4963af 100644
--- a/sys/vms/Makefile_src.vms
+++ b/sys/vms/Makefile_src.vms
@@ -102,7 +102,7 @@ CONFIGBASEH := color config config1 patchlevel tradstdc hacklib integer \
HACKBASEH := hack lint align dungeon wintype sym defsym \
mkroom artilist objclass objects youprop \
prop permonst monattk monflag monsters \
- mondata context rm botl rect region trap \
+ mondata context rm botl rect region revision trap \
display vision seffects selvar sndprocs stairs decl \
quest spell obj engrave you attrib monst \
mextra skills timeout flag winprocs sys
@@ -800,6 +800,7 @@ $(TARGETPFX)rect.obj: rect.c $(HACK_H)
$(TARGETPFX)region.obj: region.c $(HACK_H)
$(TARGETPFX)report.obj: report.c $(HACK_H)
$(TARGETPFX)restore.obj: restore.c $(HACK_H) $(INCL)tcap.h
+$(TARGETPFX)revision.obj: revision.c $(HACK_H)
$(TARGETPFX)rip.obj: rip.c $(HACK_H)
$(TARGETPFX)rnd.obj: rnd.c $(HACK_H) $(INCL)isaac64.h
$(TARGETPFX)role.obj: role.c $(HACK_H)
diff --git a/sys/windows/GNUmakefile b/sys/windows/GNUmakefile
index cfbcead9e..43de44671 100644
--- a/sys/windows/GNUmakefile
+++ b/sys/windows/GNUmakefile
@@ -800,8 +800,8 @@ HACK_H = $(CONFIG_H) ../include/align.h ../include/artilist.h \
../include/nhlua.h ../include/obj.h ../include/objclass.h \
../include/objects.h ../include/permonst.h ../include/prop.h \
../include/quest.h ../include/rect.h ../include/region.h \
- ../include/rm.h ../include/savefile.h ../include/sfprocs.h \
- ../include/seffects.h ../include/selvar.h \
+ ../include/revision.h ../include/rm.h ../include/savefile.h \
+ ../include/sfprocs.h ../include/seffects.h ../include/selvar.h \
../include/skills.h ../include/sndprocs.h ../include/spell.h \
../include/stairs.h ../include/sym.h ../include/sys.h \
../include/timeout.h ../include/trap.h ../include/vision.h \
@@ -1238,7 +1238,7 @@ COREOBJS = $(addsuffix .o, allmain alloc apply artifact attrib ball bones botl \
mon mondata monmove monst mplayer mthrowu muse music \
nhlobj nhlsel nhlua windsound o_init objects objnam options \
pager pickup pline polyself potion pray priest quest questpgr \
- random read rect region report restore rip rnd role rumors \
+ random read rect region report restore revision rip rnd role rumors \
save sfbase sfstruct shk shknam sit selvar sounds sp_lev \
spell stairs steal steed strutil \
symbols sys teleport timeout topten track trap u_init uhitm utf8map \
diff --git a/sys/windows/Makefile.nmake b/sys/windows/Makefile.nmake
index 93df07466..53efb2b84 100644
--- a/sys/windows/Makefile.nmake
+++ b/sys/windows/Makefile.nmake
@@ -671,17 +671,17 @@ HACKCSRC = \
$(SRC)objnam.c $(SRC)options.c $(SRC)pager.c $(SRC)pickup.c \
$(SRC)pline.c $(SRC)polyself.c $(SRC)potion.c $(SRC)pray.c \
$(SRC)priest.c $(SRC)quest.c $(SRC)questpgr.c $(SRC)read.c \
- $(SRC)rect.c $(SRC)region.c $(SRC)restore.c $(SRC)rip.c \
- $(SRC)rnd.c $(SRC)role.c $(SRC)rumors.c $(SRC)save.c \
- $(SRC)selvar.c $(SRC)sfbase.c $(SRC)sfstruct.c $(SRC)shk.c \
- $(SRC)shknam.c $(SRC)sit.c $(SRC)sounds.c $(SRC)sp_lev.c \
- $(SRC)spell.c $(SRC)stairs.c $(SRC)steal.c $(SRC)steed.c \
- $(SRC)symbols.c $(SRC)sys.c $(SRC)teleport.c $(SRC)timeout.c \
- $(SRC)topten.c $(SRC)track.c $(SRC)trap.c $(SRC)u_init.c \
- $(SRC)uhitm.c $(SRC)utf8map.c $(SRC)vault.c $(SRC)version.c \
- $(SRC)vision.c $(SRC)weapon.c $(SRC)were.c $(SRC)wield.c \
- $(SRC)windows.c $(SRC)wizard.c $(SRC)worm.c $(SRC)worn.c \
- $(SRC)write.c $(SRC)zap.c
+ $(SRC)rect.c $(SRC)region.c $(SRC)restore.c $(SRC)revision.c \
+ $(SRC)rip.c $(SRC)rnd.c $(SRC)role.c $(SRC)rumors.c \
+ $(SRC)save.c $(SRC)selvar.c $(SRC)sfbase.c $(SRC)sfstruct.c \
+ $(SRC)shk.c $(SRC)shknam.c $(SRC)sit.c $(SRC)sounds.c \
+ $(SRC)sp_lev.c $(SRC)spell.c $(SRC)stairs.c $(SRC)steal.c \
+ $(SRC)steed.c $(SRC)symbols.c $(SRC)sys.c $(SRC)teleport.c \
+ $(SRC)timeout.c $(SRC)topten.c $(SRC)track.c $(SRC)trap.c \
+ $(SRC)u_init.c $(SRC)uhitm.c $(SRC)utf8map.c $(SRC)vault.c \
+ $(SRC)version.c $(SRC)vision.c $(SRC)weapon.c $(SRC)were.c \
+ $(SRC)wield.c $(SRC)windows.c $(SRC)wizard.c $(SRC)worm.c \
+ $(SRC)worn.c $(SRC)write.c $(SRC)zap.c
# all .h files except date.h
HACKINCL = \
@@ -700,15 +700,16 @@ HACKINCL = \
$(INCL)obj.h $(INCL)objects.h $(INCL)objclass.h \
$(INCL)optlist.h $(INCL)patchlevel.h $(INCL)pcconf.h \
$(INCL)permonst.h $(INCL)prop.h $(INCL)rect.h \
- $(INCL)region.h $(INCL)savefile.h $(INCL)selvar.h \
- $(INCL)sfprocs.h $(INCL)sym.h $(INCL)rm.h \
- $(INCL)sp_lev.h $(INCL)spell.h $(INCL)sndprocs.h \
- $(INCL)seffects.h $(INCL)stairs.h $(INCL)sys.h \
- $(INCL)tcap.h $(INCL)timeout.h $(INCL)tradstdc.h \
- $(INCL)trap.h $(INCL)unixconf.h $(INCL)vision.h \
- $(INCL)vmsconf.h $(INCL)wintty.h $(INCL)wincurs.h \
- $(INCL)winX.h $(INCL)winprocs.h $(INCL)wintype.h \
- $(INCL)you.h $(INCL)youprop.h $(INCL)weight.h
+ $(INCL)region.h $(INCL)revision.h $(INCL)savefile.h \
+ $(INCL)selvar.h $(INCL)sfprocs.h $(INCL)sym.h \
+ $(INCL)rm.h $(INCL)sp_lev.h $(INCL)spell.h \
+ $(INCL)sndprocs.h $(INCL)seffects.h $(INCL)stairs.h \
+ $(INCL)sys.h $(INCL)tcap.h $(INCL)timeout.h \
+ $(INCL)tradstdc.h $(INCL)trap.h $(INCL)unixconf.h \
+ $(INCL)vision.h $(INCL)vmsconf.h $(INCL)wintty.h \
+ $(INCL)wincurs.h $(INCL)winX.h $(INCL)winprocs.h \
+ $(INCL)wintype.h $(INCL)you.h $(INCL)youprop.h \
+ $(INCL)weight.h
LUA_FILES = $(DAT)asmodeus.lua $(DAT)baalz.lua $(DAT)bigrm-1.lua \
$(DAT)bigrm-10.lua $(DAT)bigrm-11.lua $(DAT)bigrm-12.lua \
@@ -873,17 +874,17 @@ COREOBJTTY = \
$(OTTY)pickup.o $(OTTY)pline.o $(OTTY)polyself.o $(OTTY)potion.o \
$(OTTY)pray.o $(OTTY)priest.o $(OTTY)quest.o $(OTTY)questpgr.o \
$(OTTY)read.o $(OTTY)rect.o $(OTTY)region.o $(OTTY)report.o \
- $(OTTY)restore.o $(OTTY)rip.o $(OTTY)rnd.o $(OTTY)role.o \
- $(OTTY)rumors.o $(OTTY)save.o $(OTTY)selvar.o $(OTTY)sfbase.o \
- $(OTTY)sfstruct.o $(OTTY)shk.o $(OTTY)shknam.o $(OTTY)sit.o \
- $(OTTY)sounds.o $(OTTY)sp_lev.o $(OTTY)spell.o $(OTTY)stairs.o \
- $(OTTY)steal.o $(OTTY)steed.o $(OTTY)strutil.o $(OTTY)symbols.o \
- $(OTTY)sys.o $(OTTY)teleport.o $(OTTY)timeout.o $(OTTY)topten.o \
- $(OTTY)track.o $(OTTY)trap.o $(OTTY)u_init.o $(OTTY)uhitm.o \
- $(OTTY)utf8map.o $(OTTY)vault.o $(OTTY)vision.o $(OTTY)weapon.o \
- $(OTTY)were.o $(OTTY)wield.o $(OTTY)windows.o $(OTTY)wizard.o \
- $(OTTY)wizcmds.o $(OTTY)worm.o $(OTTY)worn.o $(OTTY)write.o \
- $(OTTY)zap.o
+ $(OTTY)restore.o $(OTTY)revision.o $(OTTY)rip.o $(OTTY)rnd.o \
+ $(OTTY)role.o $(OTTY)rumors.o $(OTTY)save.o $(OTTY)selvar.o \
+ $(OTTY)sfbase.o $(OTTY)sfstruct.o $(OTTY)shk.o $(OTTY)shknam.o \
+ $(OTTY)sit.o $(OTTY)sounds.o $(OTTY)sp_lev.o $(OTTY)spell.o \
+ $(OTTY)stairs.o $(OTTY)steal.o $(OTTY)steed.o $(OTTY)strutil.o \
+ $(OTTY)symbols.o $(OTTY)sys.o $(OTTY)teleport.o $(OTTY)timeout.o \
+ $(OTTY)topten.o $(OTTY)track.o $(OTTY)trap.o $(OTTY)u_init.o \
+ $(OTTY)uhitm.o $(OTTY)utf8map.o $(OTTY)vault.o $(OTTY)vision.o \
+ $(OTTY)weapon.o $(OTTY)were.o $(OTTY)wield.o $(OTTY)windows.o \
+ $(OTTY)wizard.o $(OTTY)wizcmds.o $(OTTY)worm.o $(OTTY)worn.o \
+ $(OTTY)write.o $(OTTY)zap.o
OBJSTTY = $(MDLIBTTY) $(COREOBJTTY) $(REGEXTTY) $(RANDOMTTY)
@@ -936,17 +937,17 @@ COREOBJGUI = \
$(OGUI)pickup.o $(OGUI)pline.o $(OGUI)polyself.o $(OGUI)potion.o \
$(OGUI)pray.o $(OGUI)priest.o $(OGUI)quest.o $(OGUI)questpgr.o \
$(OGUI)read.o $(OGUI)rect.o $(OGUI)region.o $(OGUI)report.o \
- $(OGUI)restore.o $(OGUI)rip.o $(OGUI)rnd.o $(OGUI)role.o \
- $(OGUI)rumors.o $(OGUI)save.o $(OGUI)selvar.o $(OGUI)sfbase.o \
- $(OGUI)sfstruct.o $(OGUI)shk.o $(OGUI)shknam.o $(OGUI)sit.o \
- $(OGUI)sounds.o $(OGUI)sp_lev.o $(OGUI)spell.o $(OGUI)stairs.o \
- $(OGUI)steal.o $(OGUI)steed.o $(OGUI)strutil.o $(OGUI)symbols.o \
- $(OGUI)sys.o $(OGUI)teleport.o $(OGUI)timeout.o $(OGUI)topten.o \
- $(OGUI)track.o $(OGUI)trap.o $(OGUI)u_init.o $(OGUI)uhitm.o \
- $(OGUI)utf8map.o $(OGUI)vault.o $(OGUI)vision.o $(OGUI)weapon.o \
- $(OGUI)were.o $(OGUI)wield.o $(OGUI)windows.o $(OGUI)wizard.o \
- $(OGUI)wizcmds.o $(OGUI)worm.o $(OGUI)worn.o $(OGUI)write.o \
- $(OGUI)zap.o
+ $(OGUI)restore.o $(OGUI)revision.o $(OGUI)rip.o $(OGUI)rnd.o \
+ $(OGUI)role.o $(OGUI)rumors.o $(OGUI)save.o $(OGUI)selvar.o \
+ $(OGUI)sfbase.o $(OGUI)sfstruct.o $(OGUI)shk.o $(OGUI)shknam.o \
+ $(OGUI)sit.o $(OGUI)sounds.o $(OGUI)sp_lev.o $(OGUI)spell.o \
+ $(OGUI)stairs.o $(OGUI)steal.o $(OGUI)steed.o $(OGUI)strutil.o \
+ $(OGUI)symbols.o $(OGUI)sys.o $(OGUI)teleport.o $(OGUI)timeout.o \
+ $(OGUI)topten.o $(OGUI)track.o $(OGUI)trap.o $(OGUI)u_init.o \
+ $(OGUI)uhitm.o $(OGUI)utf8map.o $(OGUI)vault.o $(OGUI)vision.o \
+ $(OGUI)weapon.o $(OGUI)were.o $(OGUI)wield.o $(OGUI)windows.o \
+ $(OGUI)wizard.o $(OGUI)wizcmds.o $(OGUI)worm.o $(OGUI)worn.o \
+ $(OGUI)write.o $(OGUI)zap.o
OBJSGUI = $(MDLIBGUI) $(COREOBJGUI) $(REGEXGUI) $(RANDOMGUI)
@@ -3328,6 +3329,7 @@ $(OTTY)rect.o: rect.c $(HACK_H)
$(OTTY)region.o: region.c $(HACK_H)
$(OTTY)report.o: report.c $(HACK_H) $(INCL)dlb.h $(INCL)nhmd4.h
$(OTTY)restore.o: restore.c $(HACK_H) $(INCL)tcap.h
+$(OTTY)revision.o: revision.c $(HACK_H)
$(OTTY)rip.o: rip.c $(HACK_H)
$(OTTY)rnd.o: rnd.c $(HACK_H) $(INCL)isaac64.h
$(OTTY)role.o: role.c $(HACK_H)
@@ -3708,6 +3710,7 @@ $(OGUI)rect.o: rect.c $(HACK_H)
$(OGUI)region.o: region.c $(HACK_H)
$(OGUI)report.o: report.c $(HACK_H) $(INCL)dlb.h $(INCL)nhmd4.h
$(OGUI)restore.o: restore.c $(HACK_H) $(INCL)tcap.h
+$(OGUI)revision.o: revision.c $(HACK_H)
$(OGUI)rip.o: rip.c $(HACK_H)
$(OGUI)rnd.o: rnd.c $(HACK_H) $(INCL)isaac64.h
$(OGUI)role.o: role.c $(HACK_H)
diff --git a/sys/windows/vs/NetHack/NetHack.vcxproj b/sys/windows/vs/NetHack/NetHack.vcxproj
index 1d29c4f80..2d76aa0b3 100644
--- a/sys/windows/vs/NetHack/NetHack.vcxproj
+++ b/sys/windows/vs/NetHack/NetHack.vcxproj
@@ -234,6 +234,7 @@
+
@@ -312,6 +313,7 @@
+
@@ -332,4 +334,4 @@
-
\ No newline at end of file
+
diff --git a/sys/windows/vs/NetHackW/NetHackW.vcxproj b/sys/windows/vs/NetHackW/NetHackW.vcxproj
index df2507e81..c3f17f6ea 100644
--- a/sys/windows/vs/NetHackW/NetHackW.vcxproj
+++ b/sys/windows/vs/NetHackW/NetHackW.vcxproj
@@ -281,6 +281,7 @@
+
@@ -386,6 +387,7 @@
+
@@ -409,4 +411,4 @@
-
\ No newline at end of file
+