diff --git a/src/doomstat.h b/src/doomstat.h index 7370e807434f97fd22383d5b4cec04d4e036b19b..182f39ba4a619f69ba4b7118b10f12dfe74d0f74 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -44,7 +44,6 @@ extern INT32 cursaveslot; //extern INT16 lastmapsaved; extern INT16 lastmaploaded; extern boolean gamecomplete; -extern INT16 lastcoop; #define PRECIP_NONE 0 #define PRECIP_STORM 1 @@ -375,6 +374,7 @@ extern recorddata_t *mainrecords[NUMMAPS]; #define MV_ULTIMATE 8 #define MV_PERFECT 16 #define MV_MAX 31 // used in gamedata check +#define MV_MP 128 extern UINT8 mapvisited[NUMMAPS]; // Temporary holding place for nights data for the current map diff --git a/src/g_game.c b/src/g_game.c index 3bffd426e08ddd676874b5a1f21e4fb191039512..cbf340a1dc46aa73e5c415a654196775b70015b9 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -80,7 +80,6 @@ INT32 cursaveslot = -1; // Auto-save 1p savegame slot //INT16 lastmapsaved = 0; // Last map we auto-saved at INT16 lastmaploaded = 0; // Last map the game loaded boolean gamecomplete = false; -INT16 lastcoop = 0; UINT16 mainwads = 0; boolean modifiedgame; // Set if homebrew PWAD stuff has been added. @@ -3385,7 +3384,7 @@ void G_SaveGameData(void) // TODO put another cipher on these things? meh, I don't care... for (i = 0; i < NUMMAPS; i++) - WRITEUINT8(save_p, mapvisited[i]); + WRITEUINT8(save_p, (mapvisited[i] & MV_MAX)); // To save space, use one bit per collected/achieved/unlocked flag for (i = 0; i < MAXEMBLEMS;) diff --git a/src/m_menu.c b/src/m_menu.c index 193d0dd4f02a9de6c74656bbe16f61d8e2c742c0..d196c739d8eb771b631c83536fc803db84f832d5 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -3827,24 +3827,22 @@ static boolean M_LevelAvailableOnPlatter(INT32 mapnum) switch (levellistmode) { case LLM_CREATESERVER: - if (mapheaderinfo[mapnum]->menuflags & LF2_NOVISITNEEDED) + if (!(mapheaderinfo[mapnum]->typeoflevel & TOL_COOP)) return true; - if (!mapvisited[mapnum] - && (mapheaderinfo[mapnum]->typeoflevel & TOL_COOP) - && (mapnum+1) > lastcoop) - return false; + if (mapvisited[mapnum]) // MV_MP + return true; - return true; + // intentional fallthrough case LLM_RECORDATTACK: case LLM_NIGHTSATTACK: - if (mapheaderinfo[mapnum]->menuflags & LF2_NOVISITNEEDED) + if (mapvisited[mapnum] & MV_MAX) return true; - if (!mapvisited[mapnum]) - return false; + if (mapheaderinfo[mapnum]->menuflags & LF2_NOVISITNEEDED) + return true; - // intentional fallthrough + return false; case LLM_LEVELSELECT: default: return true; @@ -5598,7 +5596,7 @@ static void M_DrawChecklist(void) if (title) { - const char *level = ((M_MapLocked(cond[condnum].requirement) || !((mapheaderinfo[cond[condnum].requirement-1]->menuflags & LF2_NOVISITNEEDED) || mapvisited[cond[condnum].requirement-1])) ? M_CreateSecretMenuOption(title) : title); + const char *level = ((M_MapLocked(cond[condnum].requirement) || !((mapheaderinfo[cond[condnum].requirement-1]->menuflags & LF2_NOVISITNEEDED) || (mapvisited[cond[condnum].requirement-1] & MV_MAX))) ? M_CreateSecretMenuOption(title) : title); switch (cond[condnum].type) { @@ -5631,7 +5629,7 @@ static void M_DrawChecklist(void) if (title) { - const char *level = ((M_MapLocked(cond[condnum].extrainfo1) || !((mapheaderinfo[cond[condnum].extrainfo1-1]->menuflags & LF2_NOVISITNEEDED) || mapvisited[cond[condnum].extrainfo1-1])) ? M_CreateSecretMenuOption(title) : title); + const char *level = ((M_MapLocked(cond[condnum].extrainfo1) || !((mapheaderinfo[cond[condnum].extrainfo1-1]->menuflags & LF2_NOVISITNEEDED) || (mapvisited[cond[condnum].extrainfo1-1] & MV_MAX))) ? M_CreateSecretMenuOption(title) : title); switch (cond[condnum].type) { @@ -5700,7 +5698,7 @@ static void M_DrawChecklist(void) if (title) { - const char *level = ((M_MapLocked(cond[condnum].extrainfo1) || !((mapheaderinfo[cond[condnum].extrainfo1-1]->menuflags & LF2_NOVISITNEEDED) || mapvisited[cond[condnum].extrainfo1-1])) ? M_CreateSecretMenuOption(title) : title); + const char *level = ((M_MapLocked(cond[condnum].extrainfo1) || !((mapheaderinfo[cond[condnum].extrainfo1-1]->menuflags & LF2_NOVISITNEEDED) || (mapvisited[cond[condnum].extrainfo1-1] & MV_MAX))) ? M_CreateSecretMenuOption(title) : title); switch (cond[condnum].type) { @@ -6786,7 +6784,7 @@ static void M_Statistics(INT32 choice) if (!(mapheaderinfo[i]->typeoflevel & TOL_SP) || (mapheaderinfo[i]->menuflags & LF2_HIDEINSTATS)) continue; - if (!mapvisited[i]) + if (!(mapvisited[i] & MV_MAX)) continue; statsMapList[j++] = i; diff --git a/src/p_setup.c b/src/p_setup.c index b49018e20b5237af42b817d4a8f697e6e79ab05b..a5666904eb1d947862c33ad922a185d429e03dec 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -3013,9 +3013,8 @@ boolean P_SetupLevel(boolean skipprecip) if (!(netgame || multiplayer) && (!modifiedgame || savemoddata)) mapvisited[gamemap-1] |= MV_VISITED; - - if ((maptol & TOL_COOP) && lastcoop < gamemap) - lastcoop = gamemap; + else + mapvisited[gamemap-1] |= MV_MP; // you want to record that you've been there this session, but not permanently levelloading = false;