From 6bd76dee4e4597ec512269ee24a56812d9d85912 Mon Sep 17 00:00:00 2001
From: ZZYZX <zzyzx@virtual>
Date: Tue, 14 Feb 2017 15:39:35 +0200
Subject: [PATCH] Fixed: consequential duplicate maps weren't handled properly

---
 Source/Core/General/MapManager.cs | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/Source/Core/General/MapManager.cs b/Source/Core/General/MapManager.cs
index 777b744b..56695206 100644
--- a/Source/Core/General/MapManager.cs
+++ b/Source/Core/General/MapManager.cs
@@ -1444,15 +1444,11 @@ namespace CodeImp.DoomBuilder
             //
             while (true)
             {
-                int nextindex = target.FindLumpIndex(targetmapname, tgtheaderindex + 1);
+                int nextindex = target.FindLumpIndex(targetmapname, tgtheaderindex);
                 // note that this (and the original algorithm too) would break if you have a patch or a texture named MAP01 for example...
                 // this is the case for multiple megawads that have level selection screen (Duel40-style), but luckily most of them are using the PK3 format.
                 if (nextindex < 0) break; // next lump not found
-                // remove the header lump
-                target.RemoveAt(nextindex, false);
-                writeheaders = true;
-                //
-                tgtheaderindex = nextindex;
+
                 // try to detect the format used for this map.
                 // if more than one format matches, do... idk what actually.
                 // todo: move this code out and call it something like DetectMapConfiguration
@@ -1492,7 +1488,7 @@ namespace CodeImp.DoomBuilder
                 {
                     int matches = 0;
                     int maxcnt = lst.Count;
-                    int checkindex = nextindex;
+                    int checkindex = nextindex+1;
                     foreach (string lmp in lst)
                     {
                         if (checkindex >= target.Lumps.Count)
@@ -1513,7 +1509,7 @@ namespace CodeImp.DoomBuilder
                 // if we didn't find anything it's weird...
                 if (trylist != null)
                 {
-                    int checkindex = nextindex;
+                    int checkindex = nextindex+1;
                     foreach (string lmp in trylist)
                     {
                         if (checkindex >= target.Lumps.Count)
@@ -1523,6 +1519,11 @@ namespace CodeImp.DoomBuilder
                         else break; // stop deleting on first non-matching lump
                     }
                 }
+
+                // how if trylist was not null, we need to remove the header as well.
+                target.RemoveAt(nextindex, false);
+                writeheaders = true;
+                tgtheaderindex = nextindex;
             }
 
             if (writeheaders) target.WriteHeaders();
-- 
GitLab