diff --git a/UAssetAPI.Tests/AssetUnitTests.cs b/UAssetAPI.Tests/AssetUnitTests.cs index 2722f1b5..a9b28165 100644 --- a/UAssetAPI.Tests/AssetUnitTests.cs +++ b/UAssetAPI.Tests/AssetUnitTests.cs @@ -632,6 +632,18 @@ public void TestRepak() } } + /// + /// In this test, we parse a .usmap containing an OptionalProperty (as currently produced by Dumper-7) to verify compatibility. + /// + [TestMethod] + public void TestUsmapWithOptionalProperty() + { + var usmap = new Usmap(Path.Combine("TestAssets", "TestUE5_4", "BlankGame", "BlankGame_Dumper-7.usmap")); + Assert.AreEqual(31948, usmap.NameMap.Count); + Assert.AreEqual(1565, usmap.EnumMap.Count); + Assert.AreEqual(7657, usmap.Schemas.Count); + } + public static MemoryStream PathToStream(string p) { using (FileStream origStream = File.Open(p, FileMode.Open, new FileInfo(p).IsReadOnly ? FileAccess.Read : FileAccess.ReadWrite)) diff --git a/UAssetAPI.Tests/TestAssets/TestUE5_4/BlankGame/BlankGame_Dumper-7.usmap b/UAssetAPI.Tests/TestAssets/TestUE5_4/BlankGame/BlankGame_Dumper-7.usmap new file mode 100644 index 00000000..7aa579b5 Binary files /dev/null and b/UAssetAPI.Tests/TestAssets/TestUE5_4/BlankGame/BlankGame_Dumper-7.usmap differ diff --git a/UAssetAPI.Tests/UAssetAPI.Tests.csproj b/UAssetAPI.Tests/UAssetAPI.Tests.csproj index 29edf08a..faf3dddb 100644 --- a/UAssetAPI.Tests/UAssetAPI.Tests.csproj +++ b/UAssetAPI.Tests/UAssetAPI.Tests.csproj @@ -443,5 +443,8 @@ Always + + Always + \ No newline at end of file diff --git a/UAssetAPI/Unversioned/Usmap.cs b/UAssetAPI/Unversioned/Usmap.cs index b5e7df8a..ab63ff03 100644 --- a/UAssetAPI/Unversioned/Usmap.cs +++ b/UAssetAPI/Unversioned/Usmap.cs @@ -92,6 +92,9 @@ public enum EPropertyType SetProperty, EnumProperty, FieldPathProperty, + OptionalProperty, + Utf8StrProperty, + AnsiStrProperty, Unknown = 0xFF }; @@ -906,6 +909,7 @@ private UsmapPropertyData InitPropData(EPropertyType typ) return new UsmapStructData(); case EPropertyType.SetProperty: case EPropertyType.ArrayProperty: + case EPropertyType.OptionalProperty: return new UsmapArrayData(typ); case EPropertyType.MapProperty: return new UsmapMapData(); @@ -928,6 +932,7 @@ private UsmapPropertyData DeserializePropData(UsmapBinaryReader reader) break; case EPropertyType.SetProperty: case EPropertyType.ArrayProperty: + case EPropertyType.OptionalProperty: ((UsmapArrayData)res).InnerType = DeserializePropData(reader); break; case EPropertyType.MapProperty: