diff --git a/src/Core/Classes/UClass.cs b/src/Core/Classes/UClass.cs
index cd5799e..d746d7d 100644
--- a/src/Core/Classes/UClass.cs
+++ b/src/Core/Classes/UClass.cs
@@ -403,13 +403,12 @@ protected override void Deserialize()
#endif
}
}
-#if UE4
- if (_Buffer.UE4Version > 0)
+#if UNDYING
+ if (Package.Build == UnrealPackage.GameBuild.BuildName.Undying &&
+ _Buffer.Version >= 70)
{
- string dummy = _Buffer.ReadName();
- Record("dummy", dummy);
- bool isCooked = _Buffer.ReadBool();
- Record("isCooked", isCooked);
+ _Buffer.Read(out uint classCRC); // v4a8
+ Record(nameof(classCRC), classCRC);
}
#endif
#if THIEF_DS || DeusEx_IW
@@ -507,6 +506,15 @@ protected override void Deserialize()
Record("Unknown:Vengeance", b);
}
}
+#endif
+#if UE4
+ if (_Buffer.UE4Version > 0)
+ {
+ string dummy = _Buffer.ReadName();
+ Record("dummy", dummy);
+ bool isCooked = _Buffer.ReadBool();
+ Record("isCooked", isCooked);
+ }
#endif
scriptProperties:
// In later UE3 builds, defaultproperties are stored in separated objects named DEFAULT_namehere,
diff --git a/src/Core/Classes/UTextBuffer.cs b/src/Core/Classes/UTextBuffer.cs
index ec0c469..332885a 100644
--- a/src/Core/Classes/UTextBuffer.cs
+++ b/src/Core/Classes/UTextBuffer.cs
@@ -7,7 +7,7 @@ public partial class UTextBuffer : UObject
public uint Top;
public uint Pos;
-
+
public string ScriptText;
#endregion
@@ -22,11 +22,31 @@ public UTextBuffer()
protected override void Deserialize()
{
base.Deserialize();
-
+
Top = _Buffer.ReadUInt32();
Record(nameof(Top), Top);
Pos = _Buffer.ReadUInt32();
Record(nameof(Pos), Pos);
+#if UNDYING
+ if (Package.Build == UnrealPackage.GameBuild.BuildName.Undying &&
+ _Buffer.Version >= 85)
+ {
+ int uncompressedDataSize = _Buffer.ReadIndex();
+ Record(nameof(uncompressedDataSize), uncompressedDataSize);
+
+ int dataLength = _Buffer.ReadIndex();
+ Record(nameof(dataLength), dataLength);
+ if (dataLength > 0)
+ {
+ var data = new byte[uncompressedDataSize];
+ _Buffer.Read(data, 0, dataLength);
+ Record(nameof(data), data);
+ }
+
+ ScriptText = "Text data is compressed";
+ return;
+ }
+#endif
ScriptText = _Buffer.ReadText();
Record(nameof(ScriptText), "...");
}
diff --git a/src/Eliot.UELib.csproj b/src/Eliot.UELib.csproj
index d890f75..675581a 100644
--- a/src/Eliot.UELib.csproj
+++ b/src/Eliot.UELib.csproj
@@ -43,7 +43,7 @@
full
false
bin\Debug\
- TRACE;DEBUG;DECOMPILE BINARYMETADATA Forms UE1 UE2 UE3 UE4 VENGEANCE SWAT4 UNREAL2 INFINITYBLADE BORDERLANDS2 GOW2 DEBUG_TEST APB SPECIALFORCE2 XIII SINGULARITY THIEF_DS DEUSEX_IW BORDERLANDS MIRRORSEDGE BIOSHOCK HAWKEN UT DISHONORED REMEMBERME ALPHAPROTOCOL VANGUARD TERA MKKE TRANSFORMERS XCOM2 DD2 DCUO AA2 SPELLBORN BATMAN MOH ROCKETLEAGUE DNF LSGAME
+ TRACE;DEBUG;DECOMPILE BINARYMETADATA Forms UE1 UE2 UE3 UE4 VENGEANCE SWAT4 UNREAL2 INFINITYBLADE BORDERLANDS2 GOW2 DEBUG_TEST APB SPECIALFORCE2 XIII SINGULARITY THIEF_DS DEUSEX_IW BORDERLANDS MIRRORSEDGE BIOSHOCK HAWKEN UT DISHONORED REMEMBERME ALPHAPROTOCOL VANGUARD TERA MKKE TRANSFORMERS XCOM2 DD2 DCUO AA2 SPELLBORN BATMAN MOH ROCKETLEAGUE DNF LSGAME UNDYING
prompt
0
AnyCPU
@@ -61,7 +61,7 @@
none
true
bin\Release\
- TRACE;DECOMPILE BINARYMETADATA Forms UE1 UE2 UE3 UE4 VENGEANCE SWAT4 UNREAL2 INFINITYBLADE BORDERLANDS2 GOW2 APB SPECIALFORCE2 XIII SINGULARITY THIEF_DS DEUSEX_IW BORDERLANDS MIRRORSEDGE BIOSHOCK HAWKEN UT DISHONORED REMEMBERME ALPHAPROTOCOL VANGUARD TERA MKKE TRANSFORMERS XCOM2 DD2 DCUO AA2 SPELLBORN BATMAN ROCKETLEAGUE DNF LSGAME
+ TRACE;DECOMPILE BINARYMETADATA Forms UE1 UE2 UE3 UE4 VENGEANCE SWAT4 UNREAL2 INFINITYBLADE BORDERLANDS2 GOW2 APB SPECIALFORCE2 XIII SINGULARITY THIEF_DS DEUSEX_IW BORDERLANDS MIRRORSEDGE BIOSHOCK HAWKEN UT DISHONORED REMEMBERME ALPHAPROTOCOL VANGUARD TERA MKKE TRANSFORMERS XCOM2 DD2 DCUO AA2 SPELLBORN BATMAN ROCKETLEAGUE DNF LSGAME UNDYING
prompt
4
@@ -73,7 +73,7 @@
true
bin\Debug\
- TRACE;DEBUG;DECOMPILE BINARYMETADATA Forms UE1 UE2 UE3 UE4 DEBUG_TEST DEBUG_TOKENPOSITIONS DEBUG_HIDDENTOKENS DEBUG_NESTS DEBUG_FUNCTIONINFO UE1 UE2 UE3 VENGEANCE SWAT4 UNREAL2 INFINITYBLADE BORDERLANDS2 GOW2 DEBUG_TEST APB SPECIALFORCE2 XIII SINGULARITY THIEF_DS DEUSEX_IW BORDERLANDS MIRRORSEDGE BIOSHOCK HAWKEN UT DISHONORED REMEMBERME ALPHAPROTOCOL VANGUARD TERA MKKE TRANSFORMERS XCOM2 DD2 DCUO AA2 SPELLBORN BATMAN MOH ROCKETLEAGUE DNF LSGAME
+ TRACE;DEBUG;DECOMPILE BINARYMETADATA Forms UE1 UE2 UE3 UE4 DEBUG_TEST DEBUG_TOKENPOSITIONS DEBUG_HIDDENTOKENS DEBUG_NESTS DEBUG_FUNCTIONINFO UE1 UE2 UE3 VENGEANCE SWAT4 UNREAL2 INFINITYBLADE BORDERLANDS2 GOW2 DEBUG_TEST APB SPECIALFORCE2 XIII SINGULARITY THIEF_DS DEUSEX_IW BORDERLANDS MIRRORSEDGE BIOSHOCK HAWKEN UT DISHONORED REMEMBERME ALPHAPROTOCOL VANGUARD TERA MKKE TRANSFORMERS XCOM2 DD2 DCUO AA2 SPELLBORN BATMAN MOH ROCKETLEAGUE DNF LSGAME UNDYING
false
@@ -85,7 +85,7 @@
bin\Publish\
- Forms DECOMPILE BINARYMETADATA UE1 UE2 UE3 UE4 VENGEANCE SWAT4 UNREAL2 INFINITYBLADE BORDERLANDS2 GOW2 APB SPECIALFORCE2 XIII SINGULARITY THIEF_DS DEUSEX_IW BORDERLANDS MIRRORSEDGE BIOSHOCK HAWKEN UT DISHONORED REMEMBERME ALPHAPROTOCOL VANGUARD TERA MKKE TRANSFORMERS XCOM2 DD2 DCUO AA2 SPELLBORN BATMAN ROCKETLEAGUE DNF LSGAME
+ Forms DECOMPILE BINARYMETADATA UE1 UE2 UE3 UE4 VENGEANCE SWAT4 UNREAL2 INFINITYBLADE BORDERLANDS2 GOW2 APB SPECIALFORCE2 XIII SINGULARITY THIEF_DS DEUSEX_IW BORDERLANDS MIRRORSEDGE BIOSHOCK HAWKEN UT DISHONORED REMEMBERME ALPHAPROTOCOL VANGUARD TERA MKKE TRANSFORMERS XCOM2 DD2 DCUO AA2 SPELLBORN BATMAN ROCKETLEAGUE DNF LSGAME UNDYING
true
AnyCPU
@@ -97,7 +97,7 @@
true
bin\Test\
- TRACE;DEBUG;STRICT DECOMPILE UE1 UE2 UE3 UE4 VENGEANCE SWAT4 UNREAL2 INFINITYBLADE BORDERLANDS2 GOW2 DEBUG_TEST APB SPECIALFORCE2 XIII SINGULARITY THIEF_DS DEUSEX_IW BORDERLANDS MIRRORSEDGE BIOSHOCK HAWKEN UT DISHONORED REMEMBERME ALPHAPROTOCOL VANGUARD TERA MKKE TRANSFORMERS XCOM2 DD2 DCUO AA2 SPELLBORN BATMAN ROCKETLEAGUE DNF LSGAME
+ TRACE;DEBUG;STRICT DECOMPILE UE1 UE2 UE3 UE4 VENGEANCE SWAT4 UNREAL2 INFINITYBLADE BORDERLANDS2 GOW2 DEBUG_TEST APB SPECIALFORCE2 XIII SINGULARITY THIEF_DS DEUSEX_IW BORDERLANDS MIRRORSEDGE BIOSHOCK HAWKEN UT DISHONORED REMEMBERME ALPHAPROTOCOL VANGUARD TERA MKKE TRANSFORMERS XCOM2 DD2 DCUO AA2 SPELLBORN BATMAN ROCKETLEAGUE DNF LSGAME UNDYING
true
0
full
diff --git a/src/Engine/Classes/UPalette.cs b/src/Engine/Classes/UPalette.cs
index 81a464d..90e9a54 100644
--- a/src/Engine/Classes/UPalette.cs
+++ b/src/Engine/Classes/UPalette.cs
@@ -1,4 +1,5 @@
using System.Diagnostics;
+using UELib.Branch;
using UELib.Core;
namespace UELib.Engine
@@ -14,6 +15,9 @@ public class UPalette : UObject, IUnrealViewable
///
public UArray Colors;
+ [Build(UnrealPackage.GameBuild.BuildName.Undying)]
+ public bool HasAlphaChannel;
+
public UPalette()
{
ShouldDeserializeOnDemand = true;
@@ -27,6 +31,13 @@ protected override void Deserialize()
int count = _Buffer.ReadIndex();
Debug.Assert(count == 256);
_Buffer.ReadMarshalArray(out Colors, count);
+#if UNDYING
+ if (Package.Build == UnrealPackage.GameBuild.BuildName.Undying &&
+ _Buffer.Version >= 75)
+ {
+ _Buffer.Read(out HasAlphaChannel); // v28
+ }
+#endif
}
}
}
\ No newline at end of file
diff --git a/src/Engine/Classes/USound.cs b/src/Engine/Classes/USound.cs
index bedfe21..92a1567 100644
--- a/src/Engine/Classes/USound.cs
+++ b/src/Engine/Classes/USound.cs
@@ -45,6 +45,40 @@ protected override void Deserialize()
FileType = _Buffer.ReadNameReference();
Record(nameof(FileType), FileType);
+#if UNDYING
+ if (Package.Build == UnrealPackage.GameBuild.BuildName.Undying)
+ {
+ if (_Buffer.Version >= 77)
+ {
+ _Buffer.Read(out int v7c);
+ Record(nameof(v7c), v7c);
+ _Buffer.Read(out int v74);
+ Record(nameof(v74), v74);
+ _Buffer.Read(out float v6c);
+ Record(nameof(v6c), v6c);
+ }
+
+ if (_Buffer.Version >= 79)
+ {
+ _Buffer.Read(out uint v78);
+ Record(nameof(v78), v78);
+ _Buffer.Read(out float v68); // Radius?
+ Record(nameof(v68), v68);
+ }
+
+ if (_Buffer.Version >= 80)
+ {
+ _Buffer.Read(out float v80);
+ Record(nameof(v80), v80);
+ }
+
+ if (_Buffer.Version >= 82)
+ {
+ _Buffer.Read(out int v84);
+ Record(nameof(v84), v84);
+ }
+ }
+#endif
#if UT
if ((Package.Build == UnrealPackage.GameBuild.BuildName.UT2004 ||
Package.Build == UnrealPackage.GameBuild.BuildName.UT2003)
@@ -57,6 +91,31 @@ protected override void Deserialize()
// Resource Interchange File Format
_Buffer.ReadLazyArray(out Data);
Record(nameof(Data), Data);
+#if UNDYING
+ if (Package.Build == UnrealPackage.GameBuild.BuildName.Undying)
+ {
+ if (_Buffer.Version >= 76)
+ {
+ _Buffer.Read(out uint v5c);
+ Record(nameof(v5c), v5c);
+
+ int undyingExtraDataLength = _Buffer.ReadIndex();
+ Record(nameof(undyingExtraDataLength), undyingExtraDataLength);
+ if (undyingExtraDataLength > 0)
+ {
+ var undyingExtraData = new byte[undyingExtraDataLength];
+ _Buffer.Read(undyingExtraData, 0, undyingExtraDataLength);
+ Record(nameof(undyingExtraData), undyingExtraData);
+ }
+ }
+
+ if (_Buffer.Version >= 85)
+ {
+ _Buffer.Read(out uint v8c);
+ Record(nameof(v8c), v8c);
+ }
+ }
+#endif
}
}
}
\ No newline at end of file
diff --git a/src/UnrealPackage.cs b/src/UnrealPackage.cs
index 04b7888..6e7403d 100644
--- a/src/UnrealPackage.cs
+++ b/src/UnrealPackage.cs
@@ -170,14 +170,26 @@ public enum BuildName
///
/// 61/000
///
- [Build(61, 0)] Unreal1,
+ [Build(61, 0, BuildGeneration.UE1)] Unreal1,
///
/// Standard, Unreal Tournament & Deus Ex
///
/// 68:69/000
///
- [Build(68, 69, 0u, 0u)] UT,
+ [Build(68, 69, 0u, 0u, BuildGeneration.UE1)]
+ UT,
+
+ //[Build(80, 0, BuildGeneration.UE1)]
+ BrotherBear,
+
+ ///
+ /// Clive Barker's Undying
+ ///
+ /// 72:85/000 (Only 84 to 85 is auto detected, other versions are overlapping with older unrelated games)
+ ///
+ [Build(84, 85, 0u, 0u, BuildGeneration.UE1)]
+ Undying,
///
/// Deus Ex: Invisible War