From 260ffbe57b77c42835a2c44a018eafe8fe451eea Mon Sep 17 00:00:00 2001
From: ZZYZX <zzyzx@virtual>
Date: Sun, 27 May 2018 23:25:17 +0300
Subject: [PATCH] Fixed skin remapping method

---
 Source/Core/GZBuilder/md3/ModelReader.cs         | 16 ++++++++++++----
 Source/Core/Properties/AssemblyInfo.cs           |  4 ++--
 .../BuilderModes/Properties/AssemblyInfo.cs      |  2 +-
 3 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/Source/Core/GZBuilder/md3/ModelReader.cs b/Source/Core/GZBuilder/md3/ModelReader.cs
index a3a18bef5..205ab66e6 100755
--- a/Source/Core/GZBuilder/md3/ModelReader.cs
+++ b/Source/Core/GZBuilder/md3/ModelReader.cs
@@ -396,15 +396,23 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3
                 vertices[i].nz = -nsum.z / total;
             }
 
+            List<int> exGroups = new List<int>();
             Dictionary<int, int> textureGroupRemap = new Dictionary<int, int>();
-            int topGrp = 0;
             for (int i = 0; i < polys.Length; i++)
             {
-                if (textureGroupRemap.ContainsKey(polys[i].TexNum))
+                if (exGroups.Contains(polys[i].TexNum))
                     continue;
-                textureGroupRemap[polys[i].TexNum] = topGrp++;
+                if (exGroups.Count == 0 ||
+                    polys[i].TexNum <= exGroups[0])
+                    exGroups.Insert(0, polys[i].TexNum);
+                else if (exGroups.Count == 0 ||
+                         polys[i].TexNum >= exGroups[exGroups.Count - 1])
+                    exGroups.Add(polys[i].TexNum);
             }
 
+            for (int i = 0; i < exGroups.Count; i++)
+                textureGroupRemap[exGroups[i]] = i;
+
             if (skins == null)
             {
                 List<WorldVertex> out_verts = new List<WorldVertex>();
@@ -427,7 +435,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3
             }
             else
             {
-                for (int k = 0; k < topGrp; k++)
+                for (int k = 0; k < exGroups.Count; k++)
                 {
                     List<WorldVertex> out_verts = new List<WorldVertex>();
                     List<int> out_polys = new List<int>();
diff --git a/Source/Core/Properties/AssemblyInfo.cs b/Source/Core/Properties/AssemblyInfo.cs
index fe650852f..02e38eabc 100755
--- a/Source/Core/Properties/AssemblyInfo.cs
+++ b/Source/Core/Properties/AssemblyInfo.cs
@@ -30,6 +30,6 @@ using CodeImp.DoomBuilder;
 //      Build Number
 //      Revision
 //
-[assembly: AssemblyVersion("2.3.0.3022")]
+[assembly: AssemblyVersion("2.3.0.3023")]
 [assembly: NeutralResourcesLanguageAttribute("en")]
-[assembly: AssemblyHash("634ba54")]
+[assembly: AssemblyHash("85f00ab")]
diff --git a/Source/Plugins/BuilderModes/Properties/AssemblyInfo.cs b/Source/Plugins/BuilderModes/Properties/AssemblyInfo.cs
index aa6799efa..4e0992178 100755
--- a/Source/Plugins/BuilderModes/Properties/AssemblyInfo.cs
+++ b/Source/Plugins/BuilderModes/Properties/AssemblyInfo.cs
@@ -29,5 +29,5 @@ using System.Resources;
 //      Build Number
 //      Revision
 //
-[assembly: AssemblyVersion("2.3.0.3022")]
+[assembly: AssemblyVersion("2.3.0.3023")]
 [assembly: NeutralResourcesLanguageAttribute("en")]
-- 
GitLab