v0.90.10
This commit is contained in:
@@ -60,23 +60,28 @@ namespace AssetStudio
|
||||
reader.Position = header.m_FileSize - header.m_MetadataSize;
|
||||
m_FileEndianess = reader.ReadByte();
|
||||
}
|
||||
|
||||
|
||||
if (header.m_Version >= SerializedFileFormatVersion.LargeFilesSupport)
|
||||
{
|
||||
header.m_MetadataSize = reader.ReadUInt32();
|
||||
header.m_FileSize = reader.ReadInt64();
|
||||
header.m_DataOffset = reader.ReadInt64();
|
||||
reader.ReadInt64(); // unknown
|
||||
|
||||
}
|
||||
|
||||
Logger.Verbose($"File {fileName} Info: {header}");
|
||||
|
||||
// ReadMetadata
|
||||
if (m_FileEndianess == 0)
|
||||
{
|
||||
reader.Endian = EndianType.LittleEndian;
|
||||
Logger.Verbose($"Endianness {reader.Endian}");
|
||||
}
|
||||
if (header.m_Version >= SerializedFileFormatVersion.Unknown_7)
|
||||
{
|
||||
unityVersion = reader.ReadStringToNull();
|
||||
Logger.Verbose($"Unity version {unityVersion}");
|
||||
SetVersion(unityVersion);
|
||||
}
|
||||
if (header.m_Version >= SerializedFileFormatVersion.Unknown_8)
|
||||
@@ -84,12 +89,15 @@ namespace AssetStudio
|
||||
m_TargetPlatform = (BuildTarget)reader.ReadInt32();
|
||||
if (!Enum.IsDefined(typeof(BuildTarget), m_TargetPlatform))
|
||||
{
|
||||
Logger.Verbose($"Parsed target format {m_TargetPlatform} doesn't match any of supported formats, defaulting to {BuildTarget.UnknownPlatform}");
|
||||
m_TargetPlatform = BuildTarget.UnknownPlatform;
|
||||
}
|
||||
else if (game.Type.IsMhyGroup())
|
||||
{
|
||||
Logger.Verbose($"Selected game {game.Name} is a mhy game, forcing target format {BuildTarget.StandaloneWindows64}");
|
||||
m_TargetPlatform = BuildTarget.StandaloneWindows64;
|
||||
}
|
||||
Logger.Verbose($"Target format {m_TargetPlatform}");
|
||||
}
|
||||
if (header.m_Version >= SerializedFileFormatVersion.HasTypeTreeHashes)
|
||||
{
|
||||
@@ -99,6 +107,7 @@ namespace AssetStudio
|
||||
// Read Types
|
||||
int typeCount = reader.ReadInt32();
|
||||
m_Types = new List<SerializedType>(typeCount);
|
||||
Logger.Verbose($"Found {typeCount} serialized types");
|
||||
for (int i = 0; i < typeCount; i++)
|
||||
{
|
||||
m_Types.Add(ReadSerializedType(false));
|
||||
@@ -114,6 +123,7 @@ namespace AssetStudio
|
||||
m_Objects = new List<ObjectInfo>(objectCount);
|
||||
Objects = new List<Object>(objectCount);
|
||||
ObjectsDic = new Dictionary<long, Object>(objectCount);
|
||||
Logger.Verbose($"Found {objectCount} objects");
|
||||
for (int i = 0; i < objectCount; i++)
|
||||
{
|
||||
var objectInfo = new ObjectInfo();
|
||||
@@ -164,12 +174,14 @@ namespace AssetStudio
|
||||
{
|
||||
objectInfo.stripped = reader.ReadByte();
|
||||
}
|
||||
Logger.Verbose($"Object Info: {objectInfo}");
|
||||
m_Objects.Add(objectInfo);
|
||||
}
|
||||
|
||||
if (header.m_Version >= SerializedFileFormatVersion.HasScriptTypeIndex)
|
||||
{
|
||||
int scriptCount = reader.ReadInt32();
|
||||
Logger.Verbose($"Found {scriptCount} scripts");
|
||||
m_ScriptTypes = new List<LocalSerializedObjectIdentifier>(scriptCount);
|
||||
for (int i = 0; i < scriptCount; i++)
|
||||
{
|
||||
@@ -184,12 +196,14 @@ namespace AssetStudio
|
||||
reader.AlignStream();
|
||||
m_ScriptType.localIdentifierInFile = reader.ReadInt64();
|
||||
}
|
||||
Logger.Verbose($"Script Info: {m_ScriptType}");
|
||||
m_ScriptTypes.Add(m_ScriptType);
|
||||
}
|
||||
}
|
||||
|
||||
int externalsCount = reader.ReadInt32();
|
||||
m_Externals = new List<FileIdentifier>(externalsCount);
|
||||
Logger.Verbose($"Found {externalsCount} externals");
|
||||
for (int i = 0; i < externalsCount; i++)
|
||||
{
|
||||
var m_External = new FileIdentifier();
|
||||
@@ -204,6 +218,7 @@ namespace AssetStudio
|
||||
}
|
||||
m_External.pathName = reader.ReadStringToNull();
|
||||
m_External.fileName = Path.GetFileName(m_External.pathName);
|
||||
Logger.Verbose($"External Info: {m_External}");
|
||||
m_Externals.Add(m_External);
|
||||
}
|
||||
|
||||
@@ -211,6 +226,7 @@ namespace AssetStudio
|
||||
{
|
||||
int refTypesCount = reader.ReadInt32();
|
||||
m_RefTypes = new List<SerializedType>(refTypesCount);
|
||||
Logger.Verbose($"Found {refTypesCount} reference types");
|
||||
for (int i = 0; i < refTypesCount; i++)
|
||||
{
|
||||
m_RefTypes.Add(ReadSerializedType(true));
|
||||
@@ -239,12 +255,14 @@ namespace AssetStudio
|
||||
|
||||
private SerializedType ReadSerializedType(bool isRefType)
|
||||
{
|
||||
Logger.Verbose($"Attempting to parse serialized" + (isRefType ? " reference" : " ") + "type");
|
||||
var type = new SerializedType();
|
||||
|
||||
type.classID = reader.ReadInt32();
|
||||
|
||||
if (game.Type.IsGIGroup() && BitConverter.ToBoolean(header.m_Reserved))
|
||||
{
|
||||
Logger.Verbose($"Encoded class ID {type.classID}, decoding...");
|
||||
type.classID = DecodeClassID(type.classID);
|
||||
}
|
||||
|
||||
@@ -273,6 +291,7 @@ namespace AssetStudio
|
||||
|
||||
if (m_EnableTypeTree)
|
||||
{
|
||||
Logger.Verbose($"File has type tree enabled !!");
|
||||
type.m_Type = new TypeTree();
|
||||
type.m_Type.m_Nodes = new List<TypeTreeNode>();
|
||||
if (header.m_Version >= SerializedFileFormatVersion.Unknown_12 || header.m_Version == SerializedFileFormatVersion.Unknown_10)
|
||||
@@ -298,11 +317,13 @@ namespace AssetStudio
|
||||
}
|
||||
}
|
||||
|
||||
Logger.Verbose($"Serialized type info: {type}");
|
||||
return type;
|
||||
}
|
||||
|
||||
private void ReadTypeTree(TypeTree m_Type, int level = 0)
|
||||
{
|
||||
Logger.Verbose($"Attempting to parse type tree...");
|
||||
var typeTreeNode = new TypeTreeNode();
|
||||
m_Type.m_Nodes.Add(typeTreeNode);
|
||||
typeTreeNode.m_Level = level;
|
||||
@@ -329,12 +350,16 @@ namespace AssetStudio
|
||||
{
|
||||
ReadTypeTree(m_Type, level + 1);
|
||||
}
|
||||
|
||||
Logger.Verbose($"Type Tree Info: {m_Type}");
|
||||
}
|
||||
|
||||
private void TypeTreeBlobRead(TypeTree m_Type)
|
||||
{
|
||||
Logger.Verbose($"Attempting to parse blob type tree...");
|
||||
int numberOfNodes = reader.ReadInt32();
|
||||
int stringBufferSize = reader.ReadInt32();
|
||||
Logger.Verbose($"Found {numberOfNodes} nodes and {stringBufferSize} strings");
|
||||
for (int i = 0; i < numberOfNodes; i++)
|
||||
{
|
||||
var typeTreeNode = new TypeTreeNode();
|
||||
@@ -364,6 +389,8 @@ namespace AssetStudio
|
||||
}
|
||||
}
|
||||
|
||||
Logger.Verbose($"Type Tree Info: {m_Type}");
|
||||
|
||||
string ReadString(EndianBinaryReader stringBufferReader, uint value)
|
||||
{
|
||||
var isOffset = (value & 0x80000000) == 0;
|
||||
@@ -383,6 +410,7 @@ namespace AssetStudio
|
||||
|
||||
public void AddObject(Object obj)
|
||||
{
|
||||
Logger.Verbose($"Caching object with {obj.m_PathID} in file {fileName}...");
|
||||
Objects.Add(obj);
|
||||
ObjectsDic.Add(obj.m_PathID, obj);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user