diff --git a/Sledge.Formats.Map.Tests/Formats/TestWorldcraftFormat.cs b/Sledge.Formats.Map.Tests/Formats/TestWorldcraftFormat.cs
index 5b363bb..6c067a7 100644
--- a/Sledge.Formats.Map.Tests/Formats/TestWorldcraftFormat.cs
+++ b/Sledge.Formats.Map.Tests/Formats/TestWorldcraftFormat.cs
@@ -1,10 +1,7 @@
-using System;
-using System.IO;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Sledge.Formats.Map.Formats;
using Sledge.Formats.Map.Objects;
-using Path = System.IO.Path;
namespace Sledge.Formats.Map.Tests.Formats;
@@ -37,4 +34,37 @@ public void TestRmf08Visgroups()
var format = new WorldcraftRmfFormat();
var map = format.Read(file);
}
+
+ [TestMethod]
+ public void TestRmfQuakeToValveTextureConversion()
+ {
+ var format = new WorldcraftRmfFormat();
+
+ using var file16 = typeof(TestWorldcraftFormat).Assembly.GetManifestResourceStream($"Sledge.Formats.Map.Tests.Resources.rmf.test-cube-1.6.rmf");
+ using var file22 = typeof(TestWorldcraftFormat).Assembly.GetManifestResourceStream($"Sledge.Formats.Map.Tests.Resources.rmf.test-cube-2.2.rmf");
+
+ var map16 = format.Read(file16);
+ var map22 = format.Read(file22);
+
+ var solid16 = (Solid)map16.Worldspawn.Children[0];
+ var solid22 = (Solid)map22.Worldspawn.Children[0];
+
+ foreach (var face22 in solid22.Faces)
+ {
+ var face16 = solid16.Faces.Single(x => x.Plane.Equals(face22.Plane));
+
+ Assert.AreEqual(face22.UAxis, face16.UAxis);
+ Assert.AreEqual(face22.VAxis, face16.VAxis);
+ Assert.AreEqual(face22.XScale, face16.XScale);
+ Assert.AreEqual(face22.YScale, face16.YScale);
+ Assert.AreEqual(face22.XShift, face16.XShift);
+ Assert.AreEqual(face22.YShift, face16.YShift);
+ Assert.AreEqual(face22.Rotation, face16.Rotation);
+ Assert.AreEqual(face22.ContentFlags, face16.ContentFlags);
+ Assert.AreEqual(face22.SurfaceFlags, face16.SurfaceFlags);
+ Assert.AreEqual(face22.Value, face16.Value);
+ Assert.AreEqual(face22.LightmapScale, face16.LightmapScale);
+ Assert.AreEqual(face22.SmoothingGroups, face16.SmoothingGroups);
+ }
+ }
}
\ No newline at end of file
diff --git a/Sledge.Formats.Map.Tests/Resources/rmf/test-cube-1.6.rmf b/Sledge.Formats.Map.Tests/Resources/rmf/test-cube-1.6.rmf
new file mode 100644
index 0000000..fe40c88
Binary files /dev/null and b/Sledge.Formats.Map.Tests/Resources/rmf/test-cube-1.6.rmf differ
diff --git a/Sledge.Formats.Map.Tests/Resources/rmf/test-cube-2.2.rmf b/Sledge.Formats.Map.Tests/Resources/rmf/test-cube-2.2.rmf
new file mode 100644
index 0000000..3f46bf9
Binary files /dev/null and b/Sledge.Formats.Map.Tests/Resources/rmf/test-cube-2.2.rmf differ
diff --git a/Sledge.Formats.Map.Tests/Sledge.Formats.Map.Tests.csproj b/Sledge.Formats.Map.Tests/Sledge.Formats.Map.Tests.csproj
index 290df2e..350ab67 100644
--- a/Sledge.Formats.Map.Tests/Sledge.Formats.Map.Tests.csproj
+++ b/Sledge.Formats.Map.Tests/Sledge.Formats.Map.Tests.csproj
@@ -19,6 +19,8 @@
+
+
@@ -33,6 +35,8 @@
+
+
diff --git a/Sledge.Formats.Map/Formats/WorldcraftRmfFormat.cs b/Sledge.Formats.Map/Formats/WorldcraftRmfFormat.cs
index 0ce1c37..26289ae 100644
--- a/Sledge.Formats.Map/Formats/WorldcraftRmfFormat.cs
+++ b/Sledge.Formats.Map/Formats/WorldcraftRmfFormat.cs
@@ -293,9 +293,9 @@ private static Face ReadFace(RmfVersion version, BinaryReader br)
if (version <= RmfVersion.Version18)
{
// We need to use quake editor logic to work out the texture axes, for that we need the plane data - see below
+ face.Rotation = br.ReadSingle();
face.XShift = br.ReadSingle();
face.YShift = br.ReadSingle();
- face.Rotation = br.ReadSingle();
}
else // if (version == RmfVersion.Version22)
{
diff --git a/Sledge.Formats.Map/Sledge.Formats.Map.csproj b/Sledge.Formats.Map/Sledge.Formats.Map.csproj
index f09fb2a..bde98f1 100644
--- a/Sledge.Formats.Map/Sledge.Formats.Map.csproj
+++ b/Sledge.Formats.Map/Sledge.Formats.Map.csproj
@@ -11,8 +11,8 @@
https://github.com/LogicAndTrick/sledge-formats
Git
half-life quake valve hammer worldcraft jackhammer jack rmf vmf map jmf
- Add some basic factory classes to create known solid types
- 1.2.3
+ Fix incorrect loading of texture rotation and shift values for pre-2.2 RMF files
+ 1.2.4
full
true