From 6ae417725f94bcdc6e0271a69c555705cf7fb92c Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 27 Dec 2018 17:38:11 +0100 Subject: [PATCH] - removed the optional MAPINFO data handler and moved the 3 items still using it to the main parser file. This thing made sense when GZDoom and ZDoom were separate projects to avoid having to change some core files for the added options. Now, with only 3 ones remaining, one for FraggleScript and two for Extradata the overhead here is just too high. The 3 variables can just be moved to level_info_t without carrying along this much baggage. --- src/fragglescript/t_func.cpp | 16 ++------- src/fragglescript/t_load.cpp | 62 ---------------------------------- src/fragglescript/t_script.cpp | 4 +-- src/fragglescript/t_script.h | 2 -- src/g_level.h | 42 +++-------------------- src/g_mapinfo.cpp | 28 +++++++++++++++ src/maploader/edata.cpp | 55 ++---------------------------- 7 files changed, 38 insertions(+), 171 deletions(-) diff --git a/src/fragglescript/t_func.cpp b/src/fragglescript/t_func.cpp index fe1559991..4cc566657 100644 --- a/src/fragglescript/t_func.cpp +++ b/src/fragglescript/t_func.cpp @@ -887,7 +887,7 @@ void FParser::SF_Spawn(void) { t_return.value.mobj->Angles.Yaw = angle; - if (!DFraggleThinker::ActiveThinker->nocheckposition) + if (!level.info->fs_nocheckposition) { if (!P_TestMobjLocation(t_return.value.mobj)) { @@ -3724,19 +3724,7 @@ void FParser::SF_SetColor(void) FSSectorTagIterator itr(tagnum); while ((i = itr.Next()) >= 0) { - if (!DFraggleThinker::ActiveThinker->setcolormaterial) - { - level.sectors[i].SetColor(color, 0); - } - else - { - // little hack for testing the D64 color stuff. - for (int j = 0; j < 4; j++) level.sectors[i].SetSpecialColor(j, color); - // simulates 'nocoloredspritelighting' settings. - int v = (color.r + color.g + color.b) / 3; - v = (255 + v + v) / 3; - level.sectors[i].SetSpecialColor(sector_t::sprites, v, v, v); - } + level.sectors[i].SetColor(color, 0); } } } diff --git a/src/fragglescript/t_load.cpp b/src/fragglescript/t_load.cpp index 1d5b86ce0..0196036ac 100644 --- a/src/fragglescript/t_load.cpp +++ b/src/fragglescript/t_load.cpp @@ -55,56 +55,6 @@ public: bool ParseInfo(MapData * map); }; -struct FFsOptions : public FOptionalMapinfoData -{ - FFsOptions() - { - identifier = "fragglescript"; - nocheckposition = false; - setcolormaterial = false; - } - virtual FOptionalMapinfoData *Clone() const - { - FFsOptions *newopt = new FFsOptions; - newopt->identifier = identifier; - newopt->nocheckposition = nocheckposition; - newopt->setcolormaterial = setcolormaterial; - return newopt; - } - bool nocheckposition; - bool setcolormaterial; -}; - -DEFINE_MAP_OPTION(fs_nocheckposition, false) -{ - FFsOptions *opt = info->GetOptData("fragglescript"); - - if (parse.CheckAssign()) - { - parse.sc.MustGetNumber(); - opt->nocheckposition = !!parse.sc.Number; - } - else - { - opt->nocheckposition = true; - } -} - -DEFINE_MAP_OPTION(fs_setcolormaterial, false) -{ - FFsOptions *opt = info->GetOptData("fragglescript"); - - if (parse.CheckAssign()) - { - parse.sc.MustGetNumber(); - opt->setcolormaterial = !!parse.sc.Number; - } - else - { - opt->setcolormaterial = true; - } -} - //----------------------------------------------------------------------------- // // Process the lump to strip all unneeded information from it @@ -308,18 +258,6 @@ bool FScriptLoader::ParseInfo(MapData * map) if (drownflag==-1) drownflag = (level.maptype != MAPTYPE_DOOM || fsglobal); if (!drownflag) level.airsupply=0; // Legacy doesn't to water damage so we need to check if it has to be disabled here. - - FFsOptions *opt = level.info->GetOptData("fragglescript", false); - if (opt != NULL) - { - DFraggleThinker::ActiveThinker->nocheckposition = opt->nocheckposition; - DFraggleThinker::ActiveThinker->setcolormaterial = opt->setcolormaterial; - } - else - { - DFraggleThinker::ActiveThinker->nocheckposition = false; - DFraggleThinker::ActiveThinker->setcolormaterial = false; - } } diff --git a/src/fragglescript/t_script.cpp b/src/fragglescript/t_script.cpp index 59a0605e5..b07a92df2 100644 --- a/src/fragglescript/t_script.cpp +++ b/src/fragglescript/t_script.cpp @@ -394,7 +394,6 @@ DFraggleThinker::DFraggleThinker() LevelScript->parent = global_script; GC::WriteBarrier(this, RunningScripts); GC::WriteBarrier(this, LevelScript); - nocheckposition = false; } } @@ -435,8 +434,7 @@ void DFraggleThinker::Serialize(FSerializer &arc) Super::Serialize(arc); arc("levelscript", LevelScript) ("runningscripts", RunningScripts) - ("spawnedthings", SpawnedThings) - ("nocheckposition", nocheckposition); + ("spawnedthings", SpawnedThings); } //========================================================================== diff --git a/src/fragglescript/t_script.h b/src/fragglescript/t_script.h index 80751003c..3c3869755 100644 --- a/src/fragglescript/t_script.h +++ b/src/fragglescript/t_script.h @@ -681,8 +681,6 @@ public: TObjPtr LevelScript; TObjPtr RunningScripts; TArray > SpawnedThings; - bool nocheckposition = false; - bool setcolormaterial = false; DFraggleThinker(); void OnDestroy() override; diff --git a/src/g_level.h b/src/g_level.h index 46ffbf795..dac10eaa9 100644 --- a/src/g_level.h +++ b/src/g_level.h @@ -263,25 +263,6 @@ class DScroller; class FScanner; struct level_info_t; -struct FOptionalMapinfoData -{ - FOptionalMapinfoData *Next = nullptr; - FName identifier = NAME_None; - virtual ~FOptionalMapinfoData() {} - virtual FOptionalMapinfoData *Clone() const = 0; -}; - -struct FOptionalMapinfoDataPtr -{ - FOptionalMapinfoData *Ptr; - - FOptionalMapinfoDataPtr() throw() : Ptr(NULL) {} - ~FOptionalMapinfoDataPtr() { if (Ptr!=NULL) delete Ptr; } - FOptionalMapinfoDataPtr(const FOptionalMapinfoDataPtr &p) throw() : Ptr(p.Ptr->Clone()) {} - FOptionalMapinfoDataPtr &operator= (FOptionalMapinfoDataPtr &p) throw() { Ptr = p.Ptr->Clone(); return *this; } -}; - -typedef TMap FOptData; typedef TMap FMusicMap; enum EMapType : int @@ -398,7 +379,6 @@ struct level_info_t double teamdamage; - FOptData optdata; FMusicMap MusicMap; TArray specialactions; @@ -416,6 +396,10 @@ struct level_info_t FVector3 skyrotatevector; FVector3 skyrotatevector2; + FString EDName; + FString acsName; + bool fs_nocheckposition; + level_info_t() { @@ -434,24 +418,6 @@ struct level_info_t deferred.Clear(); } level_info_t *CheckLevelRedirect (); - - template - T *GetOptData(FName id, bool create = true) - { - FOptionalMapinfoDataPtr *pdat = optdata.CheckKey(id); - - if (pdat != NULL) - { - return static_cast(pdat->Ptr); - } - else if (create) - { - T *newobj = new T; - optdata[id].Ptr = newobj; - return newobj; - } - else return NULL; - } }; diff --git a/src/g_mapinfo.cpp b/src/g_mapinfo.cpp index 4595afff0..e90fa52b5 100644 --- a/src/g_mapinfo.cpp +++ b/src/g_mapinfo.cpp @@ -1445,6 +1445,34 @@ DEFINE_MAP_OPTION(skyrotate2, false) info->skyrotatevector2.MakeUnit(); } +DEFINE_MAP_OPTION(fs_nocheckposition, false) +{ + if (parse.CheckAssign()) + { + parse.sc.MustGetNumber(); + info->fs_nocheckposition = !!parse.sc.Number; + } + else + { + info->fs_nocheckposition = true; + } +} + +DEFINE_MAP_OPTION(edata, false) +{ + parse.ParseAssign(); + parse.sc.MustGetString(); + info->EDName = parse.sc.String; +} + +DEFINE_MAP_OPTION(loadacs, false) +{ + parse.ParseAssign(); + parse.sc.MustGetString(); + info->acsName = parse.sc.String; +} + + //========================================================================== // // All flag based map options diff --git a/src/maploader/edata.cpp b/src/maploader/edata.cpp index b88e8f518..004bef988 100644 --- a/src/maploader/edata.cpp +++ b/src/maploader/edata.cpp @@ -50,42 +50,6 @@ #include "maploader.h" -struct FEDOptions : public FOptionalMapinfoData -{ - FEDOptions() - { - identifier = "EData"; - } - virtual FOptionalMapinfoData *Clone() const - { - FEDOptions *newopt = new FEDOptions; - newopt->identifier = identifier; - newopt->EDName = EDName; - newopt->acsName = acsName; - return newopt; - } - FString EDName; - FString acsName; -}; - -DEFINE_MAP_OPTION(edata, false) -{ - FEDOptions *opt = info->GetOptData("EData"); - - parse.ParseAssign(); - parse.sc.MustGetString(); - opt->EDName = parse.sc.String; -} - -DEFINE_MAP_OPTION(loadacs, false) -{ - FEDOptions *opt = info->GetOptData("EData"); - - parse.ParseAssign(); - parse.sc.MustGetString(); - opt->acsName = parse.sc.String; -} - static void parseLinedef(FScanner &sc, TMap &EDLines) { EDLinedef ld; @@ -552,21 +516,9 @@ static void parseMapthing(FScanner &sc, TMap &EDThings) void MapLoader::InitED() { - FString filename; + FString filename = Level->info->EDName; FScanner sc; - const char *arg = Args->CheckValue("-edf"); - - if (arg != nullptr) filename = arg; - else - { - FEDOptions *opt = Level->info->GetOptData("EData", false); - if (opt != nullptr) - { - filename = opt->EDName; - } - } - if (filename.IsEmpty()) return; int lump = Wads.CheckNumForFullName(filename, true, ns_global); if (lump == -1) return; @@ -705,10 +657,9 @@ void MapLoader::ProcessEDSectors() void MapLoader::LoadMapinfoACSLump() { - FEDOptions *opt = Level->info->GetOptData("EData", false); - if (opt != nullptr) + if (Level->info->acsName.IsNotEmpty()) { - int lump = Wads.CheckNumForName(opt->acsName); + int lump = Wads.CheckNumForName(Level->info->acsName); if (lump >= 0) FBehavior::StaticLoadModule(lump); } }