Compare commits

..

No commits in common. "d158e864b556b5970709c2a52e47944d53aa98a2" and "e1cfff63c3d13db8191e7ac9247e05f4d310ab5b" have entirely different histories.

28 changed files with 503 additions and 630 deletions

View File

@ -6,8 +6,7 @@
<Version>0.16.0.0</Version> <Version>0.16.0.0</Version>
<AssemblyVersion>0.16.0.0</AssemblyVersion> <AssemblyVersion>0.16.0.0</AssemblyVersion>
<FileVersion>0.16.0.0</FileVersion> <FileVersion>0.16.0.0</FileVersion>
<Copyright>Copyright © Perfare 2020-2022; Copyright © hozuki 2020</Copyright> <Copyright>Copyright © Perfare 2020-2021; Copyright © hozuki 2020</Copyright>
<DebugType>embedded</DebugType>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

View File

@ -5,8 +5,7 @@
<Version>0.16.0.0</Version> <Version>0.16.0.0</Version>
<AssemblyVersion>0.16.0.0</AssemblyVersion> <AssemblyVersion>0.16.0.0</AssemblyVersion>
<FileVersion>0.16.0.0</FileVersion> <FileVersion>0.16.0.0</FileVersion>
<Copyright>Copyright © Perfare 2018-2022</Copyright> <Copyright>Copyright © Perfare 2018-2021</Copyright>
<DebugType>embedded</DebugType>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(TargetFramework)' != 'net472' "> <ItemGroup Condition=" '$(TargetFramework)' != 'net472' ">

View File

@ -18,7 +18,6 @@ namespace AssetStudio
private List<string> importFiles = new List<string>(); private List<string> importFiles = new List<string>();
private HashSet<string> importFilesHash = new HashSet<string>(StringComparer.OrdinalIgnoreCase); private HashSet<string> importFilesHash = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
private HashSet<string> noexistFiles = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
private HashSet<string> assetsFileListHash = new HashSet<string>(StringComparer.OrdinalIgnoreCase); private HashSet<string> assetsFileListHash = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
public void LoadFiles(params string[] files) public void LoadFiles(params string[] files)
@ -55,7 +54,6 @@ namespace AssetStudio
importFiles.Clear(); importFiles.Clear();
importFilesHash.Clear(); importFilesHash.Clear();
noexistFiles.Clear();
assetsFileListHash.Clear(); assetsFileListHash.Clear();
ReadAssets(); ReadAssets();
@ -112,26 +110,20 @@ namespace AssetStudio
if (!importFilesHash.Contains(sharedFileName)) if (!importFilesHash.Contains(sharedFileName))
{ {
var sharedFilePath = Path.Combine(Path.GetDirectoryName(reader.FullPath), sharedFileName); var sharedFilePath = Path.Combine(Path.GetDirectoryName(reader.FullPath), sharedFileName);
if (!noexistFiles.Contains(sharedFilePath)) if (!File.Exists(sharedFilePath))
{ {
if (!File.Exists(sharedFilePath)) var findFiles = Directory.GetFiles(Path.GetDirectoryName(reader.FullPath), sharedFileName, SearchOption.AllDirectories);
if (findFiles.Length > 0)
{ {
var findFiles = Directory.GetFiles(Path.GetDirectoryName(reader.FullPath), sharedFileName, SearchOption.AllDirectories); sharedFilePath = findFiles[0];
if (findFiles.Length > 0)
{
sharedFilePath = findFiles[0];
}
}
if (File.Exists(sharedFilePath))
{
importFiles.Add(sharedFilePath);
importFilesHash.Add(sharedFileName);
}
else
{
noexistFiles.Add(sharedFilePath);
} }
} }
if (File.Exists(sharedFilePath))
{
importFiles.Add(sharedFilePath);
importFilesHash.Add(sharedFileName);
}
} }
} }
} }
@ -156,7 +148,7 @@ namespace AssetStudio
{ {
var assetsFile = new SerializedFile(reader, this); var assetsFile = new SerializedFile(reader, this);
assetsFile.originalPath = originalPath; assetsFile.originalPath = originalPath;
if (!string.IsNullOrEmpty(unityVersion) && assetsFile.header.m_Version < SerializedFileFormatVersion.Unknown_7) if (!string.IsNullOrEmpty(unityVersion) && assetsFile.header.m_Version < SerializedFileFormatVersion.kUnknown_7)
{ {
assetsFile.SetVersion(unityVersion); assetsFile.SetVersion(unityVersion);
} }

View File

@ -8,8 +8,7 @@ namespace AssetStudio
public enum BuildTarget public enum BuildTarget
{ {
NoTarget = -2, NoTarget = -2,
AnyPlayer = -1, DashboardWidget = 1,
ValidPlayer = 1,
StandaloneOSX = 2, StandaloneOSX = 2,
StandaloneOSXPPC = 3, StandaloneOSXPPC = 3,
StandaloneOSXIntel = 4, StandaloneOSXIntel = 4,
@ -20,10 +19,8 @@ namespace AssetStudio
iOS = 9, iOS = 9,
PS3, PS3,
XBOX360, XBOX360,
Broadcom = 12,
Android = 13, Android = 13,
StandaloneGLESEmu = 14, StandaloneGLESEmu = 14,
StandaloneGLES20Emu = 15,
NaCl = 16, NaCl = 16,
StandaloneLinux = 17, StandaloneLinux = 17,
FlashPlayer = 18, FlashPlayer = 18,
@ -51,8 +48,6 @@ namespace AssetStudio
GameCoreXboxSeries, GameCoreXboxSeries,
GameCoreXboxOne, GameCoreXboxOne,
PS5, PS5,
EmbeddedLinux,
QNX,
UnknownPlatform = 9999 UnknownPlatform = 9999
} }
} }

View File

@ -1,36 +1,9 @@
using K4os.Compression.LZ4; using K4os.Compression.LZ4;
using System;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
namespace AssetStudio namespace AssetStudio
{ {
[Flags]
public enum ArchiveFlags
{
CompressionTypeMask = 0x3f,
BlocksAndDirectoryInfoCombined = 0x40,
BlocksInfoAtTheEnd = 0x80,
OldWebPluginCompatibility = 0x100,
BlockInfoNeedPaddingAtStart = 0x200
}
[Flags]
public enum StorageBlockFlags
{
CompressionTypeMask = 0x3f,
Streamed = 0x40
}
public enum CompressionType
{
None,
Lzma,
Lz4,
Lz4HC,
Lzham
}
public class BundleFile public class BundleFile
{ {
public class Header public class Header
@ -42,14 +15,14 @@ namespace AssetStudio
public long size; public long size;
public uint compressedBlocksInfoSize; public uint compressedBlocksInfoSize;
public uint uncompressedBlocksInfoSize; public uint uncompressedBlocksInfoSize;
public ArchiveFlags flags; public uint flags;
} }
public class StorageBlock public class StorageBlock
{ {
public uint compressedSize; public uint compressedSize;
public uint uncompressedSize; public uint uncompressedSize;
public StorageBlockFlags flags; public ushort flags;
} }
public class Node public class Node
@ -104,6 +77,7 @@ namespace AssetStudio
private void ReadHeaderAndBlocksInfo(EndianBinaryReader reader) private void ReadHeaderAndBlocksInfo(EndianBinaryReader reader)
{ {
var isCompressed = m_Header.signature == "UnityWeb";
if (m_Header.version >= 4) if (m_Header.version >= 4)
{ {
var hash = reader.ReadBytes(16); var hash = reader.ReadBytes(16);
@ -120,6 +94,7 @@ namespace AssetStudio
{ {
compressedSize = reader.ReadUInt32(), compressedSize = reader.ReadUInt32(),
uncompressedSize = reader.ReadUInt32(), uncompressedSize = reader.ReadUInt32(),
flags = (ushort)(isCompressed ? 1 : 0)
}; };
if (i == levelCount - 1) if (i == levelCount - 1)
{ {
@ -156,11 +131,10 @@ namespace AssetStudio
private void ReadBlocksAndDirectory(EndianBinaryReader reader, Stream blocksStream) private void ReadBlocksAndDirectory(EndianBinaryReader reader, Stream blocksStream)
{ {
var isCompressed = m_Header.signature == "UnityWeb";
foreach (var blockInfo in m_BlocksInfo) foreach (var blockInfo in m_BlocksInfo)
{ {
var uncompressedBytes = reader.ReadBytes((int)blockInfo.compressedSize); var uncompressedBytes = reader.ReadBytes((int)blockInfo.compressedSize);
if (isCompressed) if (blockInfo.flags == 1)
{ {
using (var memoryStream = new MemoryStream(uncompressedBytes)) using (var memoryStream = new MemoryStream(uncompressedBytes))
{ {
@ -220,7 +194,7 @@ namespace AssetStudio
m_Header.size = reader.ReadInt64(); m_Header.size = reader.ReadInt64();
m_Header.compressedBlocksInfoSize = reader.ReadUInt32(); m_Header.compressedBlocksInfoSize = reader.ReadUInt32();
m_Header.uncompressedBlocksInfoSize = reader.ReadUInt32(); m_Header.uncompressedBlocksInfoSize = reader.ReadUInt32();
m_Header.flags = (ArchiveFlags)reader.ReadUInt32(); m_Header.flags = reader.ReadUInt32();
if (m_Header.signature != "UnityFS") if (m_Header.signature != "UnityFS")
{ {
reader.ReadByte(); reader.ReadByte();
@ -234,28 +208,27 @@ namespace AssetStudio
{ {
reader.AlignStream(16); reader.AlignStream(16);
} }
if ((m_Header.flags & ArchiveFlags.BlocksInfoAtTheEnd) != 0) if ((m_Header.flags & 0x80) != 0) //kArchiveBlocksInfoAtTheEnd
{ {
var position = reader.Position; var position = reader.Position;
reader.Position = reader.BaseStream.Length - m_Header.compressedBlocksInfoSize; reader.Position = reader.BaseStream.Length - m_Header.compressedBlocksInfoSize;
blocksInfoBytes = reader.ReadBytes((int)m_Header.compressedBlocksInfoSize); blocksInfoBytes = reader.ReadBytes((int)m_Header.compressedBlocksInfoSize);
reader.Position = position; reader.Position = position;
} }
else //0x40 BlocksAndDirectoryInfoCombined else //0x40 kArchiveBlocksAndDirectoryInfoCombined
{ {
blocksInfoBytes = reader.ReadBytes((int)m_Header.compressedBlocksInfoSize); blocksInfoBytes = reader.ReadBytes((int)m_Header.compressedBlocksInfoSize);
} }
MemoryStream blocksInfoUncompresseddStream; MemoryStream blocksInfoUncompresseddStream;
var uncompressedSize = m_Header.uncompressedBlocksInfoSize; var uncompressedSize = m_Header.uncompressedBlocksInfoSize;
var compressionType = (CompressionType)(m_Header.flags & ArchiveFlags.CompressionTypeMask); switch (m_Header.flags & 0x3F) //kArchiveCompressionTypeMask
switch (compressionType)
{ {
case CompressionType.None: default: //None
{ {
blocksInfoUncompresseddStream = new MemoryStream(blocksInfoBytes); blocksInfoUncompresseddStream = new MemoryStream(blocksInfoBytes);
break; break;
} }
case CompressionType.Lzma: case 1: //LZMA
{ {
blocksInfoUncompresseddStream = new MemoryStream((int)(uncompressedSize)); blocksInfoUncompresseddStream = new MemoryStream((int)(uncompressedSize));
using (var blocksInfoCompressedStream = new MemoryStream(blocksInfoBytes)) using (var blocksInfoCompressedStream = new MemoryStream(blocksInfoBytes))
@ -265,8 +238,8 @@ namespace AssetStudio
blocksInfoUncompresseddStream.Position = 0; blocksInfoUncompresseddStream.Position = 0;
break; break;
} }
case CompressionType.Lz4: case 2: //LZ4
case CompressionType.Lz4HC: case 3: //LZ4HC
{ {
var uncompressedBytes = new byte[uncompressedSize]; var uncompressedBytes = new byte[uncompressedSize];
var numWrite = LZ4Codec.Decode(blocksInfoBytes, uncompressedBytes); var numWrite = LZ4Codec.Decode(blocksInfoBytes, uncompressedBytes);
@ -277,8 +250,6 @@ namespace AssetStudio
blocksInfoUncompresseddStream = new MemoryStream(uncompressedBytes); blocksInfoUncompresseddStream = new MemoryStream(uncompressedBytes);
break; break;
} }
default:
throw new IOException($"Unsupported compression type {compressionType}");
} }
using (var blocksInfoReader = new EndianBinaryReader(blocksInfoUncompresseddStream)) using (var blocksInfoReader = new EndianBinaryReader(blocksInfoUncompresseddStream))
{ {
@ -291,7 +262,7 @@ namespace AssetStudio
{ {
uncompressedSize = blocksInfoReader.ReadUInt32(), uncompressedSize = blocksInfoReader.ReadUInt32(),
compressedSize = blocksInfoReader.ReadUInt32(), compressedSize = blocksInfoReader.ReadUInt32(),
flags = (StorageBlockFlags)blocksInfoReader.ReadUInt16() flags = blocksInfoReader.ReadUInt16()
}; };
} }
@ -308,31 +279,26 @@ namespace AssetStudio
}; };
} }
} }
if ((m_Header.flags & ArchiveFlags.BlockInfoNeedPaddingAtStart) != 0)
{
reader.AlignStream(16);
}
} }
private void ReadBlocks(EndianBinaryReader reader, Stream blocksStream) private void ReadBlocks(EndianBinaryReader reader, Stream blocksStream)
{ {
foreach (var blockInfo in m_BlocksInfo) foreach (var blockInfo in m_BlocksInfo)
{ {
var compressionType = (CompressionType)(blockInfo.flags & StorageBlockFlags.CompressionTypeMask); switch (blockInfo.flags & 0x3F) //kStorageBlockCompressionTypeMask
switch (compressionType)
{ {
case CompressionType.None: default: //None
{ {
reader.BaseStream.CopyTo(blocksStream, blockInfo.compressedSize); reader.BaseStream.CopyTo(blocksStream, blockInfo.compressedSize);
break; break;
} }
case CompressionType.Lzma: case 1: //LZMA
{ {
SevenZipHelper.StreamDecompress(reader.BaseStream, blocksStream, blockInfo.compressedSize, blockInfo.uncompressedSize); SevenZipHelper.StreamDecompress(reader.BaseStream, blocksStream, blockInfo.compressedSize, blockInfo.uncompressedSize);
break; break;
} }
case CompressionType.Lz4: case 2: //LZ4
case CompressionType.Lz4HC: case 3: //LZ4HC
{ {
var compressedSize = (int)blockInfo.compressedSize; var compressedSize = (int)blockInfo.compressedSize;
var compressedBytes = BigArrayPool<byte>.Shared.Rent(compressedSize); var compressedBytes = BigArrayPool<byte>.Shared.Rent(compressedSize);
@ -349,8 +315,6 @@ namespace AssetStudio
BigArrayPool<byte>.Shared.Return(uncompressedBytes); BigArrayPool<byte>.Shared.Return(uncompressedBytes);
break; break;
} }
default:
throw new IOException($"Unsupported compression type {compressionType}");
} }
} }
blocksStream.Position = 0; blocksStream.Position = 0;

View File

@ -797,7 +797,6 @@ namespace AssetStudio
public ClassIDType typeID; public ClassIDType typeID;
public byte customType; public byte customType;
public byte isPPtrCurve; public byte isPPtrCurve;
public byte isIntCurve;
public GenericBinding() { } public GenericBinding() { }
@ -817,10 +816,6 @@ namespace AssetStudio
} }
customType = reader.ReadByte(); customType = reader.ReadByte();
isPPtrCurve = reader.ReadByte(); isPPtrCurve = reader.ReadByte();
if (version[0] > 2022 || (version[0] == 2022 && version[1] >= 1)) //2022.1 and up
{
isIntCurve = reader.ReadByte();
}
reader.AlignStream(); reader.AlignStream();
} }
} }
@ -914,9 +909,9 @@ namespace AssetStudio
public enum AnimationType public enum AnimationType
{ {
Legacy = 1, kLegacy = 1,
Generic = 2, kGeneric = 2,
Humanoid = 3 kHumanoid = 3
}; };
public sealed class AnimationClip : NamedObject public sealed class AnimationClip : NamedObject
@ -950,7 +945,7 @@ namespace AssetStudio
else if (version[0] >= 4)//4.0 and up else if (version[0] >= 4)//4.0 and up
{ {
m_AnimationType = (AnimationType)reader.ReadInt32(); m_AnimationType = (AnimationType)reader.ReadInt32();
if (m_AnimationType == AnimationType.Legacy) if (m_AnimationType == AnimationType.kLegacy)
m_Legacy = true; m_Legacy = true;
} }
else else

View File

@ -9,7 +9,7 @@ namespace AssetStudio
public sealed class AudioClip : NamedObject public sealed class AudioClip : NamedObject
{ {
public int m_Format; public int m_Format;
public FMODSoundType m_Type; public AudioType m_Type;
public bool m_3D; public bool m_3D;
public bool m_UseHardware; public bool m_UseHardware;
@ -36,7 +36,7 @@ namespace AssetStudio
if (version[0] < 5) if (version[0] < 5)
{ {
m_Format = reader.ReadInt32(); m_Format = reader.ReadInt32();
m_Type = (FMODSoundType)reader.ReadInt32(); m_Type = (AudioType)reader.ReadInt32();
m_3D = reader.ReadBoolean(); m_3D = reader.ReadBoolean();
m_UseHardware = reader.ReadBoolean(); m_UseHardware = reader.ReadBoolean();
reader.AlignStream(); reader.AlignStream();
@ -92,51 +92,34 @@ namespace AssetStudio
} }
} }
public enum FMODSoundType public enum AudioType
{ {
UNKNOWN = 0, UNKNOWN,
ACC = 1, ACC,
AIFF = 2, AIFF,
ASF = 3,
AT3 = 4,
CDDA = 5,
DLS = 6,
FLAC = 7,
FSB = 8,
GCADPCM = 9,
IT = 10, IT = 10,
MIDI = 11,
MOD = 12, MOD = 12,
MPEG = 13, MPEG,
OGGVORBIS = 14, OGGVORBIS,
PLAYLIST = 15,
RAW = 16,
S3M = 17, S3M = 17,
SF2 = 18,
USER = 19,
WAV = 20, WAV = 20,
XM = 21, XM,
XMA = 22, XMA,
VAG = 23, VAG,
AUDIOQUEUE = 24, AUDIOQUEUE
XWMA = 25,
BCWAV = 26,
AT9 = 27,
VORBIS = 28,
MEDIA_FOUNDATION = 29
} }
public enum AudioCompressionFormat public enum AudioCompressionFormat
{ {
PCM = 0, PCM,
Vorbis = 1, Vorbis,
ADPCM = 2, ADPCM,
MP3 = 3, MP3,
PSMVAG = 4, VAG,
HEVAG = 5, HEVAG,
XMA = 6, XMA,
AAC = 7, AAC,
GCADPCM = 8, GCADPCM,
ATRAC9 = 9 ATRAC9
} }
} }

View File

@ -74,18 +74,9 @@ namespace AssetStudio
var m_ShaderKeywords = reader.ReadStringArray(); var m_ShaderKeywords = reader.ReadStringArray();
} }
if (version[0] > 2021 || (version[0] == 2021 && version[1] >= 3)) //2021.3 and up
{
var m_ValidKeywords = reader.ReadStringArray();
var m_InvalidKeywords = reader.ReadStringArray();
}
else if (version[0] >= 5) //5.0 ~ 2021.2
{
var m_ShaderKeywords = reader.ReadAlignedString();
}
if (version[0] >= 5) //5.0 and up if (version[0] >= 5) //5.0 and up
{ {
var m_ShaderKeywords = reader.ReadAlignedString();
var m_LightmapFlags = reader.ReadUInt32(); var m_LightmapFlags = reader.ReadUInt32();
} }

View File

@ -396,14 +396,14 @@ namespace AssetStudio
} }
} }
public enum GfxPrimitiveType public enum GfxPrimitiveType : int
{ {
Triangles = 0, kPrimitiveTriangles = 0,
TriangleStrip = 1, kPrimitiveTriangleStrip = 1,
Quads = 2, kPrimitiveQuads = 2,
Lines = 3, kPrimitiveLines = 3,
LineStrip = 4, kPrimitiveLineStrip = 4,
Points = 5 kPrimitivePoints = 5,
}; };
public class SubMesh public class SubMesh
@ -651,11 +651,6 @@ namespace AssetStudio
int m_MeshUsageFlags = reader.ReadInt32(); int m_MeshUsageFlags = reader.ReadInt32();
if (version[0] > 2022 || (version[0] == 2022 && version[1] >= 1)) //2022.1 and up
{
int m_CookingOptions = reader.ReadInt32();
}
if (version[0] >= 5) //5.0 and up if (version[0] >= 5) //5.0 and up
{ {
var m_BakedConvexCollisionMesh = reader.ReadUInt8Array(); var m_BakedConvexCollisionMesh = reader.ReadUInt8Array();
@ -1065,7 +1060,7 @@ namespace AssetStudio
} }
var indexCount = m_SubMesh.indexCount; var indexCount = m_SubMesh.indexCount;
var topology = m_SubMesh.topology; var topology = m_SubMesh.topology;
if (topology == GfxPrimitiveType.Triangles) if (topology == GfxPrimitiveType.kPrimitiveTriangles)
{ {
for (int i = 0; i < indexCount; i += 3) for (int i = 0; i < indexCount; i += 3)
{ {
@ -1074,7 +1069,7 @@ namespace AssetStudio
m_Indices.Add(m_IndexBuffer[firstIndex + i + 2]); m_Indices.Add(m_IndexBuffer[firstIndex + i + 2]);
} }
} }
else if (version[0] < 4 || topology == GfxPrimitiveType.TriangleStrip) else if (version[0] < 4 || topology == GfxPrimitiveType.kPrimitiveTriangleStrip)
{ {
// de-stripify : // de-stripify :
uint triIndex = 0; uint triIndex = 0;
@ -1105,7 +1100,7 @@ namespace AssetStudio
//fix indexCount //fix indexCount
m_SubMesh.indexCount = triIndex; m_SubMesh.indexCount = triIndex;
} }
else if (topology == GfxPrimitiveType.Quads) else if (topology == GfxPrimitiveType.kPrimitiveQuads)
{ {
for (int q = 0; q < indexCount; q += 4) for (int q = 0; q < indexCount; q += 4)
{ {
@ -1198,44 +1193,44 @@ namespace AssetStudio
{ {
public enum VertexChannelFormat public enum VertexChannelFormat
{ {
Float, kChannelFormatFloat,
Float16, kChannelFormatFloat16,
Color, kChannelFormatColor,
Byte, kChannelFormatByte,
UInt32 kChannelFormatUInt32
} }
public enum VertexFormat2017 public enum VertexFormat2017
{ {
Float, kVertexFormatFloat,
Float16, kVertexFormatFloat16,
Color, kVertexFormatColor,
UNorm8, kVertexFormatUNorm8,
SNorm8, kVertexFormatSNorm8,
UNorm16, kVertexFormatUNorm16,
SNorm16, kVertexFormatSNorm16,
UInt8, kVertexFormatUInt8,
SInt8, kVertexFormatSInt8,
UInt16, kVertexFormatUInt16,
SInt16, kVertexFormatSInt16,
UInt32, kVertexFormatUInt32,
SInt32 kVertexFormatSInt32
} }
public enum VertexFormat public enum VertexFormat
{ {
Float, kVertexFormatFloat,
Float16, kVertexFormatFloat16,
UNorm8, kVertexFormatUNorm8,
SNorm8, kVertexFormatSNorm8,
UNorm16, kVertexFormatUNorm16,
SNorm16, kVertexFormatSNorm16,
UInt8, kVertexFormatUInt8,
SInt8, kVertexFormatSInt8,
UInt16, kVertexFormatUInt16,
SInt16, kVertexFormatSInt16,
UInt32, kVertexFormatUInt32,
SInt32 kVertexFormatSInt32
} }
public static VertexFormat ToVertexFormat(int format, int[] version) public static VertexFormat ToVertexFormat(int format, int[] version)
@ -1244,16 +1239,16 @@ namespace AssetStudio
{ {
switch ((VertexChannelFormat)format) switch ((VertexChannelFormat)format)
{ {
case VertexChannelFormat.Float: case VertexChannelFormat.kChannelFormatFloat:
return VertexFormat.Float; return VertexFormat.kVertexFormatFloat;
case VertexChannelFormat.Float16: case VertexChannelFormat.kChannelFormatFloat16:
return VertexFormat.Float16; return VertexFormat.kVertexFormatFloat16;
case VertexChannelFormat.Color: //in 4.x is size 4 case VertexChannelFormat.kChannelFormatColor: //in 4.x is size 4
return VertexFormat.UNorm8; return VertexFormat.kVertexFormatUNorm8;
case VertexChannelFormat.Byte: case VertexChannelFormat.kChannelFormatByte:
return VertexFormat.UInt8; return VertexFormat.kVertexFormatUInt8;
case VertexChannelFormat.UInt32: //in 5.x case VertexChannelFormat.kChannelFormatUInt32: //in 5.x
return VertexFormat.UInt32; return VertexFormat.kVertexFormatUInt32;
default: default:
throw new ArgumentOutOfRangeException(nameof(format), format, null); throw new ArgumentOutOfRangeException(nameof(format), format, null);
} }
@ -1262,31 +1257,31 @@ namespace AssetStudio
{ {
switch ((VertexFormat2017)format) switch ((VertexFormat2017)format)
{ {
case VertexFormat2017.Float: case VertexFormat2017.kVertexFormatFloat:
return VertexFormat.Float; return VertexFormat.kVertexFormatFloat;
case VertexFormat2017.Float16: case VertexFormat2017.kVertexFormatFloat16:
return VertexFormat.Float16; return VertexFormat.kVertexFormatFloat16;
case VertexFormat2017.Color: case VertexFormat2017.kVertexFormatColor:
case VertexFormat2017.UNorm8: case VertexFormat2017.kVertexFormatUNorm8:
return VertexFormat.UNorm8; return VertexFormat.kVertexFormatUNorm8;
case VertexFormat2017.SNorm8: case VertexFormat2017.kVertexFormatSNorm8:
return VertexFormat.SNorm8; return VertexFormat.kVertexFormatSNorm8;
case VertexFormat2017.UNorm16: case VertexFormat2017.kVertexFormatUNorm16:
return VertexFormat.UNorm16; return VertexFormat.kVertexFormatUNorm16;
case VertexFormat2017.SNorm16: case VertexFormat2017.kVertexFormatSNorm16:
return VertexFormat.SNorm16; return VertexFormat.kVertexFormatSNorm16;
case VertexFormat2017.UInt8: case VertexFormat2017.kVertexFormatUInt8:
return VertexFormat.UInt8; return VertexFormat.kVertexFormatUInt8;
case VertexFormat2017.SInt8: case VertexFormat2017.kVertexFormatSInt8:
return VertexFormat.SInt8; return VertexFormat.kVertexFormatSInt8;
case VertexFormat2017.UInt16: case VertexFormat2017.kVertexFormatUInt16:
return VertexFormat.UInt16; return VertexFormat.kVertexFormatUInt16;
case VertexFormat2017.SInt16: case VertexFormat2017.kVertexFormatSInt16:
return VertexFormat.SInt16; return VertexFormat.kVertexFormatSInt16;
case VertexFormat2017.UInt32: case VertexFormat2017.kVertexFormatUInt32:
return VertexFormat.UInt32; return VertexFormat.kVertexFormatUInt32;
case VertexFormat2017.SInt32: case VertexFormat2017.kVertexFormatSInt32:
return VertexFormat.SInt32; return VertexFormat.kVertexFormatSInt32;
default: default:
throw new ArgumentOutOfRangeException(nameof(format), format, null); throw new ArgumentOutOfRangeException(nameof(format), format, null);
} }
@ -1302,20 +1297,20 @@ namespace AssetStudio
{ {
switch (format) switch (format)
{ {
case VertexFormat.Float: case VertexFormat.kVertexFormatFloat:
case VertexFormat.UInt32: case VertexFormat.kVertexFormatUInt32:
case VertexFormat.SInt32: case VertexFormat.kVertexFormatSInt32:
return 4u; return 4u;
case VertexFormat.Float16: case VertexFormat.kVertexFormatFloat16:
case VertexFormat.UNorm16: case VertexFormat.kVertexFormatUNorm16:
case VertexFormat.SNorm16: case VertexFormat.kVertexFormatSNorm16:
case VertexFormat.UInt16: case VertexFormat.kVertexFormatUInt16:
case VertexFormat.SInt16: case VertexFormat.kVertexFormatSInt16:
return 2u; return 2u;
case VertexFormat.UNorm8: case VertexFormat.kVertexFormatUNorm8:
case VertexFormat.SNorm8: case VertexFormat.kVertexFormatSNorm8:
case VertexFormat.UInt8: case VertexFormat.kVertexFormatUInt8:
case VertexFormat.SInt8: case VertexFormat.kVertexFormatSInt8:
return 1u; return 1u;
default: default:
throw new ArgumentOutOfRangeException(nameof(format), format, null); throw new ArgumentOutOfRangeException(nameof(format), format, null);
@ -1324,7 +1319,7 @@ namespace AssetStudio
public static bool IsIntFormat(VertexFormat format) public static bool IsIntFormat(VertexFormat format)
{ {
return format >= VertexFormat.UInt8; return format >= VertexFormat.kVertexFormatUInt8;
} }
public static float[] BytesToFloatArray(byte[] inputBytes, VertexFormat format) public static float[] BytesToFloatArray(byte[] inputBytes, VertexFormat format)
@ -1336,22 +1331,22 @@ namespace AssetStudio
{ {
switch (format) switch (format)
{ {
case VertexFormat.Float: case VertexFormat.kVertexFormatFloat:
result[i] = BitConverter.ToSingle(inputBytes, i * 4); result[i] = BitConverter.ToSingle(inputBytes, i * 4);
break; break;
case VertexFormat.Float16: case VertexFormat.kVertexFormatFloat16:
result[i] = Half.ToHalf(inputBytes, i * 2); result[i] = Half.ToHalf(inputBytes, i * 2);
break; break;
case VertexFormat.UNorm8: case VertexFormat.kVertexFormatUNorm8:
result[i] = inputBytes[i] / 255f; result[i] = inputBytes[i] / 255f;
break; break;
case VertexFormat.SNorm8: case VertexFormat.kVertexFormatSNorm8:
result[i] = Math.Max((sbyte)inputBytes[i] / 127f, -1f); result[i] = Math.Max((sbyte)inputBytes[i] / 127f, -1f);
break; break;
case VertexFormat.UNorm16: case VertexFormat.kVertexFormatUNorm16:
result[i] = BitConverter.ToUInt16(inputBytes, i * 2) / 65535f; result[i] = BitConverter.ToUInt16(inputBytes, i * 2) / 65535f;
break; break;
case VertexFormat.SNorm16: case VertexFormat.kVertexFormatSNorm16:
result[i] = Math.Max(BitConverter.ToInt16(inputBytes, i * 2) / 32767f, -1f); result[i] = Math.Max(BitConverter.ToInt16(inputBytes, i * 2) / 32767f, -1f);
break; break;
} }
@ -1368,16 +1363,16 @@ namespace AssetStudio
{ {
switch (format) switch (format)
{ {
case VertexFormat.UInt8: case VertexFormat.kVertexFormatUInt8:
case VertexFormat.SInt8: case VertexFormat.kVertexFormatSInt8:
result[i] = inputBytes[i]; result[i] = inputBytes[i];
break; break;
case VertexFormat.UInt16: case VertexFormat.kVertexFormatUInt16:
case VertexFormat.SInt16: case VertexFormat.kVertexFormatSInt16:
result[i] = BitConverter.ToInt16(inputBytes, i * 2); result[i] = BitConverter.ToInt16(inputBytes, i * 2);
break; break;
case VertexFormat.UInt32: case VertexFormat.kVertexFormatUInt32:
case VertexFormat.SInt32: case VertexFormat.kVertexFormatSInt32:
result[i] = BitConverter.ToInt32(inputBytes, i * 4); result[i] = BitConverter.ToInt32(inputBytes, i * 4);
break; break;
} }

View File

@ -13,7 +13,7 @@ namespace AssetStudio
public PPtr(ObjectReader reader) public PPtr(ObjectReader reader)
{ {
m_FileID = reader.ReadInt32(); m_FileID = reader.ReadInt32();
m_PathID = reader.m_Version < SerializedFileFormatVersion.Unknown_14 ? reader.ReadInt32() : reader.ReadInt64(); m_PathID = reader.m_Version < SerializedFileFormatVersion.kUnknown_14 ? reader.ReadInt32() : reader.ReadInt64();
assetsFile = reader.assetsFile; assetsFile = reader.assetsFile;
} }

View File

@ -56,14 +56,15 @@ namespace AssetStudio
} }
public enum TextureDimension public enum TextureDimension
{ {
Unknown = -1, kTexDimUnknown = -1,
None = 0, kTexDimNone = 0,
Any = 1, kTexDimAny = 1,
Tex2D = 2, kTexDim2D = 2,
Tex3D = 3, kTexDim3D = 3,
Cube = 4, kTexDimCUBE = 4,
Tex2DArray = 5, kTexDim2DArray = 5,
CubeArray = 6 kTexDimCubeArray = 6,
kTexDimForce32Bit = 2147483647
}; };
public class SerializedTextureProperty public class SerializedTextureProperty
@ -80,12 +81,11 @@ namespace AssetStudio
public enum SerializedPropertyType public enum SerializedPropertyType
{ {
Color = 0, kColor = 0,
Vector = 1, kVector = 1,
Float = 2, kFloat = 2,
Range = 3, kRange = 3,
Texture = 4, kTexture = 4
Int = 5
}; };
public class SerializedProperty public class SerializedProperty
@ -195,11 +195,11 @@ namespace AssetStudio
public enum FogMode public enum FogMode
{ {
Unknown = -1, kFogUnknown = -1,
Disabled = 0, kFogDisabled = 0,
Linear = 1, kFogLinear = 1,
Exp = 2, kFogExp = 2,
Exp2 = 3 kFogExp2 = 3
}; };
public class SerializedShaderState public class SerializedShaderState
@ -428,7 +428,6 @@ namespace AssetStudio
if ((version[0] == 2020 && version[1] > 3) || if ((version[0] == 2020 && version[1] > 3) ||
(version[0] == 2020 && version[1] == 3 && version[2] >= 2) || //2020.3.2f1 and up (version[0] == 2020 && version[1] == 3 && version[2] >= 2) || //2020.3.2f1 and up
(version[0] > 2021) ||
(version[0] == 2021 && version[1] > 1) || (version[0] == 2021 && version[1] > 1) ||
(version[0] == 2021 && version[1] == 1 && version[2] >= 4)) //2021.1.4f1 and up (version[0] == 2021 && version[1] == 1 && version[2] >= 4)) //2021.1.4f1 and up
{ {
@ -454,39 +453,38 @@ namespace AssetStudio
public enum ShaderGpuProgramType public enum ShaderGpuProgramType
{ {
Unknown = 0, kShaderGpuProgramUnknown = 0,
GLLegacy = 1, kShaderGpuProgramGLLegacy = 1,
GLES31AEP = 2, kShaderGpuProgramGLES31AEP = 2,
GLES31 = 3, kShaderGpuProgramGLES31 = 3,
GLES3 = 4, kShaderGpuProgramGLES3 = 4,
GLES = 5, kShaderGpuProgramGLES = 5,
GLCore32 = 6, kShaderGpuProgramGLCore32 = 6,
GLCore41 = 7, kShaderGpuProgramGLCore41 = 7,
GLCore43 = 8, kShaderGpuProgramGLCore43 = 8,
DX9VertexSM20 = 9, kShaderGpuProgramDX9VertexSM20 = 9,
DX9VertexSM30 = 10, kShaderGpuProgramDX9VertexSM30 = 10,
DX9PixelSM20 = 11, kShaderGpuProgramDX9PixelSM20 = 11,
DX9PixelSM30 = 12, kShaderGpuProgramDX9PixelSM30 = 12,
DX10Level9Vertex = 13, kShaderGpuProgramDX10Level9Vertex = 13,
DX10Level9Pixel = 14, kShaderGpuProgramDX10Level9Pixel = 14,
DX11VertexSM40 = 15, kShaderGpuProgramDX11VertexSM40 = 15,
DX11VertexSM50 = 16, kShaderGpuProgramDX11VertexSM50 = 16,
DX11PixelSM40 = 17, kShaderGpuProgramDX11PixelSM40 = 17,
DX11PixelSM50 = 18, kShaderGpuProgramDX11PixelSM50 = 18,
DX11GeometrySM40 = 19, kShaderGpuProgramDX11GeometrySM40 = 19,
DX11GeometrySM50 = 20, kShaderGpuProgramDX11GeometrySM50 = 20,
DX11HullSM50 = 21, kShaderGpuProgramDX11HullSM50 = 21,
DX11DomainSM50 = 22, kShaderGpuProgramDX11DomainSM50 = 22,
MetalVS = 23, kShaderGpuProgramMetalVS = 23,
MetalFS = 24, kShaderGpuProgramMetalFS = 24,
SPIRV = 25, kShaderGpuProgramSPIRV = 25,
ConsoleVS = 26, kShaderGpuProgramConsoleVS = 26,
ConsoleFS = 27, kShaderGpuProgramConsoleFS = 27,
ConsoleHS = 28, kShaderGpuProgramConsoleHS = 28,
ConsoleDS = 29, kShaderGpuProgramConsoleDS = 29,
ConsoleGS = 30, kShaderGpuProgramConsoleGS = 30,
RayTracing = 31, kShaderGpuProgramRayTracing = 31,
PS5NGGC = 32
}; };
public class SerializedProgramParameters public class SerializedProgramParameters
@ -606,7 +604,6 @@ namespace AssetStudio
if ((version[0] == 2020 && version[1] > 3) || if ((version[0] == 2020 && version[1] > 3) ||
(version[0] == 2020 && version[1] == 3 && version[2] >= 2) || //2020.3.2f1 and up (version[0] == 2020 && version[1] == 3 && version[2] >= 2) || //2020.3.2f1 and up
(version[0] > 2021) ||
(version[0] == 2021 && version[1] > 1) || (version[0] == 2021 && version[1] > 1) ||
(version[0] == 2021 && version[1] == 1 && version[2] >= 1)) //2021.1.1f1 and up (version[0] == 2021 && version[1] == 1 && version[2] >= 1)) //2021.1.1f1 and up
{ {
@ -692,7 +689,6 @@ namespace AssetStudio
{ {
public SerializedSubProgram[] m_SubPrograms; public SerializedSubProgram[] m_SubPrograms;
public SerializedProgramParameters m_CommonParameters; public SerializedProgramParameters m_CommonParameters;
public ushort[] m_SerializedKeywordStateMask;
public SerializedProgram(ObjectReader reader) public SerializedProgram(ObjectReader reader)
{ {
@ -707,26 +703,19 @@ namespace AssetStudio
if ((version[0] == 2020 && version[1] > 3) || if ((version[0] == 2020 && version[1] > 3) ||
(version[0] == 2020 && version[1] == 3 && version[2] >= 2) || //2020.3.2f1 and up (version[0] == 2020 && version[1] == 3 && version[2] >= 2) || //2020.3.2f1 and up
(version[0] > 2021) ||
(version[0] == 2021 && version[1] > 1) || (version[0] == 2021 && version[1] > 1) ||
(version[0] == 2021 && version[1] == 1 && version[2] >= 1)) //2021.1.1f1 and up (version[0] == 2021 && version[1] == 1 && version[2] >= 1)) //2021.1.1f1 and up
{ {
m_CommonParameters = new SerializedProgramParameters(reader); m_CommonParameters = new SerializedProgramParameters(reader);
} }
if (version[0] > 2022 || (version[0] == 2022 && version[1] >= 1)) //2022.1 and up
{
m_SerializedKeywordStateMask = reader.ReadUInt16Array();
reader.AlignStream();
}
} }
} }
public enum PassType public enum PassType
{ {
Normal = 0, kPassTypeNormal = 0,
Use = 1, kPassTypeUse = 1,
Grab = 2 kPassTypeGrab = 2
}; };
public class SerializedPass public class SerializedPass
@ -805,7 +794,7 @@ namespace AssetStudio
m_Name = reader.ReadAlignedString(); m_Name = reader.ReadAlignedString();
m_TextureName = reader.ReadAlignedString(); m_TextureName = reader.ReadAlignedString();
m_Tags = new SerializedTagMap(reader); m_Tags = new SerializedTagMap(reader);
if (version[0] == 2021 && version[1] >= 2) //2021.2 ~2021.x if (version[0] > 2021 || (version[0] == 2021 && version[1] >= 2)) //2021.2 and up
{ {
m_SerializedKeywordStateMask = reader.ReadUInt16Array(); m_SerializedKeywordStateMask = reader.ReadUInt16Array();
reader.AlignStream(); reader.AlignStream();
@ -933,32 +922,32 @@ namespace AssetStudio
public enum ShaderCompilerPlatform public enum ShaderCompilerPlatform
{ {
None = -1, kShaderCompPlatformNone = -1,
GL = 0, kShaderCompPlatformGL = 0,
D3D9 = 1, kShaderCompPlatformD3D9 = 1,
Xbox360 = 2, kShaderCompPlatformXbox360 = 2,
PS3 = 3, kShaderCompPlatformPS3 = 3,
D3D11 = 4, kShaderCompPlatformD3D11 = 4,
GLES20 = 5, kShaderCompPlatformGLES20 = 5,
NaCl = 6, kShaderCompPlatformNaCl = 6,
Flash = 7, kShaderCompPlatformFlash = 7,
D3D11_9x = 8, kShaderCompPlatformD3D11_9x = 8,
GLES3Plus = 9, kShaderCompPlatformGLES3Plus = 9,
PSP2 = 10, kShaderCompPlatformPSP2 = 10,
PS4 = 11, kShaderCompPlatformPS4 = 11,
XboxOne = 12, kShaderCompPlatformXboxOne = 12,
PSM = 13, kShaderCompPlatformPSM = 13,
Metal = 14, kShaderCompPlatformMetal = 14,
OpenGLCore = 15, kShaderCompPlatformOpenGLCore = 15,
N3DS = 16, kShaderCompPlatformN3DS = 16,
WiiU = 17, kShaderCompPlatformWiiU = 17,
Vulkan = 18, kShaderCompPlatformVulkan = 18,
Switch = 19, kShaderCompPlatformSwitch = 19,
XboxOneD3D12 = 20, kShaderCompPlatformXboxOneD3D12 = 20,
GameCoreXboxOne = 21, kShaderCompPlatformGameCoreXboxOne = 21,
GameCoreScarlett = 22, kShaderCompPlatformGameCoreScarlett = 22,
PS5 = 23, kShaderCompPlatformPS5 = 23,
PS5NGGC = 24 kShaderCompPlatformPS5NGGC = 24,
}; };
public class Shader : NamedObject public class Shader : NamedObject

View File

@ -18,23 +18,23 @@ namespace AssetStudio
public enum SpritePackingRotation public enum SpritePackingRotation
{ {
None = 0, kSPRNone = 0,
FlipHorizontal = 1, kSPRFlipHorizontal = 1,
FlipVertical = 2, kSPRFlipVertical = 2,
Rotate180 = 3, kSPRRotate180 = 3,
Rotate90 = 4 kSPRRotate90 = 4
}; };
public enum SpritePackingMode public enum SpritePackingMode
{ {
Tight = 0, kSPMTight = 0,
Rectangle kSPMRectangle
}; };
public enum SpriteMeshType public enum SpriteMeshType
{ {
FullRect, kSpriteMeshTypeFullRect,
Tight kSpriteMeshTypeTight
}; };
public class SpriteSettings public class SpriteSettings

View File

@ -151,10 +151,8 @@ namespace AssetStudio
RGB24, RGB24,
RGBA32, RGBA32,
ARGB32, ARGB32,
ARGBFloat, RGB565 = 7,
RGB565, R16 = 9,
BGR24,
R16,
DXT1, DXT1,
DXT3, DXT3,
DXT5, DXT5,
@ -168,8 +166,7 @@ namespace AssetStudio
RGBAFloat, RGBAFloat,
YUY2, YUY2,
RGB9e5Float, RGB9e5Float,
RGBFloat, BC6H = 24,
BC6H,
BC7, BC7,
BC4, BC4,
BC5, BC5,

View File

@ -73,28 +73,6 @@ namespace AssetStudio
return null; return null;
} }
public ImportedFrame FindRelativeFrameWithPath(string path)
{
var subs = path.Split(new[] { '/' }, 2);
foreach (var child in children)
{
if (child.Name == subs[0])
{
if (subs.Length == 1)
{
return child;
}
else
{
var result = child.FindRelativeFrameWithPath(subs[1]);
if (result != null)
return result;
}
}
}
return null;
}
public ImportedFrame FindFrame(string name) public ImportedFrame FindFrame(string name)
{ {
if (Name == name) if (Name == name)

View File

@ -45,7 +45,7 @@ namespace AssetStudio
header.m_Version = (SerializedFileFormatVersion)reader.ReadUInt32(); header.m_Version = (SerializedFileFormatVersion)reader.ReadUInt32();
header.m_DataOffset = reader.ReadUInt32(); header.m_DataOffset = reader.ReadUInt32();
if (header.m_Version >= SerializedFileFormatVersion.Unknown_9) if (header.m_Version >= SerializedFileFormatVersion.kUnknown_9)
{ {
header.m_Endianess = reader.ReadByte(); header.m_Endianess = reader.ReadByte();
header.m_Reserved = reader.ReadBytes(3); header.m_Reserved = reader.ReadBytes(3);
@ -57,7 +57,7 @@ namespace AssetStudio
m_FileEndianess = reader.ReadByte(); m_FileEndianess = reader.ReadByte();
} }
if (header.m_Version >= SerializedFileFormatVersion.LargeFilesSupport) if (header.m_Version >= SerializedFileFormatVersion.kLargeFilesSupport)
{ {
header.m_MetadataSize = reader.ReadUInt32(); header.m_MetadataSize = reader.ReadUInt32();
header.m_FileSize = reader.ReadInt64(); header.m_FileSize = reader.ReadInt64();
@ -70,12 +70,12 @@ namespace AssetStudio
{ {
reader.Endian = EndianType.LittleEndian; reader.Endian = EndianType.LittleEndian;
} }
if (header.m_Version >= SerializedFileFormatVersion.Unknown_7) if (header.m_Version >= SerializedFileFormatVersion.kUnknown_7)
{ {
unityVersion = reader.ReadStringToNull(); unityVersion = reader.ReadStringToNull();
SetVersion(unityVersion); SetVersion(unityVersion);
} }
if (header.m_Version >= SerializedFileFormatVersion.Unknown_8) if (header.m_Version >= SerializedFileFormatVersion.kUnknown_8)
{ {
m_TargetPlatform = (BuildTarget)reader.ReadInt32(); m_TargetPlatform = (BuildTarget)reader.ReadInt32();
if (!Enum.IsDefined(typeof(BuildTarget), m_TargetPlatform)) if (!Enum.IsDefined(typeof(BuildTarget), m_TargetPlatform))
@ -83,7 +83,7 @@ namespace AssetStudio
m_TargetPlatform = BuildTarget.UnknownPlatform; m_TargetPlatform = BuildTarget.UnknownPlatform;
} }
} }
if (header.m_Version >= SerializedFileFormatVersion.HasTypeTreeHashes) if (header.m_Version >= SerializedFileFormatVersion.kHasTypeTreeHashes)
{ {
m_EnableTypeTree = reader.ReadBoolean(); m_EnableTypeTree = reader.ReadBoolean();
} }
@ -96,7 +96,7 @@ namespace AssetStudio
m_Types.Add(ReadSerializedType(false)); m_Types.Add(ReadSerializedType(false));
} }
if (header.m_Version >= SerializedFileFormatVersion.Unknown_7 && header.m_Version < SerializedFileFormatVersion.Unknown_14) if (header.m_Version >= SerializedFileFormatVersion.kUnknown_7 && header.m_Version < SerializedFileFormatVersion.kUnknown_14)
{ {
bigIDEnabled = reader.ReadInt32(); bigIDEnabled = reader.ReadInt32();
} }
@ -113,7 +113,7 @@ namespace AssetStudio
{ {
objectInfo.m_PathID = reader.ReadInt64(); objectInfo.m_PathID = reader.ReadInt64();
} }
else if (header.m_Version < SerializedFileFormatVersion.Unknown_14) else if (header.m_Version < SerializedFileFormatVersion.kUnknown_14)
{ {
objectInfo.m_PathID = reader.ReadInt32(); objectInfo.m_PathID = reader.ReadInt32();
} }
@ -123,7 +123,7 @@ namespace AssetStudio
objectInfo.m_PathID = reader.ReadInt64(); objectInfo.m_PathID = reader.ReadInt64();
} }
if (header.m_Version >= SerializedFileFormatVersion.LargeFilesSupport) if (header.m_Version >= SerializedFileFormatVersion.kLargeFilesSupport)
objectInfo.byteStart = reader.ReadInt64(); objectInfo.byteStart = reader.ReadInt64();
else else
objectInfo.byteStart = reader.ReadUInt32(); objectInfo.byteStart = reader.ReadUInt32();
@ -131,7 +131,7 @@ namespace AssetStudio
objectInfo.byteStart += header.m_DataOffset; objectInfo.byteStart += header.m_DataOffset;
objectInfo.byteSize = reader.ReadUInt32(); objectInfo.byteSize = reader.ReadUInt32();
objectInfo.typeID = reader.ReadInt32(); objectInfo.typeID = reader.ReadInt32();
if (header.m_Version < SerializedFileFormatVersion.RefactoredClassId) if (header.m_Version < SerializedFileFormatVersion.kRefactoredClassId)
{ {
objectInfo.classID = reader.ReadUInt16(); objectInfo.classID = reader.ReadUInt16();
objectInfo.serializedType = m_Types.Find(x => x.classID == objectInfo.typeID); objectInfo.serializedType = m_Types.Find(x => x.classID == objectInfo.typeID);
@ -142,24 +142,24 @@ namespace AssetStudio
objectInfo.serializedType = type; objectInfo.serializedType = type;
objectInfo.classID = type.classID; objectInfo.classID = type.classID;
} }
if (header.m_Version < SerializedFileFormatVersion.HasScriptTypeIndex) if (header.m_Version < SerializedFileFormatVersion.kHasScriptTypeIndex)
{ {
objectInfo.isDestroyed = reader.ReadUInt16(); objectInfo.isDestroyed = reader.ReadUInt16();
} }
if (header.m_Version >= SerializedFileFormatVersion.HasScriptTypeIndex && header.m_Version < SerializedFileFormatVersion.RefactorTypeData) if (header.m_Version >= SerializedFileFormatVersion.kHasScriptTypeIndex && header.m_Version < SerializedFileFormatVersion.kRefactorTypeData)
{ {
var m_ScriptTypeIndex = reader.ReadInt16(); var m_ScriptTypeIndex = reader.ReadInt16();
if (objectInfo.serializedType != null) if (objectInfo.serializedType != null)
objectInfo.serializedType.m_ScriptTypeIndex = m_ScriptTypeIndex; objectInfo.serializedType.m_ScriptTypeIndex = m_ScriptTypeIndex;
} }
if (header.m_Version == SerializedFileFormatVersion.SupportsStrippedObject || header.m_Version == SerializedFileFormatVersion.RefactoredClassId) if (header.m_Version == SerializedFileFormatVersion.kSupportsStrippedObject || header.m_Version == SerializedFileFormatVersion.kRefactoredClassId)
{ {
objectInfo.stripped = reader.ReadByte(); objectInfo.stripped = reader.ReadByte();
} }
m_Objects.Add(objectInfo); m_Objects.Add(objectInfo);
} }
if (header.m_Version >= SerializedFileFormatVersion.HasScriptTypeIndex) if (header.m_Version >= SerializedFileFormatVersion.kHasScriptTypeIndex)
{ {
int scriptCount = reader.ReadInt32(); int scriptCount = reader.ReadInt32();
m_ScriptTypes = new List<LocalSerializedObjectIdentifier>(scriptCount); m_ScriptTypes = new List<LocalSerializedObjectIdentifier>(scriptCount);
@ -167,7 +167,7 @@ namespace AssetStudio
{ {
var m_ScriptType = new LocalSerializedObjectIdentifier(); var m_ScriptType = new LocalSerializedObjectIdentifier();
m_ScriptType.localSerializedFileIndex = reader.ReadInt32(); m_ScriptType.localSerializedFileIndex = reader.ReadInt32();
if (header.m_Version < SerializedFileFormatVersion.Unknown_14) if (header.m_Version < SerializedFileFormatVersion.kUnknown_14)
{ {
m_ScriptType.localIdentifierInFile = reader.ReadInt32(); m_ScriptType.localIdentifierInFile = reader.ReadInt32();
} }
@ -185,11 +185,11 @@ namespace AssetStudio
for (int i = 0; i < externalsCount; i++) for (int i = 0; i < externalsCount; i++)
{ {
var m_External = new FileIdentifier(); var m_External = new FileIdentifier();
if (header.m_Version >= SerializedFileFormatVersion.Unknown_6) if (header.m_Version >= SerializedFileFormatVersion.kUnknown_6)
{ {
var tempEmpty = reader.ReadStringToNull(); var tempEmpty = reader.ReadStringToNull();
} }
if (header.m_Version >= SerializedFileFormatVersion.Unknown_5) if (header.m_Version >= SerializedFileFormatVersion.kUnknown_5)
{ {
m_External.guid = new Guid(reader.ReadBytes(16)); m_External.guid = new Guid(reader.ReadBytes(16));
m_External.type = reader.ReadInt32(); m_External.type = reader.ReadInt32();
@ -199,7 +199,7 @@ namespace AssetStudio
m_Externals.Add(m_External); m_Externals.Add(m_External);
} }
if (header.m_Version >= SerializedFileFormatVersion.SupportsRefObject) if (header.m_Version >= SerializedFileFormatVersion.kSupportsRefObject)
{ {
int refTypesCount = reader.ReadInt32(); int refTypesCount = reader.ReadInt32();
m_RefTypes = new List<SerializedType>(refTypesCount); m_RefTypes = new List<SerializedType>(refTypesCount);
@ -209,7 +209,7 @@ namespace AssetStudio
} }
} }
if (header.m_Version >= SerializedFileFormatVersion.Unknown_5) if (header.m_Version >= SerializedFileFormatVersion.kUnknown_5)
{ {
userInformation = reader.ReadStringToNull(); userInformation = reader.ReadStringToNull();
} }
@ -235,23 +235,23 @@ namespace AssetStudio
type.classID = reader.ReadInt32(); type.classID = reader.ReadInt32();
if (header.m_Version >= SerializedFileFormatVersion.RefactoredClassId) if (header.m_Version >= SerializedFileFormatVersion.kRefactoredClassId)
{ {
type.m_IsStrippedType = reader.ReadBoolean(); type.m_IsStrippedType = reader.ReadBoolean();
} }
if (header.m_Version >= SerializedFileFormatVersion.RefactorTypeData) if (header.m_Version >= SerializedFileFormatVersion.kRefactorTypeData)
{ {
type.m_ScriptTypeIndex = reader.ReadInt16(); type.m_ScriptTypeIndex = reader.ReadInt16();
} }
if (header.m_Version >= SerializedFileFormatVersion.HasTypeTreeHashes) if (header.m_Version >= SerializedFileFormatVersion.kHasTypeTreeHashes)
{ {
if (isRefType && type.m_ScriptTypeIndex >= 0) if (isRefType && type.m_ScriptTypeIndex >= 0)
{ {
type.m_ScriptID = reader.ReadBytes(16); type.m_ScriptID = reader.ReadBytes(16);
} }
else if ((header.m_Version < SerializedFileFormatVersion.RefactoredClassId && type.classID < 0) || (header.m_Version >= SerializedFileFormatVersion.RefactoredClassId && type.classID == 114)) else if ((header.m_Version < SerializedFileFormatVersion.kRefactoredClassId && type.classID < 0) || (header.m_Version >= SerializedFileFormatVersion.kRefactoredClassId && type.classID == 114))
{ {
type.m_ScriptID = reader.ReadBytes(16); type.m_ScriptID = reader.ReadBytes(16);
} }
@ -262,7 +262,7 @@ namespace AssetStudio
{ {
type.m_Type = new TypeTree(); type.m_Type = new TypeTree();
type.m_Type.m_Nodes = new List<TypeTreeNode>(); type.m_Type.m_Nodes = new List<TypeTreeNode>();
if (header.m_Version >= SerializedFileFormatVersion.Unknown_12 || header.m_Version == SerializedFileFormatVersion.Unknown_10) if (header.m_Version >= SerializedFileFormatVersion.kUnknown_12 || header.m_Version == SerializedFileFormatVersion.kUnknown_10)
{ {
TypeTreeBlobRead(type.m_Type); TypeTreeBlobRead(type.m_Type);
} }
@ -270,7 +270,7 @@ namespace AssetStudio
{ {
ReadTypeTree(type.m_Type); ReadTypeTree(type.m_Type);
} }
if (header.m_Version >= SerializedFileFormatVersion.StoresTypeDependencies) if (header.m_Version >= SerializedFileFormatVersion.kStoresTypeDependencies)
{ {
if (isRefType) if (isRefType)
{ {
@ -296,17 +296,17 @@ namespace AssetStudio
typeTreeNode.m_Type = reader.ReadStringToNull(); typeTreeNode.m_Type = reader.ReadStringToNull();
typeTreeNode.m_Name = reader.ReadStringToNull(); typeTreeNode.m_Name = reader.ReadStringToNull();
typeTreeNode.m_ByteSize = reader.ReadInt32(); typeTreeNode.m_ByteSize = reader.ReadInt32();
if (header.m_Version == SerializedFileFormatVersion.Unknown_2) if (header.m_Version == SerializedFileFormatVersion.kUnknown_2)
{ {
var variableCount = reader.ReadInt32(); var variableCount = reader.ReadInt32();
} }
if (header.m_Version != SerializedFileFormatVersion.Unknown_3) if (header.m_Version != SerializedFileFormatVersion.kUnknown_3)
{ {
typeTreeNode.m_Index = reader.ReadInt32(); typeTreeNode.m_Index = reader.ReadInt32();
} }
typeTreeNode.m_TypeFlags = reader.ReadInt32(); typeTreeNode.m_TypeFlags = reader.ReadInt32();
typeTreeNode.m_Version = reader.ReadInt32(); typeTreeNode.m_Version = reader.ReadInt32();
if (header.m_Version != SerializedFileFormatVersion.Unknown_3) if (header.m_Version != SerializedFileFormatVersion.kUnknown_3)
{ {
typeTreeNode.m_MetaFlag = reader.ReadInt32(); typeTreeNode.m_MetaFlag = reader.ReadInt32();
} }
@ -334,7 +334,7 @@ namespace AssetStudio
typeTreeNode.m_ByteSize = reader.ReadInt32(); typeTreeNode.m_ByteSize = reader.ReadInt32();
typeTreeNode.m_Index = reader.ReadInt32(); typeTreeNode.m_Index = reader.ReadInt32();
typeTreeNode.m_MetaFlag = reader.ReadInt32(); typeTreeNode.m_MetaFlag = reader.ReadInt32();
if (header.m_Version >= SerializedFileFormatVersion.TypeTreeNodeWithTypeFlags) if (header.m_Version >= SerializedFileFormatVersion.kTypeTreeNodeWithTypeFlags)
{ {
typeTreeNode.m_RefTypeHash = reader.ReadUInt64(); typeTreeNode.m_RefTypeHash = reader.ReadUInt64();
} }

View File

@ -8,80 +8,80 @@ namespace AssetStudio
{ {
public enum SerializedFileFormatVersion public enum SerializedFileFormatVersion
{ {
Unsupported = 1, kUnsupported = 1,
Unknown_2 = 2, kUnknown_2 = 2,
Unknown_3 = 3, kUnknown_3 = 3,
/// <summary> /// <summary>
/// 1.2.0 to 2.0.0 /// 1.2.0 to 2.0.0
/// </summary> /// </summary>
Unknown_5 = 5, kUnknown_5 = 5,
/// <summary> /// <summary>
/// 2.1.0 to 2.6.1 /// 2.1.0 to 2.6.1
/// </summary> /// </summary>
Unknown_6 = 6, kUnknown_6 = 6,
/// <summary> /// <summary>
/// 3.0.0b /// 3.0.0b
/// </summary> /// </summary>
Unknown_7 = 7, kUnknown_7 = 7,
/// <summary> /// <summary>
/// 3.0.0 to 3.4.2 /// 3.0.0 to 3.4.2
/// </summary> /// </summary>
Unknown_8 = 8, kUnknown_8 = 8,
/// <summary> /// <summary>
/// 3.5.0 to 4.7.2 /// 3.5.0 to 4.7.2
/// </summary> /// </summary>
Unknown_9 = 9, kUnknown_9 = 9,
/// <summary> /// <summary>
/// 5.0.0aunk1 /// 5.0.0aunk1
/// </summary> /// </summary>
Unknown_10 = 10, kUnknown_10 = 10,
/// <summary> /// <summary>
/// 5.0.0aunk2 /// 5.0.0aunk2
/// </summary> /// </summary>
HasScriptTypeIndex = 11, kHasScriptTypeIndex = 11,
/// <summary> /// <summary>
/// 5.0.0aunk3 /// 5.0.0aunk3
/// </summary> /// </summary>
Unknown_12 = 12, kUnknown_12 = 12,
/// <summary> /// <summary>
/// 5.0.0aunk4 /// 5.0.0aunk4
/// </summary> /// </summary>
HasTypeTreeHashes = 13, kHasTypeTreeHashes = 13,
/// <summary> /// <summary>
/// 5.0.0unk /// 5.0.0unk
/// </summary> /// </summary>
Unknown_14 = 14, kUnknown_14 = 14,
/// <summary> /// <summary>
/// 5.0.1 to 5.4.0 /// 5.0.1 to 5.4.0
/// </summary> /// </summary>
SupportsStrippedObject = 15, kSupportsStrippedObject = 15,
/// <summary> /// <summary>
/// 5.5.0a /// 5.5.0a
/// </summary> /// </summary>
RefactoredClassId = 16, kRefactoredClassId = 16,
/// <summary> /// <summary>
/// 5.5.0unk to 2018.4 /// 5.5.0unk to 2018.4
/// </summary> /// </summary>
RefactorTypeData = 17, kRefactorTypeData = 17,
/// <summary> /// <summary>
/// 2019.1a /// 2019.1a
/// </summary> /// </summary>
RefactorShareableTypeTreeData = 18, kRefactorShareableTypeTreeData = 18,
/// <summary> /// <summary>
/// 2019.1unk /// 2019.1unk
/// </summary> /// </summary>
TypeTreeNodeWithTypeFlags = 19, kTypeTreeNodeWithTypeFlags = 19,
/// <summary> /// <summary>
/// 2019.2 /// 2019.2
/// </summary> /// </summary>
SupportsRefObject = 20, kSupportsRefObject = 20,
/// <summary> /// <summary>
/// 2019.3 to 2019.4 /// 2019.3 to 2019.4
/// </summary> /// </summary>
StoresTypeDependencies = 21, kStoresTypeDependencies = 21,
/// <summary> /// <summary>
/// 2020.1 to x /// 2020.1 to x
/// </summary> /// </summary>
LargeFilesSupport = 22 kLargeFilesSupport = 22
} }
} }

View File

@ -40,10 +40,8 @@ namespace AssetStudio
value = reader.ReadSByte(); value = reader.ReadSByte();
break; break;
case "UInt8": case "UInt8":
value = reader.ReadByte();
break;
case "char": case "char":
value = BitConverter.ToChar(reader.ReadBytes(2), 0); value = reader.ReadByte();
break; break;
case "short": case "short":
case "SInt16": case "SInt16":
@ -84,8 +82,7 @@ namespace AssetStudio
append = false; append = false;
var str = reader.ReadAlignedString(); var str = reader.ReadAlignedString();
sb.AppendFormat("{0}{1} {2} = \"{3}\"\r\n", (new string('\t', level)), varTypeStr, varNameStr, str); sb.AppendFormat("{0}{1} {2} = \"{3}\"\r\n", (new string('\t', level)), varTypeStr, varNameStr, str);
var toSkip = GetNodes(m_Nodes, i); i += 3;
i += toSkip.Count - 1;
break; break;
case "map": case "map":
{ {
@ -236,8 +233,7 @@ namespace AssetStudio
break; break;
case "string": case "string":
value = reader.ReadAlignedString(); value = reader.ReadAlignedString();
var toSkip = GetNodes(m_Nodes, i); i += 3;
i += toSkip.Count - 1;
break; break;
case "map": case "map":
{ {

View File

@ -6,8 +6,7 @@
<Version>0.16.0.0</Version> <Version>0.16.0.0</Version>
<AssemblyVersion>0.16.0.0</AssemblyVersion> <AssemblyVersion>0.16.0.0</AssemblyVersion>
<FileVersion>0.16.0.0</FileVersion> <FileVersion>0.16.0.0</FileVersion>
<Copyright>Copyright © Perfare 2018-2022; Copyright © hozuki 2020</Copyright> <Copyright>Copyright © Perfare 2018-2021; Copyright © hozuki 2020</Copyright>
<DebugType>embedded</DebugType>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@ -8,8 +8,7 @@
<Version>0.16.0.0</Version> <Version>0.16.0.0</Version>
<AssemblyVersion>0.16.0.0</AssemblyVersion> <AssemblyVersion>0.16.0.0</AssemblyVersion>
<FileVersion>0.16.0.0</FileVersion> <FileVersion>0.16.0.0</FileVersion>
<Copyright>Copyright © Perfare 2018-2022</Copyright> <Copyright>Copyright © Perfare 2018-2021</Copyright>
<DebugType>embedded</DebugType>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@ -816,40 +816,40 @@ namespace AssetStudioGUI
{ {
switch (m_AudioClip.m_Type) switch (m_AudioClip.m_Type)
{ {
case FMODSoundType.ACC: case AudioType.ACC:
assetItem.InfoText += "Acc"; assetItem.InfoText += "Acc";
break; break;
case FMODSoundType.AIFF: case AudioType.AIFF:
assetItem.InfoText += "AIFF"; assetItem.InfoText += "AIFF";
break; break;
case FMODSoundType.IT: case AudioType.IT:
assetItem.InfoText += "Impulse tracker"; assetItem.InfoText += "Impulse tracker";
break; break;
case FMODSoundType.MOD: case AudioType.MOD:
assetItem.InfoText += "Protracker / Fasttracker MOD"; assetItem.InfoText += "Protracker / Fasttracker MOD";
break; break;
case FMODSoundType.MPEG: case AudioType.MPEG:
assetItem.InfoText += "MP2/MP3 MPEG"; assetItem.InfoText += "MP2/MP3 MPEG";
break; break;
case FMODSoundType.OGGVORBIS: case AudioType.OGGVORBIS:
assetItem.InfoText += "Ogg vorbis"; assetItem.InfoText += "Ogg vorbis";
break; break;
case FMODSoundType.S3M: case AudioType.S3M:
assetItem.InfoText += "ScreamTracker 3"; assetItem.InfoText += "ScreamTracker 3";
break; break;
case FMODSoundType.WAV: case AudioType.WAV:
assetItem.InfoText += "Microsoft WAV"; assetItem.InfoText += "Microsoft WAV";
break; break;
case FMODSoundType.XM: case AudioType.XM:
assetItem.InfoText += "FastTracker 2 XM"; assetItem.InfoText += "FastTracker 2 XM";
break; break;
case FMODSoundType.XMA: case AudioType.XMA:
assetItem.InfoText += "Xbox360 XMA"; assetItem.InfoText += "Xbox360 XMA";
break; break;
case FMODSoundType.VAG: case AudioType.VAG:
assetItem.InfoText += "PlayStation Portable ADPCM"; assetItem.InfoText += "PlayStation Portable ADPCM";
break; break;
case FMODSoundType.AUDIOQUEUE: case AudioType.AUDIOQUEUE:
assetItem.InfoText += "iPhone"; assetItem.InfoText += "iPhone";
break; break;
default: default:
@ -873,7 +873,7 @@ namespace AssetStudioGUI
case AudioCompressionFormat.MP3: case AudioCompressionFormat.MP3:
assetItem.InfoText += "MP3"; assetItem.InfoText += "MP3";
break; break;
case AudioCompressionFormat.PSMVAG: case AudioCompressionFormat.VAG:
assetItem.InfoText += "PlayStation Portable ADPCM"; assetItem.InfoText += "PlayStation Portable ADPCM";
break; break;
case AudioCompressionFormat.HEVAG: case AudioCompressionFormat.HEVAG:

View File

@ -5,8 +5,7 @@
<Version>0.16.0.0</Version> <Version>0.16.0.0</Version>
<AssemblyVersion>0.16.0.0</AssemblyVersion> <AssemblyVersion>0.16.0.0</AssemblyVersion>
<FileVersion>0.16.0.0</FileVersion> <FileVersion>0.16.0.0</FileVersion>
<Copyright>Copyright © Perfare 2018-2022</Copyright> <Copyright>Copyright © Perfare 2018-2021</Copyright>
<DebugType>embedded</DebugType>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@ -94,29 +94,29 @@ namespace AssetStudio
{ {
switch (m_AudioClip.m_Type) switch (m_AudioClip.m_Type)
{ {
case FMODSoundType.ACC: case AudioType.ACC:
return ".m4a"; return ".m4a";
case FMODSoundType.AIFF: case AudioType.AIFF:
return ".aif"; return ".aif";
case FMODSoundType.IT: case AudioType.IT:
return ".it"; return ".it";
case FMODSoundType.MOD: case AudioType.MOD:
return ".mod"; return ".mod";
case FMODSoundType.MPEG: case AudioType.MPEG:
return ".mp3"; return ".mp3";
case FMODSoundType.OGGVORBIS: case AudioType.OGGVORBIS:
return ".ogg"; return ".ogg";
case FMODSoundType.S3M: case AudioType.S3M:
return ".s3m"; return ".s3m";
case FMODSoundType.WAV: case AudioType.WAV:
return ".wav"; return ".wav";
case FMODSoundType.XM: case AudioType.XM:
return ".xm"; return ".xm";
case FMODSoundType.XMA: case AudioType.XMA:
return ".wav"; return ".wav";
case FMODSoundType.VAG: case AudioType.VAG:
return ".vag"; return ".vag";
case FMODSoundType.AUDIOQUEUE: case AudioType.AUDIOQUEUE:
return ".fsb"; return ".fsb";
} }
@ -133,7 +133,7 @@ namespace AssetStudio
return ".fsb"; return ".fsb";
case AudioCompressionFormat.MP3: case AudioCompressionFormat.MP3:
return ".fsb"; return ".fsb";
case AudioCompressionFormat.PSMVAG: case AudioCompressionFormat.VAG:
return ".fsb"; return ".fsb";
case AudioCompressionFormat.HEVAG: case AudioCompressionFormat.HEVAG:
return ".fsb"; return ".fsb";
@ -159,13 +159,13 @@ namespace AssetStudio
{ {
switch (m_AudioClip.m_Type) switch (m_AudioClip.m_Type)
{ {
case FMODSoundType.AIFF: case AudioType.AIFF:
case FMODSoundType.IT: case AudioType.IT:
case FMODSoundType.MOD: case AudioType.MOD:
case FMODSoundType.S3M: case AudioType.S3M:
case FMODSoundType.XM: case AudioType.XM:
case FMODSoundType.XMA: case AudioType.XMA:
case FMODSoundType.AUDIOQUEUE: case AudioType.AUDIOQUEUE:
return true; return true;
default: default:
return false; return false;

View File

@ -1063,21 +1063,26 @@ namespace AssetStudio
else else
{ {
transformName = strs.Last(); transformName = strs.Last();
var parentFramePath = path.Substring(0, path.LastIndexOf('/')); var parentFrameName = strs[strs.Length - 2];
parentFrame = RootFrame.FindRelativeFrameWithPath(parentFramePath); parentFrame = RootFrame.FindChild(parentFrameName);
//var parentFramePath = path.Substring(0, path.LastIndexOf('/'));
//parentFrame = RootFrame.FindFrameByPath(parentFramePath);
} }
var skeletonPose = avatar.m_Avatar.m_DefaultPose; var skeletonPose = avatar.m_Avatar.m_DefaultPose;
var xform = skeletonPose.m_X[i]; var xform = skeletonPose.m_X[i];
var frame = RootFrame.FindChild(transformName); var frame = RootFrame.FindChild(transformName);
if (frame != null) if (frame != null)
{ {
SetFrame(frame, xform.t, xform.q, xform.s); SetFrame(frame, xform.t, xform.q, xform.s);
parentFrame.AddChild(frame);
} }
else else
{ {
frame = CreateFrame(transformName, xform.t, xform.q, xform.s); frame = CreateFrame(transformName, xform.t, xform.q, xform.s);
parentFrame.AddChild(frame);
} }
parentFrame.AddChild(frame);
} }
} }

View File

@ -109,17 +109,17 @@ namespace AssetStudio
var sb = new StringBuilder(); var sb = new StringBuilder();
switch (m_Passe.m_Type) switch (m_Passe.m_Type)
{ {
case PassType.Normal: case PassType.kPassTypeNormal:
sb.Append(" Pass "); sb.Append(" Pass ");
break; break;
case PassType.Use: case PassType.kPassTypeUse:
sb.Append(" UsePass "); sb.Append(" UsePass ");
break; break;
case PassType.Grab: case PassType.kPassTypeGrab:
sb.Append(" GrabPass "); sb.Append(" GrabPass ");
break; break;
} }
if (m_Passe.m_Type == PassType.Use) if (m_Passe.m_Type == PassType.kPassTypeUse)
{ {
sb.Append($"\"{m_Passe.m_UseName}\"\n"); sb.Append($"\"{m_Passe.m_UseName}\"\n");
} }
@ -127,7 +127,7 @@ namespace AssetStudio
{ {
sb.Append("{\n"); sb.Append("{\n");
if (m_Passe.m_Type == PassType.Grab) if (m_Passe.m_Type == PassType.kPassTypeGrab)
{ {
if (!string.IsNullOrEmpty(m_Passe.m_TextureName)) if (!string.IsNullOrEmpty(m_Passe.m_TextureName))
{ {
@ -358,7 +358,7 @@ namespace AssetStudio
sb.Append(" }\n"); sb.Append(" }\n");
} }
if (m_State.fogMode != FogMode.Unknown || if (m_State.fogMode != FogMode.kFogUnknown ||
m_State.fogColor.x.val != 0f || m_State.fogColor.x.val != 0f ||
m_State.fogColor.y.val != 0f || m_State.fogColor.y.val != 0f ||
m_State.fogColor.z.val != 0f || m_State.fogColor.z.val != 0f ||
@ -368,21 +368,21 @@ namespace AssetStudio
m_State.fogEnd.val != 0f) m_State.fogEnd.val != 0f)
{ {
sb.Append(" Fog {\n"); sb.Append(" Fog {\n");
if (m_State.fogMode != FogMode.Unknown) if (m_State.fogMode != FogMode.kFogUnknown)
{ {
sb.Append(" Mode "); sb.Append(" Mode ");
switch (m_State.fogMode) switch (m_State.fogMode)
{ {
case FogMode.Disabled: case FogMode.kFogDisabled:
sb.Append("Off"); sb.Append("Off");
break; break;
case FogMode.Linear: case FogMode.kFogLinear:
sb.Append("Linear"); sb.Append("Linear");
break; break;
case FogMode.Exp: case FogMode.kFogExp:
sb.Append("Exp"); sb.Append("Exp");
break; break;
case FogMode.Exp2: case FogMode.kFogExp2:
sb.Append("Exp2"); sb.Append("Exp2");
break; break;
} }
@ -674,37 +674,37 @@ namespace AssetStudio
sb.Append($"{m_Prop.m_Name} (\"{m_Prop.m_Description}\", "); sb.Append($"{m_Prop.m_Name} (\"{m_Prop.m_Description}\", ");
switch (m_Prop.m_Type) switch (m_Prop.m_Type)
{ {
case SerializedPropertyType.Color: case SerializedPropertyType.kColor:
sb.Append("Color"); sb.Append("Color");
break; break;
case SerializedPropertyType.Vector: case SerializedPropertyType.kVector:
sb.Append("Vector"); sb.Append("Vector");
break; break;
case SerializedPropertyType.Float: case SerializedPropertyType.kFloat:
sb.Append("Float"); sb.Append("Float");
break; break;
case SerializedPropertyType.Range: case SerializedPropertyType.kRange:
sb.Append($"Range({m_Prop.m_DefValue[1]}, {m_Prop.m_DefValue[2]})"); sb.Append($"Range({m_Prop.m_DefValue[1]}, {m_Prop.m_DefValue[2]})");
break; break;
case SerializedPropertyType.Texture: case SerializedPropertyType.kTexture:
switch (m_Prop.m_DefTexture.m_TexDim) switch (m_Prop.m_DefTexture.m_TexDim)
{ {
case TextureDimension.Any: case TextureDimension.kTexDimAny:
sb.Append("any"); sb.Append("any");
break; break;
case TextureDimension.Tex2D: case TextureDimension.kTexDim2D:
sb.Append("2D"); sb.Append("2D");
break; break;
case TextureDimension.Tex3D: case TextureDimension.kTexDim3D:
sb.Append("3D"); sb.Append("3D");
break; break;
case TextureDimension.Cube: case TextureDimension.kTexDimCUBE:
sb.Append("Cube"); sb.Append("Cube");
break; break;
case TextureDimension.Tex2DArray: case TextureDimension.kTexDim2DArray:
sb.Append("2DArray"); sb.Append("2DArray");
break; break;
case TextureDimension.CubeArray: case TextureDimension.kTexDimCubeArray:
sb.Append("CubeArray"); sb.Append("CubeArray");
break; break;
} }
@ -713,15 +713,15 @@ namespace AssetStudio
sb.Append(") = "); sb.Append(") = ");
switch (m_Prop.m_Type) switch (m_Prop.m_Type)
{ {
case SerializedPropertyType.Color: case SerializedPropertyType.kColor:
case SerializedPropertyType.Vector: case SerializedPropertyType.kVector:
sb.Append($"({m_Prop.m_DefValue[0]},{m_Prop.m_DefValue[1]},{m_Prop.m_DefValue[2]},{m_Prop.m_DefValue[3]})"); sb.Append($"({m_Prop.m_DefValue[0]},{m_Prop.m_DefValue[1]},{m_Prop.m_DefValue[2]},{m_Prop.m_DefValue[3]})");
break; break;
case SerializedPropertyType.Float: case SerializedPropertyType.kFloat:
case SerializedPropertyType.Range: case SerializedPropertyType.kRange:
sb.Append(m_Prop.m_DefValue[0]); sb.Append(m_Prop.m_DefValue[0]);
break; break;
case SerializedPropertyType.Texture: case SerializedPropertyType.kTexture:
sb.Append($"\"{m_Prop.m_DefTexture.m_DefaultName}\" {{ }}"); sb.Append($"\"{m_Prop.m_DefTexture.m_DefaultName}\" {{ }}");
break; break;
default: default:
@ -735,65 +735,64 @@ namespace AssetStudio
{ {
switch (platform) switch (platform)
{ {
case ShaderCompilerPlatform.GL: case ShaderCompilerPlatform.kShaderCompPlatformGL:
return programType == ShaderGpuProgramType.GLLegacy; return programType == ShaderGpuProgramType.kShaderGpuProgramGLLegacy;
case ShaderCompilerPlatform.D3D9: case ShaderCompilerPlatform.kShaderCompPlatformD3D9:
return programType == ShaderGpuProgramType.DX9VertexSM20 return programType == ShaderGpuProgramType.kShaderGpuProgramDX9VertexSM20
|| programType == ShaderGpuProgramType.DX9VertexSM30 || programType == ShaderGpuProgramType.kShaderGpuProgramDX9VertexSM30
|| programType == ShaderGpuProgramType.DX9PixelSM20 || programType == ShaderGpuProgramType.kShaderGpuProgramDX9PixelSM20
|| programType == ShaderGpuProgramType.DX9PixelSM30; || programType == ShaderGpuProgramType.kShaderGpuProgramDX9PixelSM30;
case ShaderCompilerPlatform.Xbox360: case ShaderCompilerPlatform.kShaderCompPlatformXbox360:
case ShaderCompilerPlatform.PS3: case ShaderCompilerPlatform.kShaderCompPlatformPS3:
case ShaderCompilerPlatform.PSP2: case ShaderCompilerPlatform.kShaderCompPlatformPSP2:
case ShaderCompilerPlatform.PS4: case ShaderCompilerPlatform.kShaderCompPlatformPS4:
case ShaderCompilerPlatform.XboxOne: case ShaderCompilerPlatform.kShaderCompPlatformXboxOne:
case ShaderCompilerPlatform.N3DS: case ShaderCompilerPlatform.kShaderCompPlatformN3DS:
case ShaderCompilerPlatform.WiiU: case ShaderCompilerPlatform.kShaderCompPlatformWiiU:
case ShaderCompilerPlatform.Switch: case ShaderCompilerPlatform.kShaderCompPlatformSwitch:
case ShaderCompilerPlatform.XboxOneD3D12: case ShaderCompilerPlatform.kShaderCompPlatformXboxOneD3D12:
case ShaderCompilerPlatform.GameCoreXboxOne: case ShaderCompilerPlatform.kShaderCompPlatformGameCoreXboxOne:
case ShaderCompilerPlatform.GameCoreScarlett: case ShaderCompilerPlatform.kShaderCompPlatformGameCoreScarlett:
case ShaderCompilerPlatform.PS5: case ShaderCompilerPlatform.kShaderCompPlatformPS5:
return programType == ShaderGpuProgramType.ConsoleVS case ShaderCompilerPlatform.kShaderCompPlatformPS5NGGC:
|| programType == ShaderGpuProgramType.ConsoleFS return programType == ShaderGpuProgramType.kShaderGpuProgramConsoleVS
|| programType == ShaderGpuProgramType.ConsoleHS || programType == ShaderGpuProgramType.kShaderGpuProgramConsoleFS
|| programType == ShaderGpuProgramType.ConsoleDS || programType == ShaderGpuProgramType.kShaderGpuProgramConsoleHS
|| programType == ShaderGpuProgramType.ConsoleGS; || programType == ShaderGpuProgramType.kShaderGpuProgramConsoleDS
case ShaderCompilerPlatform.PS5NGGC: || programType == ShaderGpuProgramType.kShaderGpuProgramConsoleGS;
return programType == ShaderGpuProgramType.PS5NGGC; case ShaderCompilerPlatform.kShaderCompPlatformD3D11:
case ShaderCompilerPlatform.D3D11: return programType == ShaderGpuProgramType.kShaderGpuProgramDX11VertexSM40
return programType == ShaderGpuProgramType.DX11VertexSM40 || programType == ShaderGpuProgramType.kShaderGpuProgramDX11VertexSM50
|| programType == ShaderGpuProgramType.DX11VertexSM50 || programType == ShaderGpuProgramType.kShaderGpuProgramDX11PixelSM40
|| programType == ShaderGpuProgramType.DX11PixelSM40 || programType == ShaderGpuProgramType.kShaderGpuProgramDX11PixelSM50
|| programType == ShaderGpuProgramType.DX11PixelSM50 || programType == ShaderGpuProgramType.kShaderGpuProgramDX11GeometrySM40
|| programType == ShaderGpuProgramType.DX11GeometrySM40 || programType == ShaderGpuProgramType.kShaderGpuProgramDX11GeometrySM50
|| programType == ShaderGpuProgramType.DX11GeometrySM50 || programType == ShaderGpuProgramType.kShaderGpuProgramDX11HullSM50
|| programType == ShaderGpuProgramType.DX11HullSM50 || programType == ShaderGpuProgramType.kShaderGpuProgramDX11DomainSM50;
|| programType == ShaderGpuProgramType.DX11DomainSM50; case ShaderCompilerPlatform.kShaderCompPlatformGLES20:
case ShaderCompilerPlatform.GLES20: return programType == ShaderGpuProgramType.kShaderGpuProgramGLES;
return programType == ShaderGpuProgramType.GLES; case ShaderCompilerPlatform.kShaderCompPlatformNaCl: //Obsolete
case ShaderCompilerPlatform.NaCl: //Obsolete
throw new NotSupportedException(); throw new NotSupportedException();
case ShaderCompilerPlatform.Flash: //Obsolete case ShaderCompilerPlatform.kShaderCompPlatformFlash: //Obsolete
throw new NotSupportedException(); throw new NotSupportedException();
case ShaderCompilerPlatform.D3D11_9x: case ShaderCompilerPlatform.kShaderCompPlatformD3D11_9x:
return programType == ShaderGpuProgramType.DX10Level9Vertex return programType == ShaderGpuProgramType.kShaderGpuProgramDX10Level9Vertex
|| programType == ShaderGpuProgramType.DX10Level9Pixel; || programType == ShaderGpuProgramType.kShaderGpuProgramDX10Level9Pixel;
case ShaderCompilerPlatform.GLES3Plus: case ShaderCompilerPlatform.kShaderCompPlatformGLES3Plus:
return programType == ShaderGpuProgramType.GLES31AEP return programType == ShaderGpuProgramType.kShaderGpuProgramGLES31AEP
|| programType == ShaderGpuProgramType.GLES31 || programType == ShaderGpuProgramType.kShaderGpuProgramGLES31
|| programType == ShaderGpuProgramType.GLES3; || programType == ShaderGpuProgramType.kShaderGpuProgramGLES3;
case ShaderCompilerPlatform.PSM: //Unknown case ShaderCompilerPlatform.kShaderCompPlatformPSM: //Unknown
throw new NotSupportedException(); throw new NotSupportedException();
case ShaderCompilerPlatform.Metal: case ShaderCompilerPlatform.kShaderCompPlatformMetal:
return programType == ShaderGpuProgramType.MetalVS return programType == ShaderGpuProgramType.kShaderGpuProgramMetalVS
|| programType == ShaderGpuProgramType.MetalFS; || programType == ShaderGpuProgramType.kShaderGpuProgramMetalFS;
case ShaderCompilerPlatform.OpenGLCore: case ShaderCompilerPlatform.kShaderCompPlatformOpenGLCore:
return programType == ShaderGpuProgramType.GLCore32 return programType == ShaderGpuProgramType.kShaderGpuProgramGLCore32
|| programType == ShaderGpuProgramType.GLCore41 || programType == ShaderGpuProgramType.kShaderGpuProgramGLCore41
|| programType == ShaderGpuProgramType.GLCore43; || programType == ShaderGpuProgramType.kShaderGpuProgramGLCore43;
case ShaderCompilerPlatform.Vulkan: case ShaderCompilerPlatform.kShaderCompPlatformVulkan:
return programType == ShaderGpuProgramType.SPIRV; return programType == ShaderGpuProgramType.kShaderGpuProgramSPIRV;
default: default:
throw new NotSupportedException(); throw new NotSupportedException();
} }
@ -803,55 +802,55 @@ namespace AssetStudio
{ {
switch (platform) switch (platform)
{ {
case ShaderCompilerPlatform.GL: case ShaderCompilerPlatform.kShaderCompPlatformGL:
return "openGL"; return "openGL";
case ShaderCompilerPlatform.D3D9: case ShaderCompilerPlatform.kShaderCompPlatformD3D9:
return "d3d9"; return "d3d9";
case ShaderCompilerPlatform.Xbox360: case ShaderCompilerPlatform.kShaderCompPlatformXbox360:
return "xbox360"; return "xbox360";
case ShaderCompilerPlatform.PS3: case ShaderCompilerPlatform.kShaderCompPlatformPS3:
return "ps3"; return "ps3";
case ShaderCompilerPlatform.D3D11: case ShaderCompilerPlatform.kShaderCompPlatformD3D11:
return "d3d11"; return "d3d11";
case ShaderCompilerPlatform.GLES20: case ShaderCompilerPlatform.kShaderCompPlatformGLES20:
return "gles"; return "gles";
case ShaderCompilerPlatform.NaCl: case ShaderCompilerPlatform.kShaderCompPlatformNaCl:
return "glesdesktop"; return "glesdesktop";
case ShaderCompilerPlatform.Flash: case ShaderCompilerPlatform.kShaderCompPlatformFlash:
return "flash"; return "flash";
case ShaderCompilerPlatform.D3D11_9x: case ShaderCompilerPlatform.kShaderCompPlatformD3D11_9x:
return "d3d11_9x"; return "d3d11_9x";
case ShaderCompilerPlatform.GLES3Plus: case ShaderCompilerPlatform.kShaderCompPlatformGLES3Plus:
return "gles3"; return "gles3";
case ShaderCompilerPlatform.PSP2: case ShaderCompilerPlatform.kShaderCompPlatformPSP2:
return "psp2"; return "psp2";
case ShaderCompilerPlatform.PS4: case ShaderCompilerPlatform.kShaderCompPlatformPS4:
return "ps4"; return "ps4";
case ShaderCompilerPlatform.XboxOne: case ShaderCompilerPlatform.kShaderCompPlatformXboxOne:
return "xboxone"; return "xboxone";
case ShaderCompilerPlatform.PSM: case ShaderCompilerPlatform.kShaderCompPlatformPSM:
return "psm"; return "psm";
case ShaderCompilerPlatform.Metal: case ShaderCompilerPlatform.kShaderCompPlatformMetal:
return "metal"; return "metal";
case ShaderCompilerPlatform.OpenGLCore: case ShaderCompilerPlatform.kShaderCompPlatformOpenGLCore:
return "glcore"; return "glcore";
case ShaderCompilerPlatform.N3DS: case ShaderCompilerPlatform.kShaderCompPlatformN3DS:
return "n3ds"; return "n3ds";
case ShaderCompilerPlatform.WiiU: case ShaderCompilerPlatform.kShaderCompPlatformWiiU:
return "wiiu"; return "wiiu";
case ShaderCompilerPlatform.Vulkan: case ShaderCompilerPlatform.kShaderCompPlatformVulkan:
return "vulkan"; return "vulkan";
case ShaderCompilerPlatform.Switch: case ShaderCompilerPlatform.kShaderCompPlatformSwitch:
return "switch"; return "switch";
case ShaderCompilerPlatform.XboxOneD3D12: case ShaderCompilerPlatform.kShaderCompPlatformXboxOneD3D12:
return "xboxone_d3d12"; return "xboxone_d3d12";
case ShaderCompilerPlatform.GameCoreXboxOne: case ShaderCompilerPlatform.kShaderCompPlatformGameCoreXboxOne:
return "xboxone"; return "xboxone";
case ShaderCompilerPlatform.GameCoreScarlett: case ShaderCompilerPlatform.kShaderCompPlatformGameCoreScarlett:
return "xbox_scarlett"; return "xbox_scarlett";
case ShaderCompilerPlatform.PS5: case ShaderCompilerPlatform.kShaderCompPlatformPS5:
return "ps5"; return "ps5";
case ShaderCompilerPlatform.PS5NGGC: case ShaderCompilerPlatform.kShaderCompPlatformPS5NGGC:
return "ps5_nggc"; return "ps5_nggc";
default: default:
return "unknown"; return "unknown";
@ -997,36 +996,36 @@ namespace AssetStudio
{ {
switch (m_ProgramType) switch (m_ProgramType)
{ {
case ShaderGpuProgramType.GLLegacy: case ShaderGpuProgramType.kShaderGpuProgramGLLegacy:
case ShaderGpuProgramType.GLES31AEP: case ShaderGpuProgramType.kShaderGpuProgramGLES31AEP:
case ShaderGpuProgramType.GLES31: case ShaderGpuProgramType.kShaderGpuProgramGLES31:
case ShaderGpuProgramType.GLES3: case ShaderGpuProgramType.kShaderGpuProgramGLES3:
case ShaderGpuProgramType.GLES: case ShaderGpuProgramType.kShaderGpuProgramGLES:
case ShaderGpuProgramType.GLCore32: case ShaderGpuProgramType.kShaderGpuProgramGLCore32:
case ShaderGpuProgramType.GLCore41: case ShaderGpuProgramType.kShaderGpuProgramGLCore41:
case ShaderGpuProgramType.GLCore43: case ShaderGpuProgramType.kShaderGpuProgramGLCore43:
sb.Append(Encoding.UTF8.GetString(m_ProgramCode)); sb.Append(Encoding.UTF8.GetString(m_ProgramCode));
break; break;
case ShaderGpuProgramType.DX9VertexSM20: case ShaderGpuProgramType.kShaderGpuProgramDX9VertexSM20:
case ShaderGpuProgramType.DX9VertexSM30: case ShaderGpuProgramType.kShaderGpuProgramDX9VertexSM30:
case ShaderGpuProgramType.DX9PixelSM20: case ShaderGpuProgramType.kShaderGpuProgramDX9PixelSM20:
case ShaderGpuProgramType.DX9PixelSM30: case ShaderGpuProgramType.kShaderGpuProgramDX9PixelSM30:
{ {
/*var shaderBytecode = new ShaderBytecode(m_ProgramCode); /*var shaderBytecode = new ShaderBytecode(m_ProgramCode);
sb.Append(shaderBytecode.Disassemble());*/ sb.Append(shaderBytecode.Disassemble());*/
sb.Append("// shader disassembly not supported on DXBC"); sb.Append("// shader disassembly not supported on DXBC");
break; break;
} }
case ShaderGpuProgramType.DX10Level9Vertex: case ShaderGpuProgramType.kShaderGpuProgramDX10Level9Vertex:
case ShaderGpuProgramType.DX10Level9Pixel: case ShaderGpuProgramType.kShaderGpuProgramDX10Level9Pixel:
case ShaderGpuProgramType.DX11VertexSM40: case ShaderGpuProgramType.kShaderGpuProgramDX11VertexSM40:
case ShaderGpuProgramType.DX11VertexSM50: case ShaderGpuProgramType.kShaderGpuProgramDX11VertexSM50:
case ShaderGpuProgramType.DX11PixelSM40: case ShaderGpuProgramType.kShaderGpuProgramDX11PixelSM40:
case ShaderGpuProgramType.DX11PixelSM50: case ShaderGpuProgramType.kShaderGpuProgramDX11PixelSM50:
case ShaderGpuProgramType.DX11GeometrySM40: case ShaderGpuProgramType.kShaderGpuProgramDX11GeometrySM40:
case ShaderGpuProgramType.DX11GeometrySM50: case ShaderGpuProgramType.kShaderGpuProgramDX11GeometrySM50:
case ShaderGpuProgramType.DX11HullSM50: case ShaderGpuProgramType.kShaderGpuProgramDX11HullSM50:
case ShaderGpuProgramType.DX11DomainSM50: case ShaderGpuProgramType.kShaderGpuProgramDX11DomainSM50:
{ {
/*int start = 6; /*int start = 6;
if (m_Version == 201509030) // 5.3 if (m_Version == 201509030) // 5.3
@ -1040,8 +1039,8 @@ namespace AssetStudio
sb.Append("// shader disassembly not supported on DXBC"); sb.Append("// shader disassembly not supported on DXBC");
break; break;
} }
case ShaderGpuProgramType.MetalVS: case ShaderGpuProgramType.kShaderGpuProgramMetalVS:
case ShaderGpuProgramType.MetalFS: case ShaderGpuProgramType.kShaderGpuProgramMetalFS:
using (var reader = new BinaryReader(new MemoryStream(m_ProgramCode))) using (var reader = new BinaryReader(new MemoryStream(m_ProgramCode)))
{ {
var fourCC = reader.ReadUInt32(); var fourCC = reader.ReadUInt32();
@ -1055,7 +1054,7 @@ namespace AssetStudio
sb.Append(Encoding.UTF8.GetString(buff)); sb.Append(Encoding.UTF8.GetString(buff));
} }
break; break;
case ShaderGpuProgramType.SPIRV: case ShaderGpuProgramType.kShaderGpuProgramSPIRV:
try try
{ {
sb.Append(SpirVShaderConverter.Convert(m_ProgramCode)); sb.Append(SpirVShaderConverter.Convert(m_ProgramCode));
@ -1065,11 +1064,11 @@ namespace AssetStudio
sb.Append($"// disassembly error {e.Message}\n"); sb.Append($"// disassembly error {e.Message}\n");
} }
break; break;
case ShaderGpuProgramType.ConsoleVS: case ShaderGpuProgramType.kShaderGpuProgramConsoleVS:
case ShaderGpuProgramType.ConsoleFS: case ShaderGpuProgramType.kShaderGpuProgramConsoleFS:
case ShaderGpuProgramType.ConsoleHS: case ShaderGpuProgramType.kShaderGpuProgramConsoleHS:
case ShaderGpuProgramType.ConsoleDS: case ShaderGpuProgramType.kShaderGpuProgramConsoleDS:
case ShaderGpuProgramType.ConsoleGS: case ShaderGpuProgramType.kShaderGpuProgramConsoleGS:
sb.Append(Encoding.UTF8.GetString(m_ProgramCode)); sb.Append(Encoding.UTF8.GetString(m_ProgramCode));
break; break;
default: default:

View File

@ -58,23 +58,23 @@ namespace AssetStudio
//RotateAndFlip //RotateAndFlip
switch (settingsRaw.packingRotation) switch (settingsRaw.packingRotation)
{ {
case SpritePackingRotation.FlipHorizontal: case SpritePackingRotation.kSPRFlipHorizontal:
spriteImage.Mutate(x => x.Flip(FlipMode.Horizontal)); spriteImage.Mutate(x => x.Flip(FlipMode.Horizontal));
break; break;
case SpritePackingRotation.FlipVertical: case SpritePackingRotation.kSPRFlipVertical:
spriteImage.Mutate(x => x.Flip(FlipMode.Vertical)); spriteImage.Mutate(x => x.Flip(FlipMode.Vertical));
break; break;
case SpritePackingRotation.Rotate180: case SpritePackingRotation.kSPRRotate180:
spriteImage.Mutate(x => x.Rotate(180)); spriteImage.Mutate(x => x.Rotate(180));
break; break;
case SpritePackingRotation.Rotate90: case SpritePackingRotation.kSPRRotate90:
spriteImage.Mutate(x => x.Rotate(270)); spriteImage.Mutate(x => x.Rotate(270));
break; break;
} }
} }
//Tight //Tight
if (settingsRaw.packingMode == SpritePackingMode.Tight) if (settingsRaw.packingMode == SpritePackingMode.kSPMTight)
{ {
try try
{ {
@ -82,7 +82,7 @@ namespace AssetStudio
var polygons = triangles.Select(x => new Polygon(new LinearLineSegment(x.Select(y => new PointF(y.X, y.Y)).ToArray()))).ToArray(); var polygons = triangles.Select(x => new Polygon(new LinearLineSegment(x.Select(y => new PointF(y.X, y.Y)).ToArray()))).ToArray();
IPathCollection path = new PathCollection(polygons); IPathCollection path = new PathCollection(polygons);
var matrix = Matrix3x2.CreateScale(m_Sprite.m_PixelsToUnits); var matrix = Matrix3x2.CreateScale(m_Sprite.m_PixelsToUnits);
matrix *= Matrix3x2.CreateTranslation(m_Sprite.m_Rect.width * m_Sprite.m_Pivot.X - textureRectOffset.X, m_Sprite.m_Rect.height * m_Sprite.m_Pivot.Y - textureRectOffset.Y); matrix *= Matrix3x2.CreateTranslation(textureRect.width * m_Sprite.m_Pivot.X - textureRectOffset.X, textureRect.height * m_Sprite.m_Pivot.Y - textureRectOffset.Y);
path = path.Transform(matrix); path = path.Transform(matrix);
var graphicsOptions = new GraphicsOptions var graphicsOptions = new GraphicsOptions
{ {

View File

@ -253,28 +253,28 @@ namespace AssetStudio
switch (typeRef.FullName) switch (typeRef.FullName)
{ {
case "UnityEngine.AnimationCurve": case "UnityEngine.AnimationCurve":
Helper.AddAnimationCurve(nodes, name, indent); Helper.AddAnimationCurve(nodes, name, indent + 1);
break; break;
case "UnityEngine.Gradient": case "UnityEngine.Gradient":
Helper.AddGradient(nodes, name, indent); Helper.AddGradient(nodes, name, indent + 1);
break; break;
case "UnityEngine.GUIStyle": case "UnityEngine.GUIStyle":
Helper.AddGUIStyle(nodes, name, indent); Helper.AddGUIStyle(nodes, name, indent + 1);
break; break;
case "UnityEngine.RectOffset": case "UnityEngine.RectOffset":
Helper.AddRectOffset(nodes, name, indent); Helper.AddRectOffset(nodes, name, indent + 1);
break; break;
case "UnityEngine.Color32": case "UnityEngine.Color32":
Helper.AddColor32(nodes, name, indent); Helper.AddColor32(nodes, name, indent + 1);
break; break;
case "UnityEngine.Matrix4x4": case "UnityEngine.Matrix4x4":
Helper.AddMatrix4x4(nodes, name, indent); Helper.AddMatrix4x4(nodes, name, indent + 1);
break; break;
case "UnityEngine.Rendering.SphericalHarmonicsL2": case "UnityEngine.Rendering.SphericalHarmonicsL2":
Helper.AddSphericalHarmonicsL2(nodes, name, indent); Helper.AddSphericalHarmonicsL2(nodes, name, indent + 1);
break; break;
case "UnityEngine.PropertyName": case "UnityEngine.PropertyName":
Helper.AddPropertyName(nodes, name, indent); Helper.AddPropertyName(nodes, name, indent + 1);
break; break;
} }
} }

View File

@ -7,7 +7,7 @@ AssetStudio is a tool for exploring, extracting and exporting assets and assetbu
## Features ## Features
* Support version: * Support version:
* 3.4 - 2022.1 * 3.4 - 2021.2
* Support asset types: * Support asset types:
* **Texture2D** : convert to png, tga, jpeg, bmp * **Texture2D** : convert to png, tga, jpeg, bmp
* **Sprite** : crop Texture2D to png, tga, jpeg, bmp * **Sprite** : crop Texture2D to png, tga, jpeg, bmp

View File

@ -6,8 +6,7 @@
<Version>0.16.0.0</Version> <Version>0.16.0.0</Version>
<AssemblyVersion>0.16.0.0</AssemblyVersion> <AssemblyVersion>0.16.0.0</AssemblyVersion>
<FileVersion>0.16.0.0</FileVersion> <FileVersion>0.16.0.0</FileVersion>
<Copyright>Copyright © Perfare 2020-2022; Copyright © hozuki 2020</Copyright> <Copyright>Copyright © Perfare 2020-2021; Copyright © hozuki 2020</Copyright>
<DebugType>embedded</DebugType>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>