issue #1027 - sticky 'nofollowers' flag

Reported by copperwater:  entering the tutorial sets 'u.nofollowers',
changing to the tutorial level saves a copy of 'u', post-level change
from entering the tutorial level resets u.followers, but subsequently
changing levels to return to the original level 1 restores 'u' from
the saved copy with has 'u.nofollowers==True', overriding the reset.

Move the nofollowers flag from 'u' to 'iflags'.  Invalides save and
bones files.

Fixes #1027
This commit is contained in:
PatR
2023-05-25 17:08:53 -07:00
parent 202afc3b55
commit aa63aa8d98
6 changed files with 8 additions and 5 deletions

View File

@@ -1592,6 +1592,9 @@ the fuzzer could get stuck in a loop if hero died in a way where life-saving
fix unicorn horn's ability to repair blindness
quest nemesis and a few other special monsters are suppressed from bones;
their death feedback could be given when they were removed
running the tutorial until completion and returning to normal play but left
the 'no followers' flag set; adjacent pets wouldn't tag along when
hero moved to other levels
Fixes to 3.7.0-x Platform and/or Interface Problems Exposed Via git Repository

View File

@@ -197,6 +197,7 @@ struct instance_flags {
boolean invis_goldsym; /* gold symbol is ' '? */
boolean in_lua; /* executing a lua script */
boolean lua_testing; /* doing lua tests */
boolean nofollowers; /* level change ignores pets (for tutorial) */
boolean partly_eaten_hack; /* extra flag for xname() used when it's called
* indirectly so we can't use xname_flags() */
boolean remember_getpos; /* save getpos() positioning in do-again queue */

View File

@@ -17,7 +17,7 @@
* Incrementing EDITLEVEL can be used to force invalidation of old bones
* and save files.
*/
#define EDITLEVEL 85
#define EDITLEVEL 86
/*
* Development status possibilities.

View File

@@ -358,7 +358,6 @@ struct you {
d_level utolev; /* level monster teleported you to, or uz */
uchar utotype; /* bitmask of goto_level() flags for utolev */
d_level ucamefrom; /* level where you came from; used for tutorial */
boolean nofollowers; /* level change ignores monster followers/pets */
boolean umoved; /* changed map location (post-move) */
int last_str_turn; /* 0: none, 1: half turn, 2: full turn
* +: turn right, -: turn left */

View File

@@ -519,12 +519,12 @@ maybe_do_tutorial(void)
if (ask_do_tutorial()) {
assign_level(&u.ucamefrom, &u.uz);
u.nofollowers = TRUE;
iflags.nofollowers = TRUE;
schedule_goto(&sp->dlevel, UTOTYPE_NONE, (char *) 0, (char *) 0);
deferred_goto();
vision_recalc(0);
docrt();
u.nofollowers = FALSE;
iflags.nofollowers = FALSE;
}
}

View File

@@ -1522,7 +1522,7 @@ goto_level(
set_ustuck((struct monst *) 0); /* clear u.ustuck and u.uswallow */
set_uinwater(0); /* u.uinwater = 0 */
u.uundetected = 0; /* not hidden, even if means are available */
if (!u.nofollowers)
if (!iflags.nofollowers)
keepdogs(FALSE);
recalc_mapseen(); /* recalculate map overview before we leave the level */
/*