diff --git a/SabreTools.Core/Enums.cs b/SabreTools.Core/Enums.cs
index a1c97755..4a58c3f1 100644
--- a/SabreTools.Core/Enums.cs
+++ b/SabreTools.Core/Enums.cs
@@ -594,6 +594,12 @@ namespace SabreTools.Core
// Analog
Analog_Mask,
+ // Archive
+ Number,
+ Clone,
+ RegParent,
+ Languages,
+
// BiosSet
Description,
diff --git a/SabreTools.DatItems/Formats/Archive.cs b/SabreTools.DatItems/Formats/Archive.cs
index 260e287a..3d0b573f 100644
--- a/SabreTools.DatItems/Formats/Archive.cs
+++ b/SabreTools.DatItems/Formats/Archive.cs
@@ -18,6 +18,41 @@ namespace SabreTools.DatItems.Formats
[JsonProperty("name"), XmlElement("name")]
public string Name { get; set; }
+ ///
+ /// Archive ID number
+ ///
+ /// No-Intro database export only
+ [JsonProperty("number"), XmlElement("number")]
+ public string Number { get; set; }
+
+ ///
+ /// Clone
+ ///
+ /// No-Intro database export only
+ [JsonProperty("clone"), XmlElement("clone")]
+ public string Clone { get; set; }
+
+ ///
+ /// Regional parent
+ ///
+ /// No-Intro database export only
+ [JsonProperty("regparent"), XmlElement("regparent")]
+ public string RegParent { get; set; }
+
+ ///
+ /// Region
+ ///
+ /// No-Intro database export only
+ [JsonProperty("region"), XmlElement("region")]
+ public string Region { get; set; }
+
+ ///
+ /// Region
+ ///
+ /// No-Intro database export only
+ [JsonProperty("languages"), XmlElement("languages")]
+ public string Languages { get; set; }
+
#endregion
#region Accessors
@@ -57,6 +92,11 @@ namespace SabreTools.DatItems.Formats
Remove = this.Remove,
Name = this.Name,
+ Number = this.Number,
+ Clone = this.Clone,
+ RegParent = this.RegParent,
+ Region = this.Region,
+ Languages = this.Languages,
};
}
@@ -75,7 +115,12 @@ namespace SabreTools.DatItems.Formats
Archive newOther = other as Archive;
// If the archive information matches
- return (Name == newOther.Name);
+ return (Name == newOther.Name
+ && Number == newOther.Number
+ && Clone == newOther.Clone
+ && RegParent == newOther.RegParent
+ && Region == newOther.Region
+ && Languages = newOther.Languages);
}
#endregion
diff --git a/SabreTools.Filtering/DatItemFilter.cs b/SabreTools.Filtering/DatItemFilter.cs
index 6ba26de1..905b6d24 100644
--- a/SabreTools.Filtering/DatItemFilter.cs
+++ b/SabreTools.Filtering/DatItemFilter.cs
@@ -83,6 +83,12 @@ namespace SabreTools.Filtering
// Analog
public FilterItem Analog_Mask { get; private set; } = new FilterItem();
+ // Archive
+ public FilterItem Number { get; private set; } = new FilterItem();
+ public FilterItem Clone { get; private set; } = new FilterItem();
+ public FilterItem RegParent { get; private set; } = new FilterItem();
+ public FilterItem Languages { get; private set; } = new FilterItem();
+
// BiosSet
public FilterItem Description { get; private set; } = new FilterItem();
@@ -434,6 +440,23 @@ namespace SabreTools.Filtering
SetStringFilter(Analog_Mask, value, negate);
break;
+ // Archive
+ case DatItemField.Number:
+ SetStringFilter(Number, value, negate);
+ break;
+
+ case DatItemField.Clone:
+ SetStringFilter(Clone, value, negate);
+ break;
+
+ case DatItemField.RegParent:
+ SetStringFilter(RegParent, value, negate);
+ break;
+
+ case DatItemField.Languages:
+ SetStringFilter(Languages, value, negate);
+ break;
+
// BiosSet
case DatItemField.Description:
SetStringFilter(Description, value, negate);
@@ -859,6 +882,7 @@ namespace SabreTools.Filtering
{
Adjuster adjuster => PassesFilters(adjuster),
Analog analog => PassesFilters(analog),
+ Archive archive => PassesFilters(archive),
BiosSet biosSet => PassesFilters(biosSet),
Chip chip => PassesFilters(chip),
Condition condition => PassesFilters(condition),
@@ -934,6 +958,36 @@ namespace SabreTools.Filtering
return true;
}
+ ///
+ /// Check to see if an Archive passes the filters
+ ///
+ /// Archive to check
+ /// True if the item passed the filter, false otherwise
+ private bool PassesFilters(Archive archive)
+ {
+ // Filter on number
+ if (!PassStringFilter(Number, archive.Number))
+ return false;
+
+ // Filter on clone
+ if (!PassStringFilter(Clone, analog.Clone))
+ return false;
+
+ // Filter on regional parent
+ if (!PassStringFilter(RegParent, analog.RegParent))
+ return false;
+
+ // Filter on region
+ if (!PassStringFilter(Region, analog.Region))
+ return false;
+
+ // Filter on languages
+ if (!PassStringFilter(Languages, analog.Languages))
+ return false;
+
+ return true;
+ }
+
///
/// Check to see if a BiosSet passes the filters
///
diff --git a/SabreTools.Filtering/DatItemRemover.cs b/SabreTools.Filtering/DatItemRemover.cs
index 6d23653b..8dfe977c 100644
--- a/SabreTools.Filtering/DatItemRemover.cs
+++ b/SabreTools.Filtering/DatItemRemover.cs
@@ -88,6 +88,7 @@ namespace SabreTools.Filtering
if (datItem is Adjuster) RemoveFields(datItem as Adjuster);
else if (datItem is Analog) RemoveFields(datItem as Analog);
+ else if (datItem is Archive) RemoveFields(datItem as Archive);
else if (datItem is BiosSet) RemoveFields(datItem as BiosSet);
else if (datItem is Chip) RemoveFields(datItem as Chip);
else if (datItem is Condition) RemoveFields(datItem as Condition);
@@ -300,6 +301,28 @@ namespace SabreTools.Filtering
analog.Mask = null;
}
+ ///
+ /// Remove fields with given values
+ ///
+ /// Archive to remove fields from
+ private void RemoveFields(Archive archive)
+ {
+ if (DatItemFields.Contains(DatItemField.Number))
+ archive.Number = null;
+
+ if (DatItemFields.Contains(DatItemField.Clone))
+ archive.Clone = null;
+
+ if (DatItemFields.Contains(DatItemField.RegParent))
+ archive.RegParent = null;
+
+ if (DatItemFields.Contains(DatItemField.Region))
+ archive.Region = null;
+
+ if (DatItemFields.Contains(DatItemField.Languages))
+ archive.Languages = null;
+ }
+
///
/// Remove fields with given values
///
diff --git a/SabreTools.Filtering/Replacer.cs b/SabreTools.Filtering/Replacer.cs
index 87792098..bb96fc2f 100644
--- a/SabreTools.Filtering/Replacer.cs
+++ b/SabreTools.Filtering/Replacer.cs
@@ -36,6 +36,7 @@ namespace SabreTools.Filtering
if (datItem is Adjuster) ReplaceFields(datItem as Adjuster, repDatItem as Adjuster, datItemFields);
else if (datItem is Analog) ReplaceFields(datItem as Analog, repDatItem as Analog, datItemFields);
+ else if (datItem is Archive) ReplaceFields(datItem as Archive, repDatItem as Archive, datItemFields);
else if (datItem is BiosSet) ReplaceFields(datItem as BiosSet, repDatItem as BiosSet, datItemFields);
else if (datItem is Chip) ReplaceFields(datItem as Chip, repDatItem as Chip, datItemFields);
else if (datItem is Condition) ReplaceFields(datItem as Condition, repDatItem as Condition, datItemFields);
@@ -254,6 +255,30 @@ namespace SabreTools.Filtering
analog.Mask = newItem.Mask;
}
+ ///
+ /// Replace fields with given values
+ ///
+ /// Archive to remove replace fields in
+ /// Archive to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Archive archive, Archive newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Number))
+ archive.Number = newItem.Number;
+
+ if (datItemFields.Contains(DatItemField.Clone))
+ archive.Clone = newItem.Clone;
+
+ if (datItemFields.Contains(DatItemField.RegParent))
+ archive.RegParent = newItem.RegParent;
+
+ if (datItemFields.Contains(DatItemField.Region))
+ archive.Region = newItem.Region;
+
+ if (datItemFields.Contains(DatItemField.Languages))
+ archive.Languages = newItem.Languages;
+ }
+
///
/// Replace fields with given values
///
diff --git a/SabreTools.Test/TestData/test-logiqx.xml b/SabreTools.Test/TestData/test-logiqx.xml
index 5ab5cbcf..a8f4b638 100644
--- a/SabreTools.Test/TestData/test-logiqx.xml
+++ b/SabreTools.Test/TestData/test-logiqx.xml
@@ -49,7 +49,7 @@
-
+