diff --git a/SabreTools.Data.Models/Logiqx/RomVault.cs b/SabreTools.Data.Models/Logiqx/RomVault.cs
index 3bccee00..eaed2193 100644
--- a/SabreTools.Data.Models/Logiqx/RomVault.cs
+++ b/SabreTools.Data.Models/Logiqx/RomVault.cs
@@ -21,5 +21,10 @@ namespace SabreTools.Data.Models.Logiqx
/// (zip|unzip) "zip"
[XmlAttribute("forcepacking")]
public PackingFlag ForcePacking { get; set; }
+
+ /// (noautodir|nogame)
+ /// TODO: Turn this into an enum like the other flags
+ [XmlAttribute("dir")]
+ public string? Dir { get; set; }
}
}
diff --git a/SabreTools.Data.Models/Metadata/Header.cs b/SabreTools.Data.Models/Metadata/Header.cs
index e81449a5..a0fa40cb 100644
--- a/SabreTools.Data.Models/Metadata/Header.cs
+++ b/SabreTools.Data.Models/Metadata/Header.cs
@@ -33,6 +33,8 @@ namespace SabreTools.Data.Models.Metadata
public string? Description { get; set; }
+ public string? DirHandling { get; set; }
+
public string? Email { get; set; }
public string? EmulatorVersion { get; set; }
@@ -137,6 +139,7 @@ namespace SabreTools.Data.Models.Metadata
obj.DatVersion = DatVersion;
obj.Debug = Debug;
obj.Description = Description;
+ obj.DirHandling = DirHandling;
obj.Email = Email;
obj.EmulatorVersion = EmulatorVersion;
obj.FileName = FileName;
@@ -227,6 +230,11 @@ namespace SabreTools.Data.Models.Metadata
else if (Description is not null && !Description.Equals(other.Description, StringComparison.OrdinalIgnoreCase))
return false;
+ if ((DirHandling is null) ^ (other.DirHandling is null))
+ return false;
+ else if (DirHandling is not null && !DirHandling.Equals(other.DirHandling, StringComparison.OrdinalIgnoreCase))
+ return false;
+
if ((Email is null) ^ (other.Email is null))
return false;
else if (Email is not null && !Email.Equals(other.Email, StringComparison.OrdinalIgnoreCase))
diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs
index dab4a214..7e804bec 100644
--- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs
+++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs
@@ -212,6 +212,7 @@ namespace SabreTools.Metadata.DatFiles.Test
DatVersion = "datversion",
Debug = true,
Description = "description",
+ DirHandling = "noautodir",
Email = "email",
EmulatorVersion = "emulatorversion",
FileName = "filename",
@@ -1006,6 +1007,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("datversion", datHeader.DatVersion);
Assert.True(datHeader.Debug);
Assert.Equal("description", datHeader.Description);
+ Assert.Equal("noautodir", datHeader.DirHandling);
Assert.Equal("email", datHeader.Email);
Assert.Equal("emulatorversion", datHeader.EmulatorVersion);
Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, datHeader.ForceMerging);
diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs
index 06bad6ae..3a06bfa0 100644
--- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs
+++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs
@@ -344,6 +344,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("datversion", header.DatVersion);
Assert.True(header.Debug);
Assert.Equal("description", header.Description);
+ Assert.Equal("noautodir", header.DirHandling);
Assert.Equal("email", header.Email);
Assert.Equal("emulatorversion", header.EmulatorVersion);
Assert.Equal("filename", header.FileName);
diff --git a/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs b/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs
index 33e7fbbc..1e4460af 100644
--- a/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs
+++ b/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs
@@ -104,6 +104,8 @@ namespace SabreTools.Metadata.DatFiles
Header.Debug = header.Debug;
if (Header.Description is null)
Header.Description = header.Description;
+ if (Header.DirHandling is null)
+ Header.DirHandling = header.DirHandling;
if (Header.Email is null)
Header.Email = header.Email;
if (Header.EmulatorVersion is null)
diff --git a/SabreTools.Metadata.DatFiles/DatHeader.cs b/SabreTools.Metadata.DatFiles/DatHeader.cs
index 3365e02d..370b8ea5 100644
--- a/SabreTools.Metadata.DatFiles/DatHeader.cs
+++ b/SabreTools.Metadata.DatFiles/DatHeader.cs
@@ -84,6 +84,12 @@ namespace SabreTools.Metadata.DatFiles
set => _internal.Description = value;
}
+ public string? DirHandling
+ {
+ get => _internal.DirHandling;
+ set => _internal.DirHandling = value;
+ }
+
public string? Email
{
get => _internal.Email;
diff --git a/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs b/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs
index 40c2b8ce..77232eed 100644
--- a/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs
+++ b/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs
@@ -1103,6 +1103,7 @@ namespace SabreTools.Metadata.Filter.Test
[InlineData("header.datversion", "datversion")]
[InlineData("header.debug", "yes")]
[InlineData("header.description", "description")]
+ [InlineData("header.dir", "noautodir")]
[InlineData("header.email", "email")]
[InlineData("header.emulatorversion", "emulatorversion")]
[InlineData("header.filename", "filename")]
@@ -1151,6 +1152,7 @@ namespace SabreTools.Metadata.Filter.Test
DatVersion = "datversion",
Debug = true,
Description = "description",
+ DirHandling = "noautodir",
Email = "email",
EmulatorVersion = "emulatorversion",
FileName = "filename",
diff --git a/SabreTools.Metadata.Filter/Constants.cs b/SabreTools.Metadata.Filter/Constants.cs
index db1e0dac..2fa86141 100644
--- a/SabreTools.Metadata.Filter/Constants.cs
+++ b/SabreTools.Metadata.Filter/Constants.cs
@@ -309,6 +309,8 @@ namespace SabreTools.Metadata.Filter
"datversion",
"debug",
"description",
+ "dir",
+ "dirhandling",
"email",
"emulatorversion",
"filename",
diff --git a/SabreTools.Metadata.Filter/FilterObject.cs b/SabreTools.Metadata.Filter/FilterObject.cs
index 3a7ec777..9af59792 100644
--- a/SabreTools.Metadata.Filter/FilterObject.cs
+++ b/SabreTools.Metadata.Filter/FilterObject.cs
@@ -1280,6 +1280,10 @@ namespace SabreTools.Metadata.Filter
case "description":
checkValue = obj.Description;
return true;
+ case "dir":
+ case "dirhandling":
+ checkValue = obj.DirHandling;
+ return true;
case "email":
checkValue = obj.Email;
return true;
diff --git a/SabreTools.Serialization.CrossModel.Test/LogiqxTests.cs b/SabreTools.Serialization.CrossModel.Test/LogiqxTests.cs
index 4ef1b633..b1cfa22b 100644
--- a/SabreTools.Serialization.CrossModel.Test/LogiqxTests.cs
+++ b/SabreTools.Serialization.CrossModel.Test/LogiqxTests.cs
@@ -79,6 +79,7 @@ namespace SabreTools.Serialization.CrossModel.Test
ForceMerging = Data.Models.Metadata.MergingFlag.Merged,
ForceNodump = Data.Models.Metadata.NodumpFlag.Required,
ForcePacking = Data.Models.Metadata.PackingFlag.Zip,
+ Dir = "noautodir",
};
var clrmamepro = new Data.Models.Logiqx.ClrMamePro
@@ -332,6 +333,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, rv.ForceMerging);
Assert.Equal(Data.Models.Metadata.NodumpFlag.Required, rv.ForceNodump);
Assert.Equal(Data.Models.Metadata.PackingFlag.Zip, rv.ForcePacking);
+ Assert.Equal("noautodir", rv.Dir);
}
///
diff --git a/SabreTools.Serialization.CrossModel/Logiqx.Deserializer.cs b/SabreTools.Serialization.CrossModel/Logiqx.Deserializer.cs
index 971d1b79..abb2f448 100644
--- a/SabreTools.Serialization.CrossModel/Logiqx.Deserializer.cs
+++ b/SabreTools.Serialization.CrossModel/Logiqx.Deserializer.cs
@@ -71,6 +71,8 @@ namespace SabreTools.Serialization.CrossModel
header.RomVault.ForceNodump = item.ForceNodump;
if (item.ForcePacking is not Data.Models.Metadata.PackingFlag.None)
header.RomVault.ForcePacking = item.ForcePacking;
+ if (item.DirHandling is not null)
+ header.RomVault.Dir = item.DirHandling;
header.ClrMamePro = new Data.Models.Logiqx.ClrMamePro();
if (item.HeaderSkipper is not null)
diff --git a/SabreTools.Serialization.CrossModel/Logiqx.Serializer.cs b/SabreTools.Serialization.CrossModel/Logiqx.Serializer.cs
index 47109752..637e9170 100644
--- a/SabreTools.Serialization.CrossModel/Logiqx.Serializer.cs
+++ b/SabreTools.Serialization.CrossModel/Logiqx.Serializer.cs
@@ -69,6 +69,15 @@ namespace SabreTools.Serialization.CrossModel
Subset = item.Subset,
};
+ if (item.RomVault is not null)
+ {
+ header.HeaderSkipper = item.RomVault.Header;
+ header.ForceMerging = item.RomVault.ForceMerging;
+ header.ForceNodump = item.RomVault.ForceNodump;
+ header.ForcePacking = item.RomVault.ForcePacking;
+ header.DirHandling = item.RomVault.Dir;
+ }
+
if (item.ClrMamePro is not null)
{
header.HeaderSkipper = item.ClrMamePro.Header;
diff --git a/SabreTools.Serialization.Readers.Test/LogiqxTests.cs b/SabreTools.Serialization.Readers.Test/LogiqxTests.cs
index 801902b8..b2796051 100644
--- a/SabreTools.Serialization.Readers.Test/LogiqxTests.cs
+++ b/SabreTools.Serialization.Readers.Test/LogiqxTests.cs
@@ -144,6 +144,7 @@ namespace SabreTools.Serialization.Readers.Test
ForceMerging = Data.Models.Metadata.MergingFlag.Merged,
ForceNodump = Data.Models.Metadata.NodumpFlag.Required,
ForcePacking = Data.Models.Metadata.PackingFlag.Zip,
+ Dir = "noautodir",
};
var clrmamepro = new Data.Models.Logiqx.ClrMamePro
@@ -385,6 +386,7 @@ namespace SabreTools.Serialization.Readers.Test
Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, rv.ForceMerging);
Assert.Equal(Data.Models.Metadata.NodumpFlag.Required, rv.ForceNodump);
Assert.Equal(Data.Models.Metadata.PackingFlag.Zip, rv.ForcePacking);
+ Assert.Equal("noautodir", rv.Dir);
}
///
diff --git a/SabreTools.Serialization.Readers/Logiqx.cs b/SabreTools.Serialization.Readers/Logiqx.cs
index 90cef509..c8ae19ed 100644
--- a/SabreTools.Serialization.Readers/Logiqx.cs
+++ b/SabreTools.Serialization.Readers/Logiqx.cs
@@ -341,6 +341,7 @@ namespace SabreTools.Serialization.Readers
obj.ForceMerging = reader.GetAttribute("forcemerging").AsMergingFlag();
obj.ForceNodump = reader.GetAttribute("forcenodump").AsNodumpFlag();
obj.ForcePacking = reader.GetAttribute("forcepacking").AsPackingFlag();
+ obj.Dir = reader.GetAttribute("dir");
return obj;
}
diff --git a/SabreTools.Serialization.Writers/Logiqx.cs b/SabreTools.Serialization.Writers/Logiqx.cs
index 05960e04..f1f4ebe7 100644
--- a/SabreTools.Serialization.Writers/Logiqx.cs
+++ b/SabreTools.Serialization.Writers/Logiqx.cs
@@ -212,6 +212,7 @@ namespace SabreTools.Serialization.Writers
writer.WriteOptionalAttributeString("forcenodump", obj.ForceNodump.AsStringValue());
if (obj.ForcePacking != Data.Models.Metadata.PackingFlag.None)
writer.WriteOptionalAttributeString("forcepacking", obj.ForcePacking.AsStringValue());
+ writer.WriteOptionalAttributeString("dir", obj.Dir);
writer.WriteEndElement();
}