c30f758f8d
Fix the UV editor not applying saved UV data. Start to add basic LM2 dict file support. Start to add GFA support (todo need BPE compression)
117 lines
3.4 KiB
C#
117 lines
3.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Switch_Toolbox;
|
|
using System.Windows.Forms;
|
|
using Switch_Toolbox.Library;
|
|
using Switch_Toolbox.Library.IO;
|
|
|
|
namespace FirstPlugin
|
|
{
|
|
public class LZARC : IArchiveFile, IFileFormat
|
|
{
|
|
public FileType FileType { get; set; } = FileType.Archive;
|
|
|
|
public bool CanSave { get; set; }
|
|
public string[] Description { get; set; } = new string[] { "LZARC" };
|
|
public string[] Extension { get; set; } = new string[] { "*.lzarc" };
|
|
public string FileName { get; set; }
|
|
public string FilePath { get; set; }
|
|
public IFileInfo IFileInfo { get; set; }
|
|
|
|
public bool CanAddFiles { get; set; }
|
|
public bool CanRenameFiles { get; set; }
|
|
public bool CanReplaceFiles { get; set; }
|
|
public bool CanDeleteFiles { get; set; }
|
|
|
|
public bool Identify(System.IO.Stream stream)
|
|
{
|
|
using (var reader = new Switch_Toolbox.Library.IO.FileReader(stream, true))
|
|
{
|
|
return Utils.GetExtension(FileName) == ".lzarc";
|
|
}
|
|
}
|
|
|
|
public Type[] Types
|
|
{
|
|
get
|
|
{
|
|
List<Type> types = new List<Type>();
|
|
return types.ToArray();
|
|
}
|
|
}
|
|
|
|
public List<FileEntry> files = new List<FileEntry>();
|
|
|
|
public IEnumerable<ArchiveFileInfo> Files => files;
|
|
|
|
public void Load(System.IO.Stream stream)
|
|
{
|
|
using (var reader = new FileReader(stream))
|
|
{
|
|
reader.ByteOrder = Syroot.BinaryData.ByteOrder.BigEndian;
|
|
uint FileSize = reader.ReadUInt32();
|
|
uint Unknown = reader.ReadUInt32();
|
|
uint FileCount = reader.ReadUInt32();
|
|
|
|
for (int i = 0; i < FileCount; i++)
|
|
{
|
|
var file = new FileEntry();
|
|
file.Read(reader);
|
|
files.Add(file);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void Unload()
|
|
{
|
|
|
|
}
|
|
|
|
public byte[] Save()
|
|
{
|
|
return null;
|
|
}
|
|
|
|
public bool AddFile(ArchiveFileInfo archiveFileInfo)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
public bool DeleteFile(ArchiveFileInfo archiveFileInfo)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
public class FileEntry : ArchiveFileInfo
|
|
{
|
|
public uint Unknown { get; set; }
|
|
|
|
public uint CompressedSize;
|
|
public uint DecompressedSize;
|
|
|
|
public void Read(FileReader reader)
|
|
{
|
|
long pos = reader.Position;
|
|
FileName = reader.ReadZeroTerminatedString();
|
|
reader.SeekBegin(pos + 128);
|
|
|
|
uint Offset = reader.ReadUInt32();
|
|
CompressedSize = reader.ReadUInt32();
|
|
uint Unknown = reader.ReadUInt32();
|
|
uint Unknown2 = reader.ReadUInt32();
|
|
DecompressedSize = reader.ReadUInt32();
|
|
|
|
using (reader.TemporarySeek((int)Offset, System.IO.SeekOrigin.Begin))
|
|
{
|
|
reader.ReadBytes(8);
|
|
FileData = reader.ReadBytes((int)CompressedSize - 8);
|
|
FileData = STLibraryCompression.LZSS.Decompress(FileData, DecompressedSize);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|