diff --git a/SabreTools.Helper/Dats/DatItem.cs b/SabreTools.Helper/Dats/DatItem.cs
index d81f81d1..b188accc 100644
--- a/SabreTools.Helper/Dats/DatItem.cs
+++ b/SabreTools.Helper/Dats/DatItem.cs
@@ -526,6 +526,66 @@ namespace SabreTools.Helper.Dats
return outfiles;
}
+ ///
+ /// Resolve name duplicates in an arbitrary set of ROMs based on the supplied information
+ ///
+ /// List of File objects representing the roms to be merged
+ /// Logger object for console and/or file output
+ /// A List of RomData objects representing the renamed roms
+ ///
+ /// Eventually, we want this to use the CRC/MD5/SHA-1 of relavent items instead of just _1
+ ///
+ public static List ResolveNames(List infiles, Logger logger)
+ {
+ // Create the output list
+ List output = new List();
+
+ // First we want to make sure the list is in alphabetical order
+ Sort(ref infiles, true);
+
+ // Now we want to loop through and check names
+ string last = null;
+ int lastid = 1;
+ for (int i = 0; i < infiles.Count; i++)
+ {
+ DatItem datItem = infiles[i];
+
+ // If the current name matches the previous name, rename the current item
+ if (datItem.Name == last)
+ {
+ if (datItem.Type == ItemType.Disk)
+ {
+ Disk disk = (Disk)datItem;
+ disk.Name += "_" + (!String.IsNullOrEmpty(disk.MD5) ? disk.MD5 : disk.SHA1);
+ datItem = disk;
+ }
+ else if (datItem.Type == ItemType.Rom)
+ {
+ Rom rom = (Rom)datItem;
+ rom.Name += "_" + (!String.IsNullOrEmpty(rom.CRC) ? rom.CRC : !String.IsNullOrEmpty(rom.MD5) ? rom.MD5 : rom.SHA1);
+ datItem = rom;
+ }
+ else
+ {
+ datItem.Name += "_" + lastid;
+ lastid++;
+ }
+
+ output.Add(datItem);
+ }
+
+ // Otherwise, we say that we have a valid named file
+ else
+ {
+ output.Add(datItem);
+ last = datItem.Name;
+ lastid = 1;
+ }
+ }
+
+ return output;
+ }
+
///
/// Sort a list of File objects by SystemID, SourceID, Game, and Name (in order)
///
diff --git a/SabreTools.Helper/Dats/Partials/DatFile.Writers.cs b/SabreTools.Helper/Dats/Partials/DatFile.Writers.cs
index 78ea6bf6..09000e44 100644
--- a/SabreTools.Helper/Dats/Partials/DatFile.Writers.cs
+++ b/SabreTools.Helper/Dats/Partials/DatFile.Writers.cs
@@ -140,6 +140,9 @@ namespace SabreTools.Helper.Dats
{
List roms = this[key];
+ // Resolve the names in the block
+ DatItem.ResolveNames(roms, logger);
+
for (int index = 0; index < roms.Count; index++)
{
DatItem rom = roms[index];