From 2a85c39c5ef743deb60890b306b236ea573fffd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Pivo=C5=88ka?= Date: Thu, 2 Jan 2025 05:48:13 +0100 Subject: [PATCH] Add ivXor of CPlugVehiclePhyTuning (ty Auris!) --- .../Engines/Plug/CPlugVehiclePhyTuning.cs | 26 +++++++++++++++++++ Src/GBX.NET/Serialization/GbxReader.cs | 10 +++---- 2 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 Src/GBX.NET/Engines/Plug/CPlugVehiclePhyTuning.cs diff --git a/Src/GBX.NET/Engines/Plug/CPlugVehiclePhyTuning.cs b/Src/GBX.NET/Engines/Plug/CPlugVehiclePhyTuning.cs new file mode 100644 index 000000000..3d0b00f20 --- /dev/null +++ b/Src/GBX.NET/Engines/Plug/CPlugVehiclePhyTuning.cs @@ -0,0 +1,26 @@ +using System.Text; + +namespace GBX.NET.Engines.Plug; + +public partial class CPlugVehiclePhyTuning +{ + public partial class Chunk090EB000 + { + public override void ReadWrite(CPlugVehiclePhyTuning n, GbxReaderWriter rw) + { + rw.Id(ref n.name); + rw.NodeRef(ref U01); + rw.Single(ref U02); + + if (rw.Reader?.Settings.EncryptionInitializer is not null) + { + if (n.name is null || n.name.Length < 4) + { + throw new InvalidOperationException("Name length must be at least 4 characters."); + } + + rw.Reader.Settings.EncryptionInitializer.Initialize(Encoding.ASCII.GetBytes(n.name.Substring(0, 4)), 0, 4); + } + } + } +} diff --git a/Src/GBX.NET/Serialization/GbxReader.cs b/Src/GBX.NET/Serialization/GbxReader.cs index 100186a85..3144389c2 100644 --- a/Src/GBX.NET/Serialization/GbxReader.cs +++ b/Src/GBX.NET/Serialization/GbxReader.cs @@ -2069,15 +2069,13 @@ internal bool TryInitializeDecryption(IClass node) { parentClassId = 0x07001000; } - - if (node is CPlugSurfaceGeom) + else if (baseType == typeof(CGameCtnBlockInfo)) { - parentClassId = 0x0902B000; + parentClassId = 0x24005000; } - - if (baseType == typeof(CGameCtnBlockInfo)) + else if (baseType == typeof(CPlugVehiclePhyTuning)) { - parentClassId = 0x24005000; + parentClassId = 0x0A02E000; } var parentClassIDBytes = BitConverter.GetBytes(parentClassId);