From 809edaadb76eed9d39b2a852c09d3b665f4822c4 Mon Sep 17 00:00:00 2001 From: Eliot Date: Wed, 2 Nov 2022 17:53:58 +0100 Subject: [PATCH] Support USound data of HP1 (this engine branch is not auto-detected, because it overlaps with other games). --- src/Branch/BuildAttribute.cs | 26 +++++++++++++++++++++++++ src/Engine/Classes/USound.cs | 37 +++++++++++++++++++++++++++++++++--- src/UnrealBuild.cs | 5 +++++ 3 files changed, 65 insertions(+), 3 deletions(-) diff --git a/src/Branch/BuildAttribute.cs b/src/Branch/BuildAttribute.cs index 956d4e4..1ac22a4 100644 --- a/src/Branch/BuildAttribute.cs +++ b/src/Branch/BuildAttribute.cs @@ -36,4 +36,30 @@ public BuildGenerationAttribute(BuildGeneration generation, int engineVersion) EngineVersion = engineVersion; } } + + + /// + /// Not yet usable. + /// + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Property | AttributeTargets.Field)] + public class BuildGenerationRangeAttribute : Attribute + { + public readonly BuildGeneration MinGeneration, MaxGeneration; + public readonly int MinEngineVersion = -1, MaxEngineVersion = -1; + + public BuildGenerationRangeAttribute(BuildGeneration minGeneration, BuildGeneration maxGeneration) + { + MinGeneration = minGeneration; + MaxGeneration = maxGeneration; + } + + public BuildGenerationRangeAttribute(BuildGeneration minGeneration, int minEngineVersion, int maxEngineVersion, BuildGeneration maxGeneration) + { + MinGeneration = minGeneration; + MaxGeneration = maxGeneration; + + MinEngineVersion = minEngineVersion; + MaxEngineVersion = maxEngineVersion; + } + } } \ No newline at end of file diff --git a/src/Engine/Classes/USound.cs b/src/Engine/Classes/USound.cs index 92a1567..809289a 100644 --- a/src/Engine/Classes/USound.cs +++ b/src/Engine/Classes/USound.cs @@ -1,12 +1,14 @@ using System.Collections.Generic; +using UELib.Branch; namespace UELib.Core { /// - /// Implements USound/Engine.Sound + /// Implements USound/Engine.Sound /// [UnrealRegisterClass] - public class USound : UObject, IUnrealViewable, IUnrealExportable + [BuildGenerationRange(BuildGeneration.UE1, BuildGeneration.UE2_5)] // Re-branded in UE3 to USoundNodeWave + public class USound : UObject, IUnrealExportable { #region Serialized Members @@ -31,7 +33,7 @@ public USound() public bool CanExport() { - return Package.Version >= 61 && Package.Version <= 129; + return Data?.Length != 0; } public void SerializeExport(string desiredExportExtension, System.IO.Stream exportStream) @@ -45,6 +47,35 @@ protected override void Deserialize() FileType = _Buffer.ReadNameReference(); Record(nameof(FileType), FileType); +#if HP + if (Package.Build == BuildGeneration.HP) + { + _Buffer.Read(out uint flags); + Record(nameof(flags), flags); + _Buffer.Read(out float duration); + Record(nameof(duration), duration); + + if (_Buffer.Version >= 77) + { + _Buffer.Read(out int numSamples); + Record(nameof(numSamples), numSamples); + } + + if (_Buffer.Version >= 78) + { + _Buffer.Read(out int bitsPerSample); + Record(nameof(bitsPerSample), bitsPerSample); + _Buffer.Read(out int numChannels); + Record(nameof(numChannels), numChannels); + } + + if (_Buffer.Version >= 79) + { + _Buffer.Read(out int sampleRate); + Record(nameof(sampleRate), sampleRate); + } + } +#endif #if UNDYING if (Package.Build == UnrealPackage.GameBuild.BuildName.Undying) { diff --git a/src/UnrealBuild.cs b/src/UnrealBuild.cs index 6dcf494..5a51478 100644 --- a/src/UnrealBuild.cs +++ b/src/UnrealBuild.cs @@ -17,6 +17,11 @@ public enum BuildGeneration /// UE1, + /// + /// Modified version for Harry Potter's Unreal Engine 1 + /// + HP, + /// /// Unreal Engine 2 ///