diff --git a/AssetStudio/AssetStudio.csproj b/AssetStudio/AssetStudio.csproj
index 3b7d546..6b98d61 100644
--- a/AssetStudio/AssetStudio.csproj
+++ b/AssetStudio/AssetStudio.csproj
@@ -135,10 +135,12 @@
+
+
diff --git a/AssetStudio/AssetsManager.cs b/AssetStudio/AssetsManager.cs
index 2cc6ce4..02391aa 100644
--- a/AssetStudio/AssetsManager.cs
+++ b/AssetStudio/AssetsManager.cs
@@ -130,7 +130,7 @@ namespace AssetStudio
{
var assetsFile = new SerializedFile(this, fullName, reader);
assetsFile.originalPath = originalPath;
- if (assetsFile.header.m_Version < 7)
+ if (assetsFile.header.m_Version < SerializedFileFormatVersion.kUnknown_7)
{
assetsFile.SetVersion(unityVersion);
}
diff --git a/AssetStudio/Classes/Object.cs b/AssetStudio/Classes/Object.cs
index a070013..8ce7293 100644
--- a/AssetStudio/Classes/Object.cs
+++ b/AssetStudio/Classes/Object.cs
@@ -1,7 +1,4 @@
-using System.Collections.Generic;
-using System.Collections.Specialized;
-using System.Linq;
-using System.Text;
+using System.Collections.Specialized;
namespace AssetStudio
{
@@ -36,47 +33,38 @@ namespace AssetStudio
}
}
- protected bool HasStructMember(string name)
- {
- return serializedType?.m_Nodes != null && serializedType.m_Nodes.Any(x => x.m_Name == name);
- }
-
public string Dump()
{
- if (serializedType?.m_Nodes != null)
+ if (serializedType?.m_Type != null)
{
- var sb = new StringBuilder();
- TypeTreeHelper.ReadTypeString(sb, serializedType.m_Nodes, reader);
- return sb.ToString();
+ return TypeTreeHelper.ReadTypeString(serializedType.m_Type, reader);
}
return null;
}
- public string Dump(List m_Nodes)
+ public string Dump(TypeTree m_Type)
{
- if (m_Nodes != null)
+ if (m_Type != null)
{
- var sb = new StringBuilder();
- TypeTreeHelper.ReadTypeString(sb, m_Nodes, reader);
- return sb.ToString();
+ return TypeTreeHelper.ReadTypeString(m_Type, reader);
}
return null;
}
public OrderedDictionary ToType()
{
- if (serializedType?.m_Nodes != null)
+ if (serializedType?.m_Type != null)
{
- return TypeTreeHelper.ReadType(serializedType.m_Nodes, reader);
+ return TypeTreeHelper.ReadType(serializedType.m_Type, reader);
}
return null;
}
- public OrderedDictionary ToType(List m_Nodes)
+ public OrderedDictionary ToType(TypeTree m_Type)
{
- if (m_Nodes != null)
+ if (m_Type != null)
{
- return TypeTreeHelper.ReadType(m_Nodes, reader);
+ return TypeTreeHelper.ReadType(m_Type, reader);
}
return null;
}
diff --git a/AssetStudio/Classes/PPtr.cs b/AssetStudio/Classes/PPtr.cs
index 561090a..4849e9c 100644
--- a/AssetStudio/Classes/PPtr.cs
+++ b/AssetStudio/Classes/PPtr.cs
@@ -13,7 +13,7 @@ namespace AssetStudio
public PPtr(ObjectReader reader)
{
m_FileID = reader.ReadInt32();
- m_PathID = reader.m_Version < 14 ? reader.ReadInt32() : reader.ReadInt64();
+ m_PathID = reader.m_Version < SerializedFileFormatVersion.kUnknown_14 ? reader.ReadInt32() : reader.ReadInt64();
assetsFile = reader.assetsFile;
}
diff --git a/AssetStudio/ObjectInfo.cs b/AssetStudio/ObjectInfo.cs
index bf4314b..4a50105 100644
--- a/AssetStudio/ObjectInfo.cs
+++ b/AssetStudio/ObjectInfo.cs
@@ -11,6 +11,8 @@ namespace AssetStudio
public uint byteSize;
public int typeID;
public int classID;
+ public ushort isDestroyed;
+ public byte stripped;
public long m_PathID;
public SerializedType serializedType;
diff --git a/AssetStudio/ObjectReader.cs b/AssetStudio/ObjectReader.cs
index dbf4441..47b33bc 100644
--- a/AssetStudio/ObjectReader.cs
+++ b/AssetStudio/ObjectReader.cs
@@ -15,7 +15,7 @@ namespace AssetStudio
public ClassIDType type;
public SerializedType serializedType;
public BuildTarget platform;
- public uint m_Version;
+ public SerializedFileFormatVersion m_Version;
public int[] version => assetsFile.version;
public BuildType buildType => assetsFile.buildType;
diff --git a/AssetStudio/SerializedFile.cs b/AssetStudio/SerializedFile.cs
index 3167bce..4c26ab8 100644
--- a/AssetStudio/SerializedFile.cs
+++ b/AssetStudio/SerializedFile.cs
@@ -19,15 +19,17 @@ namespace AssetStudio
public Dictionary ObjectsDic;
public SerializedFileHeader header;
- private EndianType m_FileEndianess;
+ private byte m_FileEndianess;
public string unityVersion = "2.5.0f5";
public BuildTarget m_TargetPlatform = BuildTarget.UnknownPlatform;
private bool m_EnableTypeTree = true;
public List m_Types;
- public List m_RefTypes;
+ public int bigIDEnabled = 0;
public List m_Objects;
private List m_ScriptTypes;
public List m_Externals;
+ public List m_RefTypes;
+ public string userInformation;
public SerializedFile(AssetsManager assetsManager, string fullName, EndianBinaryReader reader)
{
@@ -36,26 +38,26 @@ namespace AssetStudio
this.fullName = fullName;
fileName = Path.GetFileName(fullName);
- //ReadHeader
+ // ReadHeader
header = new SerializedFileHeader();
header.m_MetadataSize = reader.ReadUInt32();
header.m_FileSize = reader.ReadUInt32();
- header.m_Version = reader.ReadUInt32();
+ header.m_Version = (SerializedFileFormatVersion)reader.ReadUInt32();
header.m_DataOffset = reader.ReadUInt32();
- if (header.m_Version >= 9)
+ if (header.m_Version >= SerializedFileFormatVersion.kUnknown_9)
{
header.m_Endianess = reader.ReadByte();
header.m_Reserved = reader.ReadBytes(3);
- m_FileEndianess = (EndianType)header.m_Endianess;
+ m_FileEndianess = header.m_Endianess;
}
else
{
reader.Position = header.m_FileSize - header.m_MetadataSize;
- m_FileEndianess = (EndianType)reader.ReadByte();
+ m_FileEndianess = reader.ReadByte();
}
- if (header.m_Version >= 22)
+ if (header.m_Version >= SerializedFileFormatVersion.kLargeFilesSupport)
{
header.m_MetadataSize = reader.ReadUInt32();
header.m_FileSize = reader.ReadInt64();
@@ -63,17 +65,17 @@ namespace AssetStudio
reader.ReadInt64(); // unknown
}
- //ReadMetadata
- if (m_FileEndianess == EndianType.LittleEndian)
+ // ReadMetadata
+ if (m_FileEndianess == 0)
{
reader.endian = EndianType.LittleEndian;
}
- if (header.m_Version >= 7)
+ if (header.m_Version >= SerializedFileFormatVersion.kUnknown_7)
{
unityVersion = reader.ReadStringToNull();
SetVersion(unityVersion);
}
- if (header.m_Version >= 8)
+ if (header.m_Version >= SerializedFileFormatVersion.kUnknown_8)
{
m_TargetPlatform = (BuildTarget)reader.ReadInt32();
if (!Enum.IsDefined(typeof(BuildTarget), m_TargetPlatform))
@@ -81,26 +83,25 @@ namespace AssetStudio
m_TargetPlatform = BuildTarget.UnknownPlatform;
}
}
- if (header.m_Version >= 13)
+ if (header.m_Version >= SerializedFileFormatVersion.kHasTypeTreeHashes)
{
m_EnableTypeTree = reader.ReadBoolean();
}
- //ReadTypes
+ // Read Types
int typeCount = reader.ReadInt32();
m_Types = new List(typeCount);
for (int i = 0; i < typeCount; i++)
{
- m_Types.Add(ReadSerializedType());
+ m_Types.Add(ReadSerializedType(false));
}
- var bigIDEnabled = 0;
- if (header.m_Version >= 7 && header.m_Version < 14)
+ if (header.m_Version >= SerializedFileFormatVersion.kUnknown_7 && header.m_Version < SerializedFileFormatVersion.kUnknown_14)
{
bigIDEnabled = reader.ReadInt32();
}
- //ReadObjects
+ // Read Objects
int objectCount = reader.ReadInt32();
m_Objects = new List(objectCount);
Objects = new List