nethack -X vs normal game (trunk only)

Reported to the beta-testers list by <Someone> last April:
restoring a normal game save file in explore mode let you keep the file,
then after exploring and quitting without saving, you could restore it
again in normal mode and take advantage of whatever information you'd
gained.  This makes nethack -X (or playmode:explore) defer the switch to
explore mode when used while restoring a normal mode save file.  It now
performs a normal restore (with save file deletion) and then acts as if
the user had given the 'X' command interactively, requiring confirmation
to actually switch into explore mode.
This commit is contained in:
nethack.rankin
2007-02-17 05:43:18 +00:00
parent 43f72cc357
commit 0ceebfc4b5
7 changed files with 21 additions and 8 deletions

View File

@@ -1,4 +1,4 @@
/* SCCS Id: @(#)allmain.c 3.5 2007/01/12 */
/* SCCS Id: @(#)allmain.c 3.5 2007/02/16 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -37,6 +37,11 @@ boolean resuming;
if (wizard) add_debug_extended_commands();
#endif
/* if a save file created in normal mode is now being restored in
explore mode, treat it as normal restore followed by 'X' command
to use up the save file and require confirmation for explore mode */
if (resuming && iflags.deferred_X) (void)enter_explore_mode();
/* side-effects from the real world */
flags.moonphase = phase_of_the_moon();
if(flags.moonphase == FULL_MOON) {

View File

@@ -37,6 +37,7 @@ extern int NDECL(doapply); /**/
extern int NDECL(dorub); /**/
extern int NDECL(dojump); /**/
extern int NDECL(doextlist); /**/
extern int NDECL(enter_explore_mode); /**/
extern int NDECL(dodrop); /**/
extern int NDECL(doddrop); /**/
extern int NDECL(dodown); /**/
@@ -155,7 +156,6 @@ STATIC_DCL int NDECL(wiz_port_debug);
STATIC_PTR int NDECL(wiz_rumor_check);
STATIC_DCL char FDECL(cmd_from_func, (int NDECL((*))));
# endif /* WIZARD */
STATIC_PTR int NDECL(enter_explore_mode);
STATIC_PTR int NDECL(doattributes);
STATIC_PTR int NDECL(doconduct); /**/
STATIC_PTR boolean NDECL(minimal_enlightenment);
@@ -489,7 +489,7 @@ domonability(VOID_ARGS)
return 0;
}
STATIC_PTR int
int
enter_explore_mode(VOID_ARGS)
{
if(!discover && !wizard) {

View File

@@ -4501,6 +4501,7 @@ set_playmode()
wizard = FALSE; /* not allowed or not available */
/* force explore mode if we didn't make it into wizard mode */
discover = !wizard;
iflags.deferred_X = FALSE;
}
/* don't need to do anything special for explore mode or normal play */
}

View File

@@ -544,11 +544,13 @@ unsigned int *stuckid, *steedid; /* STEED */
newgameflags = flags;
mread(fd, (genericptr_t) &flags, sizeof(struct flag));
/* wizard and discover are actually flags.debug and flags.explore;
player might be overriding the save file values for them */
if (newgameflags.explore) discover = TRUE;
player might be overriding the save file values for them;
in the discover case, we don't want to set that for a normal
game until after the save file has been removed */
iflags.deferred_X = (newgameflags.explore && !discover);
if (newgameflags.debug) {
/* authorized by startup code; wizard mode exists and is allowed */
wizard = TRUE, discover = FALSE;
wizard = TRUE, discover = iflags.deferred_X = FALSE;
} else if (wizard) {
/* specified by save file; check authorization now */
set_playmode();
@@ -577,6 +579,7 @@ unsigned int *stuckid, *steedid; /* STEED */
u.uz.dnum = 0;
u.uz.dlevel = 1;
/* revert to pre-restore option settings */
iflags.deferred_X = FALSE;
flags = newgameflags;
#ifdef SYSFLAGS
sysflags = newgamesysflags;