diff --git a/SabreTools.DatFiles/DatFile.FromMetadata.cs b/SabreTools.DatFiles/DatFile.FromMetadata.cs index 190ab95e..45be397c 100644 --- a/SabreTools.DatFiles/DatFile.FromMetadata.cs +++ b/SabreTools.DatFiles/DatFile.FromMetadata.cs @@ -1833,13 +1833,13 @@ namespace SabreTools.DatFiles if (datItem.GetInt64FieldValue(Models.Metadata.Video.AspectYKey) != null) datItem.SetFieldValue(Models.Metadata.Video.AspectYKey, datItem.GetInt64FieldValue(Models.Metadata.Video.AspectYKey).ToString()); if (datItem.GetInt64FieldValue(Models.Metadata.Video.HeightKey) != null) - datItem.SetFieldValue(Models.Metadata.Video.HeightKey, datItem.GetInt64FieldValue(Models.Metadata.Video.HeightKey).ToString()); + datItem.SetFieldValue(Models.Metadata.Display.HeightKey, datItem.GetInt64FieldValue(Models.Metadata.Video.HeightKey).ToString()); if (datItem.GetDoubleFieldValue(Models.Metadata.Video.RefreshKey) != null) - datItem.SetFieldValue(Models.Metadata.Video.RefreshKey, datItem.GetDoubleFieldValue(Models.Metadata.Video.RefreshKey).ToString()); + datItem.SetFieldValue(Models.Metadata.Display.RefreshKey, datItem.GetDoubleFieldValue(Models.Metadata.Video.RefreshKey).ToString()); if (datItem.GetStringFieldValue(Models.Metadata.Video.ScreenKey) != null) - datItem.SetFieldValue(Models.Metadata.Video.ScreenKey, datItem.GetStringFieldValue(Models.Metadata.Video.ScreenKey).AsEnumValue().AsStringValue()); + datItem.SetFieldValue(Models.Metadata.Display.DisplayTypeKey, datItem.GetStringFieldValue(Models.Metadata.Video.ScreenKey).AsEnumValue().AsStringValue()); if (datItem.GetInt64FieldValue(Models.Metadata.Video.WidthKey) != null) - datItem.SetFieldValue(Models.Metadata.Video.WidthKey, datItem.GetInt64FieldValue(Models.Metadata.Video.WidthKey).ToString()); + datItem.SetFieldValue(Models.Metadata.Display.WidthKey, datItem.GetInt64FieldValue(Models.Metadata.Video.WidthKey).ToString()); ParseAddHelper(datItem, statsOnly); } diff --git a/SabreTools.DatFiles/DatFile.ToMetadata.cs b/SabreTools.DatFiles/DatFile.ToMetadata.cs index c32062b0..15507a8a 100644 --- a/SabreTools.DatFiles/DatFile.ToMetadata.cs +++ b/SabreTools.DatFiles/DatFile.ToMetadata.cs @@ -287,7 +287,7 @@ namespace SabreTools.DatFiles AppendToMachineKey(machine, Models.Metadata.Machine.DiskKey, diskItem); break; case DatItems.Formats.Display display: - var displayItem = ProcessItem(display); + var displayItem = ProcessItem(display, machine); EnsureMachineKey(machine, Models.Metadata.Machine.DisplayKey); AppendToMachineKey(machine, Models.Metadata.Machine.DisplayKey, displayItem); break; @@ -495,7 +495,12 @@ namespace SabreTools.DatFiles dipSwitchItem[Models.Metadata.DipSwitch.DipValueKey] = dipValueItems.ToArray(); } - // TODO: Handle DipSwitch in Part inversion + // Create a Part for every DipSwitch that includes it + if (dipSwitchItem.ContainsKey(DatItems.Formats.DipSwitch.PartKey)) + { + // TODO: Handle DipSwitch in Part inversion + } + return dipSwitchItem; } @@ -509,8 +514,12 @@ namespace SabreTools.DatFiles { var diskItem = item.GetInternalClone(); - // TODO: Handle DipSwitch in Part inversion - // TODO: Handle DipSwitch in DiskArea inversion + // Create a Part and a DiskArea for every Disk that includes them + if (diskItem.ContainsKey(DatItems.Formats.Disk.PartKey) && diskItem.ContainsKey(DatItems.Formats.Disk.DiskAreaKey)) + { + // TODO: Handle Disk in Part inversion + // TODO: Handle Disk in DiskArea inversion + } return diskItem; } @@ -519,12 +528,25 @@ namespace SabreTools.DatFiles /// Convert Display information /// /// Item to convert - /// Machine to use for Part and DiskArea - private static Models.Metadata.Display ProcessItem(DatItems.Formats.Display item) + /// Machine to use for Video + private static Models.Metadata.Display ProcessItem(DatItems.Formats.Display item, Models.Metadata.Machine machine) { var displayItem = item.GetInternalClone(); - // TODO: Handle cases where it's actually a Video + // Create a Video for any item that has specific fields + if (displayItem.ContainsKey(Models.Metadata.Video.AspectXKey)) + { + var videoItem = new Models.Metadata.Video(); + videoItem[Models.Metadata.Video.AspectXKey] = displayItem.ReadLong(Models.Metadata.Video.AspectXKey).ToString(); + videoItem[Models.Metadata.Video.AspectYKey] = displayItem.ReadLong(Models.Metadata.Video.AspectYKey).ToString(); + videoItem[Models.Metadata.Video.HeightKey] = displayItem.ReadLong(Models.Metadata.Display.HeightKey).ToString(); + videoItem[Models.Metadata.Video.RefreshKey] = displayItem.ReadDouble(Models.Metadata.Display.RefreshKey).ToString(); + videoItem[Models.Metadata.Video.ScreenKey] = displayItem.ReadString(Models.Metadata.Display.DisplayTypeKey).AsEnumValue().AsStringValue(); + videoItem[Models.Metadata.Video.WidthKey] = displayItem.ReadLong(Models.Metadata.Display.WidthKey).ToString(); + + EnsureMachineKey(machine, Models.Metadata.Machine.VideoKey); + AppendToMachineKey(machine, Models.Metadata.Machine.VideoKey, videoItem); + } return displayItem; } @@ -674,8 +696,12 @@ namespace SabreTools.DatFiles break; } - // TODO: Handle DipSwitch in Part inversion - // TODO: Handle DipSwitch in DataArea inversion + // Create a Part and a DataArea for every Rom that includes them + if (romItem.ContainsKey(DatItems.Formats.Rom.PartKey) && romItem.ContainsKey(DatItems.Formats.Rom.DataAreaKey)) + { + // TODO: Handle Rom in Part inversion + // TODO: Handle Rom in DataArea inversion + } return romItem; } diff --git a/SabreTools.DatItems/Formats/Display.cs b/SabreTools.DatItems/Formats/Display.cs index 6432c3b7..dfac767e 100644 --- a/SabreTools.DatItems/Formats/Display.cs +++ b/SabreTools.DatItems/Formats/Display.cs @@ -30,7 +30,7 @@ namespace SabreTools.DatItems.Formats { SetFieldValue(Models.Metadata.Video.AspectXKey, NumberHelper.ConvertToInt64(item.ReadString(Models.Metadata.Video.AspectXKey))); SetFieldValue(Models.Metadata.Video.AspectYKey, NumberHelper.ConvertToInt64(item.ReadString(Models.Metadata.Video.AspectYKey))); - SetFieldValue(Models.Metadata.Display.DisplayTypeKey, item.ReadString(Models.Metadata.Video.ScreenKey)?.AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Display.DisplayTypeKey, item.ReadString(Models.Metadata.Video.ScreenKey).AsEnumValue().AsStringValue()); SetFieldValue(Models.Metadata.Display.HeightKey, NumberHelper.ConvertToInt64(item.ReadString(Models.Metadata.Video.HeightKey))); SetFieldValue(Models.Metadata.Display.RefreshKey, NumberHelper.ConvertToDouble(item.ReadString(Models.Metadata.Video.RefreshKey))); SetFieldValue(Models.Metadata.Display.WidthKey, NumberHelper.ConvertToInt64(item.ReadString(Models.Metadata.Video.WidthKey)));