diff --git a/SabreTools.Library/DatFiles/DatFile.cs b/SabreTools.Library/DatFiles/DatFile.cs
index 0ee6b444..91a0366d 100644
--- a/SabreTools.Library/DatFiles/DatFile.cs
+++ b/SabreTools.Library/DatFiles/DatFile.cs
@@ -1626,8 +1626,9 @@ namespace SabreTools.Library.DatFiles
/// Filter object to be passed to the DatItem level
/// Type of the split that should be performed (split, merged, fully merged)
/// ReplaceMode representing what should be updated [only for base replacement]
+ /// True if descriptions should only be replaced if the game name is the same, false otherwise [only for base replacement]
public void DetermineUpdateType(List inputPaths, List basePaths, string outDir, UpdateMode updateMode, bool inplace, bool skip,
- bool bare, bool clean, bool remUnicode, bool descAsName, Filter filter, SplitType splitType, ReplaceMode replaceMode)
+ bool bare, bool clean, bool remUnicode, bool descAsName, Filter filter, SplitType splitType, ReplaceMode replaceMode, bool onlySame)
{
// Ensure we only have files in the inputs
List inputFileNames = Utilities.GetOnlyFilesFromInputs(inputPaths, appendparent: true);
@@ -1681,7 +1682,7 @@ namespace SabreTools.Library.DatFiles
else if ((updateMode & UpdateMode.BaseReplace) != 0
|| (updateMode & UpdateMode.ReverseBaseReplace) != 0)
{
- BaseReplace(inputFileNames, baseFileNames, outDir, inplace, clean, remUnicode, descAsName, filter, splitType, replaceMode);
+ BaseReplace(inputFileNames, baseFileNames, outDir, inplace, clean, remUnicode, descAsName, filter, splitType, replaceMode, onlySame);
}
return;
@@ -1764,8 +1765,9 @@ namespace SabreTools.Library.DatFiles
/// True if all games should be replaced by '!', false otherwise
/// String representing root directory to compare against for length calculation
/// ReplaceMode representing what should be updated
+ /// True if descriptions should only be replaced if the game name is the same, false otherwise
public void BaseReplace(List inputFileNames, List baseFileNames, string outDir, bool inplace, bool clean, bool remUnicode,
- bool descAsName, Filter filter, SplitType splitType, ReplaceMode replaceMode)
+ bool descAsName, Filter filter, SplitType splitType, ReplaceMode replaceMode, bool onlySame)
{
// First we want to parse all of the base DATs into the input
InternalStopwatch watch = new InternalStopwatch("Populating base DAT for replacement...");
@@ -1922,7 +1924,10 @@ namespace SabreTools.Library.DatFiles
{
if ((replaceMode & ReplaceMode.Description) != 0)
{
- newDatItem.MachineDescription = this[key][0].MachineDescription;
+ if (!onlySame || (onlySame && newDatItem.MachineName == newDatItem.MachineDescription))
+ {
+ newDatItem.MachineDescription = this[key][0].MachineDescription;
+ }
}
if ((replaceMode & ReplaceMode.Year) != 0)
{
diff --git a/SabreTools/SabreTools.Help.cs b/SabreTools/SabreTools.Help.cs
index 45b6b43a..578183c1 100644
--- a/SabreTools/SabreTools.Help.cs
+++ b/SabreTools/SabreTools.Help.cs
@@ -482,6 +482,17 @@ namespace SabreTools
null);
}
}
+ private static Feature onlySameFlag
+ {
+ get
+ {
+ return new Feature(
+ new List() { "-ons", "--only-same" },
+ "Only update description if machine name matches description",
+ FeatureType.Flag,
+ null);
+ }
+ }
private static Feature outputAllFlag
{
get
@@ -2261,6 +2272,7 @@ namespace SabreTools
update["base-replace"].AddFeature("update-names", updateNamesFlag);
update["base-replace"].AddFeature("update-hashes", updateHashesFlag);
update["base-replace"].AddFeature("update-description", updateDescriptionFlag);
+ update["base-replace"]["update-description"].AddFeature("only-same", onlySameFlag);
update["base-replace"].AddFeature("update-year", updateYearFlag);
update["base-replace"].AddFeature("update-manufacturer", updateManufacturerFlag);
update.AddFeature("reverse-base-replace", reverseBaseReplaceFlag);
@@ -2268,6 +2280,7 @@ namespace SabreTools
update["reverse-base-replace"].AddFeature("update-names", updateNamesFlag);
update["reverse-base-replace"].AddFeature("update-hashes", updateHashesFlag);
update["reverse-base-replace"].AddFeature("update-description", updateDescriptionFlag);
+ update["reverse-base-replace"]["update-description"].AddFeature("only-same", onlySameFlag);
update["reverse-base-replace"].AddFeature("update-year", updateYearFlag);
update["reverse-base-replace"].AddFeature("update-manufacturer", updateManufacturerFlag);
update.AddFeature("game-name", gameNameListInput);
diff --git a/SabreTools/SabreTools.Inits.cs b/SabreTools/SabreTools.Inits.cs
index 0602e087..b5f888a9 100644
--- a/SabreTools/SabreTools.Inits.cs
+++ b/SabreTools/SabreTools.Inits.cs
@@ -235,6 +235,7 @@ namespace SabreTools
/// True if we should remove non-ASCII characters from output, false otherwise (default)
/// True if descriptions should be used as names, false otherwise (default)
/// ReplaceMode representing what should be updated [only for base replacement]
+ /// True if descriptions should only be replaced if the game name is the same, false otherwise [only for base replacement]
private static void InitUpdate(
List inputPaths,
List basePaths,
@@ -257,7 +258,8 @@ namespace SabreTools
bool clean,
bool remUnicode,
bool descAsName,
- ReplaceMode replaceMode)
+ ReplaceMode replaceMode,
+ bool onlySame)
{
// Normalize the extensions
datHeader.AddExtension = (String.IsNullOrWhiteSpace(datHeader.AddExtension) || datHeader.AddExtension.StartsWith(".")
@@ -311,7 +313,7 @@ namespace SabreTools
DatFile userInputDat = new DatFile(datHeader);
userInputDat.DetermineUpdateType(inputPaths, basePaths, outDir, updateMode, inplace, skip, bare, clean,
- remUnicode, descAsName, filter, splitType, replaceMode);
+ remUnicode, descAsName, filter, splitType, replaceMode, onlySame);
}
///
diff --git a/SabreTools/SabreTools.cs b/SabreTools/SabreTools.cs
index 1f699f79..3b432984 100644
--- a/SabreTools/SabreTools.cs
+++ b/SabreTools/SabreTools.cs
@@ -88,6 +88,7 @@ namespace SabreTools
inverse = false,
noAutomaticDate = false,
nostore = false,
+ onlySame = false,
quickScan = false,
removeUnicode = false,
showBaddumpColumn = false,
@@ -311,6 +312,9 @@ namespace SabreTools
case "no-store-header":
nostore = true;
break;
+ case "only-same":
+ onlySame = true;
+ break;
case "output-all":
datHeader.DatFormat |= DatFormat.ALL;
break;
@@ -774,7 +778,7 @@ namespace SabreTools
case "Update":
VerifyInputs(inputs, feature);
InitUpdate(inputs, basePaths, datHeader, updateMode, inplace, skipFirstOutput, noAutomaticDate, filter,
- splitType, outDir, cleanGameNames, removeUnicode, descAsName, replaceMode);
+ splitType, outDir, cleanGameNames, removeUnicode, descAsName, replaceMode, onlySame);
break;
// If we're using the verifier
case "Verify":