diff --git a/AssetStudio/CommonString.cs b/AssetStudio/CommonString.cs index 965c3da..cbcf7cd 100644 --- a/AssetStudio/CommonString.cs +++ b/AssetStudio/CommonString.cs @@ -112,7 +112,8 @@ namespace AssetStudio {1083, "BoundsInt"}, {1093, "m_CorrespondingSourceObject"}, {1121, "m_PrefabInstance"}, - {1138, "m_PrefabAsset"} + {1138, "m_PrefabAsset"}, + {1152, "FileSize"} }; } } diff --git a/AssetStudio/SerializedFile.cs b/AssetStudio/SerializedFile.cs index 0890e55..c32e398 100644 --- a/AssetStudio/SerializedFile.cs +++ b/AssetStudio/SerializedFile.cs @@ -233,13 +233,22 @@ namespace AssetStudio var typeTree = new List(); if (header.m_Version >= 12 || header.m_Version == 10) { - ReadTypeTree5(typeTree); + TypeTreeBlobRead(typeTree); } else { ReadTypeTree(typeTree); } + if (header.m_Version >= 21) + { + var count = reader.ReadInt32(); + if (count > 0) + { + reader.Position += 4 * count; + } + } + type.m_Nodes = typeTree; } @@ -276,13 +285,13 @@ namespace AssetStudio } } - private void ReadTypeTree5(List typeTree) + private void TypeTreeBlobRead(List typeTree) { int numberOfNodes = reader.ReadInt32(); int stringBufferSize = reader.ReadInt32(); var nodeSize = 24; - if (header.m_Version > 17) + if (header.m_Version >= 19) { nodeSize = 32; } @@ -303,20 +312,17 @@ namespace AssetStudio typeTreeNode.m_Index = reader.ReadInt32(); typeTreeNode.m_MetaFlag = reader.ReadInt32(); - if (header.m_Version > 17) + typeTreeNode.m_Type = ReadString(stringBufferReader, typeTreeNode.m_TypeStrOffset); + typeTreeNode.m_Name = ReadString(stringBufferReader, typeTreeNode.m_NameStrOffset); + + if (header.m_Version >= 19) { reader.Position += 8; } - - typeTreeNode.m_Type = ReadString(stringBufferReader, typeTreeNode.m_TypeStrOffset); - typeTreeNode.m_Name = ReadString(stringBufferReader, typeTreeNode.m_NameStrOffset); } reader.Position += stringBufferSize; } - if (header.m_Version >= 21) - { - reader.Position += 4; - } + string ReadString(BinaryReader stringBufferReader, uint value) { var isOffset = (value & 0x80000000) == 0;