diff --git a/SabreTools.Data.Extensions/MetadataExtensions.cs b/SabreTools.Data.Extensions/MetadataExtensions.cs
index bbb9172d..d43acea9 100644
--- a/SabreTools.Data.Extensions/MetadataExtensions.cs
+++ b/SabreTools.Data.Extensions/MetadataExtensions.cs
@@ -301,6 +301,7 @@ namespace SabreTools.Data.Extensions
{
cloneInput.Buttons = selfInput.Buttons;
cloneInput.Coins = selfInput.Coins;
+ cloneInput.ControlAttr = selfInput.ControlAttr;
cloneInput.Players = selfInput.Players;
cloneInput.Service = selfInput.Service;
cloneInput.Tilt = selfInput.Tilt;
diff --git a/SabreTools.Data.Models/Metadata/Input.cs b/SabreTools.Data.Models/Metadata/Input.cs
index 9496337c..87072425 100644
--- a/SabreTools.Data.Models/Metadata/Input.cs
+++ b/SabreTools.Data.Models/Metadata/Input.cs
@@ -12,6 +12,9 @@ namespace SabreTools.Data.Models.Metadata
public long? Coins { get; set; }
+ /// Attribute also named Control
+ public string? ControlAttr { get; set; }
+
public long? Players { get; set; }
/// (yes|no) "no"
@@ -24,7 +27,7 @@ namespace SabreTools.Data.Models.Metadata
#region Keys
- /// string / Control[]
+ /// Control[]
public const string ControlKey = "control";
#endregion
diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs
index 8cf264fb..6b095fb2 100644
--- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs
+++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs
@@ -665,6 +665,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Buttons = 12345,
Coins = 12345,
[Data.Models.Metadata.Input.ControlKey] = new Data.Models.Metadata.Control[] { CreateMetadataControl() },
+ ControlAttr = "controlattr",
Players = 12345,
Service = true,
Tilt = true,
@@ -1395,6 +1396,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.NotNull(input);
Assert.Equal(12345, input.Buttons);
Assert.Equal(12345, input.Coins);
+ Assert.Equal("controlattr", input.ControlAttr);
Assert.Equal(12345, input.Players);
Assert.True(input.Service);
Assert.True(input.Tilt);
diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs
index 84156cd9..de331159 100644
--- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs
+++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs
@@ -930,6 +930,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.NotNull(input);
Assert.Equal(12345, input.Buttons);
Assert.Equal(12345, input.Coins);
+ Assert.Equal("controlattr", input.ControlAttr);
Assert.Equal(12345, input.Players);
Assert.True(input.Service);
Assert.True(input.Tilt);
diff --git a/SabreTools.Metadata.DatItems/Formats/Input.cs b/SabreTools.Metadata.DatItems/Formats/Input.cs
index 7a742ef5..3ab64efd 100644
--- a/SabreTools.Metadata.DatItems/Formats/Input.cs
+++ b/SabreTools.Metadata.DatItems/Formats/Input.cs
@@ -25,6 +25,12 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.Input)?.Coins = value;
}
+ public string? ControlAttr
+ {
+ get => (_internal as Data.Models.Metadata.Input)?.ControlAttr;
+ set => (_internal as Data.Models.Metadata.Input)?.ControlAttr = value;
+ }
+
[JsonIgnore]
public bool ControlsSpecified
{
diff --git a/SabreTools.Metadata.Filter/FilterObject.cs b/SabreTools.Metadata.Filter/FilterObject.cs
index 3d9f6728..c8f9b298 100644
--- a/SabreTools.Metadata.Filter/FilterObject.cs
+++ b/SabreTools.Metadata.Filter/FilterObject.cs
@@ -723,6 +723,9 @@ namespace SabreTools.Metadata.Filter
case Input item when fieldName == "coins":
checkValue = item.Coins?.ToString();
return true;
+ case Input item when fieldName == "controlattr":
+ checkValue = item.ControlAttr;
+ return true;
case Input item when fieldName == "players":
checkValue = item.Players?.ToString();
return true;
diff --git a/SabreTools.Metadata/DictionaryBaseExtensions.cs b/SabreTools.Metadata/DictionaryBaseExtensions.cs
index 712b3c44..9b1b61e8 100644
--- a/SabreTools.Metadata/DictionaryBaseExtensions.cs
+++ b/SabreTools.Metadata/DictionaryBaseExtensions.cs
@@ -260,6 +260,8 @@ namespace SabreTools.Metadata
return false;
if (selfInput.Coins != otherInput.Coins)
return false;
+ if (selfInput.ControlAttr != otherInput.ControlAttr)
+ return false;
if (selfInput.Players != otherInput.Players)
return false;
if (selfInput.Service != otherInput.Service)
diff --git a/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs b/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs
index cdda4263..525728fc 100644
--- a/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs
+++ b/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs
@@ -173,7 +173,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Service = true,
Tilt = true,
Players = 12345,
- //ControlAttr = "XXXXXX", // Mututally exclusive with input.Control
+ ControlAttr = "controlattr",
Buttons = 12345,
Coins = 12345,
Control = [control],
@@ -601,7 +601,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Assert.Equal(true, input.Service);
Assert.Equal(true, input.Tilt);
Assert.Equal(12345, input.Players);
- //Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control
+ Assert.Equal("controlattr", input.ControlAttr);
Assert.Equal(12345, input.Buttons);
Assert.Equal(12345, input.Coins);
diff --git a/SabreTools.Serialization.CrossModel.Test/M1Tests.cs b/SabreTools.Serialization.CrossModel.Test/M1Tests.cs
index f151b31c..73453a6b 100644
--- a/SabreTools.Serialization.CrossModel.Test/M1Tests.cs
+++ b/SabreTools.Serialization.CrossModel.Test/M1Tests.cs
@@ -169,7 +169,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Service = true,
Tilt = true,
Players = 12345,
- //ControlAttr = "XXXXXX", // Mututally exclusive with input.Control
+ ControlAttr = "controlattr",
Buttons = 12345,
Coins = 12345,
Control = [control],
@@ -595,7 +595,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Assert.Equal(true, input.Service);
Assert.Equal(true, input.Tilt);
Assert.Equal(12345, input.Players);
- //Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control
+ Assert.Equal("controlattr", input.ControlAttr);
Assert.Equal(12345, input.Buttons);
Assert.Equal(12345, input.Coins);
diff --git a/SabreTools.Serialization.CrossModel.Test/MessTests.cs b/SabreTools.Serialization.CrossModel.Test/MessTests.cs
index f3fa9a92..cefd38d2 100644
--- a/SabreTools.Serialization.CrossModel.Test/MessTests.cs
+++ b/SabreTools.Serialization.CrossModel.Test/MessTests.cs
@@ -169,7 +169,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Service = true,
Tilt = true,
Players = 12345,
- //ControlAttr = "XXXXXX", // Mututally exclusive with input.Control
+ ControlAttr = "controlattr",
Buttons = 12345,
Coins = 12345,
Control = [control],
@@ -595,7 +595,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Assert.Equal(true, input.Service);
Assert.Equal(true, input.Tilt);
Assert.Equal(12345, input.Players);
- //Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control
+ Assert.Equal("controlattr", input.ControlAttr);
Assert.Equal(12345, input.Buttons);
Assert.Equal(12345, input.Coins);
diff --git a/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs b/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs
index 8fdca741..14db6920 100644
--- a/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs
+++ b/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs
@@ -230,7 +230,7 @@ namespace SabreTools.Serialization.CrossModel
var input = new Input
{
Players = item.Players,
- Control = item.ReadString(Data.Models.Metadata.Input.ControlKey),
+ Control = item.ControlAttr,
Buttons = item.Buttons,
Coins = item.Coins,
Tilt = item.Tilt,
diff --git a/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs b/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs
index 3dc10ef6..1803144b 100644
--- a/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs
+++ b/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs
@@ -243,7 +243,7 @@ namespace SabreTools.Serialization.CrossModel
var input = new Data.Models.Metadata.Input
{
Players = item.Players,
- [Data.Models.Metadata.Input.ControlKey] = item.Control,
+ ControlAttr = item.Control,
Buttons = item.Buttons,
Coins = item.Coins,
Tilt = item.Tilt,
diff --git a/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs b/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs
index 62b56763..f168b43c 100644
--- a/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs
+++ b/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs
@@ -499,14 +499,11 @@ namespace SabreTools.Serialization.CrossModel
Service = item.Service,
Tilt = item.Tilt,
Players = item.Players,
+ ControlAttr = item.ControlAttr,
Buttons = item.Buttons,
Coins = item.Coins,
};
- var controlAttr = item.ReadString(Data.Models.Metadata.Input.ControlKey);
- if (controlAttr is not null)
- input.ControlAttr = controlAttr;
-
var controls = item.Read(Data.Models.Metadata.Input.ControlKey);
if (controls is not null && controls.Length > 0)
input.Control = Array.ConvertAll(controls, ConvertFromInternalModel);
diff --git a/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs b/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs
index 86f488af..8e572716 100644
--- a/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs
+++ b/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs
@@ -537,7 +537,7 @@ namespace SabreTools.Serialization.CrossModel
Service = item.Service,
Tilt = item.Tilt,
Players = item.Players,
- [Data.Models.Metadata.Input.ControlKey] = item.ControlAttr,
+ ControlAttr = item.ControlAttr,
Buttons = item.Buttons,
Coins = item.Coins,
};
diff --git a/SabreTools.Serialization.Readers.Test/ListxmlTests.cs b/SabreTools.Serialization.Readers.Test/ListxmlTests.cs
index 50763fe1..a4997294 100644
--- a/SabreTools.Serialization.Readers.Test/ListxmlTests.cs
+++ b/SabreTools.Serialization.Readers.Test/ListxmlTests.cs
@@ -240,7 +240,7 @@ namespace SabreTools.Serialization.Readers.Test
Service = true,
Tilt = true,
Players = 12345,
- ControlAttr = "XXXXXX",
+ ControlAttr = "controlattr",
Buttons = 12345,
Coins = 12345,
Control = [control],
@@ -668,7 +668,7 @@ namespace SabreTools.Serialization.Readers.Test
Assert.Equal(true, input.Service);
Assert.Equal(true, input.Tilt);
Assert.Equal(12345, input.Players);
- Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control
+ Assert.Equal("controlattr", input.ControlAttr);
Assert.Equal(12345, input.Buttons);
Assert.Equal(12345, input.Coins);
diff --git a/SabreTools.Serialization.Readers.Test/M1Tests.cs b/SabreTools.Serialization.Readers.Test/M1Tests.cs
index 9a48a233..3f581a31 100644
--- a/SabreTools.Serialization.Readers.Test/M1Tests.cs
+++ b/SabreTools.Serialization.Readers.Test/M1Tests.cs
@@ -236,7 +236,7 @@ namespace SabreTools.Serialization.Readers.Test
Service = true,
Tilt = true,
Players = 12345,
- //ControlAttr = "XXXXXX", // Mututally exclusive with input.Control
+ ControlAttr = "controlattr",
Buttons = 12345,
Coins = 12345,
Control = [control],
@@ -662,7 +662,7 @@ namespace SabreTools.Serialization.Readers.Test
Assert.Equal(true, input.Service);
Assert.Equal(true, input.Tilt);
Assert.Equal(12345, input.Players);
- //Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control
+ Assert.Equal("controlattr", input.ControlAttr);
Assert.Equal(12345, input.Buttons);
Assert.Equal(12345, input.Coins);
diff --git a/SabreTools.Serialization.Readers.Test/MessTests.cs b/SabreTools.Serialization.Readers.Test/MessTests.cs
index a6f471cb..4d18462d 100644
--- a/SabreTools.Serialization.Readers.Test/MessTests.cs
+++ b/SabreTools.Serialization.Readers.Test/MessTests.cs
@@ -236,7 +236,7 @@ namespace SabreTools.Serialization.Readers.Test
Service = true,
Tilt = true,
Players = 12345,
- //ControlAttr = "XXXXXX", // Mututally exclusive with input.Control
+ ControlAttr = "controlattr",
Buttons = 12345,
Coins = 12345,
Control = [control],
@@ -662,7 +662,7 @@ namespace SabreTools.Serialization.Readers.Test
Assert.Equal(true, input.Service);
Assert.Equal(true, input.Tilt);
Assert.Equal(12345, input.Players);
- //Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control
+ Assert.Equal("controlattr", input.ControlAttr);
Assert.Equal(12345, input.Buttons);
Assert.Equal(12345, input.Coins);