- fixed portal restoration on revisiting level in hub

Added function to FLevelLocals to test if map is being reentered

https://forum.zdoom.org/viewtopic.php?t=60455
(cherry picked from commit 29d2e77840)
This commit is contained in:
alexey.lysiuk 2018-06-11 11:55:49 +03:00 committed by drfrag666
parent ed5c2b21ac
commit 807695783f
3 changed files with 8 additions and 2 deletions

View file

@ -166,6 +166,12 @@ struct FLevelLocals
return headgamenode;
}
// Returns true if level is loaded from saved game or is being revisited as a part of a hub
bool IsReentering() const
{
return savegamerestore
|| (info != nullptr && info->Snapshot.mBuffer != nullptr && info->isValid());
}
};
extern FLevelLocals level;

View file

@ -4102,7 +4102,7 @@ void P_SetupLevel (const char *lumpname, int position)
times[16].Clock();
if (reloop) P_LoopSidedefs (false);
PO_Init (); // Initialize the polyobjs
if (!savegamerestore)
if (!level.IsReentering())
P_FinalizePortals(); // finalize line portals after polyobjects have been initialized. This info is needed for properly flagging them.
times[16].Unclock();

View file

@ -477,7 +477,7 @@ void S_Start ()
// Don't start the music if loading a savegame, because the music is stored there.
// Don't start the music if revisiting a level in a hub for the same reason.
if (!savegamerestore && (level.info == nullptr || level.info->Snapshot.mBuffer == nullptr || !level.info->isValid()))
if (!level.IsReentering())
{
if (level.cdtrack == 0 || !S_ChangeCDMusic (level.cdtrack, level.cdid))
S_ChangeMusic (level.Music, level.musicorder);