diff --git a/src/g_mapinfo.cpp b/src/g_mapinfo.cpp index e15de22a2..84b6aa48f 100644 --- a/src/g_mapinfo.cpp +++ b/src/g_mapinfo.cpp @@ -1787,6 +1787,20 @@ void FMapInfoParser::ParseMapInfo (int lump, level_info_t &gamedefaults, level_i } +//========================================================================== +// +// +// +//========================================================================== + +void DeinitIntermissions(); + +static void ClearMapinfo() +{ + ClearEpisodes(); + DeinitIntermissions(); +} + //========================================================================== // // G_ParseMapInfo @@ -1800,7 +1814,7 @@ void G_ParseMapInfo (const char *basemapinfo) int lump, lastlump = 0; level_info_t gamedefaults; - atterm(ClearEpisodes); + atterm(ClearMapinfo); // Parse the default MAPINFO for the current game. This lump *MUST* come from zdoom.pk3. if (basemapinfo != NULL) diff --git a/src/intermission/intermission.h b/src/intermission/intermission.h index 72dd5a2e1..4298b54b5 100644 --- a/src/intermission/intermission.h +++ b/src/intermission/intermission.h @@ -80,6 +80,7 @@ struct FIntermissionAction TArray mOverlays; FIntermissionAction(); + virtual ~FIntermissionAction() {} virtual bool ParseKey(FScanner &sc); }; @@ -145,7 +146,7 @@ struct FIntermissionActionScroller : public FIntermissionAction struct FIntermissionDescriptor { FName mLink; - TArray mActions; + TDeletingArray mActions; }; typedef TMap FIntermissionDescriptorList; diff --git a/src/intermission/intermission_parse.cpp b/src/intermission/intermission_parse.cpp index b79519863..bf6ae0ddd 100644 --- a/src/intermission/intermission_parse.cpp +++ b/src/intermission/intermission_parse.cpp @@ -47,6 +47,19 @@ static void ReplaceIntermission(FName intname,FIntermissionDescriptor *desc) IntermissionDescriptors[intname] = desc; } +void DeinitIntermissions() +{ + FIntermissionDescriptorList::Iterator it(IntermissionDescriptors); + + FIntermissionDescriptorList::Pair *pair; + + while (it.NextPair(pair)) + { + delete pair->Value; + pair->Value = NULL; + } +} + //========================================================================== // // FIntermissionAction