diff --git a/AssetStudio/Classes/Texture2D.cs b/AssetStudio/Classes/Texture2D.cs index 73107ae..0258044 100644 --- a/AssetStudio/Classes/Texture2D.cs +++ b/AssetStudio/Classes/Texture2D.cs @@ -63,6 +63,7 @@ namespace AssetStudio public ResourceReader image_data; public StreamingInfo m_StreamData; + private static bool HasGNFTexture(ObjectReader reader) => reader.serializedType.Match("1D52BB98AA5F54C67C22C39E8B2E400F"); public Texture2D(ObjectReader reader) : base(reader) { m_Width = reader.ReadInt32(); @@ -84,6 +85,10 @@ namespace AssetStudio if (version[0] > 2 || (version[0] == 2 && version[1] >= 6)) //2.6.0 and up { var m_IsReadable = reader.ReadBoolean(); + if (reader.Game.Type.IsGI() && HasGNFTexture(reader)) + { + var m_IsGNFTexture = reader.ReadBoolean(); + } } if (version[0] >= 2020) //2020.1 and up { @@ -100,11 +105,15 @@ namespace AssetStudio var m_ReadAllowed = reader.ReadBoolean(); } } - if (version[0] > 2018 || (version[0] == 2018 && version[1] >= 2)) //2018.2 and up + if (version[0] > 2018 || (version[0] == 2018 && version[1] >= 2) || reader.Game.Type.IsGI()) //2018.2 and up { var m_StreamingMipmaps = reader.ReadBoolean(); } reader.AlignStream(); + if (reader.Game.Type.IsGI() && HasGNFTexture(reader)) + { + var m_TextureGroup = reader.ReadInt32(); + } if (version[0] > 2018 || (version[0] == 2018 && version[1] >= 2)) //2018.2 and up { var m_StreamingMipmapsPriority = reader.ReadInt32(); @@ -128,6 +137,10 @@ namespace AssetStudio var image_data_size = reader.ReadInt32(); if (image_data_size == 0 && ((version[0] == 5 && version[1] >= 3) || version[0] > 5))//5.3.0 and up { + if (reader.Game.Type.IsGI() && HasGNFTexture(reader)) + { + var m_externalMipRelativeOffset = reader.ReadUInt32(); + } m_StreamData = new StreamingInfo(reader); }