From 686cebd64de98438dfc9434d375e8d6d9ff72158 Mon Sep 17 00:00:00 2001 From: biwa <6475593+biwa@users.noreply.github.com> Date: Sun, 28 Nov 2021 18:20:46 +0100 Subject: [PATCH] DeHackEd: fixed a problem where only the last DEHACKED lump was parsed. Fixes #657 --- Source/Core/Data/DataManager.cs | 14 +++++--------- Source/Core/Data/DataReader.cs | 2 +- Source/Core/Data/PK3StructuredReader.cs | 22 +++++++++++----------- Source/Core/Data/WADReader.cs | 5 +++-- 4 files changed, 20 insertions(+), 23 deletions(-) diff --git a/Source/Core/Data/DataManager.cs b/Source/Core/Data/DataManager.cs index 6ad5eeb7..80b9f70a 100755 --- a/Source/Core/Data/DataManager.cs +++ b/Source/Core/Data/DataManager.cs @@ -1783,18 +1783,14 @@ namespace CodeImp.DoomBuilder.Data availablesprites.UnionWith(dr.GetSpriteNames()); } - for(int i = containers.Count-1; i >= 0; i--) + foreach(DataReader dr in containers) { - DataReader dr = containers[i]; + List dehackedstreams = new List(dr.GetDehackedData()); - List dehackedstreams = new List(dr.GetDehackedData("DEHACKED")); - - if(dehackedstreams.Count > 0) + foreach(TextResourceData trd in dehackedstreams) { - dehackedstreams[0].Stream.Seek(0, SeekOrigin.Begin); - dehacked.Parse(dehackedstreams[0], General.Map.Config.DehackedData, availablesprites); - - break; + trd.Stream.Seek(0, SeekOrigin.Begin); + dehacked.Parse(trd, General.Map.Config.DehackedData, availablesprites); } } } diff --git a/Source/Core/Data/DataReader.cs b/Source/Core/Data/DataReader.cs index dc7a3201..c8b573ba 100755 --- a/Source/Core/Data/DataReader.cs +++ b/Source/Core/Data/DataReader.cs @@ -228,7 +228,7 @@ namespace CodeImp.DoomBuilder.Data #region ================== Decorate, Modeldef, Mapinfo, Gldefs, etc... // When implemented, this returns DEHACKED lumps - public abstract IEnumerable GetDehackedData(string pname); + public abstract IEnumerable GetDehackedData(); // When implemented, this returns DECORATE lumps public abstract IEnumerable GetDecorateData(string pname); diff --git a/Source/Core/Data/PK3StructuredReader.cs b/Source/Core/Data/PK3StructuredReader.cs index aed18936..2e30dc5f 100755 --- a/Source/Core/Data/PK3StructuredReader.cs +++ b/Source/Core/Data/PK3StructuredReader.cs @@ -487,25 +487,25 @@ namespace CodeImp.DoomBuilder.Data #region ================== DEHACKED // This finds and returns DEHACKED streams - public override IEnumerable GetDehackedData(string pname) + public override IEnumerable GetDehackedData() { // Error when suspended if (issuspended) throw new Exception("Data reader is suspended"); List result = new List(); - string[] allfilenames; - // Find in root directory - string filename = Path.GetFileName(pname); - string pathname = Path.GetDirectoryName(pname); + // At least one of gldefs should be in the root folder + List files = new List(); - if (filename.IndexOf('.') > -1) - allfilenames = GetFileAtPath(filename, pathname, "DEHACKED"); - else - allfilenames = GetAllFilesWithTitle(pathname, filename, false); + // Can be several entries + files.AddRange(GetAllFilesWhichTitleStartsWith("", "DEHACKED", false)); - if(allfilenames.Length > 0) - result.Add(new TextResourceData(this, LoadFile(allfilenames[allfilenames.Length - 1]), allfilenames[allfilenames.Length - 1], true)); + // Add to collection + foreach (string s in files) + result.Add(new TextResourceData(this, LoadFile(s), s, true)); + + // Find in any of the wad files + foreach (WADReader wr in wads) result.AddRange(wr.GetDehackedData()); return result; } diff --git a/Source/Core/Data/WADReader.cs b/Source/Core/Data/WADReader.cs index 1d9ccebb..691954d2 100755 --- a/Source/Core/Data/WADReader.cs +++ b/Source/Core/Data/WADReader.cs @@ -1011,10 +1011,11 @@ namespace CodeImp.DoomBuilder.Data #region ================== Decorate, Gldefs, Mapinfo, etc... - public override IEnumerable GetDehackedData(string pname) + public override IEnumerable GetDehackedData() { if (issuspended) throw new Exception("Data reader is suspended"); - return GetLastLumpData(pname); + + return GetAllLumpsData("DEHACKED"); } // This finds and returns DECORATE streams