Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Dat/Converters/ObjectSourceConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ public static DatObjectSource Convert(this ObjectSource objectSource)
_ => throw new NotImplementedException(),
};

public static ObjectSource Convert(this DatObjectSource objectSource)
public static ObjectSource Convert(this DatObjectSource objectSource, string datName, uint32_t datChecksum)
=> objectSource switch
{
DatObjectSource.Custom => ObjectSource.Custom,
DatObjectSource.Vanilla => ObjectSource.LocomotionSteam, // todo - can check the file checksum to determine if it's GoG or Steam
DatObjectSource.Vanilla => OriginalObjectFiles.GetFileSource(datName, datChecksum),
DatObjectSource.OpenLoco => ObjectSource.OpenLoco,
_ => throw new NotImplementedException(),
};
Expand Down
2 changes: 1 addition & 1 deletion Dat/Converters/ObjectTypeConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public static ObjectModelHeader Convert(this S5Header s5Header)
=> new(
s5Header.Name,
s5Header.ObjectType.Convert(),
s5Header.ObjectSource.Convert(),
s5Header.ObjectSource.Convert(s5Header.Name, s5Header.Checksum),
s5Header.Checksum);
}

Expand Down
6 changes: 5 additions & 1 deletion Dat/FileParsing/LocoBinaryReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,11 @@ public IEnumerable<ObjectModelHeader> ReadS5HeaderList()
var header = S5Header.Read(ReadBytes(S5Header.StructLength));
// vanilla objects will have sourcegameflag == 0 and checksum == 0. custom objects will have a checksum specified - may need custom handling
return header.Checksum != 0 || header.Flags != 255
? new ObjectModelHeader(header.Name, header.ObjectType.Convert(), header.ObjectSource.Convert(), header.Checksum)
? new ObjectModelHeader(
header.Name,
header.ObjectType.Convert(),
header.ObjectSource.Convert(header.Name, header.Checksum),
header.Checksum)
: default;
}

Expand Down
6 changes: 4 additions & 2 deletions Gui/ViewModels/LocoTypes/ObjectEditorViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -315,9 +315,11 @@ void SaveCore(string filename, SawyerEncoding? encodingToUse = null)
//};
}

var header = CurrentObject.DatFileInfo.S5Header;

SawyerStreamWriter.Save(filename,
ObjectModelHeaderViewModel?.Name ?? CurrentObject.DatFileInfo.S5Header.Name,
ObjectModelHeaderViewModel?.ObjectSource ?? CurrentObject.DatFileInfo.S5Header.ObjectSource.Convert(),
ObjectModelHeaderViewModel?.Name ?? header.Name,
ObjectModelHeaderViewModel?.ObjectSource ?? header.ObjectSource.Convert(header.Name, header.Checksum),
encodingToUse ?? ObjectHeaderViewModel?.DatEncoding ?? SawyerEncoding.Uncompressed,
CurrentObject.LocoObject,
logger,
Expand Down
7 changes: 4 additions & 3 deletions Tests/IdempotenceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,12 @@ public void LoadSaveLoad(string filename)
{
var logger = new Logger();
var obj1 = SawyerStreamReader.LoadFullObject(filename, logger)!;
var header = obj1.DatFileInfo.S5Header;

using var stream = SawyerStreamWriter.WriteLocoObject(
obj1.DatFileInfo.S5Header.Name,
obj1.DatFileInfo.S5Header.ObjectType.Convert(),
obj1.DatFileInfo.S5Header.ObjectSource.Convert(),
header.Name,
header.ObjectType.Convert(),
header.ObjectSource.Convert(header.Name, header.Checksum),
obj1.DatFileInfo.ObjectHeader.Encoding,
logger,
obj1.LocoObject!,
Expand Down
4 changes: 2 additions & 2 deletions Tests/LoadSaveTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,11 @@ static void LoadSaveGenericTest<T>(string filename, Action<LocoObject, T> assert

var (datInfo1, obj1, struc1) = LoadObject<T>(filename);
assertFunc(obj1, struc1);
var bytes1 = SawyerStreamWriter.WriteLocoObject(datInfo1.S5Header.Name, obj1.ObjectType, datInfo1.S5Header.ObjectSource.Convert(), datInfo1.ObjectHeader.Encoding, logger, obj1, true).ToArray();
var bytes1 = SawyerStreamWriter.WriteLocoObject(datInfo1.S5Header.Name, obj1.ObjectType, datInfo1.S5Header.ObjectSource.Convert(datInfo1.S5Header.Name, datInfo1.S5Header.Checksum), datInfo1.ObjectHeader.Encoding, logger, obj1, true).ToArray();

var (datInfo2, obj2, struc2) = LoadObject<T>(bytes1);
assertFunc(obj2, struc2);
var bytes2 = SawyerStreamWriter.WriteLocoObject(datInfo2.S5Header.Name, obj2.ObjectType, datInfo2.S5Header.ObjectSource.Convert(), datInfo2.ObjectHeader.Encoding, logger, obj2, true).ToArray();
var bytes2 = SawyerStreamWriter.WriteLocoObject(datInfo2.S5Header.Name, obj2.ObjectType, datInfo2.S5Header.ObjectSource.Convert(datInfo2.S5Header.Name, datInfo2.S5Header.Checksum), datInfo2.ObjectHeader.Encoding, logger, obj2, true).ToArray();

// grab headers first
var s5Header1 = S5Header.Read(bytes1.AsSpan()[0..S5Header.StructLength]);
Expand Down