diff --git a/SabreTools.Core/Enums.cs b/SabreTools.Core/Enums.cs
index 587a9e7a..de487bb3 100644
--- a/SabreTools.Core/Enums.cs
+++ b/SabreTools.Core/Enums.cs
@@ -767,6 +767,7 @@ namespace SabreTools.Core
Board,
RebuildTo,
NoIntroId,
+ NoIntroCloneOfId,
#endregion
diff --git a/SabreTools.Core/Tools/Converters.cs b/SabreTools.Core/Tools/Converters.cs
index 653489d1..b3551548 100644
--- a/SabreTools.Core/Tools/Converters.cs
+++ b/SabreTools.Core/Tools/Converters.cs
@@ -1130,6 +1130,13 @@ namespace SabreTools.Core.Tools
case "no_intro_id":
return MachineField.NoIntroId;
+ case "cloneofid":
+ case "nointrocloneofid":
+ case "nointro_cloneofid":
+ case "no_intro_cloneofid":
+ case "no_intro_clone_of_id":
+ return MachineField.NoIntroCloneOfId;
+
#endregion
#region Logiqx EmuArc
diff --git a/SabreTools.DatFiles/Formats/Logiqx.cs b/SabreTools.DatFiles/Formats/Logiqx.cs
index 98818de7..c47a9c06 100644
--- a/SabreTools.DatFiles/Formats/Logiqx.cs
+++ b/SabreTools.DatFiles/Formats/Logiqx.cs
@@ -411,6 +411,7 @@ namespace SabreTools.DatFiles.Formats
Board = reader.GetAttribute("board"),
RebuildTo = reader.GetAttribute("rebuildto"),
NoIntroId = reader.GetAttribute("id"),
+ NoIntroCloneOfId = reader.GetAttribute("cloneofid"),
Runnable = reader.GetAttribute("runnable").AsRunnable(), // Used by older DATs
CloneOf = reader.GetAttribute("cloneof"),
@@ -960,6 +961,7 @@ namespace SabreTools.DatFiles.Formats
xtw.WriteOptionalAttributeString("runnable", datItem.Machine.Runnable.FromRunnable());
xtw.WriteOptionalAttributeString("id", datItem.Machine.NoIntroId);
+ xtw.WriteOptionalAttributeString("cloneofid", datItem.Machine.NoIntroCloneOfId);
if (!string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase))
xtw.WriteOptionalAttributeString("cloneof", datItem.Machine.CloneOf);
diff --git a/SabreTools.DatFiles/Setter.cs b/SabreTools.DatFiles/Setter.cs
index 6f3e1e58..d6435a0b 100644
--- a/SabreTools.DatFiles/Setter.cs
+++ b/SabreTools.DatFiles/Setter.cs
@@ -370,6 +370,9 @@ namespace SabreTools.DatFiles
if (MachineMappings.Keys.Contains(MachineField.NoIntroId))
machine.NoIntroId = MachineMappings[MachineField.NoIntroId];
+ if (MachineMappings.Keys.Contains(MachineField.NoIntroCloneOfId))
+ machine.NoIntroCloneOfId = MachineMappings[MachineField.NoIntroCloneOfId];
+
#endregion
#region Logiqx EmuArc
diff --git a/SabreTools.DatItems/Machine.cs b/SabreTools.DatItems/Machine.cs
index ce3c6fd1..58a4b1a9 100644
--- a/SabreTools.DatItems/Machine.cs
+++ b/SabreTools.DatItems/Machine.cs
@@ -208,6 +208,13 @@ namespace SabreTools.DatItems
[XmlElement("nointroid")]
public string NoIntroId { get; set; } = null;
+ ///
+ /// No-Intro ID for the game
+ ///
+ [JsonProperty("nointrocloneofid", DefaultValueHandling = DefaultValueHandling.Ignore)]
+ [XmlElement("nointrocloneofid")]
+ public string NoIntroCloneOfId { get; set; } = null;
+
#endregion
// TODO: Should this be a separate object for TruRip?
@@ -395,6 +402,7 @@ namespace SabreTools.DatItems
Board = this.Board,
RebuildTo = this.RebuildTo,
NoIntroId = this.NoIntroId,
+ NoIntroCloneOfId = this.NoIntroCloneOfId,
#endregion
diff --git a/SabreTools.Filtering/DatItemRemover.cs b/SabreTools.Filtering/DatItemRemover.cs
index aed05529..6d23653b 100644
--- a/SabreTools.Filtering/DatItemRemover.cs
+++ b/SabreTools.Filtering/DatItemRemover.cs
@@ -215,6 +215,9 @@ namespace SabreTools.Filtering
if (MachineFields.Contains(MachineField.NoIntroId))
machine.NoIntroId = null;
+ if (MachineFields.Contains(MachineField.NoIntroCloneOfId))
+ machine.NoIntroCloneOfId = null;
+
#endregion
#region Logiqx EmuArc
diff --git a/SabreTools.Filtering/MachineFilter.cs b/SabreTools.Filtering/MachineFilter.cs
index 110bcac7..ce362d66 100644
--- a/SabreTools.Filtering/MachineFilter.cs
+++ b/SabreTools.Filtering/MachineFilter.cs
@@ -57,6 +57,7 @@ namespace SabreTools.Filtering
public FilterItem Board { get; private set; } = new FilterItem();
public FilterItem RebuildTo { get; private set; } = new FilterItem();
public FilterItem NoIntroId { get; private set; } = new FilterItem();
+ public FilterItem NoIntroCloneOfId { get; private set; } = new FilterItem();
#endregion
@@ -260,6 +261,10 @@ namespace SabreTools.Filtering
SetStringFilter(NoIntroId, value, negate);
break;
+ case MachineField.NoIntroCloneOfId:
+ SetStringFilter(NoIntroCloneOfId, value, negate);
+ break;
+
#endregion
#region Logiqx EmuArc
@@ -465,6 +470,11 @@ namespace SabreTools.Filtering
if (!PassStringFilter(NoIntroId, machine.NoIntroId))
return false;
+ // Machine_NoIntroCloneOfId
+ if (!PassStringFilter(NoIntroCloneOfId, value: machine.NoIntroCloneOfId))
+ return false;
+
+
#endregion
#region Logiqx EmuArc
diff --git a/SabreTools.Filtering/Replacer.cs b/SabreTools.Filtering/Replacer.cs
index 7331961b..87792098 100644
--- a/SabreTools.Filtering/Replacer.cs
+++ b/SabreTools.Filtering/Replacer.cs
@@ -169,6 +169,9 @@ namespace SabreTools.Filtering
if (machineFields.Contains(MachineField.NoIntroId))
machine.NoIntroId = repMachine.NoIntroId;
+ if (machineFields.Contains(MachineField.NoIntroCloneOfId))
+ machine.NoIntroCloneOfId = repMachine.NoIntroCloneOfId;
+
#endregion
#region Logiqx EmuArc