Skip to content

Commit

Permalink
Support USound data of HP1 (this engine branch is not auto-detected, …
Browse files Browse the repository at this point in the history
…because it overlaps with other games).
  • Loading branch information
EliotVU committed Nov 2, 2022
1 parent ab290b6 commit 809edaa
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 3 deletions.
26 changes: 26 additions & 0 deletions src/Branch/BuildAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,30 @@ public BuildGenerationAttribute(BuildGeneration generation, int engineVersion)
EngineVersion = engineVersion;
}
}


/// <summary>
/// Not yet usable.
/// </summary>
[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;
}
}
}
37 changes: 34 additions & 3 deletions src/Engine/Classes/USound.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
using System.Collections.Generic;
using UELib.Branch;

namespace UELib.Core
{
/// <summary>
/// Implements USound/Engine.Sound
/// Implements USound/Engine.Sound
/// </summary>
[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

Expand All @@ -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)
Expand All @@ -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)
{
Expand Down
5 changes: 5 additions & 0 deletions src/UnrealBuild.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ public enum BuildGeneration
/// </summary>
UE1,

/// <summary>
/// Modified version for Harry Potter's Unreal Engine 1
/// </summary>
HP,

/// <summary>
/// Unreal Engine 2
///
Expand Down

0 comments on commit 809edaa

Please sign in to comment.