Skip to content

Commit

Permalink
Add code fallbacks for backwards-compatibility.
Browse files Browse the repository at this point in the history
  • Loading branch information
EliotVU committed Mar 25, 2024
1 parent a9c9a28 commit 6968579
Show file tree
Hide file tree
Showing 23 changed files with 263 additions and 81 deletions.
27 changes: 18 additions & 9 deletions src/BinaryMetaData.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using UELib.Annotations;

Expand Down Expand Up @@ -37,6 +38,14 @@ public struct BinaryField : IUnrealDecompilable
/// </summary>
public long Size { get; set; }

[Obsolete("Use Field")]
public string Name => Field;

[Obsolete("Use Value")]
public object Tag => Value;

[Obsolete("Use Offset")] public int Position => (int)Offset;

/// <summary>
/// Decompiles and returns the output of @Tag.
/// </summary>
Expand All @@ -57,20 +66,20 @@ public string Decompile()
/// <summary>
/// Adds a new field to the @Fields stack.
/// </summary>
/// <param name="name">Name of the field</param>
/// <param name="tag">Value of the field</param>
/// <param name="position">Position in bytes where the field is read from</param>
/// <param name="field">Name of the field</param>
/// <param name="value">Value of the field</param>
/// <param name="offset">Position in bytes where the field is read from</param>
/// <param name="size">Size in bytes of the field</param>
public void AddField(string name, object tag, long position, long size)
public void AddField(string field, object value, long offset, long size)
{
Debug.Assert(size > 0, $"Size of field {name} at {position} cannot be less than 1");
//Debug.Assert(size > 0, $"Size of field {field} at {offset} cannot be less than 1");
Fields.Push
(
new BinaryField
{
Field = name,
Value = tag,
Offset = position,
Field = field,
Value = value,
Offset = offset,
Size = size
}
);
Expand Down
22 changes: 11 additions & 11 deletions src/Branch/DefaultEngineBranch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -128,34 +128,34 @@ public DefaultEngineBranch(BuildGeneration generation) : base(generation)
public override void Setup(UnrealPackage linker)
{
SetupEnumPackageFlags(linker);
EnumFlagsMap.Add(typeof(PackageFlags), PackageFlags);
EnumFlagsMap.Add(typeof(PackageFlag), PackageFlags);
}

protected virtual void SetupEnumPackageFlags(UnrealPackage linker)
{
PackageFlags[(int)Flags.PackageFlags.AllowDownload] = (uint)PackageFlagsDefault.AllowDownload;
PackageFlags[(int)Flags.PackageFlags.ClientOptional] = (uint)PackageFlagsDefault.ClientOptional;
PackageFlags[(int)Flags.PackageFlags.ServerSideOnly] = (uint)PackageFlagsDefault.ServerSideOnly;
PackageFlags[(int)Flags.PackageFlag.AllowDownload] = (uint)PackageFlagsDefault.AllowDownload;
PackageFlags[(int)Flags.PackageFlag.ClientOptional] = (uint)PackageFlagsDefault.ClientOptional;
PackageFlags[(int)Flags.PackageFlag.ServerSideOnly] = (uint)PackageFlagsDefault.ServerSideOnly;
#if UE1
// FIXME: Version
if (linker.Version > 61 && linker.Version <= 69) // <= UT99
PackageFlags[(int)Flags.PackageFlags.Encrypted] = (uint)PackageFlagsUE1.Encrypted;
PackageFlags[(int)Flags.PackageFlag.Encrypted] = (uint)PackageFlagsUE1.Encrypted;
#endif
#if UE2
if (linker.Build == BuildGeneration.UE2_5)
PackageFlags[(int)Flags.PackageFlags.Official] = (uint)PackageFlagsUE2.Official;
PackageFlags[(int)Flags.PackageFlag.Official] = (uint)PackageFlagsUE2.Official;
#endif
#if UE3
// Map the new PackageFlags, but the version is nothing but a guess!
if (linker.Version >= 180)
{
if (linker.Version >= UnrealPackage.PackageFileSummary.VCookerVersion)
PackageFlags[(int)Flags.PackageFlags.Cooked] = (uint)PackageFlagsUE3.Cooked;
PackageFlags[(int)Flags.PackageFlag.Cooked] = (uint)PackageFlagsUE3.Cooked;

PackageFlags[(int)Flags.PackageFlags.ContainsMap] = (uint)PackageFlagsUE3.ContainsMap;
PackageFlags[(int)Flags.PackageFlags.ContainsDebugData] = (uint)PackageFlagsUE3.ContainsDebugData;
PackageFlags[(int)Flags.PackageFlags.ContainsScript] = (uint)PackageFlagsUE3.ContainsScript;
PackageFlags[(int)Flags.PackageFlags.StrippedSource] = (uint)PackageFlagsUE3.StrippedSource;
PackageFlags[(int)Flags.PackageFlag.ContainsMap] = (uint)PackageFlagsUE3.ContainsMap;
PackageFlags[(int)Flags.PackageFlag.ContainsDebugData] = (uint)PackageFlagsUE3.ContainsDebugData;
PackageFlags[(int)Flags.PackageFlag.ContainsScript] = (uint)PackageFlagsUE3.ContainsScript;
PackageFlags[(int)Flags.PackageFlag.StrippedSource] = (uint)PackageFlagsUE3.StrippedSource;
}
#endif
}
Expand Down
2 changes: 1 addition & 1 deletion src/Branch/EngineBranch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public abstract class EngineBranch
/// </summary>
public readonly Dictionary<Type, ulong[]> EnumFlagsMap = new Dictionary<Type, ulong[]>();

protected readonly ulong[] PackageFlags = new ulong[(int)Flags.PackageFlags.Max];
protected readonly ulong[] PackageFlags = new ulong[(int)Flags.PackageFlag.Max];

public EngineBranch()
{
Expand Down
2 changes: 1 addition & 1 deletion src/Branch/UE2/AA2/CryptoDecoder.AA2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace UELib.Branch.UE2.AA2
{
// TODO: Re-implement as a BaseStream wrapper (in UELib 2.0)
// TODO: Re-implement as a BaseStream wrapper
public class CryptoDecoderAA2 : IBufferDecoder
{
public void PreDecode(IUnrealStream stream)
Expand Down
16 changes: 8 additions & 8 deletions src/Branch/UE4/EngineBranch.UE4.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,20 +41,20 @@ public EngineBranchUE4() : base(BuildGeneration.UE4)
public override void Setup(UnrealPackage linker)
{
SetupEnumPackageFlags(linker);
EnumFlagsMap.Add(typeof(PackageFlags), PackageFlags);
EnumFlagsMap.Add(typeof(PackageFlag), PackageFlags);
}

protected virtual void SetupEnumPackageFlags(UnrealPackage linker)
{
PackageFlags[(int)Flags.PackageFlags.ClientOptional] =
PackageFlags[(int)Flags.PackageFlag.ClientOptional] =
(uint)DefaultEngineBranch.PackageFlagsDefault.ClientOptional;
PackageFlags[(int)Flags.PackageFlags.ServerSideOnly] =
PackageFlags[(int)Flags.PackageFlag.ServerSideOnly] =
(uint)DefaultEngineBranch.PackageFlagsDefault.ServerSideOnly;
PackageFlags[(int)Flags.PackageFlags.EditorOnly] = (uint)PackageFlagsUE4.EditorOnly;
PackageFlags[(int)Flags.PackageFlags.Cooked] = (uint)PackageFlagsUE4.Cooked;
PackageFlags[(int)Flags.PackageFlags.UnversionedProperties] = (uint)PackageFlagsUE4.UnversionedProperties;
PackageFlags[(int)Flags.PackageFlags.ReloadingForCooker] = (uint)PackageFlagsUE4.ReloadingForCooker;
PackageFlags[(int)Flags.PackageFlags.FilterEditorOnly] = (uint)PackageFlagsUE4.FilterEditorOnly;
PackageFlags[(int)Flags.PackageFlag.EditorOnly] = (uint)PackageFlagsUE4.EditorOnly;
PackageFlags[(int)Flags.PackageFlag.Cooked] = (uint)PackageFlagsUE4.Cooked;
PackageFlags[(int)Flags.PackageFlag.UnversionedProperties] = (uint)PackageFlagsUE4.UnversionedProperties;
PackageFlags[(int)Flags.PackageFlag.ReloadingForCooker] = (uint)PackageFlagsUE4.ReloadingForCooker;
PackageFlags[(int)Flags.PackageFlag.FilterEditorOnly] = (uint)PackageFlagsUE4.FilterEditorOnly;
}

protected override void SetupSerializer(UnrealPackage linker)
Expand Down
8 changes: 4 additions & 4 deletions src/Core/Classes/UClassDecompiler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -78,25 +78,25 @@ public override string Decompile()
return content;
}

[Obsolete]
[Obsolete("Deprecated", true)]
public string GetDependencies()
{
throw new NotImplementedException();
}

[Obsolete]
[Obsolete("Deprecated", true)]
private string GetImports()
{
throw new NotImplementedException();
}

[Obsolete]
[Obsolete("Deprecated", true)]
public string GetStats()
{
throw new NotImplementedException();
}

protected override string FormatHeader()
public override string FormatHeader()
{
string output = (IsClassInterface() ? "interface " : "class ") + Name;
string metaData = DecompileMeta();
Expand Down
2 changes: 1 addition & 1 deletion src/Core/Classes/UEnumDecompiler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public override string Decompile()
UnrealConfig.PrintEndBracket() + ";";
}

protected virtual string FormatHeader()
public override string FormatHeader()
{
return $"enum {Name}{DecompileMeta()}";
}
Expand Down
2 changes: 1 addition & 1 deletion src/Core/Classes/UFunctionDecompiler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ private string FormatFlags()
return output;
}

protected override string FormatHeader()
public override string FormatHeader()
{
var output = string.Empty;
// static function (string?:) Name(Parms)...
Expand Down
2 changes: 1 addition & 1 deletion src/Core/Classes/UObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -670,7 +670,7 @@ public virtual void PostInitialize()
{
}

[Obsolete]
[Obsolete("Deprecated", true)]
public virtual void InitializeImports()
{
throw new NotImplementedException();
Expand Down
5 changes: 5 additions & 0 deletions src/Core/Classes/UObjectDecompiler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ public virtual string Decompile()
$"// Reference: {Class.Name}'{GetOuterGroup()}'";
}

public virtual string FormatHeader()
{
return GetReferencePath();
}

protected string DecompileProperties()
{
if (Properties == null || Properties.Count == 0)
Expand Down
2 changes: 1 addition & 1 deletion src/Core/Classes/UStateDecompiler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ private string GetEdit()
return HasStateFlag(Flags.StateFlags.Editable) ? "()" : string.Empty;
}

protected override string FormatHeader()
public override string FormatHeader()
{
var output = $"{GetAuto()}{GetSimulated()}state{GetEdit()} {Name}";
if (Super != null && Super.Name != Name
Expand Down
2 changes: 1 addition & 1 deletion src/Core/Classes/UStructDecompiler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public override string Decompile()
return content + UnrealConfig.PrintEndBracket() + ";";
}

protected virtual string FormatHeader()
public override string FormatHeader()
{
var output = $"struct {FormatFlags()}{Name}{(Super != null ? $" {FormatExtends()} {Super.Name}" : string.Empty)}";
string metaData = DecompileMeta();
Expand Down
20 changes: 16 additions & 4 deletions src/Core/Tables/UExportTableItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public int ClassIndex
get => _ClassIndex;
set => _ClassIndex = value;
}

[CanBeNull]
public UObjectTableItem Class => Owner.GetIndexTable(ClassIndex);

Expand Down Expand Up @@ -54,9 +55,14 @@ public int ArchetypeIndex
}
[CanBeNull]
public UObjectTableItem Archetype => Owner.GetIndexTable(_ArchetypeIndex);

[Obsolete("Use Class"), Browsable(false)] public UObjectTableItem ClassTable => Owner.GetIndexTable(_ClassIndex);

[Obsolete]
protected override int __ClassIndex => _ClassIndex;

[Obsolete, Browsable(false)] public UObjectTableItem SuperTable => Owner.GetIndexTable(_SuperIndex);
[Obsolete, Browsable(false)]
[Obsolete("Use Super"), Browsable(false)] public UObjectTableItem SuperTable => Owner.GetIndexTable(_SuperIndex);
[Obsolete("Use Super?.ObjectName"), Browsable(false)]
public string SuperName
{
get
Expand All @@ -66,8 +72,8 @@ public string SuperName
}
}

[Obsolete, Browsable(false)] public UObjectTableItem ArchetypeTable => Owner.GetIndexTable(_ArchetypeIndex);
[Obsolete, Browsable(false)]
[Obsolete("Use Archetype"), Browsable(false)] public UObjectTableItem ArchetypeTable => Owner.GetIndexTable(_ArchetypeIndex);
[Obsolete("Use Archetype?.ObjectName"), Browsable(false)]
public string ArchetypeName
{
get
Expand Down Expand Up @@ -296,6 +302,12 @@ public override string ToString()
return $"{ObjectName}({Index}{1})";
}

[Obsolete("Use ToString()")]
public string ToString(bool v)
{
return ToString();
}

public static explicit operator int(UExportTableItem item)
{
return item.Index;
Expand Down
8 changes: 8 additions & 0 deletions src/Core/Tables/UGenerationTableItem.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System;
using UELib.Annotations;

namespace UELib
Expand Down Expand Up @@ -27,6 +28,13 @@ public int NetObjectCount
set => _NetObjectCount = value;
}

[Obsolete]
public object ExportsCount => ExportCount;
[Obsolete]
public object NamesCount => NameCount;
[Obsolete]
public object NetObjectsCount => NetObjectCount;

public const int VNetObjectsCount = 322;

public void Serialize(IUnrealStream stream)
Expand Down
10 changes: 10 additions & 0 deletions src/Core/Tables/UImportTableItem.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System;
using UELib.Core;

namespace UELib
Expand Down Expand Up @@ -25,6 +26,9 @@ public UName ClassName
set => _ClassName = value;
}

[Obsolete] protected override string __ClassName => _ClassName;
[Obsolete] protected override int __ClassIndex => (int)_ClassName;

#endregion

public void Serialize(IUnrealStream stream)
Expand Down Expand Up @@ -53,6 +57,12 @@ public override string ToString()
return $"{ObjectName}({-(Index + 1)})";
}

[Obsolete("Use ToString()")]
public string ToString(bool v)
{
return ToString();
}

public static explicit operator int(UImportTableItem item)
{
return -item.Index;
Expand Down
16 changes: 14 additions & 2 deletions src/Core/Tables/UObjectTableItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,11 @@ public int OuterIndex
}

[Obsolete, Browsable(false)] public UNameTableItem ObjectTable => Owner.Names[(int)_ObjectName];
[Obsolete, Browsable(false)] public UObjectTableItem ClassTable => null;
[Obsolete("Use UExportTableItem.Class"), Browsable(false)] public UObjectTableItem ClassTable => Owner.GetIndexTable(ClassIndex);
[Obsolete, Browsable(false)] public UObjectTableItem OuterTable => Owner.GetIndexTable(OuterIndex);
public UObjectTableItem Outer => Owner.GetIndexTable(_OuterIndex);

[Obsolete, Browsable(false)]
[Obsolete("Use Outer?.ObjectName"), Browsable(false)]
public string OuterName
{
get
Expand All @@ -56,6 +56,18 @@ public string OuterName
}
}

[Obsolete("Use UExportTableItem.ClassIndex"), Browsable(false)]
public int ClassIndex => __ClassIndex;

[Obsolete]
protected virtual int __ClassIndex => 0;

[Obsolete("Use Class?.ObjectName or UImportTableItem.ClassName"), Browsable(false)]
public string ClassName => __ClassName;

[Obsolete]
protected virtual string __ClassName => "";

#endregion

public IEnumerable<UObjectTableItem> EnumerateOuter()
Expand Down
3 changes: 3 additions & 0 deletions src/Eliot.UELib.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@
<Version>6.0.0</Version>
</PackageReference>
</ItemGroup>
<ItemGroup>
<Reference Include="System.Windows.Forms" />
</ItemGroup>
<ProjectExtensions></ProjectExtensions>
<PropertyGroup>
<NuspecFile>Eliot.UELib.nuspec</NuspecFile>
Expand Down
2 changes: 1 addition & 1 deletion src/Engine/Classes/UPolys.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ protected override void Deserialize()
base.Deserialize();

// Faster serialization for cooked packages, no don't have to check for the package's version here.
if (Package.Summary.PackageFlags.HasFlag(PackageFlags.Cooked))
if (Package.Summary.PackageFlags.HasFlag(PackageFlag.Cooked))
{
ElementOwner = _Buffer.ReadObject();
Record(nameof(ElementOwner), ElementOwner);
Expand Down
Loading

0 comments on commit 6968579

Please sign in to comment.